Beispiel: Generisches virtuelles Tabellendatenanbieter-Plug-In
Demonstriert
Dieses Beispiel zeigt eine minimale Implementierung für das allgemeine virtuelle Microsoft Dataverse für Customer Engagement-Apps CDS for App-Tabellendatenanbieter-Plug-In DropboxRetrieveMultiplePlugin für den Dropbox Filesharing-Service. Es wird der "Bare Metal"-Ansatz verwendet, wobei der QueryExpression durch das Erstellen einer benutzerdefinierten Besucherklasse DropBoxExpressionVisitor übersetzt wird. Es wird eine Sammlung der Dateien zurückgegeben, die den Suchkriterien als EntityCollection entsprechen.
Hinweis
Für dieses Beispiel muss ILMERGE verwendet werden, um die Plug-In- und Dropbox-Assemblys zu kombinieren, bevor die Assembly bei Dataverse registriert wird. Die Verwendung von ILMERGE wird nicht offiziell unterstützt. Nach einem zukünftigen Update dieses Beispiels muss ILMERGE nicht mehr verwendet werden.
Erste Schritte
Um dieses Beispiel zu erstellen, müssen Sie zuerst die Dropbox.Api und das Microsoft.CrmSdk.Data NuGet Paket in Ihrer Lösung installieren. Sie benötigen auch ein DropBox-Konto und müssen einen realen Zugriffstoken übergeben, wenn Sie eine Instanz des DropboxClient erstellen.
Fügen Sie Ihrem Code die folgenden Using-Anweisung hinzu:
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Dropbox.Api;
using Dropbox.Api.Files;
Beispielcode
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;
}
}
Siehe auch
Los geht's mit virtuellen Tabellen
API-Überlegungen von virtuelle Tabellen
Anbieter von benutzerdefinierter virtueller Tabellendaten
Hinweis
Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)
Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).