Adibidea: taula birtualeko datu-hornitzaile generikoaren plugina

Frogatzen du

Adibide honek Microsoft Dataverse taula birtualeko datu-hornitzailearen plugin generiko baten inplementazio minimoa erakusten du, DropboxRetrieveMultiplePlugin, Dropbox fitxategiak partekatzeko zerbitzurako. "bare metal" ikuspuntua erabiltzen du QueryExpression , DropBoxExpressionVisitor bisitari pertsonalizatuaren sorkuntzaren bidez. Bilaketa-irizpideak artxibo gisa asetzen dituzten artxiboen bilduma bat itzuli du EntityCollection.

Oharra

Lagin honek ILMERGE erabiltzea eskatzen du plug-in eta Dropbox muntaiak konbinatzeko, multzoa Dataverse-n erregistratu aurretik. ILMERGE erabiltzea ez ofizialki onartzen. Lagin honen etorkizuneko eguneratze batek ILMERGE erabiltzeko beharra kenduko du.

Erabiltzen hastea

Adibide hau biltzeko, lehenik eta behin NuGet Dropbox.Api eta Microsoft.CrmSdk.Data paketeak instalatu behar dituzu konponbidean. DropBox-en kontu bat ere beharko duzu, eta benetako sarbideko token bat pasatu DropboxClient instantzia bat sortzean.

Gaineratu honako using-jarraibide hauek kodeari:

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

Adibide-kodea


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

Ikusi ere

Hasi mahai birtualekin
Taula birtualen APIak
Taula birtualeko datu-hornitzaile pertsonalizatuak