Delen via


Gegevens doorgeven tussen invoegtoepassingen

 

Gepubliceerd: november 2016

Is van toepassing op: Dynamics CRM 2015

Het berichtpipelinemodel voor Microsoft Dynamics 365 geeft een parameterverzameling op voor aangepaste gegevenswaardes in de uitvoeringscontext die door de pipeline wordt gevoerd en wordt gedeeld door geregistreerde invoegtoepassingen, zelfs van externe ontwikkelaars. Deze verzameling van gegevens kan worden gebruikt door andere invoegtoepassingen om informatie uit te wisselen tussen invoegtoepassingen en kettingverwerking mogelijk te maken waarbij gegevens die door de ene invoegtoepassing zijn verwerkt door de volgende kunnen worden verwerkt enzovoort. Deze functie is vooral handig in prijsenginescenario's waarbij verschillende prijsinvoegtoepassingen gegevens aan elkaar doorgeven om de totale prijs voor een verkooporder of factuur te bepalen. Een andere mogelijke toepassing van deze functie is de communicatie tussen een invoegtoepassing die is geregistreerd voor de gebeurtenis en een invoegtoepassing die is geregisteerd na de gebeurtenis.

De naam van de parameter die voor het doorgeven van informatie tussen invoegtoepassingen wordt gebruikt is SharedVariables. Dit is een verzameling sleutel-\waardeparen. Tijdens uitvoering kunnen invoegtoepassingen eigenschappen toevoegen, lezen of bewerken in de verzameling SharedVariables. Dit is een manier van informatieoverdracht onder invoegtoepassingen.

Dit voorbeeld toont hoe u de SharedVariables gebruikt om gegevens van een invoegtoepassing die is geregistreerd voor de gebeurtenis invoert in een invoegtoepassing die is geregistreerd na de gebeurtenis.


using System;

// Microsoft Dynamics CRM namespace(s)
using Microsoft.Xrm.Sdk;

namespace Microsoft.Crm.Sdk.Samples
{
    /// <summary>
    /// A plug-in that sends data to another plug-in through the SharedVariables
    /// property of IPluginExecutionContext.
    /// </summary>
    /// <remarks>Register the PreEventPlugin for a pre-operation stage and the 
    /// PostEventPlugin plug-in on a post-operation stage.
    /// </remarks>
    public class PreEventPlugin : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the execution context from the service provider.
            Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

            // Create or retrieve some data that will be needed by the post event
            // plug-in. You could run a query, create an entity, or perform a calculation.
            //In this sample, the data to be passed to the post plug-in is
            // represented by a GUID.
            Guid contact = new Guid("{74882D5C-381A-4863-A5B9-B8604615C2D0}");

            // Pass the data to the post event plug-in in an execution context shared
            // variable named PrimaryContact.
            context.SharedVariables.Add("PrimaryContact", (Object)contact.ToString());
        }
    }

    public class PostEventPlugin : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the execution context from the service provider.
            Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

            // Obtain the contact from the execution context shared variables.
            if (context.SharedVariables.Contains("PrimaryContact"))
            {
                Guid contact =
                    new Guid((string)context.SharedVariables["PrimaryContact"]);

                // Do something with the contact.
            }
        }
    }
}


' Microsoft Dynamics CRM namespace(s)
Imports Microsoft.Xrm.Sdk

Namespace Microsoft.Crm.Sdk.Samples

    ''' <summary>
    ''' A plug-in that sends data to another plug-in through the SharedVariables
    ''' property of IPluginExecutionContext.
    ''' </summary>
    ''' <remarks>Register the PreEventPlugin for a pre-operation stage and the 
    ''' PostEventPlugin plug-in on a post-operation stage.
    ''' </remarks>
    Public Class PreEventPlugin
        Implements IPlugin

        Public Sub Execute(ByVal serviceProvider As IServiceProvider) _
            Implements IPlugin.Execute

            ' Obtain the execution context from the service provider.
            Dim context As Microsoft.Xrm.Sdk.IPluginExecutionContext =
                CType(serviceProvider.GetService(
                        GetType(Microsoft.Xrm.Sdk.IPluginExecutionContext)), 
                    Microsoft.Xrm.Sdk.IPluginExecutionContext)

            ' Create or retrieve some data that will be needed by the post event
            ' plug-in. You could run a query, create an entity, or perform a calculation.
            'In this sample, the data to be passed to the post plug-in is
            ' represented by a GUID.
            Dim contact As New Guid("{74882D5C-381A-4863-A5B9-B8604615C2D0}")

            ' Pass the data to the post event plug-in in an execution context shared
            ' variable named PrimaryContact.
            context.SharedVariables.Add("PrimaryContact", CType(contact.ToString(),
                                        Object))

        End Sub
    End Class

    Public Class PostEventPlugin
        Implements IPlugin

        Public Sub Execute(ByVal serviceProvider As IServiceProvider) _
            Implements IPlugin.Execute

            ' Obtain the execution context from the service provider.
            Dim context As Microsoft.Xrm.Sdk.IPluginExecutionContext =
                CType(serviceProvider.GetService(
                        GetType(Microsoft.Xrm.Sdk.IPluginExecutionContext)), 
                    Microsoft.Xrm.Sdk.IPluginExecutionContext)

            ' Obtain the contact from the execution context shared variables.
            If context.SharedVariables.Contains("PrimaryContact") Then

                Dim contact As New Guid(CStr(context.SharedVariables("PrimaryContact")))

                ' Do something with the contact.

            End If

        End Sub
    End Class

End Namespace

Het is belangrijk dat ieder gegevenstype dat wordt toegevoegd aan de verzameling gedeelde variabelen serieel kan worden verwerkt, anders weet de server niet hoe de gegevens serieel moeten worden verwerkt en mislukt het uitvoeren van de invoegtoepassing.

Voor een een invoegtoepassing die is geregistreerd in fase 20 of 40, om toegang te krijgen tot gedeelde variabelen van een invoegtoepassing die is geregistreerd in fase 10 die wordt uitgevoerd na maken, updaten of verwijderen of door een RetrieveExchangeRateRequest, moet u toegang hebben tot de verzameling ParentContext.SharedVariables. In alle andere gevallen bevat IPluginExecutionContext.SharedVariables de verzameling.

Zie ook

IPluginExecutionContext
Ontwikkeling van plug-ins
Imitatie in invoegtoepassingen
Pipeline voor gebeurtenisuitvoering

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht