Тема: Plug-In Debugging
Показать сообщение отдельно
Старый 12.02.2014, 15:41   #3  
Ion is offline
Ion
Участник
 
332 / 16 (1) ++
Регистрация: 19.12.2012
Помогите с плагином.

Есть две сущности Полис и Контакт.

Плагин срабатывает на сущности полис при изменении полиса.

Суммируем все полиса по клиенту и обновляем поле сумма в Контакте.

Ошибка в поле new_contact (lookup на Контакт).

Цитата:
var Quantity = (EntityReference)QuantityCust.Attributes["new_contact"];
Пишет: "Данный ключ отсутствует в словаре"

Цитата:
Сообщение от Ion Посмотреть сообщение
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Query;

namespace CrmPackageSalamandra.CountChildSum
{
public class CalculateTotalSum : IPlugin
{
public void Execute(IServiceProvider ServiceProvider)
{

IPluginExecutionContext Context = (IPluginExecutionContext)ServiceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory ServiceFactory = (IOrganizationServiceFactory)ServiceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService Service = ServiceFactory.CreateOrganizationService(Context.UserId);

if (Context.PostEntityImages.Contains("PostImage") && Context.PostEntityImages["PostImage"] is Entity)
{
Цитата:

//Из контекста получаю сущность полис
Entity QuantityCust = (Entity)Context.InputParameters["Target"];

var Quantity = (EntityReference)QuantityCust.Attributes["new_contact"];

decimal Total = FetchResult(Quantity.Id, Service);



// Updating Parent Entity

Entity customer = new Entity("contact");
customer.Id = Quantity.Id;
customer["erpc_total"] = Total;
Service.Update(customer);

}
}

private static decimal FetchResult(Guid quantity, IOrganizationService service)
{
string value_sum = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' aggregate='true'>
<entity name='new_insurance_policy'>
<attribute name='new_payment' alias='totalamount_sum' aggregate='sum'/>
<filter type='and'>
<condition attribute='new_contact' operator='eq' value='{0}' />
</filter>
</entity>
</fetch>";

decimal TotalValue = 0;

value_sum = string.Format(value_sum, quantity);
EntityCollection value_sum_result = (EntityCollection)service.RetrieveMultiple(new FetchExpression(value_sum));

foreach (var c in value_sum_result.Entities)
{
decimal aggregate2 = ((Decimal)((AliasedValue)c.Attributes["totalamount_sum"]).Value);

TotalValue = aggregate2;
}

return TotalValue;
}
}
}

Последний раз редактировалось Ion; 12.02.2014 в 15:44.