如何在MS CRM 2013中使用REST接口设置OwnerId为BusinessUnitId

本文关键字:接口 REST 设置 OwnerId BusinessUnitId MS CRM 2013 | 更新日期: 2023-09-27 17:54:20

我有一个MS CRM 2013,我想使用REST接口(和创建的VS2013代理类)将帐户上的OwnerId设置为业务单元。

我已经尝试了很多方法,但似乎像这样的东西应该工作。但是,它抛出"Invalid ownerIdType = 10"错误消息

var crmService = new CrmServiceReference.Context(crmUri);
var owner = crmService.BusinessUnitSet.First();
var newAccount = new CrmServiceReference.Account();
newAccount.AccountNumber = "123456";
newAccount.Name = "Hello World";
newAccount.Ownerid = new CrmServiceReference.EntityReference() { Id = owner.BusinessUnitId, Name = owner.Name, LogicalName = "businessunit" };
crmService.AddToAccountSet(newAccount);
crmService.SaveChanges();

我也试过了:

  • 只发送Id(错误:没有系统用户)
  • setting .OwningBusinessUnit = owner(不将所有者设置为业务单位)
  • 查看。ownershipcode(但无法设置/确定那是什么)
  • 删除。ownerid = line并尝试crmService。AddLink(newAccount, "ownerId", owner);(闭合类型为crmservicerreference。帐户没有相应的ownerId可设置属性)
  • 删除。ownerid = line并尝试crmService。AddRelatedObject(newAccount, "ownerId", owner);(闭合类型为crmservicerreference。帐户没有相应的ownerId可设置属性)

如何在MS CRM 2013中使用REST接口设置OwnerId为BusinessUnitId

看起来一个团队是由每个业务单元创建的,并且ownerId应该是团队而不是业务单元,所以…

var owner = crmService.BusinessUnitSet.First();

var team = crmService.TeamSet.First();

newAccount.Ownerid = new CrmServiceReference.EntityReference() { Id = owner.BusinessUnitId, Name = owner.Name, LogicalName = "businessunit" };

newAccount.Ownerid = new CrmServiceReference.EntityReference() { Id = team.TeamId, Name = owner.Name, LogicalName = "team" };

业务单位不能拥有记录。记录的所有者只能是一个用户或一个团队。

仅供参考,要更改所有者,需要使用AssignRequest消息

http://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.assignrequest.aspx

要将新记录的所有权分配给业务单元的默认团队,请使用以下代码:

        var biz = crmService.BusinessUnitSet.First();
        var owner = crmService.TeamSet.First(x => x.BusinessUnitId.Id == biz.BusinessUnitId && x.IsDefault == true);
        var newAccount = new Account();
        newAccount.AccountNumber = "123456";
        newAccount.Name = "Hello World";
        newAccount.OwnerId = owner.ToEntityReference();

如果有必要,您可以在第一行添加where子句以获得特定的业务单元。

显然,您应该添加错误处理并可能更改为FirstOrDefault以避免错误。我把如何处理这些问题留给你自己。