Informazioni sul contesto dati passato a un plug-in

 

Data di pubblicazione: novembre 2016

Si applica a: Dynamics CRM 2015

Quando un plug-in viene eseguito in risposta a un evento di pipeline di esecuzione per cui è registrato, viene chiamato il metodo Execute del plug-in. Il metodo passa un oggetto IServiceProvider come parametro contenente un certo numero di oggetti utili. Nelle sezioni seguenti vengono descritte alcune delle informazioni che vengono passate a un plug-in quando viene eseguito.

In questo argomento

Accedere al contesto di esecuzione del plug-in

Accedere a servizio di organizzazione

Accedere a servizio di notifica

Parametri di input e di output

Immagini pre e post entità

Accedere al contesto di esecuzione del plug-in

IPluginExecutionContext contiene le informazioni che descrivono l'ambiente di runtime eseguito dal plug-in, le informazioni correlate alla pipeline di esecuzione e le informazioni aziendali dell'entità. Il contesto è contenuto nel parametro System.IServiceProvider passato in fase di esecuzione a un plug-in tramite il metodo Execute.


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

Quando viene generato un evento di sistema per cui è registrato il plug-in, il sistema crea e popola il contesto e lo passa a un plug-in tramite le classi e i metodi indicati in precedenza. Il contesto di esecuzione è passato a ogni plug-in registrato nella pipeline quando vengono eseguiti. Ogni plug-in nella pipeline di esecuzione può modificare le proprietà scrivibili nel contesto. Ad esempio, un plug-in registrato per un pre-evento e un altro plug-in registrato per un post-evento, il plug-in del post-evento può ricevere un contesto che è stato modificato dal plug-in di pre-evento. La stessa situazione si applica ai plug-in registrati nella stessa fase.

Tutte le proprietà in IPluginExecutionContext sono di sola lettura. Tuttavia, il plug-in può modificare il contenuto delle proprietà che sono raccolte. Per ulteriori informazioni sulla prevenzione del ciclo infinito, vedere Depth.

Accedere a servizio di organizzazione

Per accedere al servizio di organizzazione di Microsoft Dynamics 365, è necessario che il codice del plug-in crei un'istanza del servizio tramite il metodo ServiceProvider.GetService.


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

La piattaforma offre gli URL corretti del servizio Web e le credenziali di rete quando si utilizza questo metodo. La creazione di un'istanza del proxy del servizio Web non è supportata in quando restituisce problemi di autenticazione e blocco critico.

Accedere a servizio di notifica

I plug-in registrati in modalità sincrona possono pubblicare il contesto di esecuzione in Bus di servizio di Microsoft Azure. L'oggetto del provider di servizi passato al plug-in contiene un riferimento a IServiceEndpointNotificationService. È tramite il servizio di notifica che i plug-in sincroni possono inviare messaggi negoziati a Bus di servizio di Microsoft Azure. Per ulteriori informazioni su Microsoft Azure, vedere Integrazione di Azure con Microsoft Dynamics CRM. Per ulteriori informazioni sulla scrittura di plug-in che possono pubblicare in Bus di servizio di Microsoft Azure, vedere Scrivere un plug-in personalizzato che riconosce Azure.

Parametri di input e di output

La proprietà InputParameters contiene i dati presenti nel messaggio di richiesta attualmente elaborato dalla pipeline di esecuzione evento. Il codice del plug-in può accedere ai dati. La proprietà è di tipo ParameterCollection dove le chiavi per accedere ai dati della richiesta sono i nomi delle proprietà pubbliche effettive presenti nella richiesta. Ad esempio, vedere CreateRequest. Una proprietà di CreateRequest è denominata Target, che è di tipo Entity. Questa è l'entità attualmente elaborata dalla piattaforma. Per accedere ai dati dell'entità si utilizzerebbe il nome "destinazione" come chiave della raccolta di parametri di input. È inoltre necessario eseguire il cast dell'istanza restituita.


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

Si noti che non tutte richieste contengono una proprietà Target di tipo Entity, quindi è necessario esaminare ogni richiesta o risposta. Ad esempio, DeleteRequest ha una proprietà Target, ma il tipo è EntityReference. L'esempio di codice precedente sarà modificato come segue.

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

Dopo avere eseguito l'accesso ai dati dell'entità, è possibile leggerli e cambiarli. Tutte le modifiche dati apportate al contesto dai plug-in registrati in fase 10 o 20 del pipeline sono passati nel contesto dell'operazione principale nella fase 30.

Importante

Non tutti i campi in un record di entità che sono passati a un plug-in tramite il contesto possono essere modificati. È consigliabile controllare la proprietà dei metadati IsValidForUpdate del campo per verificare che non sia impostata su false. Tentare di modificare il valore di un campo che non può essere aggiornato in un'eccezione.

Analogamente, la proprietà OutputParameters contiene i dati presenti nel messaggio di risposta, ad esempio CreateResponse, attualmente passato tramite la pipeline di esecuzione dell'evento. Tuttavia, solo i plug-in registrati asincroni e post-evento sincroni hanno OutputParameters popolato come risposta è il risultato dell'operazione principale di piattaforma. La proprietà è di tipo ParameterCollection dove le chiavi per accedere ai dati della risposta sono i nomi delle proprietà pubbliche effettive presenti nella risposta.

Immagini pre e post entità

PreEntityImages e PostEntityImages contengono gli snapshot degli attributi primari di entità primaria prima (pre) e dopo (post) l'operazione principale della piattaforma.Microsoft Dynamics 365 popola le immagini di pre e post-entità basate sui privilegi di sicurezza dell'utente di sistema rappresentato. Solo gli attributi di entità che sono impostati su un valore o sono null o sono disponibili in immagini di pre o post-entità. È possibile specificare di permettere alla piattaforma di popolare queste proprietà PostEntityImages e PreEntityImages quando si registra il plug-in. Il valore di alias entità specificato durante la registrazione del plug-in viene utilizzato come chiave nella raccolta di immagine nel codice del plug-in.

Esistono alcuni eventi in cui le immagini non sono disponibili. Ad esempio, solo per i plug-in registrati asincroni e di post-evento sincroni viene popolato PostEntityImages. L'operazione di creazione non supporta una pre-immagine e un'operazione di eliminazione non supporta una post-immagine. Inoltre, solo un piccolo subset di messaggi supporta le pre e le post-immagini come illustrato nella tabella seguente.

Richiesta messaggio

Proprietà

Descrizione

AssignRequest

Destinazione

Entità assegnata.

CreateRequest

Destinazione

Entità creata.

DeleteRequest

Destinazione

Entità eliminata.

DeliverIncomingEmailRequest

EmailId

ID posta elettronica recapitata.

DeliverPromoteEmailRequest

EmailId

ID posta elettronica recapitata.

ExecuteWorkflowRequest

Destinazione

Entità flusso di lavoro.

MergeRequest

Destinazione

Entità padre, in cui viene eseguito il merge dei dati dell'entità figlio.

MergeRequest

SubordinateId

Entità figlio di cui viene eseguito il merge nell'entità padre.

SendEmailRequest

EmailId

ID entità inviata.

SetStateRequest

EntityMoniker

Entità per cui è impostato lo stato.

UpdateRequest

Destinazione

Entità aggiornata.

La registrazione delle pre o post-immagini per accedere ai valori di attributo dell'entità offre migliori prestazioni del plug-in rispetto al recupero degli attributi di entità nel codice del plug-in tramite le richieste RetrieveRequest o RetrieveMultipleRequest.

System_CAPS_security Sicurezza Nota

Una pre-immagine passata nel contesto di esecuzione a un'attività flusso personalizzata o plug-in potrebbe contenere dati per cui l'utente connesso non dispone dei privilegi di accesso. Gli amministratori di Microsoft Dynamics 365 e altri utenti con autorizzazioni di alto livello possono registrare i plug-in per l'esecuzione con l'account utente di "sistema" oppure il codice del plug-in può effettuare le chiamate come utente di "sistema" per conto dell'utente collegato. In questo caso, gli utenti connessi possono accedere a dati ai quali la sicurezza a livello di campo non consente l'accesso.Ulteriori informazioni:Rappresentazione nei plug-in

Vedere anche

Sviluppo dei plug-in
Gestire le eccezioni nei plug-in
Pipeline di esecuzione evento
Utilizzare i messaggi (classi di richiesta e di risposta) con il metodo Execute
Utilizzare il servizio Web IOrganizationService per leggere e scrivere dati o metadati
Registrare e distribuire plug-in

© 2017 Microsoft. Tutti i diritti sono riservati. Copyright