繁体   English   中英

如何填充相关查找字段CRM 2011

[英]How to populate related lookup field CRM 2011

我想创建一个审计插件,无论何时更改“联系人”实体,都将创建一个“历史联系人”实体,该实体具有更改前的旧“联系人”实体的所有数据。

我的问题是,如果我在“联系人”到“帐户”中有一个查找字段,如何将查找到特定的“帐户”并将其放在“历史联系人”实体的查找字段中?


我完成了插件,但是现在有一个新问题。

“联系人”实体的“名字”字段中可以为空白。

尽管不需要,“历史联系人”实体将“名字”作为其主要字段。

如果在创建“历史联系人”实体时没有“名字”,则会引发错误。 我不知道为什么会这样。

即使该字段被标记为“无约束”,我也需要一个主字段来创建实体吗?

我不确定是否要遵循。 您正在创建联系人的完整副本吗? 要做到这一点非常简单,只需在更新执行后消息上显示一个前映像即可。 Pre Image是更新之前联系人的快照。

但是,为什么不使用提供的审核功能呢?

您有两种选择:

1)按照以下步骤创建一个插件:

public void Execute(IServiceProvider serviceProvider)
{
    var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    var service = ((IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory))).CreateOrganizationService(context.UserId);

    var originalContact = context.InputParameters["Target"] as Entity;
    var newContact = new Entity("new_historicalcontact");
    if (originalContact.Contains("firstname"))
    {
        newContact.Add("new_firstname", orginalContact["firstname"]);
    }
    if (originalContact.Contains("emailaddress1"))
    {
        newContact.Add("new_emailaddress1", orginalContact["emailaddress1"]);
    }
    if (originalContact.Contains("parentcustomerid"))
    {
        newContact.Add("new_parentcustomerid", orginalContact["parentcustomerid"]);
    }

    //etc etc for other properties
    service.Create(newContact);
}

如果您不熟悉插件,那么这里有很多教程,您可以从我在此问题中给出的建议开始

2)使用开箱即用的审核功能。 可能不是您要找的东西,但是您可以在这里这里阅读更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM