如何在创建实体记录时插入自定义字段的值?

How to insert the value of custom field while creating the entity record?

我遇到了如何通过创建新系统用户来插入自定义字段值的问题。

在Microsoft CRM系统中,有systemuser table,我有一个名为"SSOID"的自定义字段,"SSOID"的值是我从webapi获取的。

我的要求是当我在 CRM 的系统用户创建页面中时,我将域名值输入到域名文本框中,其他字段如名字、姓氏和 businessID 将根据域名自动填充。它们来自活动目录。

同时我也调用webapi获取基于域名的SSOID。

我想要的是在单击保存按钮后,应该创建新的系统用户,并且 SSOID 也应该与新的系统用户一起插入。

但是现在当我点击按钮时,发生了一些错误

usersettings With Id = 5ab7eb74-511a-ea11-810b-005056ba5450 Does Not Exist

下面是我的代码,看起来很简单,但是出现了一些错误;

IPluginExecutionContext context;
IOrganizationServiceFactory factory;
IOrganizationService service;
// 获取执行上下文
context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// 获取服务工厂
factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
// 获取服务
service = factory.CreateOrganizationService(context.UserId);

if (context.MessageName.ToLower() == "create"
&& context.InputParameters.Contains("Target")
&& context.InputParameters["Target"] is Entity)
{
    try
    {

        var domainName = "";
        Entity entity = (Entity)context.InputParameters["Target"];
        if (context.Depth > 1)
        { return; }
        if (entity.Attributes.Contains("domainname"))
        {
            domainName = entity["domainname"].ToString();
        }

        var SSOId = " get from webapi";

        if (!string.IsNullOrEmpty(SSOId))
        {
            var businessEntityRef = (Microsoft.Xrm.Sdk.EntityReference)(entity.Attributes["businessunitid"]);
            var businessunit = service.Retrieve(businessEntityRef.LogicalName, businessEntityRef.Id, new ColumnSet(true));
            entity["businessunitid"] = businessEntityRef; // businessunit id is look up field comes from businessunit reference table
            entity["domainname"] = entity["domainname"];
            entity["lastname"] = entity["lastname"];
            entity["firstname"] = entity["firstname"];
            entity["new_ssoid"] = SSOId;
            service.Update(entity);  //i can't use create method, it shows "The specified Active Directory user already exists as a Dynamics 365 user"
        }
        else
        {
            throw new InvalidPluginExecutionException("userID not exist");
        }
    }
    catch (Exception ex)
    {
        throw new InvalidPluginExecutionException(ex.Message);
    }
}

我是 CRM 插件开发的新手,谁能指导我如何解决这个问题?

请使用以下代码:

var SSOId = " get from webapi";

if (!string.IsNullOrEmpty(SSOId))
{
    Entity entityToUpdate = new Entity("systemuser", new Guid(entity.Id));
    entityToUpdate["new_ssoid"] = SSOId;
    service.Update(entityToUpdate);
}
else
{
    throw new InvalidPluginExecutionException("userID not exist");
}

您需要创建实体对象的新实例以在记录创建后更新(Post-创建异步插件)。

另外如果在没有错误的情况下抛出异常,事务会回滚。想想看。