Beispiel: Generisches virtuelles Entitätsdatenanbieter-Plug-In

Dieser Beispielcode ist für Dynamics 365 for Customer Engagement.

Veranschaulichung

Dieses Beispiel veranschaulicht Auswirkungen für eine minimale Implementierung eines allgemeinen Dynamics 365 for Customer Engagement (on-premises) virtuellen Entitätsdatenanbieter-Plug-Ins DropboxRetrieveMultiplePlugin, für den Filesharing- Dropbox-Service. Es wird der "Bare Metal"-Ansatz verwendet, wobei der QueryExpression durch das Erstellen einer benutzerdefinierten Besucherklasse DropBoxExpressionVisitor übersetzt wird. Es wird eine Sammlung der Dateien zurückgegeben, die den Suchkriterien als EntityCollection entsprechen.

Erste Schritte

Um dieses Beispiel zu erstellen, müssen Sie zuerst die Dropbox.Api und das Microsoft.CrmSdk.Data NuGet Paket in Ihrer Lösung installieren. Sie benötigen auch ein DropBox-Konto und müssen einen realen Zugriffstoken übergeben, wenn Sie eine Instanz des DropboxClient erstellen.

Fügen Sie Ihrem Code die folgenden Using-Anweisung hinzu:

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Dropbox.Api;
using Dropbox.Api.Files;

Beispielcode


public class DropBoxExpressionVisitor : QueryExpressionVisitorBase
{
    public string SearchKeyWords { get; private set; }

    public override QueryExpression Visit(QueryExpression query)
    {
        // Very simple visitor that extracts search keywords
        var filter = query.Criteria;
        if (filter.Conditions.Count > 0)
        {
            foreach (ConditionExpression condition in filter.Conditions)
            {
                if (condition.Operator == ConditionOperator.Like && condition.Values.Count > 0)
                {
                    string exprVal = (string)condition.Values[0];

                    if (exprVal.Length > 2)
                    {
                        this.SearchKeyWords += " " + exprVal.Substring(1, exprVal.Length - 2);
                    }
                }
            }
            return query;
        }
    }
}

public class DropboxRetrieveMultiplePlugin : IPlugin
{
    public void Execute(IServiceProvider serviceProvider)
    {
        var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        var qe = (QueryExpression)context.InputParameters["Query"];
        if (qe != null)
        {
            var visitor = new DropBoxExpressionVisitor();
            qe.Accept(visitor);
            using (var dbx = new DropboxClient(AccessToken))
            {
                if (visitor.SearchKeyWords != string.Empty)
                {
                    var searchCriteria = new SearchArg(string.Empty, visitor.SearchKeyWords);
                    var task = Task.Run(() => this.SearchFile(dbx, searchCriteria));
                    context.OutputParameters["BusinessEntityCollection"] = task.Result;
                }
            }
        }
    }

    public async Task<EntityCollection> SearchFile(DropboxClient dbx, SearchArg arg)
    {
        EntityCollection ec = new EntityCollection { EntityName = "new_dropbox" };
        var list = await dbx.Files.SearchAsync(arg);
        foreach (var item in list.Matches)
        {
            if (item.Metadata.IsFile)
            {
                Entity e = new Entity("new_dropbox");
                e.Attributes.Add("new_dropboxid", Guid.NewGuid());
                e.Attributes.Add("new_filename", item.Metadata.AsFile.Name);
                e.Attributes.Add("new_filesize", item.Metadata.AsFile.Size);
                e.Attributes.Add("new_modifiedon", item.Metadata.AsFile.ServerModified);
                ec.Entities.Add(e);
            }
        }
        return ec;
    }
}

Siehe auch

Erste Schritte mit virtuellen Entitäten
Benutzerdefinierte virtuelle Entitätsdatenanbieter