Forçar o recalculo dos campos rollup

by Pedro Azevedo 1. March 2016 08:03

Boas pessoal,

Num post do fórum foi perguntado como colocar um campo obrigatório, quando a soma de um determinado tipo de produtos fosse maior a um determinado valor. A minha solução foi colocar num campo rollup a soma destes tipos de produtos e depois aplicar uma regra de negócio para colocar o campo obrigatório.  A resposta foi que o recalculo não é apenas de 12 em 12 horas. Hora esta resposta não está completamente correta como podemos ver aqui. Como eu menciono na resposta, mas mesmo de hora a hora este cálculo pode ser decisivo e quebrar o fluxo do processo.

Como tinha prometido e forçado devido a questão no fórum estou aqui escrever soluções para forçarmos o recalculo deste campo. A solução encontramos no SDK recorrendo a seguinte mensagem:

CalculateRollupFieldRequest

Neste caso um plugin ou uma atividade customizada, vou dar o exemplo num plugin e como vamos ver mais a frente já existe uma ferramenta que dá esta funcionalidade de graça. Para o plugin podemos correr o seguinte código:

public class PostCreateOpportunityProductPlugin : IPlugin
{
    public void Execute(IServiceProvider serviceProvider)
    {
        var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
 
        if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
        {
            var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            var service = serviceFactory.CreateOrganizationService(context.UserId);
 
            var entity = (Entity)context.InputParameters["Target"];
            var oppId = (EntityReference)entity["opportunityid"];
 
            var crfr = new CalculateRollupFieldRequest
            {
                Target = new EntityReference("opportunity", oppId.Id),
                FieldName = "new_rollupsumprods"
            };
 
            var response = (CalculateRollupFieldResponse)service.Execute(crfr);
        }
    }
}

Para a configuração deste plugin que coloquei a executar na mensagem Create da entidade OpportunityProduct e forçar o recalculo do campo rollup da oportunidade.

Para facilitar foi criado uma atividade customizada de fluxos de trabalho e que está incluída numa ferramenta que espero em próximos posts falar que é Dynamics CRM 2016 Workflow Tools, que são ferramentas para utilizarmos dentro dos Fluxos de Trabalho

Até a próxima.

Tags: , ,

Comments (1) -

DANIEL GODINHO
DANIEL GODINHO Brazil
4/27/2016 6:12:36 AM #

Fiz um plugin pra isso recentemente. Para forçar um recálculo em entidade pai conforme update nas entidades filhas. Ótimo post!

Reply

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

About

Muito bem casado, Pai babado e um gosto muito grande pela tecnologia.

Tenho um lema "Sharing is Learning"

Mais aqui -> http://www.psazevedo.com

Month List