CRM插件不会更新或做任何事情来改变字段值

本文关键字:改变 字段 任何事 插件 更新 CRM | 更新日期: 2023-09-27 18:15:30

所以我写了一个插件来做一些简单的计算,并根据某些条件更新字段。插件编译,不会导致任何错误,而分析或创建任何实例,我可以调试我的代码,这是令人沮丧的。废话少说,现在是:

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;
            }
        }
    }
}

对不起,代码格式不正确!的帮助!该插件注册为后操作和同步。任何见解都将是有帮助的,如果版主可以帮助格式化代码,将非常感激,因为它不允许我在某些地方添加四个空格。

CRM插件不会更新或做任何事情来改变字段值

CRM中的插件创建一次,然后多次使用,甚至可能同时使用,所以除了设置Id外,不要使用类级别字段。您正在创建一个竞争条件,它可能会做一些不必要的更改。