Ukázka: Obecný plug-in poskytovatele dat pro virtuální tabulky

Znázorňuje

Tato ukázka ukazuje minimální implementaci obecného plug-inu poskytovatele dat pro virtuální tabulku Microsoft Dataverse, DropboxRetrieveMultiplePlugin, pro službu sdílení souborů Dropbox. Používá přístup „bare metal“, který překládá QueryExpression prostřednictvím vytvoření vlastní třídy návštěvníka nazvané DropBoxExpressionVisitor. Vrátí kolekci souborů, které splňují kritéria hledání jako .EntityCollection

Poznámka:

Tato ukázka vyžaduje použití ILMERGE ke kombinování sestavení modulů plug-in a Dropbox před registrací sestavení v Dataverse. Použití ILMERGE se oficiálně nepodporuje. Budoucí aktualizace této ukázky odebere potřebu použít ILMERGE.

Začínáme

Abyste mohli tuto ukázku sestavit, musíte nejprve do svého řešení nainstalovat balíčky NuGet Dropbox.Api a Microsoft.CrmSdk.Data . Při vytváření instance DropboxClient budete také potřebovat účet DropBox a předat skutečný přístupový token.

Do kódu přidejte následující příkazy using:

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

Ukázkový kód


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

Viz také

Začínáme s virtuálními tabulkami
Aspekty rozhraní API virtuálních tabulek
Vlastní poskytovatelé dat pro virtuální tabulky