Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Zeigt
Dieses Beispiel zeigt eine minimale Implementierung für ein generisches Microsoft Dataverse Virtual Table Data Provider-Plug-In, DropboxRetrieveMultiplePlugin, für den Dropbox-Dateifreigabedienst. Es wird der Bare Metal-Ansatz verwendet, wobei der QueryExpression durch das Erstellen einer benutzerdefinierten Besucherklasse DropBoxExpressionVisitor übersetzt wird. Es gibt eine Auflistung der Dateien zurück, die die Suchkriterien als eine EntityCollectionerfüllen.
Hinweis
Dieses Beispiel erfordert die Verwendung von ILMERGE, um die Plug-In- und Dropbox-Assemblys zu kombinieren, bevor die Assembly mit Dataverse registriert wird. Die Verwendung von ILMERGE wird nicht offiziell unterstützt. Ein zukünftiges Update für dieses Beispiel wird die Notwendigkeit der Verwendung von ILMERGE entfernen.
Erste Schritte
Um dieses Beispiel zu erstellen, müssen Sie zuerst die Pakete Dropbox.Api und Microsoft.CrmSdk.Data NuGet in Ihrer Lösung installieren. Außerdem benötigen Sie ein DropBox-Konto und übergeben ein echtes Zugriffstoken beim Erstellen einer Instanz des DropboxClient.
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
Erste Schritte mit virtuellen Tabellen
API-Überlegungen zu virtuellen Tabellen
Benutzerdefinierte anbieter für virtuelle Tabellendaten