Dynamics crm 用于检索共享原则和AccessRequest的Web API替代方案

Dynamics crm 用于检索共享原则和AccessRequest的Web API替代方案,dynamics-crm,Dynamics Crm,我正在寻找一种方法来检索特定实体的共享权限 有没有办法通过web api做到这一点 我知道RetrieveSharedPrincipalsAndAccessRequest,但由于我的工具的其余部分仅依赖web api,我希望避免完全使用组织服务。此请求在9.0版(Dynamics 365 7月更新)中提供 我相信您使用的是8.x版本。在这种情况下,这不是那么简单,但也是可行的。只需创建一个自定义操作: 操作可以从工作流、插件中使用,在本场景中最有用的是直接从WebAPI调用: 例如,您的呼叫

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

有没有办法通过web api做到这一点


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

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

我相信您使用的是8.x版本。在这种情况下,这不是那么简单,但也是可行的。只需创建一个自定义操作:

操作可以从工作流、插件中使用,在本场景中最有用的是直接从WebAPI调用:

例如,您的呼叫将如下所示:

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"
}
现在,您需要创建一个插件并在操作的后期操作中注册它(操作生成一条自定义消息,您可以使用该消息注册插件)。例如:

在插件中,您当然可以使用标准的IOrganizationService调用RetrieveSharedPrincipals和AccessRequest,并将结果简单地放入操作的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代码中对其执行任何操作:)

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

我相信您使用的是8.x版本。在这种情况下,这不是那么简单,但也是可行的。只需创建一个自定义操作:

操作可以从工作流、插件中使用,在本场景中最有用的是直接从WebAPI调用:

例如,您的呼叫将如下所示:

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"
}
现在,您需要创建一个插件并在操作的后期操作中注册它(操作生成一条自定义消息,您可以使用该消息注册插件)。例如:

在插件中,您当然可以使用标准的IOrganizationService调用RetrieveSharedPrincipals和AccessRequest,并将结果简单地放入操作的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代码中做任何你想做的事情:)

谢谢,我确实在使用8.xapi。当我可以使用程序集并从代码中执行RetrieveSharedPrincipals和AccessRequest时,您的建议似乎有点太多工作了。我只是想确保我没有遗漏任何明显的东西是的,但在这种情况下,您将完全依赖WebAPI,这是我假设的要求(例如,如果您不能使用CRM SDK,因为您使用的是.NET Core或其他东西)。我想这可能是一些工作,如果你从来没有这样做,我目前正在做的大部分逻辑CRM行动与插件下的引擎盖(主要是因为它是如此简单,从几乎任何地方运行这个逻辑在D365,所以我可以很容易地重用它),所以这样的操作对我来说将是15分钟的问题。好吧,我们有不同的观点,这是我第一次(也是最有可能的)最后一次使用dynamics,所以创建插件之类的东西对我来说有点超出范围。不过可能会给其他读者一些内部信息。谢谢,我确实在使用8.xapi。当我可以使用程序集并从代码中执行RetrieveSharedPrincipals和AccessRequest时,您的建议似乎有点太多工作了。我只是想确保我没有遗漏任何明显的东西是的,但在这种情况下,您将完全依赖WebAPI,这是我假设的要求(例如,如果您不能使用CRM SDK,因为您使用的是.NET Core或其他东西)。我想这可能是一些工作,如果你从来没有这样做,我目前正在做的大部分逻辑CRM行动与插件下的引擎盖(主要是因为它是如此简单,从几乎任何地方运行这个逻辑在D365,所以我可以很容易地重用它),所以这样的操作对我来说将是15分钟的问题。好吧,我们有不同的观点,这是我第一次(也是最有可能的)最后一次使用dynamics,所以创建插件之类的东西对我来说有点超出范围。也许会给其他读者一些内幕消息。