Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Montre ce qui suit
Cet exemple montre une implémentation minimale pour un plug-in de fournisseur de données de table virtuelle Microsoft Dataverse générique, 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.
Note
Cet exemple nécessite l’utilisation d’ILMERGE pour combiner les assemblies du plug-in et de Dropbox avant d’enregistrer l'assemblage dans Dataverse. L’utilisation d’ILMERGE n’est pas officiellement prise en charge. Une prochaine mise à jour de cet exemple supprime 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
Commencez avec les tables virtuelles
Considérations relatives à l’API des tables virtuelles
Fournisseurs de données de table virtuelle personnalisée