Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Demonstrações
Este exemplo mostra uma implementação mínima para um plug-in genérico do provedor de dados de tabela virtual Microsoft Dataverse, DropboxRetrieveMultiplePlugin, para o serviço de compartilhamento de arquivos do Dropbox . Utiliza a abordagem "bare metal", traduzindo QueryExpression através da criação da classe de visitante personalizada, DropBoxExpressionVisitor. Ele retorna uma coleção de arquivos que satisfazem os critérios de pesquisa como um EntityCollectionarquivo .
Observação
Esta amostra requer o uso de ILMERGE para combinar o plug-in e as assemblagens do Dropbox antes de registar a assemblagem com o Dataverse. O uso de ILMERGE não é oficialmente suportado. Uma atualização futura para este exemplo eliminará a necessidade de usar ILMERGE.
Como Começar
Para criar este exemplo, você deve primeiro instalar os pacotes Dropbox.Api e Microsoft.CrmSdk.Data NuGet em sua solução. Você também precisará de uma conta do Dropbox e passará um token de acesso real ao criar uma instância do DropboxClient.
Adicione as seguintes declarações 'using' ao seu código.
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Dropbox.Api;
using Dropbox.Api.Files;
Código de exemplo
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;
}
}
Consulte também
Introdução às tabelas virtuais
Considerações da API de tabelas virtuais
Provedores de dados de tabela virtual personalizados