Del via


Forstå den datakontekst, der overføres til en plug-in

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Når en plug-in køres som svar på en udførelses-pipeline-hændelse, for hvilken den er registreret, vil plug-in'ens Execute-metode blive kaldt. Denne metode sender et IServiceProvider-objekt som en parameter, som indeholder en række nyttige objekter. I følgende afsnit beskrives nogle af de oplysninger, der overføres til en plug-in, når den udføres.

Dette emne indeholder

Få adgang til plug-in-kørselskonteksten

Få adgang til organisationsservicen

Få adgang til meddelelsesservicen

Input- og outputparametre

Før- og efter-objektbilleder

Få adgang til plug-in-kørselskonteksten

IPluginExecutionContext indeholder oplysninger, der beskriver det kørselsmiljø, som den pågældende plug-in udfører, og oplysninger vedrørende kørselspipeline og objektets forretningsoplysninger. Konteksten er indeholdt i System.IServiceProvider-parameteren, der sendes på kørselstidspunktet til en plug-in gennem dens Execute-metode.


// Obtain the execution context from the service provider.
IPluginExecutionContext context = (IPluginExecutionContext)
    serviceProvider.GetService(typeof(IPluginExecutionContext));

Når en systemhændelse udløses, som en plug-in er registreret for, opretter og udfylder systemet konteksten og overfører den til en plug-in gennem de tidligere nævnte klasser og metoder. Kørselskonteksten er overført til hver registreret plug-in i pipelinen, når de udføres. Hver plug-in i kørselspipelinen kan redigere skrivbare egenskaber i konteksten. For en given plug-in, der er registreret for en hændelse før, og en anden plug-in, der er registreret for en hændelse efter, kan plug-in'en for hændelse efter f.eks modtage en kontekst, der er blevet ændret af plug-in'en for hændelse før. Det samme gælder for plug-ins, der er registreret i samme fase.

Alle egenskaberne i IPluginExecutionContext er skrivebeskyttet. Men din plug-in kan ændre indholdet af de egenskaber, der er samlinger. Se flere oplysninger om forebyggelse af uendelig løkke i Depth.

Få adgang til organisationsservicen

For at få adgang til Microsoft Dynamics 365-organisationsservicen skal plug-in-kode oprette en forekomst af servicen via ServiceProvider.GetService-metoden.


// Obtain the organization service reference.
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

Platformen giver de korrekte webtjeneste-URL-adresser og legitimationsoplysninger til netværket for dig, når du bruger denne metode. Instantiering af din egen webtjenesteproxy understøttes ikke, da der ellers kan opstå baglås og godkendelsesproblemer.

Få adgang til meddelelsesservicen

Synkront registrerede plug-ins kan slå kørselskonteksten op til Microsoft Azure-servicebus. Objektet for tjenesteudbyder, der sendes til plug-in'en, indeholder en reference til IServiceEndpointNotificationService. Det er gennem denne meddelelsesservice, at synkrone plug-ins kan sende formidlede meddelelser til Microsoft Azure-servicebus. Du kan finde flere oplysninger om Microsoft Azure ved at se Azure-integration med Microsoft Dynamics 365.. Yderligere oplysninger om at skrive en plug-in, der kan slå op til Microsoft Azure-servicebus, finder du i Skriv en brugerdefineret Azure-følsom plug-in.

Input- og outputparametre

Egenskaben InputParameters, der indeholder de data, der i øjeblikket behandles af hændelseskørselspipeline for anmodningsmeddelelsen. Plug-in-kode kan få adgang til disse data. Egenskaben er af typen ParameterCollection, hvor nøglerne til anmodning om dataene er navnene på de faktiske offentlige egenskaber i anmodningen. Som et eksempel kan du tage et kig på CreateRequest. En egenskab for CreateRequest kaldes Target, som er af typen Entity. Det er det objekt, der i øjeblikket betjenes af platformen. For at få adgang til dataene for objektet, skal du bruge navnet "Target" som nøgle i inputparametersamlingen. Du skal også caste (konvertere) den returnerede forekomst.


// The InputParameters collection contains all the data passed in the message request.
if (context.InputParameters.Contains("Target") &&
    context.InputParameters["Target"] is Entity)
{
    // Obtain the target entity from the input parameters.
    Entity entity = (Entity)context.InputParameters["Target"];

Bemærk, at ikke alle anmodninger indeholder en Target-egenskab, der er af typen Entity, så du skal se på hver enkelt anmodning eller hvert svar. For eksempel har DeleteRequest en Target-egenskab, men dens type er EntityReference. Det foregående kodeeksempel ændres som følger.

// The InputParameters collection contains all the data passed in the message request.
if (context.InputParameters.Contains("Target") &&    context.InputParameters["Target"] is EntityReference)
{
    // Obtain the target entity from the input parameters.
    EntityReference entity = (EntityReference)context.InputParameters["Target"];
}

Når du har adgang til objektdataene, kan du læse og ændre dem. Dataændringer af den kontekst, der udføres af plug-ins, som blev registreret i fase 10 eller 20 af pipelinen, overføres i konteksten til kernehandlingen i fase 30.

Vigtigt

Ikke alle felter i en objektpost, som overføres til en plug-in via konteksten, kan ændres. Du bør kontrollere feltets IsValidForUpdate-metadataegenskab for at bekræfte, at den ikke er angivet til false. Forsøg på at ændre værdien i et felt, som ikke kan opdateres, resulterer i en undtagelse.

Ligeledes indeholder egenskaben OutputParameters de data, som er svarmeddelelsen, f.eks. CreateResponse, der aktuelt overføres via hændelseskørselspipelinen. Dog har kun synkrone hændelse efter- og asynkront registrerede plug-ins OutputParameters udfyldt, da svaret er resultatet af kerneplatformens handling. Egenskaben er af typen ParameterCollection, hvor adgangsnøglerne til svardataene er navnene på de faktiske offentlige egenskaber i svaret.

Før- og efter-objektbilleder

PreEntityImages og PostEntityImages indeholder øjebliksbilleder af det primære objekts attributter før og efter kernehandlingen på platformen.Microsoft Dynamics 365 udfylder billeder i før-objektet og efter-objektet baseret på sikkerhedsrettigheder for systembrugeren, der efterlignes. Det er kun objektattributter, der er indstillet til en værdi eller er null, der er tilgængelige i før- eller efter-objektbilleder. Du kan angive, at få platformen til at udfylde disse PreEntityImages- og PostEntityImages-egenskaber, når du registrerer din plug-in. Den objektaliasværdi, du angiver under registrering af plug-in, bruges som nøgle i billedsamlingen i din plug-in-kode.

Der er nogle hændelser, hvor billeder ikke er tilgængelige. For eksempel har kun synkrone efter hændelse- og asynkront registrerede plug-ins PostEntityImages udfyldt. Handlingen Opret understøtter ikke et før-billede, og en slettehandling understøtter ikke et efter-billede. Desuden understøtter kun en lille del af meddelelser før- og efter-billeder, som vist i følgende tabel.

Meddelelsesanmodning

Egenskab

Beskrivelse

AssignRequest

Destination

Det tildelte objekt.

CreateRequest

Destination

Det oprettede objekt.

DeleteRequest

Destination

Det slettede objekt.

DeliverIncomingEmailRequest

EmailId

Det leverede mail-id.

DeliverPromoteEmailRequest

EmailId

Det leverede mail-id.

ExecuteWorkflowRequest

Destination

Arbejdsprocesobjektet.

MergeRequest

Destination

Det overordnede objekt, som data fra det underordnede objekt flettes ind i.

MergeRequest

SubordinateId

Det underordnede objekt, som flettes ind i det overordnede objekt.

SendEmailRequest

EmailId

Det sendte objekt-id.

SetStateRequest

EntityMoniker

Det objekt, hvor tilstanden indstilles.

UpdateRequest

Destination

Det opdaterede objekt.

Registrering af før- eller efter-billeder for at få adgang til objektsattributværdier resulterer i forbedret plug-in-ydeevne i forhold til at hente objektattributter i plug-in-kode via RetrieveRequest- eller RetrieveMultipleRequest-anmodninger.

System_CAPS_security Sikkerhed Bemærkning

Et foreløbigt billede i, overførselskonteksten for et plug-in eller en brugerdefineret arbejdsprocesaktivitet kan indeholde data, som brugere, der er logget på, ikke har adgangsrettigheder til.Microsoft Dynamics 365-administratorer og brugere med rettigheder på højt niveau kan registrere plug-ins til at køre under brugerkontoen "system" eller plug-in-kode kan foretage opkald som "system"-bruger på vegne af den bruger, der er logget på. Hvis dette sker, kan brugere, der er logget på, få adgang til data, som deres sikkerhed på feltniveau ikke tillader adgang til.Flere oplysninger:Repræsentation i plug-ins

Se også

Plug-in-udvikling
Håndtering af undtagelser i plug-ins
Pipeline for hændelseskørsel
Brug meddelelser (anmodnings- og svarklasser) med metoden Execute
Bruge organisationstjenesten til at læse og skrive data eller metadata
Registrere og installere plug-ins

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret