Freigeben über


Beispiel: Generisches Plug-In für virtuelle Tabellendatenanbieter

Zeigt

Dieses Beispiel zeigt eine minimale Implementierung für ein generisches Microsoft Dataverse Virtual Table Data Provider-Plug-In, DropboxRetrieveMultiplePlugin, für den Dropbox-Dateifreigabedienst. Es wird der Bare Metal-Ansatz verwendet, wobei der QueryExpression durch das Erstellen einer benutzerdefinierten Besucherklasse DropBoxExpressionVisitor übersetzt wird. Es gibt eine Auflistung der Dateien zurück, die die Suchkriterien als eine EntityCollectionerfüllen.

Hinweis

Dieses Beispiel erfordert die Verwendung von ILMERGE, um die Plug-In- und Dropbox-Assemblys zu kombinieren, bevor die Assembly mit Dataverse registriert wird. Die Verwendung von ILMERGE wird nicht offiziell unterstützt. Ein zukünftiges Update für dieses Beispiel wird die Notwendigkeit der Verwendung von ILMERGE entfernen.

Erste Schritte

Um dieses Beispiel zu erstellen, müssen Sie zuerst die Pakete Dropbox.Api und Microsoft.CrmSdk.Data NuGet in Ihrer Lösung installieren. Außerdem benötigen Sie ein DropBox-Konto und übergeben ein echtes Zugriffstoken beim Erstellen einer Instanz des DropboxClient.

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();
        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 Tabellen
API-Überlegungen zu virtuellen Tabellen
Benutzerdefinierte anbieter für virtuelle Tabellendaten