Exemple: complement genèric del proveïdor de dades de la taula virtual

Demostra

En aquest exemple es mostra una implementació mínima per a un connector genèric del proveïdor de dades de taules virtuals del Microsoft Dataverse, DropboxRetrieveMultiplePlugin, per al servei d'ús compartit de fitxers del Dropbox . Utilitza l'enfocament "bare metal", traduint la QueryExpression creació de la classe de visitant personalitzada, DropBoxExpressionVisitor. Retorna una col·lecció dels fitxers que compleixen els criteris de cerca com a EntityCollection.

Nota

Aquest exemple requereix l'ús d'ILMERGE per combinar el connector i els assemblatges de Dropbox abans de registrar l'assemblatge amb el Dataverse. L'ús d'ILMERGE no és oficialment compatible. Una actualització futura d'aquesta mostra eliminarà la necessitat d'utilitzar ILMERGE.

Introducció

Per crear aquest exemple, primer heu d'instal·lar els paquets NuGet Dropbox.Api i Microsoft.CrmSdk.Data a la solució. També necessitareu un compte de DropBox i passar un testimoni d'accés real quan creeu una instància de DropboxClient.

Afegiu les instruccions using següents al vostre codi:

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

Codi d'exemple


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;
    }
}

Vegeu també

Introducció a les taules virtuals
Consideracions sobre l'API de les taules virtuals
Proveïdors de dades de taules virtuals personalitzades