Notă
Accesul la această pagină necesită autorizare. Puteți încerca să vă conectați sau să modificați directoarele.
Accesul la această pagină necesită autorizare. Puteți încerca să modificați directoarele.
Demonstrează
Acest eșantion arată o implementare minimă pentru un plug-in generic Microsoft Dataverse pentru furnizorul de date de tabel virtual, DropboxRetrieveMultiplePlugin, pentru serviciul de partajare a fișierelor Dropbox . Folosește abordarea "bare metal", traducând QueryExpression prin crearea clasei de vizitatori particularizați, DropBoxExpressionVisitor. Returnează o colecție de fișiere care îndeplinesc criteriile de căutare ca fișier EntityCollection.
Notă
Acest exemplu necesită utilizarea ILMERGE pentru a combina ansamblurile plug-in și Dropbox înainte de a înregistra ansamblul cu Dataverse. Utilizarea ILMERGE nu este acceptată oficial. O actualizare viitoare a acestui eșantion va elimina necesitatea de a utiliza ILMERGE.
Introducere
Pentru a construi acest eșantion, trebuie mai întâi să instalați pachetele NuGet Dropbox.Api și Microsoft.CrmSdk.Data în soluția dvs. De asemenea, veți avea nevoie de un cont DropBox și veți transmite un token de acces real atunci când creați o instanță a DropboxClient.
Adăugați următoarele instrucțiuni using la codul dvs.:
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Dropbox.Api;
using Dropbox.Api.Files;
Exemplu de cod
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;
}
}
Vezi și
Începeți cu mesele virtuale
Considerații API ale tabelelor virtuale
Furnizori de date de tabele virtuale personalizate