Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Демонстрирует
В этом примере показана минимальная реализация для адаптивного подключаемого модуля поставщика данных виртуальных таблиц Microsoft Dataverse, DropboxRetrieveMultiplePlugin, для службы обмена файлами Dropbox. Он использует подход "bare metal", переводя QueryExpression путем создания пользовательского класса посетителя DropBoxExpressionVisitor. Он возвращает коллекцию файлов, удовлетворяющих условиям поиска в качестве EntityCollection.
Замечание
В этом примере требуется использовать ILMERGE для объединения подключаемых модулей и сборок Dropbox перед регистрацией сборки в Dataverse. Использование ILMERGE официально не поддерживается. Дальнейшее обновление этого примера приведет к удалению необходимости использования ILMERGE.
Начало работы
Чтобы создать этот пример, необходимо сначала установить пакеты NuGet Dropbox.Api и Microsoft.CrmSdk.Data. Вам также потребуется учетная запись DropBox и передать реальный маркер доступа при создании экземпляра DropboxClient.
Добавьте в код следующие инструкции по использованию:
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Dropbox.Api;
using Dropbox.Api.Files;
Пример кода
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;
}
}
См. также
Начало работы с виртуальными таблицами
Рекомендации по API виртуальных таблиц
Пользовательские поставщики данных виртуальной таблицы