如何使Dynamics 365 Web API像SDK一样默认为ownerid?

时间:2019-01-07 11:24:15

标签: dynamics-crm odata

当我在Dynamics 365中使用组织服务创建实体时,如果未指定实体的所有者,则OwnerID设置为其凭据用于对组织服务进行身份验证的用户的身份。

但是,当我访问Web API时,通过使用使用Microsoft.OData.Client工具生成的客户端,调用SaveChangesAsync会引发异常,说所有者ID不能设置为NULL。

我正在使用带有用户名和密码的客户端凭据授予进行身份验证(我知道这不是推荐的做法,但是访问令牌已被接受,因此现在只是概念证明)。

我不知道所有者编号。如何以与SDK相同的方式使Web API将此值默认为该值?

1 个答案:

答案 0 :(得分:0)

您可以显式尝试impersonating the user-您需要知道他们的用户ID。

  

您可以通过两种方式模拟用户,这两种方式都是   可以通过传入带有相应用户ID的标头来实现。

     
      
  1. 首选:根据用户的Azure Active Directory模仿用户   (AAD)对象ID,方法是将该值与标头一起传递   CallerObjectId。

  2.   
  3. 旧版:要模拟基于其systemuserid的用户,您可以   利用MSCRMCallerID和相应的Guid值。

  4.   
POST [Organization URI]/api/data/v9.0/accounts HTTP/1.1  
CallerObjectId: e39c5d16-675b-48d1-8e67-667427e9c084  
Accept: application/json  
Content-Type: application/json; charset=utf-8  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

{"name":"Sample Account created using impersonation"}  

您还可以尝试在创建调用上设置ownerid explicitly,同样,您需要知道其用户ID。还要检查您的用户是否具有创建和读取权限。

  

默认情况下,呼叫者成为新记录的所有者。然而,   为了使调用者拥有新记录,它必须同时具有Create和   实体的读取权限。 ...或者,您可以设置   ownerid属性设置为另一个用户的ID。