Ejemplo: Complemento de proveedor de datos de tabla virtual genérico
Demostraciones
Este ejemplo muestra una implementación mínima para un complemento de proveedor de datos de tabla virtual genérico de aplicaciones Microsoft Dataverse for Customer Engagement, DropboxRetrieveMultiplePlugin, para el servicio de uso compartido de archivos Dropbox. Utiliza el método "básico" de traducir la expresión QueryExpression creando la clase visitante personalizada DropBoxExpressionVisitor. Devuelve una colección de archivos que cumplen con los criterios de búsqueda como EntityCollection.
Nota
Esta muestra requiere el uso de ILMERGE para combinar el complemento y los ensamblajes de Dropbox antes de registrar el ensamblaje en Dataverse. El uso de ILMERGE no es compatible oficialmente. Una actualización futura de esta muestra eliminará la necesidad de utilizar ILMERGE.
Introducción
Para crear este ejemplo, primero debe instalar los paquetes de NuGet Dropbox.Api y Microsoft.CrmSdk.Data en la solución. También necesitará una cuenta de Dropbox y pasará un token de acceso real al crear una instancia del DropboxClient.
Agregue las siguientes instrucciones de uso a su código:
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Dropbox.Api;
using Dropbox.Api.Files;
Código de ejemplo
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;
}
}
Consultar también
Introducción a las tablas virtuales
Consideraciones de API de tablas virtuales
Proveedores de datos de tablas virtuales personalizadas
Nota
¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)
La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).