2013-08-01 4 views
8

Gibt es eine Möglichkeit, diese Abfrage zu erstellen?Erweiterte Suche - verknüpfte zugehörig mit OR

enter image description here

Ich muss die Daten von Adresse und Kontakt Adresse, in der Regel kann ich sie nur durch Combine OR kombinieren, aber nicht in diesem Fall.

Ich denke, dass ich neue Plugin mit PreExecute() Methode schreiben muss, meine Abfrage erhalten, Daten analysieren und dann manuell die gleiche Adresse bekommen ODER gibt es andere Wege?

+0

Versuchen Sie, nur eine Ansicht zu erstellen, oder versuchen Sie, über das SDK auf die Daten zuzugreifen? – Daryl

+0

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. –

Antwort

2

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:

  1. Get Abfrage von Benutzer (er einige neue fileds hinzufügen).

  2. Löschen Sie Ihr Feld mit GUID.

  3. Abfrage ausführen.

  4. Löschen Sie fileds, die mit Ihrer OR Anweisung in Konflikt stehen können.

  5. Fügen Sie link-entity zur Abfrage hinzu.

  6. Abfrage ausführen.

  7. Fügen Sie empfangene Entitäten von der zweiten Abfrage zuerst hinzu.

  8. Mit LINQ wählen Sie Objekte aus, die nicht wiederholt werden.

    collectionOne.Entities.GroupBy(oppId => oppId.Id).Select(opp => opp.First()) 
    
  9. Senden Sie diese Daten an den Client.

2

Ich bin mir keiner Möglichkeit bewusst, das Obige zu tun.

Anstatt ein Plugin zu schreiben, würde ich jedoch einen Bericht erstellen.

Der einfachste Weg, den ich mir vorstellen kann, ist, Ihre fetchXML ohne Filter so zu tun.

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true"> 
    <entity name="account"> 
    <attribute name="name" /> 
    <attribute name="primarycontactid" /> 
    <attribute name="telephone1" /> 
    <attribute name="accountid" /> 
    <attribute name="address1_city" /> 
    <order attribute="name" descending="false" /> 
    <link-entity name="contact" from="parentcustomerid" to="accountid" alias="ac"> 
     <attribute name="address1_city" /> 
    </link-entity> 
    </entity> 
</fetch> 

Dann Toggle visibilty der Zeilen in Ihrem Bericht

=Fields!address1_city.Value="Sydney" Or Fields!ac_address1_city.Value="Sydney" 

Offensichtlich verwenden Sie Sydney mit einem Parameter ersetzen könnte

+0

Ich muss das für eine der Entity-Ansichten machen. Also, wie ich denke, Sie geben eine gute Idee, aber nicht für mich. Ja? –

+0

Korrigieren Sie das oben genannte wird Ihnen mit Entitätsansichten nicht helfen. Es tut uns leid. – Campey

0

Vereinfacht gesagt, gibt es keine Möglichkeit zu tun, was Sie durch die erweiterten fragen finden.

Die Beispielabfrage, die Sie aufstellen, zeigt Ihnen nur Konten an, in denen die verbundenen Kontakte die Adresse zusammenbringen (sowie offenbar das Konto, das die Adresse zusammenbringt). Sobald Sie eine andere Entität einer erweiterten Suche zugeordnet haben, werden nur Eltern mit den zugehörigen Datensätzen angezeigt. Es gibt keine Möglichkeit, eine äußere Verknüpfung zu erstellen.

Ihre einzigen Optionen sind wirklich, etwas in Silverlight oder HTML zu erstellen und es als Web-Ressource hinzuzufügen - einmal in diesem Code können Sie so ziemlich alles anzeigen, was Sie wollen. Wie andere vorgeschlagen haben, ist dies in einem Bericht möglich.

+0

Nichts ist unmöglich in der Programmierung. Es gibt immer Workaround. –