Share via


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).