Guideline para recriar os InternalOperation plugin STEPS

Da minha experiencia com o CRM 4.0 verifiquei com mais frequência do que espectável que diversos administradores de CRM eliminaram(propositadamente ou por engano) os seguintes Plugin Steps.

 

 Tal facto traduz-se na ocorrência de diversos erros aquando da criação/update da entidade account.

ERROR:

MessageProcessor fail to process message 'Create' for 'account'
at MessageProcessor.Execute(PipelineExecutionContext context)
at InternalMessageDispatcher.Execute(PipelineExecutionContext context)
at ExtensiblePlatformMessageDispatcher.Execute(PipelineExecutionContext pluginContext)
at ExtensiblePlatformMessageDispatcher.Create(BusinessEntity entity, ExecutionContext context)
at BusinessProcessObject.CreateWithPipeline(IBusinessEntity entity, ExecutionContext context)

Web Service Plug-in failed in SdkMessageProcessingStepId: {F6D4EBBB-0075-407D-8208-26575BFA39AF}; EntityName: account; Stage: 20; MessageName: Create; AssemblyName: Microsoft.Crm.ObjectModel.MultiCurrencyPlugin, Microsoft.Crm.ObjectModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35; ClassName: Microsoft.Crm.ObjectModel.MultiCurrencyPlugin; Exception: Unhandled Exception: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.

Error: Exception has been thrown by the target of an invocation.
Error Number: 0x80040265
Error Message: The given key was not present in the dictionary.
Error Details: The given key was not present in the dictionary.
Source File: Not available
Line Number: Not available
Request URL: http://.../..../sfa/accts/edit.aspx  

 

A forma de corrigir este “descuido” (chamemos-lhe assim), é editar o código da ferramenta Plugin Registration tool. Para efectuar o download deste aplicativo use o seguinte url:

http://code.msdn.microsoft.com/crmplugin/Release/ProjectReleases.aspx?ReleaseId=2010

Para tal teremos que encontrar a linha 62 do ficheiro StepRegistrationForm.cs e comentar o bloco If() Else()

Através da edição deste pequeno troço de código poderemos então correr novamente a aplicação e manualmente adicionar os anteriormente removidos STEPS.

 

Os steps são os seguintes:

PARENT

CHILD

 

Apos recriar os steps teremos que registá-los et Voilá, ready to roll.

Note-se que com a eliminação do bloco if else, o seguinte erro não irá ocorrer, pois o campo Plugin, irá listar o Internal Operation.

Em seguida deixo uma descrição passo a passo da recriação destes steps.

A recriação Passo a Passo:

1. Localize a linha 62 do ficheiro StepRegistrationForm.cs (StepRegistrationForm).
Você verá o seguinte código(sem os comentarios claro!):

/*/Check whether system plugins should be added to the list
if (step != null && org[step.AssemblyId][step.PluginId].IsSystemCrmEntity)
{
cmbPlugins.Enabled = false;
}
else if (plugin != null && plugin.IsSystemCrmEntity)
{
plugin = null;
}*/

//Add the plugins
CrmPlugin selectPlugin = null;
foreach (CrmPluginAssembly assembly in org.Assemblies.Values)
{
foreach (CrmPlugin pluginType in assembly.Plugins.Values)
{
if (pluginType.PluginType == CrmPluginType.Plugin)/* && pluginType.CustomizationLevel != 0)*/
{
if (plugin != null )/*&& plugin.PluginId == pluginType.PluginId)*/
{
selectPlugin = pluginType;
cmbPlugins.Items.Add(pluginType);
}
else if (!pluginType.IsSystemCrmEntity)
{
cmbPlugins.Items.Add(pluginType);
}
}
}
}

2. Faça as alterações sugeridas(código comentado)

3. Inicie o Plugin RegistrationTool.
4. Digite a Connection Information e clique em Conectar.
5. Digite a senha e clique em OK.
6. Selecione a organização que está recebendo o erro e, em seguida, clique em Conectar.
7. Expandir (Assembly) Microsoft.Crm.ObjectModel, InternalOperation, clique em Register, e em seguida, clique em Register ner step.
8. Escreva RetrieveExchangeRate para a mensagem.
9. None para a entidade primária e None para Entidade Secundária.

9.1 em plugin seleccione o Internal Operation.
10. Escreva “ObjectModel Implementation” para a descrição.
11. Digite 0 para a execução da ordem.
12. Marque Pre state, Synchronous, Server e off-line e, em seguida, clique em Parent Pipeline.
13. Copie o seguinte texto para a configuração Unsecure:

<MethodInfo><MethodName>RetrieveExchangeRate</MethodName><DeclaringType>Microsoft.Crm.ObjectModel.TransactionCurrencyService,Microsoft.Crm.ObjectModel</DeclaringType><InputMappings><Input><Name>TransactionCurrencyId</Name></Input><Input><Name>ExecutionContext()</Name></Input></InputMappings><OutputMappings><Field><Name>ExchangeRate</Name><Value>return-value</Value><ClrFormatter>System.Decimal</ClrFormatter></Field></OutputMappings></MethodInfo>

14. Clique em Update.
15. Clique, InternalOperation clique em Register, e em seguida, clique em Registrar Novo Passo novamente.
17. Conclua as etapas 8-14 novamente, mas desta vez para Child Pipeline no passo 12, em vez de Pipeline Pai.

Espero que este artigo seja do vosso agrado.

João Pedro Soares

CRM support Engineer PT