如何在创建实体记录时插入自定义字段的值?
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-创建异步插件)。
另外如果在没有错误的情况下抛出异常,事务会回滚。想想看。
我遇到了如何通过创建新系统用户来插入自定义字段值的问题。
在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-创建异步插件)。
另外如果在没有错误的情况下抛出异常,事务会回滚。想想看。