Partager via


Exemple : Plug-in générique fournisseur de données des tables virtuelles

Montre ce qui suit

Cet exemple illustre une implémentation minimale pour un plug-in générique fournisseur de données de table virtuelle pour les applications Microsoft Dataverse for Customer Engagement, DropboxRetrieveMultiplePlugin, pour le service de partage de fichiers Dropbox. Il utilise l’approche « complète », traduisant QueryExpression à travers la création de la classe de visiteur personnalisée, DropBoxExpressionVisitor. Il renvoie un ensemble des fichiers qui répondent aux critères de recherche en tant que EntityCollection.

Notes

Cet exemple nécessite l’utilisation d’ILMERGE pour combiner le plug-in et les assemblys Dropbox avant d’enregistrer l’assembly avec Dataverse. L’utilisation d’ILMERGE n’est pas officiellement prise en charge. Une future mise à jour de cet exemple supprimera la nécessité d’utiliser ILMERGE.

Mise en route

Pour générer cet exemple, commencez par installer les packages Dropbox.Api et Microsoft.CrmSdk.Data NuGet dans votre solution. Vous devez également disposer d’un compte Dropbox et fournir un vrai jeton d’accès lors de la création d’une instance DropboxClient.

Ajoutez ce qui suit à l’aide d’instructions dans votre code :

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

Exemple de code


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

Voir aussi

Démarrer avec les tables virtuelles
Considérations sur les tables virtuelles
Fournisseurs de données de tables virtuelles personnalisées

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).