要使用C#代码禁用Dynamics CRM 2016用户,当前使用的是SetStateRequest。 例:
var requestToDisableUser = new SetStateRequest()
{
EntityMoniker = new EntityReference("systemuser", userGuid),
State = new OptionSetValue(1),
Status = new OptionSetValue(-1)
};
organizationService.Execute(requestToDisableUser);
但是,根据Microsoft的说法,SetStateRequest已被弃用,应使用Update取代
但是当我尝试使用Update来禁用用户时 例如:
var userToDisable = new Entity("systemuser", userGuid)
{
["statecode"] = new OptionSetValue(1),
["statuscode"] = new OptionSetValue(-1)
};
service.Update(userToDisable);
然后它引发了错误:
未处理的例外情况: System.ServiceModel.FaultException`1 [Microsoft.Xrm.Sdk.OrganizationServiceFault]: 'systemuser'实体不包含Name =的属性 'statecode'。
这是真的,因为systemuser Entity没有状态码
systemuser Entity具有IsDisabled
属性,但该属性是只读的。
那么如何在不使用SetStateRequest
的情况下禁用/启用用户?
答案 0 :(得分:3)
我不认为这是可能的,除非有人证明这是可能的。为了支持我的观点:最新的SDK(8.2.1.1; 4/6/2017)仍然在SetStateRequest
中提供SDK\SampleCode\CS\BusinessDataModel\UsersAndRoles\DisableOREnableUser.cs
的示例。因此,它应该是推荐的方式,无论它在文档的另一部分被标记为已弃用。
您可能会在MS支持下发起事件,或者对Connect提出建议;但根据我的经验,如果有可用的解决方法,他们并不在意。
答案 1 :(得分:1)
在CRM online 2015更新1之后,特殊消息已弃用特殊属性。 Read more
根据元数据,IsDisabled
的{{1}}属性可能会显示为对更新无效。而很少有像Team,BU等其他业务拥有的实体不会使用statecode&的StatusCode。
如果计划不使用弃用方法,则应使用systemuser
属性。
这可能是文档中缺失的部分。但是可以使用下面的MSDN
之类的更新消息找到特殊操作的提示这些专门的消息将继续与2011终结点一起使用。但是,建议尽可能使用UpdateRequest或Update方法来设置这些属性。更新消息简化了组织服务,使编写与Dynamics 365一起使用的标准数据集成工具变得更加容易。此外,编写和注册插件以执行单个更新消息而不是多个专用消息更容易。在此版本中,上面列出的属性的AttributeMetadata.IsValidForUpdate属性已更改为true以启用此功能。
您可以继续在代码中使用2011端点的这些专用消息。但是,最终替换组织服务的Web API仅支持这些类型的操作的更新消息。如果您想要更改代码以与Web API保持一致,那么现在可以这样做了。有关详细信息,请参阅使用Microsoft Dynamics 365 Web API。