サンプル: 汎用仮想テーブル データ プロバイダー プラグイン

説明

このサンプルは、Dropbox ファイル共有サービスのための汎用 Microsoft Dataverse 仮想テーブル データ プロバイダー プラグインである DropboxRetrieveMultiplePlugin の最小の実装を示します。 これはカスタム ビジター クラス DropBoxExpressionVisitor の作成により QueryExpression を変換する「ベア メタル」アプローチを使用します。 EntityCollection として検索条件を満たすファイルのコレクションを返します。

注意

このサンプルでは、アセンブリを Dataverse に登録する前に、ILMERGE を使用してプラグイン アセンブリと Dropbox アセンブリを組み合わせる必要があります。 ILMERGE は公式にはサポートされていません。 このサンプルの将来の更新により、ILMERGE を使用する必要がなくなります。

作業の開始

このサンプルを作成するには、まず Dropbox.Api および Microsoft.CrmSdk.Data NuGet パッケージをユーザーのソリューションにインストールする必要があります。 また、DropboxClient のインスタンスを作成するときには、DropBox アカウントおよび実際のアクセス トークンが必要です。

以下の using ステートメントをコードに追加する必要があります。

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

サンプル コード


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

関連項目

仮想テーブルの使用を開始する
仮想テーブルの API に関する考慮事項
カスタム仮想テーブル データ プロバイダー

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。