Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Znázorňuje
Tato ukázka ukazuje minimální implementaci obecného plug-inu poskytovatele dat pro virtuální tabulku Microsoft Dataverse, DropboxRetrieveMultiplePlugin, pro službu sdílení souborů Dropbox. Používá přístup „bare metal“, který překládá QueryExpression prostřednictvím vytvoření vlastní třídy návštěvníka nazvané DropBoxExpressionVisitor. Vrátí kolekci souborů, které splňují kritéria hledání jako .EntityCollection
Poznámka:
Tato ukázka vyžaduje použití ILMERGE ke kombinování sestavení modulů plug-in a Dropbox před registrací sestavení v Dataverse. Použití ILMERGE se oficiálně nepodporuje. Budoucí aktualizace této ukázky odebere potřebu použít ILMERGE.
Začínáme
Abyste mohli tuto ukázku sestavit, musíte nejprve do svého řešení nainstalovat balíčky NuGet Dropbox.Api a Microsoft.CrmSdk.Data . Při vytváření instance DropboxClient budete také potřebovat účet DropBox a předat skutečný přístupový token.
Do kódu přidejte následující příkazy using:
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Dropbox.Api;
using Dropbox.Api.Files;
Ukázkový kód
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;
}
}
Viz také
Začínáme s virtuálními tabulkami
Aspekty rozhraní API virtuálních tabulek
Vlastní poskytovatelé dat pro virtuální tabulky