当我在Dynamics 365中使用组织服务创建实体时,如果未指定实体的所有者,则OwnerID设置为其凭据用于对组织服务进行身份验证的用户的身份。
但是,当我访问Web API时,通过使用使用Microsoft.OData.Client工具生成的客户端,调用SaveChangesAsync会引发异常,说所有者ID不能设置为NULL。
我正在使用带有用户名和密码的客户端凭据授予进行身份验证(我知道这不是推荐的做法,但是访问令牌已被接受,因此现在只是概念证明)。
我不知道所有者编号。如何以与SDK相同的方式使Web API将此值默认为该值?
答案 0 :(得分:0)
您可以显式尝试impersonating the user-您需要知道他们的用户ID。
您可以通过两种方式模拟用户,这两种方式都是 可以通过传入带有相应用户ID的标头来实现。
首选:根据用户的Azure Active Directory模仿用户 (AAD)对象ID,方法是将该值与标头一起传递 CallerObjectId。
旧版:要模拟基于其systemuserid的用户,您可以 利用MSCRMCallerID和相应的Guid值。
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。