Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Uma das novas functionalidades do CRM 2013 é as Ações. As Ações são em poucas palavras, o encapsulamento de lógica de negócio numa só regra e através de código C# ou Javascript será possivel evocar essa mesma regra.
Um exemplo bastante comum e prático no CRM pode ser algo como um processo de aprovação. E em qualquer tipo de organização antes de se fazer determinada ação é necessária a aprovação de alguém superior. O administrador de CRM (parceiro CRM ou até mesmo administrador de CRM) poderá então criar um ação "Aprovação" e defini-la com alguns passos (criar uma tarefa, atribuir a uma Queue, envio de um email passado um determinado número de dias, caso a tarefa ainda esteja activa atribuir a tarefa directamente ao superior...). Através de SDK (C# ou Javascript), o programador poderá querer chamar a ação, sem necessitar de saber qual o negócio ou o conjunto de ações que corresponde a ação criada, neste nosso caso o processo de Aprovação. O cliente ou o administrador de CRM poderá então alterar a ação adicionando ou removendo determinados passos mas o código será sempre o mesmo.
O objectivo deste artigo é exemplicar a chamada de uma ação através de uma aplicação .NET, neste caso, uma aplicação consola.
Pré-requesitos:
- Visual Studio 2008, Visual Studio 2010 ou Visual Studio 2012
- SDK
- CRM 2013 (o pacote de actuliazação para o CRM 2013 é opcional).
- Windows Identity Foundation
Para começar é necessário criar uma ação no CRM 2013 (Definições > Processos). Com o CRM 2013 é nos dado a possibilidade de criação de quatro diferente tipos de processos: Ação, a qual vamos detalhar mais a baixo, Dialogo, Fluxo de Trabalho e Fluxo do Processo de Negocio.
Por exemplo, a ação será baseado num envio de email:
- Nome do processo: Send Custom Email
- Categoria: Ação
- Entidade: Conta
Ao clicar em OK uma nova janela aparecerá:
Podemos definir parametros de entrada e saída de vários tipos: Booleano, DateTime, Decimal, Dinheiro, Entidade, EntityCollection, EntityReference, Flutuante, Número inteiro, Picklist e String, como se pode verificar na imagem abaixo.
Por exemplo, a ação terá dois argumentos de entrada, um opcional e um necessário (obrigatório).
Clique em “+” para adicionar um novo parametro:
Nome: StringOptional
Tipo: String
Necessário: De
Clique em “+” para adicionar um novo parametro:
Nome: IntegerRequired
Tipo: String
Necessário: Check
A definição na ação é construída utilizando os mesmos mecanismos que os Diálogos e Fluxos de trabalho .
Para a execução da nossa ação iremos utilizar dois métodos diferentes:
Ao gerar as várias classes (Early Bound) através da execução do comando crmsvcutil é necessário activar a geração das classes relacionadas com as Ações. Foi então adicionado um novo parametro (generateActions):
CrmSvcUtil.exe /url:https://<serverName>/<organizationName>/XRMServices/2011/Organization.svc /out:<outputFilename>.cs /username:<username> /password:<password> /___domain:<domainName> /namespace:<outputNamespace> /serviceContextName:<serviceContextName> /generateActions
- Abra o Visual Studio 2008, Visual Studio 2010 ou Visual Studio 2012.
- Crie um novo projecto: Aplicação de Consola.
- Adicionar as seguintes referencias ao projecto:
- Microsoft.Crm.Sdk.Proxy
- Microsoft.IdentityModel
- Micrososft.Xrm.Sdk
- System.DirectoryServices.AccountManagement
- Systme.Runtime.Serialization
- System.Security
- System.ServiceModel
- Adicione os seguintes ficheiros (.cs):
- Ficheiro gerado pelo crmsvcutil (<outputFilename>.cs).
- SDK\SampleCode\CS\HelperCode\DeviceIdManager.cs
- SDK\SampleCode\CS\HelperCode\CrmServiceHelpers.cs
- E adicione o seguinte código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Client;
namespace Microsoft.Crm.Sdk.Samples
{
public static void Main(string[] args)
{
ServerConnection serverConnect = new ServerConnection();
ServerConnection.Configuration config = serverConnect.GetServerConfiguration();
using (OrganizationServiceProxy _serviceProxy = ServerConnection.GetOrganizationProxy(config))
{
_serviceProxy.EnableProxyTypes();
IOrganizationService _service = (IOrganizationService)_serviceProxy;
try{
// EARLY BOUND
new_SendCustomEmailRequest request = new new_SendCustomEmailRequest();
request.IntegerRequired = 0;
request.StringOptional = "Hello World";
request.BooleanOptional = false;
request.Target = new EntityReference("account", new Guid("04121E5E-9994-E311-A0CD-00155D407C68"));
new_SendCustomEmailResponse response = _serviceProxy.Execute(request) as new_SendCustomEmailResponse;
// LATE BOUND
OrganizationRequest req = new OrganizationRequest("new_SendCustomEmail");
req["Target"] = new EntityReference("account", new Guid("04121E5E-9994-E311-A0CD-00155D407C68")); // ACCOUNT GUID
req["IntegerRequired"] = 0;
//req["BooleanOptional"] = false;
OrganizationResponse resp = _service.Execute(req);
}
catch (Exception ex)
{
// TODO
}
}
Mais informação em: https://msdn.microsoft.com/en-us/library/dn481600(v=crm.6).aspx
Hélio Delgado.