Registar resposta de campanha numa oportunidade

by Pedro Azevedo 2. June 2015 11:55

Boas pessoal,

Mais uma vez aproveito este espaço para responder a uma pergunta do fórum do MSDN tem sido uma boa fonte de inspiração. Desta vez a pergunta era como poderíamos gravar a referência para a resposta de campanha quando a transformamos numa oportunidade, ou seja, quando convertemos uma resposta de campanha numa oportunidade, como podemos gravar a referência dessa resposta de campanha.

Foi algum que nunca tinha dado grande importância por isso fui ver qual era o comportamento por defeito e se o sistema já gravava por si só essa informação, pois não guarda a única coisa que guarda desta interação é a campanha onde está inserida esta resposta de campanha.

Próximo passo recorrer a um fluxo de trabalho, também não temos como obter esta informação quer na atualização da resposta de campanha, quer na criação da nova oportunidade. A abordagem a seguir foi tentar por Javascript apanhar a resposta da caixa de diálogo, aquando da conversão também sem sucesso. Depois fui para a documentação para ver se esta conversão estava assente em alguma mensagem, se assim fosse poderíamos registar nessa mensagem através de um plugin, tal como acontece quando por exemplo convertemos uma Lead num Oportunidade. Mais uma vez sem sucesso. Numa tentativa já desesperada (nem tanto foi mesmo para colocar algum drama Sorriso) fui ver o que a caixa de diálogo fazia por trás dos panos para tentar emular o comportamento através de uma caixa de diálogo personalizada, mas a coisa não se adivinha fácil por isso também deixei cair essa solução.

Eu poderia ter colocado logo a resposta correta mas penso que é bom sabermos as várias possibilidades que temos quando estamos a trabalhar com uma plataforma tão rica como esta, bom a solução que arranjei não é ideal pois baseia-se numa solução assíncrona e sem certezas que realmente vamos apanhar a resposta de campanha. Então a solução foi criar um plugin na mensagem de Create da Oportunidade. Daquilo que estive a estudar a primeira coisa que faço é saber se tem a referência a uma campanha, isto quer dizer que este Create poderá vir de uma conversão de resposta de campanha

public void Execute(IServiceProvider serviceProvider)
{
ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity newOpportunity = (Entity)context.InputParameters["Target"];

if (newOpportunity.Contains("campaignid"))
{
// Obtain the organization service reference.
IOrganizationServiceFactory serviceFactory =
(IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

FilterExpression filter = new FilterExpression(LogicalOperator.And);

ConditionExpression condExprRegarding =
new ConditionExpression("regardingobjectid", ConditionOperator.Equal, ((EntityReference)newOpportunity["campaignid"]).Id);
ConditionExpression condExprSubject = new ConditionExpression("subject", ConditionOperator.Equal, newOpportunity["name"]);

filter.Conditions.Add(condExprRegarding);
filter.Conditions.Add(condExprSubject);

QueryExpression query = new QueryExpression("campaignresponse");
query.Criteria = filter;
query.ColumnSet = new ColumnSet(new string[] { "activityid" });

EntityCollection campaignResponse = service.RetrieveMultiple(query);
if (campaignResponse.Entities.Count == 1)
{
EntityReference entRef = new EntityReference("campaignresponse", (Guid)campaignResponse.Entities[0]["activityid"]);
newOpportunity["new_respostadecampanhaid"] = entRef;
}
else if (campaignResponse.Entities.Count <= 0)
{
//Erro
}
else
{
//Erro
}
}
}
}

Até a próxima.

Tags: , , ,

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