Örnek: Genel sanal tablo veri sağlayıcısı eklentisi

Gösterir

Bu örnekte Dropbox dosya paylaşım hizmeti için dropboxRetrieveMultiplePlugin adlı genel bir Microsoft Dataverse sanal tablo veri sağlayıcısı eklentisi için en düşük uygulama gösterilmektedir. "Doğrudan donanım üzerinde" yaklaşımını kullanır ve QueryExpression öğesini DropBoxExpressionVisitor özel ziyaretçi sınıfı oluşturma işlemi aracılığıyla çevirir. Arama ölçütlerini karşılayan dosyaların bir koleksiyonunu olarak EntityCollectiondöndürür.

Uyarı

Bu örnek, derlemeyi Dataverse'e kaydetmeden önce eklenti ve Dropbox derlemelerini birleştirmek için ILMERGE kullanımını gerektirir. ILMERGE kullanımı resmi olarak desteklenmez. Bu örnekte gelecekteki bir güncelleştirme, ILMERGE kullanma gereksinimini ortadan kaldıracaktır.

Başlangıç Yapmak

Bu örneği oluşturmak için önce çözümünüzde Dropbox.Api ve Microsoft.CrmSdk.Data NuGet paketlerini yüklemeniz gerekir. DropboxClient nesnesini oluştururken bir Dropbox hesabına sahip olmanız ve gerçek bir erişim belirteci sağlamanız gereklidir.

Aşağıdaki using deyimlerini kodunuza ekleyin:

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

Örnek kodu


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

Ayrıca bakınız

Sanal tabloları kullanmaya başlama
Sanal tablolarla ilgili API ile ilgili dikkat edilmesi gerekenler
Özel sanal tablo veri sağlayıcıları