Zum Hauptinhalt gehen

Zugriff auf Elementen mit hilfe von ExecutableContextMenuItem im SiteArchitekt

Kommentare

3 Kommentare

  • Zendesk API User
    Author: mbergmann - 7/17/2017 16:10

    Hallo Ahmad,

    der Vollständigkeit halber: Wichtig ist die Unterscheidung zwischen

    • ID: numerisch [Long], eindeutig pro FS-Server, praktisch für alle Objekte vorhanden
      und
    • UID: auch "Referenzname" genannt, Typ String, eindeutig nur innerhalb gewisser "Namensräume", nicht für alle Objekte vorhanden

    Was schonmal  nicht geht: Oft holt man sich ja Elemente über die UID mit dem StoreElementAgent (was in Deinem Fall nicht geht, weil z.B. Sections eben keine UID haben).

    Über den Umweg des StoreAgent wiederum jeden einzelnen Store nach dem Element mit der entsprechenden ID zu fragen, würde eine Menge Boilerplate-Code bedeuten: Jeden StoreRoot holen und dann auf jedem .getStoreElement(long id) aufrufen und schauen ob Du etwas bekommst - auch nicht schön.

    Von daher würde ich in Deinem Fall den QueryAgent nutzen, um direkt nach der ID zu fragen. Zum Anzeigen kannst Du dann letztlich die DisplayElementOperation nehmen, an die Du über den OperationAgent kommst. Hier muss im Aufruf von .perform(IDProvider) einfach nur das Objekt übergeben werden. In etwa sollte das dann so aussehen - mit dem ContextMenuContext, der in die execute(...)-Methode hereingereicht wird, hast Du ja einen SpecialistsBroker):

    long id = .... //your id

    QueryAgent queryAgent = context.requireSpecialist(QueryAgent.TYPE);

    Iterable<IDProvider> iterable = queryAgent.answer("fs.id="+id);

    Iterator<IDProvider> iterator = iterable.iterator();

    if(iterator.hasNext()){

        IDProvider idProvider = iterator.next();

        DisplayElementOperation displayElementOperation = context.requireSpecialist(OperationAgent.Type).getOperation(DisplayElementOperation.TYPE);

        displayElementOperation.perform(idProvider);

    }

    Da die ID eindeutig ist, muss man hier nicht iterieren sondern nimmt einfach das erste Ergebnis (wenn es eines gibt).

    Den Code kann man natürlich auch etwas kompakter schreiben, ich habe es zum besseren Verständnis mal schrittweise gemacht.

    Wichtig ist hier noch, dass der QueryAgent nur auf dem Current-Stand arbeitet - aber da Du das ja als Aktion im SA nutzen willst, sollte es passen.

    Viele Grüße

    Michael

    0
  • Zendesk API User
    Author: zeus83 - 7/17/2017 16:25

    Hallo Michael,

    vielen Dank für deine schnelle & ausführliche Antwort.

    Ich kann es nicht glauben, dass es funktioniert :smileyhappy:

    Ich habe mal mit dem UIViewAgent versucht, aber habe leider keinen Erfolg. Dein Code funktioniert sauber.

    Nochmal ein fettes Dankeschön.

    Viele Grüße,

    Ahmad

    0
  • Zendesk API User
    Author: mbergmann - 7/17/2017 16:31

    Hallo Ahmad,

    freut mich, dass es klappt :-)

    Der UIViewAgent ist übrigens nicht Teil der öffentlichen API - von sowas sollte man unbedingt die Finger lassen. Wenn irgendwas nicht im ApiDoc steht, hat das was zu bedeuten ;-)

    Viele Grüße

    Michael

    0

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.