据我了解,Dyanimcs CRM中的帐户实体附加了两个子自定义地址实体。在帐户表单中,当您编辑地址信息并单击“保存”时,我希望更新将在customeraddress实体上注册。
我正在开发一个插件,它可以帮助我们在整个企业中同步我们的地址,当CRM服务器上发生编辑时,它需要确保它传播到我们的其他系统。
在编写一些诊断代码时,我写了一个快速的wcf服务器,它允许我检查执行时存在的实体。但是,此插件仅在实际的地址表单用于编辑时触发,而不是在编辑帐户表单时触发。
public void Execute(IServiceProvider serviceProvider)
{
if (serviceProvider == null)
{
throw new ArgumentNullException("serviceProvider");
}
// Construct the Local plug-in context.
ITracingService localcontext = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
localcontext.Trace(string.Format(CultureInfo.InvariantCulture, "Entered {0}.Execute()", "AuditAddressChange"));
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
var WCFDebug = ChannelFactory<IService1>.CreateChannel(new BasicHttpBinding(),
new EndpointAddress("http://localhost:8732/WcfDebug"));
try
{
Entity e = context.InputParameters["Target"] as Entity;
if (e != null)
{
foreach (var attribute in e.Attributes)
{
WCFDebug.WriteLine(string.Format("{0} ==> {1}", attribute.Key, attribute.Value.ToString()));
}
}
}
catch (FaultException<OrganizationServiceFault> e)
{
localcontext.Trace(string.Format(CultureInfo.InvariantCulture, "Exception: {0}", e.ToString()));
// Handle the exception.
throw;
}
finally
{
localcontext.Trace(string.Format(CultureInfo.InvariantCulture, "Exiting {0}.Execute()", "AuditAddressChange"));
}
}
此插件已注册,以便在customeraddress更新后的步骤中触发。
鉴于此插件在地址表单中发生编辑时正确执行,为什么在从帐户表单进行编辑时这不会触发?
答案 0 :(得分:4)
这两个地址的处理方式与帐户记录的一部分相同。在内部,address1和address2字段的数据存储在两个customeraddress记录中。
从用户和SDK的角度来看,它们是帐户记录的一部分。这就是为什么你的插件没有被触发的原因。
为了处理帐户的地址更改(关于address1和address2字段),您必须处理帐户的更新消息。对于所有其他customeraddress记录,您必须处理customraddress的Update-Message。