Delen via


Begrijp de gegevenscontext in een plug-in

 

Gepubliceerd: januari 2017

Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Wanneer een plug-in wordt uitgevoerd als reactie op uitvoeringspipelinegebeurtenis waarvoor deze is geregistreerd, wordt de methode Execute van de plug-in aangeroepen. Die methode geeft een IServiceProvider object als een parameter door, die een aantal nuttige objecten bevat. De volgende gedeelten beschrijven een deel van de informatie die wordt doorgegeven aan een plug-in bij uitvoering.

In dit onderwerp

Toegang tot de uitvoeringscontext van de plug-in

De organisatieservice bekijken

De meldingenservice bekijken

Invoer- en uitvoerparameters toe

Images voor en na de entiteit

Toegang tot de uitvoeringscontext van de plug-in

IPluginExecutionContext bevat informatie die de runtime-omgeving beschrijft die de plug-in uitvoert, informatie gekoppeld aan de uitvoeringspipeline en bedrijfsinformatie van de entiteit. De context bevindt zich in de parameter System.IServiceProvider die tijdens het uitvoeren wordt doorgegeven aan een plug-in via de Execute methode.


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

Wanneer een systeemgebeurtenis plaatsvindt waarvoor een plug-in is geregistreerd, creëert het systeem de context, vult het deze in en stuurt het deze door naar een plug-in via de eerder vermelde klassen en methoden. De uitvoeringscontext wordt doorgegeven aan elke geregistreerde plug-in in de pijplijn wanneer ze worden uitgevoerd. Elke plug-in in de uitvoeringspipeline kan schrijfbare eigenschappen in de context wijzigen. Aangezien een plug-in bijvoorbeeld is geregistreerd voor een pre-gebeurtenis en een andere plug-in voor een na-gebeurtenis, kan de plug-in voor de na-gebeurtenis een context ontvangen die is ontvangen door de plug-in voor de pre-gebeurtenis. Dezelfde situatie geldt voor invoegtoepassingen die binnen dezelfde fase worden geregistreerd.

Alle eigenschappen in IPluginExecutionContext zijn alleen-lezen. Uw plug-in kan echter de inhoud wijzigen van deze eigenschappen die verzamelingen zijn. Voor meer informatie over het voorkomen van oneindige lussen, raadpleegt u Depth.

De organisatieservice bekijken

Voor toegang tot de Microsoft Dynamics 365 organisatieservice, moet de plug-incode een exemplaar creëren van de service via de methode ServiceProvider.GetService.


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

Het platform biedt de juiste webservice-URL's voor aanmeldgegevens voor het netwerk wanneer u deze methode gebruikt. Het maken van een exemplaar van uw eigen webserviceproxy wordt niet ondersteund omdat het leidt tot een impasse en tot verificatieproblemen.

De meldingenservice bekijken

Synchroon geregistreerde plug-ins kunnen de uitvoeringscontext posten naar de Microsoft Azure Service Bus. Het serviceproviderobject dat wordt doorgegeven aan de plug-in bevat een verwijzing naar IServiceEndpointNotificationService. Het is via deze meldingservice dat synchrone plug-ins geregelde berichten kunnen verzenden naar de Microsoft Azure Service Bus. Voor meer informatie over Microsoft Azure raadpleegt u Azure-integratie met Microsoft Dynamics 365. Voor meer informatie over het schrijven van een plug-in berichten kan sturen naar de Microsoft Azure Service Bus, zie Een aangepaste Azure-bewuste invoegtoepassing schrijven.

Invoer- en uitvoerparameters toe

De eigenschap InputParameters bevat de gegevens in het aanvraagbericht dat momenteel door de gebeurtenisuitvoeringspipeline wordt verwerkt. Uw plug-incode heeft toegang tot deze gegevens. De eigenschap is van het type ParameterCollection waar de sleutels voor toegang tot de aanvraaggegevens de namen zijn van werkelijke openbare eigenschappen in de aanvraag. Kijk bijvoorbeeld eens naar CreateRequest. Een eigenschap van CreateRequest heet Target, met het type Entity. Dit is de entiteit waar het platform momenteel op uitvoert. Voor toegang tot de gegevens van de entiteit, gebruikt u de naam "Doel" als de sleutel in de invoerparameterverzameling. U moet ook het geretourneerde exemplaar converteren.


// 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"];

Denk eraan dat niet alle aanvragen een eigenschap Target bevatten van het type Entity. U moet dus elke aanvraag of respons bekijken.DeleteRequest heeft bijvoorbeeld een eigenschap Target, maar het type is EntityReference. Het vorige codevoorbeeld zou als volgt zijn gewijzigd.

// 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"];
}

Als u toegang tot de entiteitgegevens hebt, kunt u ze lezen en wijzigen. Eventueel gewijzigde gegevens in de context die worden uitgevoerd door plug-ins die zijn geregistreerd in fase 10 of 20 van de pipeline, worden in de context doorgegeven aan de kernactiviteit in fase 30.

Belangrijk

Niet alle velden in een entiteitrecord die via de context worden doorgegeven aan een plug-in, kunnen worden gewijzigd. U moet de metagegevenseigenschap IsValidForUpdate van het veld controleren om te kijken of deze niet is ingesteld op false. Proberen de waarde te wijzigen van een veld dat niet kan worden gewijzigd, leidt tot een uitzondering.

Op gelijkaardige wijze bevat de eigenschap OutputParameters de gegevens in het responsbericht, bijvoorbeeld CreateResponse, dat momenteel door de gebeurtenisuitvoeringspipeline wordt verwerkt. Echter, hebben alleen synchrone post-gebeurtenis en asynchroon geregistreerde plug-ins OutputParameters ingevuld aangezien de respons het resultaat is van de kernplatformbewerking. De eigenschap is van het type ParameterCollection waar de sleutels voor toegang tot de responsgegevens de namen zijn van werkelijke openbare eigenschappen in de respons.

Images voor en na de entiteit

PreEntityImages en PostEntityImages bevatten momentopnamen van de kenmerken van de primaire entiteit voordat (pre) en nadat (post) de basisbewerking van het platform wordt uitgevoerd.Microsoft Dynamics 365 vult de pre-entiteits- en post-entiteitsimages op basis van de beveiligingsprivileges van de nagebootste systeemgebruiker. Alleen de kenmerken van de entiteit die zijn ingesteld op een waarde of die null zijn, zijn beschikbaar in de pre- of post-entiteitsimages. U kunt opgeven om het platform de eigenschappen PreEntityImages en PostEntityImages te laten invullen wanneer u uw plug-in registreert. De waarde van de entiteitalias die u opgeeft tijdens de registratie van de plug-in, wordt gebruikt als de sleutel tot de imageverzameling in uw plug-incode.

Er zijn bepaalde gebeurtenissen waar images niet beschikbaar zijn. Bijvoorbeeld, alleen synchrone post-gebeurtenis en asynchroon geregistreerde invoegtoepassingen laten PostEntityImages invullen. De bewerking Maken ondersteunt geen pre-image en een bewerking Verwijderen ondersteunt geen post-image. Bovendien ondersteunt slechts een kleine subverzameling berichten pre- en postafbeeldingen zoals aangegeven in de volgende tabel.

Berichtaanvraag

Eigenschap

Beschrijving

AssignRequest

Doel

De toegewezen entiteit.

CreateRequest

Doel

De gemaakte entiteit.

DeleteRequest

Doel

De verwijderde entiteit.

DeliverIncomingEmailRequest

EmailId

De bezorgde e-mail-id.

DeliverPromoteEmailRequest

EmailId

De bezorgde e-mail-id.

ExecuteWorkflowRequest

Doel

De workflowentiteit.

MergeRequest

Doel

De bovenliggende entiteit, waarin de gegevens uit de onderliggende entiteit worden samengevoegd.

MergeRequest

SubordinateId

De onderliggende entiteit die wordt samengevoegd in de bovenliggende entiteit.

SendEmailRequest

EmailId

Id van de verzonden entiteit.

SetStateRequest

EntityMoniker

De entiteit waarvoor de status is ingesteld.

UpdateRequest

Doel

De bijgewerkte entiteit.

Registreren voor pre- of postimages voor toegang tot entiteitkenmerkwaarden leidt tot verbeterde prestaties van de plug-in vergeleken tot het verkrijgen van entiteitskenmerken in plug-incode door aanvragen van RetrieveRequest of RetrieveMultipleRequest.

System_CAPS_security Beveiliging Opmerking

Een pre-image die wordt doorgegeven in de uitvoeringscontext aan een plug-in of aangepaste werkstroomactiviteit bevat mogelijk gegevens waarvoor de aangemelde gebruiker geen toegangsbevoegdheden heeft.Microsoft Dynamics 365-beheerders en andere gebruikers met machtigingen op hoog niveau kunnen zich aanmelden voor het uitvoeren van plug-ins onder de gebruikersaccount "systeem" of plug-in code kan oproepen uitvoeren als "systeemgebruiker" namens de aangemelde gebruiker. Als dit zich voordoet, hebben de aangemelde gebruikers toegang tot gegevens die hun beveiliging op veldniveau niet toestaat.Meer informatie:Imitatie in invoegtoepassingen

Zie ook

Ontwikkeling van plug-ins
Uitzonderingen in invoegtoepassingen afhandelen
Pipeline voor gebeurtenisuitvoering
Berichten (aanvraag- en responsklassen) gebruiken met de methode Execute
Gebruik de Organisatieservice om gegevens of metagegevens te lezen en te schrijven.
Plug-ins registreren en inzetten

Microsoft Dynamics 365

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht