RetrieveSharedPrincipalsAndAccessRequest的Web API替代方案

时间:2017-10-23 21:47:07

标签: dynamics-crm

我正在寻找一种方法来检索特定实体的共享权限。

有没有办法通过网络API进行此操作?

我知道RetrieveSharedPrincipalsAndAccessRequest但由于我的工具的其余部分仅依赖于网络API,我希望完全避免使用组织服务。

1 个答案:

答案 0 :(得分:2)

此请求在9.0版(Dynamics 365 7月更新)中提供

我相信您使用的是8.x版本。在这种情况下,这不是那么简单,但也可行。只需创建自定义操作: https://msdn.microsoft.com/en-us/library/dn481600.aspx

可以从工作流,插件以及在此方案中最有用的操作中使用操作,直接从WebAPI调用: https://msdn.microsoft.com/en-us/library/mt607600.aspx

例如,您的电话会是这样的:

POST [Organization URI]/api/data/v8.2/new_RetrievePrincipalAccessAction HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
 "ObjectId": 3,
 "ObjectType": "account"
}

现在,您需要创建一个插件并在操作的后期操作中注册它(操作会生成一个可用于注册插件的自定义消息)。例如: https://community.dynamics.com/crm/b/magnetismsolutionscrmblog/archive/2017/09/18/how-to-trigger-plugins-on-custom-messages-using-actions-in-dynamics-365

在您的插件中,您当然可以使用标准IOrganizationService调用RetrieveSharedPrincipalsAndAccessRequest,并将结果简单地放入操作的OutputParameters中。最有用的是JSON字符串:

public void Execute(IServiceProvider serviceProvider)
{
    var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    //do the logic retrieve what you want

    context.OutputParameters["result"] = someResultAsJsonString;
}

您的JS webAPI调用将返回

{
    result: someResultAsJsonString
}

你可以在JS代码中用你想做的任何事情:)