CRM – Plugins Sandbox mode

Pessoal,

ht_BuildaSandbox_hero_image

Um assunto que vejo que não temos muito material à respeito e gera um pouco de confusão (vejam o artigo oficial da MS). Seria registrar plugins no modo “Sandbox”. Para CRM Online esta é a única forma de registrar um plugin, já para a versão OnPremises podemos registrá-lo como Sandbox ou None. None neste caso significa acesso irrestrito aos comandos .Net e servers.

Realizei uma boa pesquisa à respeito das limitações de registrar um plugin em modo “Sandbox”, Ben Hosking, escreveu brilhantemente à respeito. Mas o consenso é que não existe nada oficial de quais realmente são os limites, porém temos alguns que já foram identificados e podem nos ajudar a decidir no caso de CRM Onpremises ou nos alertarmos sobre a incompatibilidade no CRM Online.

Vejam os itens identificados como restrições com o uso do Sandbox:

  • Acesso a arquivos do sistema (como por exemplo o drive “C”);
  • Visualizar o Log de Eventos do Sistema;
  • Acesso de protocolos diferentes de HTTP e HTTPS;
  • Acesso ao Register do Windows;
  • Acesso ao “localhost” (loopback);
  • Endereço de IP não pode ser usado, devemos usar nome DNS;
  • Acesso a outras DLL’s não é permitido (inclusive do GAC);
  • Chamar qualquer Web Services;
  • Autenticação utilizando Prompt ou salvar as credenciais não é suportado;
  • LINQ queries dentro de plugins ou custom workflows;
  • Filtered Views sendo executadas dentro de plugins ou custom workflows;
  • Uso de serialization de JScript (System.Web.Script.Serialization.JavaScriptSerializer) não é suportado;

Porém temos alguns ganhos com o uso do Sandbox:

  • Qualquer desenvolvedor CRM pode implantar plugins quando estão configurados para o modo sandbox (caso não estejam no modo sandbox, é preciso ser Deployment Admin no Active Directory – AD);
  • Suporte em tempo real a monitoramento e estatísticas;
  • Muito mais seguro e isolado em comparação ao modo None;
  • O próprio CRM monitora o processo Sandbox e pode controla CPU/Memória, quando excederem seus limites;

Para termos uma ideia do isolamento, com o uso do Sandbox temos um novo processo sendo utilizado pelo CRM, o Microsoft.Crm.Sandbox.WorkerProcess.exe, sendo assim temos:

  • w3wp.exe – Plugins tradicionais (none)
  • CRMASyncService.exe – Plugins Assíncronos
  • Microsoft.Crm.Sandbox.WorkerProcess.exe – Plugins Sandbox

Em resumo, para CRM Online, cuidado ao customizar demais e se esbarrar em restrições. Agora para clientes OnPremises, vale a pena pensar um pouco à respeito, pois os ganhos podem ser consideráveis. Devemos lembrar do problema em relação a acessar outras DLL’s, o ILMerge pode ser uma saída, mas já apresentou alguns problemas em seu uso quando temos Sandbox no “jogo”. Acredito que em 80 ou 90% dos projetos não tenhamos problema algum com o uso do modo Sandbox, assim é um boa prática usá-lo, afinal quem sabe um dia o CRM OnPremises precise ir para a nuvem (Online)…

[]’s,

Tiago Cardoso

 

 

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

CRM – Erro na Autenticação (Plugin Registration, Unified Service Desk, Data Migration Utility, etc)

Pessoal,

Um erro que acontece em máquinas novas ou que ainda não tiveram um desenvolvedor Dynamics CRM trabalhando. Quando tentamos nos autenticar no CRM através de suas ferramentas de apoio/extensões (Plugin Registration, Unified Service Desk, Data Migration Utility, etc) recebemos o seguinte erro:

autenticationerror1

You don’t have permission to access any of the organizations in the Microsoft Dynamics CRM Online region that you specified. If you’re not sure which region your organization resides in, choose “Don’t know” for the CRM region and try again. Otherwise check with your CRM administrator.

Este erro na verdade está relacionado com o Windows Identity Foundation, máquinas com o Windows 7 ou inferior a isso, devemos instalá-lo, para máquinas com Windows 8 em diante, precisamos habilitá-lo.

Windows 7 ou Inferiores, baixe e instale o Windows Identity Foundation

Windows 8 ou Superiores, abra o Painel de Controle > Adicionar e Remover Programas > Habilitar ou Desabilitar Funcionalidades do Windows > Windows Identity Foundation 3.5

autenticationerror2

 

* Após a instalação ou ativação, devemos reiniciar a máquina

[]’s,

Tiago Cardoso

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

CRM – Developer Extensions – Plugins (CRM 2011, 2013 e 2015)

Pessoal,

Seguindo o meu post sobre o acelerador Dynamics CRM Developer Extensions, irei escrever um artigo de como criar, registrar e executar um plugin usando o Developer Extensions.

Temos como pré requesitos:

  • Visual Studio 2012 ou superior;
  • Dynamics CRM 2011 ou superior;
  • Dynamics CRM Developer Extensions (Pesquisar por “Dynamics CRM Developer Extensions” no Visual Studio Gallery)

Com os pré requisitos ajustados, vamos ao Visual Studio…

Crie um novo projeto, selecione “CRM Developer Extensions”, depois “CRM Plug-in Project”, altere o nome do projeto se desejar:

vscrm2015_plugin1

Agora devemos escolher a versão do CRM que este projeto usará:

developerextensions_3

Precisamos criar nosso plugin. Clique com o botão direito em cima do nome do projeto, depois em “Add” > “CRM Plug-in Class…”:

vscrm2015_plugin2

 

Defina um nome para o plugin, neste exemplo irei fazer uma lógica que caso o Cliente Potencial (lead) for Qualificado, seja integrado com um outro sistema e uma tarefa seja criada no CRM. É só um exemplo de algo que pode ser feito, as regras sempre serão de acordo com cada necessidade.

vscrm2015_plugin3

Automaticamente, são adicionadas as DLLs do CRM, bem como uma estrutura de codificação. Veja a classe “Lead” tem como Base a interface “IPlugin”, assim, nossa classe é “obrigada”a fazer um override do método “Execute”. Além disso, também foi criada uma chave fortemente tipada “MyKey.snk” que permite o plugin ser registrado no CRM:

vscrm2015_plugin4

 

Dentro do método Execute é onde devemos adicionar nossa lógica, note que já foi recuperado o trace (tracer), contexto (context), serviço CRM (service) e entidade do contexto (entity).

Neste nosso exemplo de qualificar um lead, não teremos uma “entidade target” no contexto, pois a mensagem “QualifyLead” não possui esta informação, usaremos apenas o Id do Cliente Potencial (LeadId), assim, caso for necessário, podemos recuperar qualquer informação adicional utilizando o comando “Retrieve”.

Basicamente fiz uma chamada a um serviço externo ao CRM, e caso retorno “true” eu crio uma tarefa no CRM relacionada com o Cliente Potencial:

public void Execute(IServiceProvider serviceProvider)
{
    ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
    IOrganizationService service = factory.CreateOrganizationService(context.UserId);

    try
    {
        // Verify if context has LeadId and if is an EntityReference
        if (context.InputParameters.Contains("LeadId") && context.InputParameters["LeadId"] is EntityReference)
        {
            EntityReference leadReference = (EntityReference)context.InputParameters["LeadId"];
            Guid leadId = leadReference.Id;
                    
            MyIntegrarion integration = new MyIntegrarion();

            // If the Integration work's. Create a new task
            if (integration.MyMethod(leadId))
            {
                Entity task = new Entity("task");
                task["subject"] = "Lead Qualify - Do contact";
                task["scheduledstart"] = DateTime.Now.AddDays(1);
                task["scheduledend"] = DateTime.Now.AddDays(7);
                task["regardingobjectid"] = new EntityReference("lead", leadId);

                // Create Task
                service.Create(task);
            }
        }
    }
    catch (Exception e)
    {
        throw new InvalidPluginExecutionException(e.Message);
    }
}

Compile o projeto no VS e abra o Plugin Registration, faça sua conexão com o CRM e clique em Register > Register New Assembly:

vscrm2015_plugin5

 

Informe a DLL do seu projeto de plugin que foi gerado na compilação, mantenha as demais configurações da forma que estão e registre o plugin. PS: se estiver usando a versão 2013 o 2015 do SDK, terá que navegar através do “tab”, assim que ultrapassar a opção “GAC” aperte “Enter”):

vscrm2015_plugin6

Agora precisamos adicionar um “step”. Step é quando o plugin será executado. Clique com o botão direito em cima do plugin e depois “Regiter New Step”:

vscrm2015_plugin7

Em nosso exemplo, informe na “Message” o valor “QualifyLead” e “Primary Entity” o valor “Lead”, as demais informações mantenha da forma que está. Por fim, clique em “Register New Step”:

vscrm2015_plugin8

Pronto, foi criado e registrado o plugin, basta agora testar, abra ou crie um Cliente Potencial e clique no botão “Qualificar”, você será redirecionado para uma oportunidade, volte para a tela do Cliente Potencial e veja a tarefa que foi criada, clicando em “Atividades”:

vscrm2015_plugin9

Para visualizar um exemplo da própria Microsoft, acesse:

https://msdn.microsoft.com/en-us/library/gg594416.aspx

[]’s,

Tiago Cardoso

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

CRM – Dynamics CRM Developer Extensions (CRM 2011, 2013 e 2015)

Pessoal,

A ferramenta para desenvolvedores Dynamics CRM Developer Extensions (criado por Jasson Lattimer) é uma solução alternativa ao Developer Toolkit for Microsoft Dynamics CRM.

developerextensions_1

Diferenças entre os aceleradores:

  • No Developer Extensions temos um menor acoplamento com o CRM e não temos o “CRM Package” existente no Developer Toolkit. Isto pode ser bom, pois quantas vezes um desenvolvedor apertou “F5” no Visual Studio e removeu todas as customizações que outro desenvolvedor estava fazendo no mesmo servidor?!
  • Developer Extensions não cria classe “Plugins.cs” como o Developer Toolkit faz, ele automaticamente cria o código que já recupera as informações de contexto. Deste modo, o entendimento da codificação fica bem mais facilitado;
  • Com o Developer Extensions não temos plugins fortemente ligados as entidades e suas mensagens como é no Developer Toolkit, pois criamos os plugins sem informar em quais entidades ou eventos ele funcionará, cabe ao desenvolvedor registrar onde precisar;
  • Com o Developer Extensions é possivel criarmos os novos itens (plugins, workflows, web resources, etc) usando sempre templates:

developerextensions_2

  • Com o Developer Extensions podemos selecionar qual a versão do CRM que estamos desenvolvendo (deste modo, já usamos as versões certas das DLLs):

developerextensions_3

  • No Developer Extensions não precisamos tipar fortemente (Sign the assembly) o projeto de Plugins e Workflows, pois automaticamente ele cria uma chave para nós:

developerextensions_4

  • No Developer Extensions podemos adicionar projetos de Teste Unitário para Plugins e Workflows:

developerextensions_5

  • O Developer Toolkit, apresenta problemas de compatibilidade com o Visual Studio 2013 e 2015, temos que realizar um workaround para que funcionem adequadamente;
  • O Developer Toolkit, não possui compatibilidade com o CRM 2015, também é necessário um workaround;

Em resumo, vejo um avanço significativo do Developer Extensions em comparação com o Developer Toolkit, pois as funcionalidades do Developer Extensions foram melhoradas ou não existem no Developer Toolkit.

[]’s,

Tiago Cardoso

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

CRM 2015 – Um tour na nova versão Mobile do CRM (Dynamics CRM for Phones and Tablets)

Pessoal,

Abaixo um vídeo com um tour das novas funcionalidades da versão Mobile do CRM 2015 Update 1 – Dynamics CRM for Phones and Tablets:

[]’s,

Tiago Cardoso

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

CRM 2015 – Dynamics CRM for Phones and Tablets

Pessoal,

Há mais ou menos um mês atrás foi disponilizado o Dynamics CRM for Phones and Tablets que não deve ser confundido com a versão anterior Dynamics CRM for Phone Express.

O Dynamics CRM for Phones é na verdade uma evolução do módulo Express, pois apresenta uma grande quantidade de recursos que antes não eram disponíveis, tais como:

  • O visual é muito similar com a apresentada via browser;
  • Nossos JScripts funcionam da mesma forma do que via browser;
  • Todas as entidades do CRM podem ser utilizadas nos devices;
  • Os Processos de Negócio funcionam da mesma forma do que apresentado via browser;
  • Suporte ao idioma Português – Brasil para todas as plataformas (Android, iOS e Windows Phone);
  • O dobro de linguagens suportadas, tínhamos 21 agora temos 42;
  • Os formulários são exatamente os mesmos da versão via browser, não precisamos mais ter que gerenciar dois ou mais formulários para a versão mobile e browser;
  • Busca global, podemos usuá-la da mesma forma do que na versão via browser;
  • Gráficos e Dashboards podem ser visualizados;
  • Tela inicial, podemos personalizar nossa tela inicial, dando um “pin” nos registros desejados;
  • SDK Mobile para extensões;
  • O modo offline foi aperfeiçoado:
    • Agora conseguimos visualizar todos os registros existentes, não apenas os que já haviam sido interagidos (exceção aos relacionamentos dos registros não interagidos, eles não podem ser visualizados);
    • É possível criar registros quando estivermos offline (os registros são sincronizados quando estivermos online novamente), já a edição só pode ser realizada nos registros criados quando estivermos offline;

Existem alguns pré requisitos que devem ser observados:

  • A versão do Dynamics deve ser a Online e 2015 com Update 1. Versões OnPremises ou Onlines inferiores não são suportadas;
  • O device deve ter requisitos mínimos, como por exemplo de sistema operacional e memória RAM (Existem uma lista de compatibilidade, para maiores detalhes veja Support for CRM for phones and CRM for tablets):
    Versão do Sistema Operacional Mínimo de Memória RAM
    iOS 7.x and 8.x 1GB
    Android 4.4 1GB
    Windows Phone 8.1 512MB

 

Para instalar é simples, abra sua loja virtual (Apple Store, Google Play ou Windows Store) e pesquise por “dynamics crm”:

dynamicscrm_forphone_1

* Veja que o Dynamics CRM for Phones é o logo com um “usuário ao centro e um circulo envolta”

Após a instalação, precisamos conectar a App em nosso CRM, insira o endereço do servidor:

dynamicscrm_forphone_2

 

Informe suas credenciais de usuário:

dynamicscrm_forphone_3

 

E pronto, sua App está conectada no CRM:

dynamicscrm_forphone_4

(Visualização nos Tablets)

wp_ss_20150815_0001

 

(Visualização nos Smartphones)

[]’s,

Tiago Cardoso

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

CRM – Mais uma aquisição para o Dynamics! FieldOne!

Pessoal,

Bob Stutz postou recentemente sobre uma nova aquisição da Microsoft que será incorporada para o módulo dedicado de serviços do CRM (Microsoft Social Engagement – MSE).

Trata-se da aquisição da FieldOne, que possui uma suite similar a do Parature (comprado em janeiro de 2014 pela Microsoft), com destaque (ao meu ver) para as áreas de agendamento e automação de rotas de entrega.

Para a leitura do material ofcial, acesse:
Microsoft acquires FieldOne, global provider of field service management solutions for the enterprise

[]’s,

#GoDynamics!

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