Ich löste das Problem.
- erstellen Plugin für Vorvalidierung mit
Execute()
Verfahren und einige Verfahren zur Daten Parsing.
- In der Entitätsansicht fügen Sie ein Feld mit
GUID
hinzu.
- Wenn das Plugin guid in Ihrer Ansicht gefunden hat, wird es die fetchxml Abfrage für Ihre Entität und die zweite Abfrageeinheit erhalten sonst wird die Standardansicht angezeigt.
- Pars Daten für was Sie für den Benutzer anzeigen möchten.
- Registrieren Sie Ihr Plugin.
- Gewinn.
PS Ich werde Quellen in ein oder zwei Tagen nach Refactoring und Genehmigung vom Kunden hinzufügen.
Edit:
Zunächst einmal - y muss neu erstellen GUID
und String-Feld hinzufügen, mit diesem guid sehen zu sehen (es ist besser, es von dem Benutzer zu verbergen). erstellen Plugin mit RetrieveMultiple
Aktion und Post
Validierung (in Pre
Aktion Sie Ihre Änderungen verlieren können)
in der Plugin-: main-Methode RetrieveMultiple
, den Kontext und Service von Wich erhalten Sie Abfrage nehmen, dann müssen Sie FetchXml und Scheck erhalten wenn es deine GUID
gibt.
string fetchXml = string.Empty;
var query = context.InputParameters["Query"] as QueryExpression;
var fetchQuery = context.InputParameters["Query"] as FetchExpression;
if (query == null)
{
if (fetchQuery == null)
{
return;
}
fetchXml = fetchQuery.Query;
}
// Convert query to a fetch expression for processing and apply filter
else
{
fetchXml =
((QueryExpressionToFetchXmlResponse)
service.Execute(new QueryExpressionToFetchXmlRequest {Query = query})).FetchXml;
}
if (fetchXml.Contains(OpportunityFilterGuid))
{
ApplyFilter(context, service, query);
}
}
In Ihrem ApllyFilter
Methode, die Sie brauchen:
Get Abfrage von Benutzer (er einige neue fileds hinzufügen).
Löschen Sie Ihr Feld mit GUID
.
Abfrage ausführen.
Löschen Sie fileds, die mit Ihrer OR
Anweisung in Konflikt stehen können.
Fügen Sie link-entity
zur Abfrage hinzu.
Abfrage ausführen.
Fügen Sie empfangene Entitäten von der zweiten Abfrage zuerst hinzu.
Mit LINQ wählen Sie Objekte aus, die nicht wiederholt werden.
collectionOne.Entities.GroupBy(oppId => oppId.Id).Select(opp => opp.First())
Senden Sie diese Daten an den Client.
Versuchen Sie, nur eine Ansicht zu erstellen, oder versuchen Sie, über das SDK auf die Daten zuzugreifen? – Daryl
spielt keine Rolle. Ich muss die Daten nur dem Benutzer in Sicht anzeigen. Ich war an der Möglichkeit interessiert, die das System für den Entwickler darstellt. Und fand heraus, dass der einzige Weg, um es zu tun - schreiben Sie ein Plugin. –