CRM 2015 – What’s New

Pessoal,

Do mesmo modo que tivemos nos releases anteriores, o Customer Center, está com uma página de What’s New do CRM 2015!

http://www.microsoft.com/en-us/dynamics/crm-customer-center/what-s-new.aspx

whatsnews2015

#GoDynamics!

[]’s,

Tiago Cardoso

Publicado em Dynamics CRM | Marcado com , | Deixe um comentário

CRM 2013 – Rollup 3

Pessoal,

Um pouco atrasado, mas em tempo. O rollup 3 do CRM 2013 foi lançado! Temos como premissa a instalação do Service Pack 1 e depois podemos instalar o rollup 3.

Para maiores informações vide:

http://support.microsoft.com/kb/2930480

[]’s,

Tiago Cardoso

Publicado em Dynamics CRM | Marcado com | Deixe um comentário

CRM 2015 – Ordem de Execução das Extensões (JScripts, Plugins, Worflows)

Pessoal,

Algo que não fica 100% clarificado no SDK seria a Ordem de Execução de nossas Extensões (Pipeline de Execução), observando a referência do SDK, não fica claro por exemplo em que ordem um real time workflow é executado, não estamos abrangendo as extensões do lado cliente, dentre outros pontos.

pipeline1

 

Assim realizei alguns testes, fiz a leitura de algumas documentações e cheguei a seguinte conclusão:

1 – JScript Core do CRM

2 – JScript (Síncrono)

3 – Regras de Negócio (Business Process)

4 – Plugin (Síncrono) – Pre Event

5 – Operações (Regras de Negócio) Core do CRM

6 – Plugin (Síncrono) – Post Event

7 – Workflow (Real Time – Síncrono)

Ai você vai me perguntar e se for Assíncrono, certo!? Qualquer processo que seja Assíncrono, será executado após todas as etapas acima!

*Este post também vale para CRM 2013

[]’s,

Tiago Cardoso

 

Publicado em Dynamics CRM | Marcado com , , , | Deixe um comentário

CRM 2015 – Cortana Vídeo Promocional

Pessoal,

Já temos o vídeo promocional do Cortana funcionando integrado com o Dynamics CRM 2015!!!

 

 

A mudança está vindo à passos largos!

#MobileFirst

#CloudFirst

#GoDynamics

 

[]’s,

Tiago Cardoso

 

Publicado em Dynamics CRM | Marcado com | Deixe um comentário

CRM 2013 – Execuções Múltiplas (Execute Multiple)

Pessoal,

Outra melhoria para o time de desenvolvimento que deu-se após o release Polaris no CRM 2011, foi a criação da classe “ExecuteMultipleRequest” que nos possibilita adicionarmos milhares de requisições com o WCF/Banco de Dados do CRM em um único objeto.

O resultado deste agrupamento de requisições é um ganho significativo na performance, mas eu também considero a possibilidade de “aceitarmos” erros nas transações como outro grande diferencial. Sim, podemos configurar para que caso existam erros não seja lançada uma exceção e as demais iterações irão ser executadas. Cabe a funcionalidades que estamos trabalhando determinar se precisaremos criar uma espécie de log ou simplesmente desconsiderarmos os erros transacionais.

Os lugares onde mais seria utilizado este recurso seriam em customizações que envolvem grande quantidade de iterações com o CRM, em pacotes ETL (SSIS) e principalmente no CRM Online para escalarmos nossas iterações (dividir para conquistar).

big-data

Bom, vamos ao termos mas técnicos e seu uso…

Precisamos de várias iterações ao sendo realizadas ao mesmo tempo, para isso, criei alguns objetos entities:

// Cria o objeto Entity com uma nova Account
Entity account1 = new Entity("account");
account1.Attributes.Add("name", "TESTE_1_" + DateTime.Now);

// Cria o objeto Entity com uma nova Account
Entity account2 = new Entity("account");
account2.Attributes.Add("name", "TESTE_2_" + DateTime.Now);

// Cria o objeto Entity com uma nova Account
Entity account3 = new Entity("account");
account3.Attributes.Add("nameXXXXX", "TESTE_3_" + DateTime.Now); // NOTEM QUE O ATRIBUTO "nameXXXXX" NÃO EXISTE NA ENTIDADE ACCOUNT, OU SEJA, CASO NÃO SEJA TRATADO TEREMOS UM EXCEÇÃO

Agora teremos que criar o objeto “ExecuteMultipleRequest”:

// Create an ExecuteMultipleRequest object.
ExecuteMultipleRequest requestMultiple = new ExecuteMultipleRequest()
{
 // Assign settings that define execution behavior: continue on error, return responses.
 Settings = new ExecuteMultipleSettings()
 {
 ContinueOnError = true, // ESTA PROPRIEDADE QUE PERMITE IGNORARMOS ERROS E CONTINUARMOS A EXECUTAR AS ITERAÇÕES
 ReturnResponses = false
 },
 // Create an empty organization request collection.
 Requests = new OrganizationRequestCollection()
};

 

Por fim, devemos adicionar as iterações no objeto de requisições múltiplas (requestMultiple), notem que estamos adicionando “CreateRequest” nos “Request’s”, isso deve-se a estarmos iterando “Create’s”, este objeto deve ser trocado para tipo diferente de iteração (Update, Delete, SetState, etc):

CreateRequest createRequest;

createRequest = new CreateRequest { Target = account1 };
requestMultiple.Requests.Add(createRequest);

createRequest = new CreateRequest { Target = account2 };
requestMultiple.Requests.Add(createRequest);

createRequest = new CreateRequest { Target = account3 };
requestMultiple.Requests.Add(createRequest);

// Realizar as Execuções Múltiplas
ExecuteMultipleResponse responseWithResults = (ExecuteMultipleResponse)localContext.OrganizationService.Execute(requestMultiple);

* Por já estarmos em uma requisição múltipla o método “ExecuteMultipleRequest” não é suportado.

 

O código completo é o a seguir:

// Create an ExecuteMultipleRequest object.
 ExecuteMultipleRequest requestMultiple = new ExecuteMultipleRequest()
 {
 // Assign settings that define execution behavior: continue on error, return responses.
 Settings = new ExecuteMultipleSettings()
 {
 ContinueOnError = true,
 ReturnResponses = false
 },
 // Create an empty organization request collection.
 Requests = new OrganizationRequestCollection()
 };

 // Cria o objeto Entity com uma nova Account
 Entity account1 = new Entity("account");
 account1.Attributes.Add("name", "TESTE_1_" + DateTime.Now);

 // Cria o objeto Entity com uma nova Account
 Entity account2 = new Entity("account");
 account2.Attributes.Add("name", "TESTE_2_" + DateTime.Now);

 // Cria o objeto Entity com uma nova Account
 Entity account3 = new Entity("account");
 account3.Attributes.Add("nameXXXXX", "TESTE_3_" + DateTime.Now);

 CreateRequest createRequest;

 createRequest = new CreateRequest { Target = account1 };
 requestMultiple.Requests.Add(createRequest);

 createRequest = new CreateRequest { Target = account2 };
 requestMultiple.Requests.Add(createRequest);

 createRequest = new CreateRequest { Target = account3 };
 requestMultiple.Requests.Add(createRequest);

 // Realizar as Execuções Múltiplas
 ExecuteMultipleResponse responseWithResults = (ExecuteMultipleResponse)localContext.OrganizationService.Execute(requestMultiple);

Como eu definido a propriedade ContinueOnError como “Verdadeira” não teremos uma exceção sendo criada, porém apenas os dois primeiros objetos Accounts serão criados no CRM:

executemultiple
Código simples mas ganhamos grandes!

[]’s,

Tiago Cardoso

Publicado em Dynamics CRM | Marcado com , , | Deixe um comentário

CRM 2015 – Cortana (Assistente Pessoal Digital)

Pessoal,

 

Um grande novidade tornou-se pública, no CRM 2015 teremos o Cortana (Assistente Pessoal Digital da Microsoft) embarcado. Deste modo, poderemos realizar algumas ações via voz, como pro exemplo pesquisar contatos, contas e atividades, visualizar a listagem de clientes e até criar novas contas! Tudo isso usando comandos de voz!!!

Cortana-578-80

Para saber mais sobre o Cortana acesse: Meet Cortana

#GoDynamics!

[]’s,

Tiago Cardoso

Publicado em Dynamics CRM | Marcado com | Deixe um comentário

CRM 2013 – Conexão Simplificada (Simplified Connection)

Pessoal,

Acredito que tenha sido após o release Polaris no CRM 2011 tenhamos “ganho” uma forma bem simplificada de conexão ao CRM quando estamos acessando “fora de seus domínios”, ou seja, através de uma aplicação custom. Quando estamos acessando através de um plugin ou custom workflow teríamos o contexto e não precisamos nos “re-conectar”.

Uma Conexão Simplificada (Simplified Connection) nos remete de volta as Connections Strings do .NET! Sim, agora podemos utilizar uma simples connection string e apenas DUAS LINHAS no C# para termos acesso ao WCF do Dynamics CRM!

Microsoft.Xrm.Client.CrmConnection connection = Microsoft.Xrm.Client.CrmConnection.Parse(
System.Configuration.ConfigurationManager.ConnectionStrings["NOME DE SUA CHAVE"].ToString());
OrganizationService _orgService = new OrganizationService(connection);

Assim, resolvi criar este post para ajudar a disseminar esta boa dica! Incrementei um pouco ao original (Sample: Simplified connection quick start using Microsoft Dynamics CRM), inseri uma criptografia (fonte: MSDN) para melhorar um pouco mais a segurança do conteúdo do web.config.

Basicamente, existem 5 pontos para serem observados:

1 – Criptografia (classe Cripto) – Devemos criar “nossas sementes” de criptografia, respeitando a quantidade de caracteres obrigatórios. (Fique tranquilo quanto ao conteúdo dos métodos, vou disponibilizar o source!):

simplifiedconn1

2 – Conexão com o CRM (classe Connection) – Criei uma classe de conexão implementando o Pattern Singleton, para não ficarmos a todo momento criando novas conexões:

simplifiedconn2

3 – Gerar Criptografia (“Crypto.exe”) – Na imagem 1, notem que temos dois projetos nesta solução, para gerarmos nossa criptografia, precisamos executar primeiro o arquivo “Crypto.exe” que é gerado ao compilarmos o projeto “Crypto

simplifiedconn4

Informe, os dados de conexão com o Dynamics CRM que deseja conectar-se (para maiores detalhes da formatação, não deixe de ler o artigo do SDK), exemplo:

simplifiedconn4_1

 

4 – Connection String (app ou web.config) – Adicionar a chave que foi gerada pelo “Crypto.exe”:

simplifiedconn3
5 - Para testarmos a conexão, criei  para fins de teste uma chamada da clase “WhoAmIResponse”:

simplifiedconn5

O resultado será a apresentação do GUID do usuário que foi utilizado na conexão com o CRM:

simplifiedconn6

 

Pronto! Nada além do SDK e muito útil para o desenvolvimento, ganhamos um bom tempo de trabalho!

Para ter acesso a solução baixe o arquivo ConnectionInCRM2013 (está em formato .doc, substitua para .zip e descompacte).

É isso pessoal, espero que ajude!

Publicado em Dynamics CRM | Marcado com , , | Deixe um comentário