Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Demostra
En aquest exemple es mostra una implementació mínima per a un connector genèric del proveïdor de dades de taules virtuals del Microsoft Dataverse, DropboxRetrieveMultiplePlugin, per al servei d'ús compartit de fitxers del Dropbox . Utilitza l'enfocament "bare metal", traduint la QueryExpression creació de la classe de visitant personalitzada, DropBoxExpressionVisitor. Retorna una col·lecció dels fitxers que compleixen els criteris de cerca com a EntityCollection.
Nota
Aquest exemple requereix l'ús d'ILMERGE per combinar el connector i els assemblatges de Dropbox abans de registrar l'assemblatge amb el Dataverse. L'ús d'ILMERGE no és oficialment compatible. Una actualització futura d'aquesta mostra eliminarà la necessitat d'utilitzar ILMERGE.
Introducció
Per crear aquest exemple, primer heu d'instal·lar els paquets NuGet Dropbox.Api i Microsoft.CrmSdk.Data a la solució. També necessitareu un compte de DropBox i passar un testimoni d'accés real quan creeu una instància de DropboxClient.
Afegiu les instruccions using següents al vostre codi:
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Dropbox.Api;
using Dropbox.Api.Files;
Codi d'exemple
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;
}
}
Vegeu també
Introducció a les taules virtuals
Consideracions sobre l'API de les taules virtuals
Proveïdors de dades de taules virtuals personalitzades