Итак, я написал плагин для выполнения простых вычислений и полей обновления на основе определенных условий. Плагин компилирует и не вызывает никаких ошибок при профилировании или создании любых экземпляров, где я могу отлаживать мой код, который расстраивает. В любом случае, без дальнейших церемоний:Плагин CRM не будет обновлять или делать что-либо, чтобы изменить значение поля
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BPT.PluginCommon.BaseClasses;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Xrm;
namespace Engage.Crm.Plugins
{
public class VoidPayment : BPTPluginBase
{
bpt_DuesHeader oDuesHeader = new bpt_DuesHeader();
Account org = new Account();
public override void HandleAfterOp()
{
try
{
base.HandleAfterOp();
var crmContext = new XrmServiceContext(this.OrganizationService);
if (this.PluginExecutionContext.MessageName == MessageName.Create ||
this.PluginExecutionContext.MessageName == MessageName.Update)
{
if (this.InputTargetEntity.Attributes.Contains("gih_void"))
{
var Void = (bool) this.InputTargetEntity.Attributes["gih_void"];
var voidReason = (OptionSetValue) this.InputTargetEntity.Attributes["gih_voidreason"];
var totalPayments = (Money) this.InputTargetEntity.Attributes["bpt_TotalPayments"];
var amountBilled =
crmContext.bpt_DuesHeaderSet.Where(
o => o.bpt_DuesHeaderId == this.PluginExecutionContext.PrimaryEntityId)
.ToList()
.Sum(o => o.bpt_TotalAmountBilled == null ? 0 : o.bpt_TotalAmountBilled.Value);
if (Void)
{
this.oDuesHeader.bpt_TotalAdjustments = new Money(amountBilled);
this.oDuesHeader.bpt_TotalAmountBilled =
new Money(oDuesHeader.bpt_TotalAdjustments.Value + totalPayments.Value);
this.oDuesHeader.bpt_Balance = new Money(amountBilled);
if (voidReason.Value == 914020000)
//should be dropped not default option
{
oDuesHeader.gih_terminationdate = DateTime.Now;
}
}
OrganizationService.Update(oDuesHeader);
}
}
}
catch (Exception ex)
{
this.TracingService.Trace(this.ToString() + " {0}", "Exception: {0}", ex.ToString());
throw;
}
}
}
}
Извините, код не формируется хорошо! Помогите! Плагин зарегистрирован как пост-операционный и синхронный. Любое понимание было бы полезно, и если модератор мог бы форматировать код, который был бы очень признателен, потому что он не позволял мне добавлять четыре пробела в определенные места.
Вам необходимо установить Id на oDuesHeader, чтобы обновление работало. – Lidaranis
А так в начале, когда я хватаю атрибуты, я должен включить bpt_dueserid = new Guide()? –
вы включаете идентификатор, но не с новым указателем. вы берете руководство объекта, который хотите обновить. что-то вроде строк this.oDuesHeader.Id = anyentityyoutanttoupdate.id; – Lidaranis