2017-10-23 1 views
0

Ich bin auf der Suche nach einer Möglichkeit zum Abrufen von Freigabeberechtigungen für bestimmte Entitäten.Web-API-Alternative für RetrieveSharedPrincipalsAndAccessRequest

Gibt es eine Möglichkeit, dies über die Web-API zu tun?

Ich bin bewusst, RetrieveSharedPrincipalsAndAccessRequest aber da der Rest meines Tools nur auf die Web-API angewiesen ist, möchte ich vermeiden, Organisations-Service vollständig zu verwenden.

Antwort

2

Diese Anfrage ist in der Version 9.0 (Dynamics 365 Juli-Update) verfügbar

Ich glaube, dass Ihre 8.x-Version verwenden. In diesem Fall ist das nicht so einfach, aber machbar. Einfach eine benutzerdefinierte Aktion erstellen: https://msdn.microsoft.com/en-us/library/dn481600.aspx

Aktionen können von Workflows, Plugins und verwendet werden, was in diesem Szenario ist am nützlichsten, direkt von WebAPI genannt: https://msdn.microsoft.com/en-us/library/mt607600.aspx

So zum Beispiel wie, dass Ihr Anruf aussehen würde : Jetzt

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" 
} 

, benötigen Sie ein Plugin erstellen und registrieren Sie es in Post-Betrieb Ihrer Aktion (Aktionen erzeugen eine benutzerdefinierte Nachricht, die Sie verwenden können Plugins registrieren). Zum Beispiel: https://community.dynamics.com/crm/b/magnetismsolutionscrmblog/archive/2017/09/18/how-to-trigger-plugins-on-custom-messages-using-actions-in-dynamics-365

In Ihrem Plugin, können Sie natürlich die RetrieveSharedPrincipalsAndAccessRequest unter Verwendung von Standard IOrganizationService anrufen und einfach das Ergebnis in OutputParameters einer Aktion setzen. Am nützlichsten wäre JSON-String sein:

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

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

Ihre JS WebAPI Anruf

{ 
    result: someResultAsJsonString 
} 

zurückkehren und Sie können in Ihrem JS-Code zu tun, was Sie mit dieser wollen :)

+0

Dank, bin ich in der Tat mit der 8.x api. Ihr Vorschlag scheint ein bisschen zu viel Arbeit, wenn ich nur die Assemblies verwenden und die RetrieveSharedPrincipalsAndAccessRequest aus meinem Code ausführen kann. ich wollte nur sicherstellen, dass ich nicht etwas offensichtlich fehlt – Paul

+0

Ja, aber in diesem Fall würden Sie vollständig auf WebAPI verlassen, die hier die Voraussetzung war, wie ich vermutet (zum Beispiel, wenn Sie CRM SDK nicht verwenden können, weil Sie .NET Core oder verwenden etwas). Ich denke, das kann etwas Arbeit sein, wenn Sie das nie getan haben, ich mache derzeit den Großteil der Logik in CRM-Aktionen mit Plugins unter der Haube (vor allem, weil es so einfach ist, diese Logik von fast überall in D365 auszuführen, damit ich es wiederverwenden kann leicht) so eine Operation für mich wäre eine Frage von 15 Minuten Spitzen. –

+0

Nun, wir haben verschiedene Perspektiven, dies ist mein erstes (und wahrscheinlich letztes) letztes Mal, dass ich mit Dynamik im Allgemeinen arbeiten muss, also ein Plugin zu erstellen, und solche Sachen sind für mich etwas zu wenig. Könnte aber anderen Lesern etwas geben. – Paul

Verwandte Themen