Pavyzdys: bendrasis virtualiosios lentelės duomenų teikėjo priedas

Rodo

Šiame pavyzdyje parodytas minimalus bendrojo "Microsoft Dataverse" virtualiųjų lentelių duomenų teikėjo priedo "DropboxRetrieveMultiplePlugin", skirto "Dropbox" failų bendrinimo paslaugai, diegimas. Jame naudojamas "pliko metalo" metodas, verčiant QueryExpression per individualios lankytojų klasės " DropBoxExpressionVisitor" sukūrimą. Jis pateikia failų, atitinkančių ieškos kriterijus, rinkinį kaip .EntityCollection

Pastaba.

Šiame pavyzdyje reikia naudoti ILMERGE, kad būtų galima sujungti priedą ir "Dropbox" rinkinius prieš registruojant rinkinį "Dataverse". ILMERGE naudojimas nėra oficialiai palaikomas. Būsimas šio pavyzdžio naujinimas pašalins poreikį naudoti ILMERGE.

Darbo pradžia

Norėdami sukurti šį pavyzdį, pirmiausia turite įdiegti "Dropbox.Api " ir "Microsoft.CrmSdk.Data NuGet" paketus savo sprendime. Kurdami " DropboxClient" egzempliorių taip pat turėsite turėti "DropBox" paskyrą ir perduoti tikrą prieigos raktą.

Prie kodo pridėkite šiuos teiginius:

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

Kodo pavyzdys


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

Taip pat žiūrėkite

Darbo su virtualiomis lentelėmis pradžia
API aspektai virtualiose lentelėse
Pasirinktiniai virtualios lentelės duomenų teikėjai