Aller au contenu principal

'instance of'-Prüfung in Templates

Commentaires

7 commentaires

  • Zendesk API User
    Author: der_sk - 4/15/2016 14:26

    Hallo Christoph,

    es geht noch einfacher. Schau dir mal die Methode "getElementType()" vom IDProvider an, die gibt dir Strings zurück (z.B. "Page", "Section", "SectionReference", etc.). Das dürfte nicht nur einfacher sondern auch schneller sein.

    Viele Grüße

    Sascha

    0
  • Zendesk API User
    Author: ckohl - 4/21/2016 9:18

    Hallo Sascha,

    danke. Das hat mir schonmal sehr geholfen. Hast du zusätzlich vielleicht auch noch eine Idee, wie ich nur mithilfe der Access-API 'TargetReferenceImpl'-  und 'GraphicalMediumImpl'- Objekte auseinanderhalten kann?

    Viele Grüße

    Christoph

    0
  • Zendesk API User
    Author: tenter - 5/13/2016 9:35

    Hallo Christoph,

    ich vermute, dass du an einigen Stellen noch veraltete Formaule verwendest und dort statt Referenz noch mit Picture gearbeitet wird. Kannst du die Eingabekomponenten nicht aktualisieren? Das müsste in diesem Falle problemlos funktionieren und dann hättest du das Problem nicht mehr.

    Wenn das für dich wirklich keine Option ist, habe ich nur einen relativ unschönen Weg, wie du das mit API-only lösen kannst: Du könntest dir den Klassennamen holen und mit startsWith() schauen, ob du das den beiden Klassen zugehörige Interface hast oder nicht. Die beiden Interfaces wären TargetReference und GraphicalMedium. Also sowas wie startsWith("TargetReference").

    Grüße,

    Hannes

    0
  • Zendesk API User
    Author: tenter - 5/13/2016 10:13

    Hallo Christoph,

    ich muss mich nochmal korrigieren - die von mir genannte Lösung mit dem startsWith birgt natürlich das Risiko, dass die Implementiernde Klasse das Namensschema ändert - in diesem Falle hättest du nicht viel gewonnen.

    Eine vielleicht bessere Alternative wäre ein Renderskript zu verwenden. Suche hierzu in der Hilfe nach "CMS_RENDER". Im Skript könntest du dann instanceof verwenden und könntest damit die Ausgabe steuern. Gib uns mal Bescheid, ob dir das im vorliegenden Fall weiterhilft.

    Grüße,

    Hannes

    0
  • Zendesk API User
    Author: MichaelaReydt - 5/24/2016 10:24

    Hallo Christoph,

    benötigst du noch weitere Hilfe oder dir die bisherigen Antworten bereits geholfen? In diesem Fall wäre es super, wenn du die "richtige Antwort" entsprechend markierst.

    Solltest du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es toll, wenn du diese hier bereitstellst.

    Viele Grüße

    Michaela

    0
  • Zendesk API User
    Author: hbarthel - 3/10/2019 9:35

    Hallo,

    mich haben die zig Klassennamenvergleiche (die ja die konkrete Impl. abfragen und damit weit weg von dem sind, was e-Spirit als API bezeichnet), die von unseren Vorgängern im Projekt hinterlassen wurden, auch genervt. Noch schlimmer gehts auch: myFor2.getClass().toString().trim().contains("Dataset")

    Meine Lösung ist ein FS-Skript "sc_instanceof":

    return java.lang.Class.forName(className).isInstance(object);

    Verwendung:

    $CMS_SET(set_isGenerationContext)$$CMS_RENDER(script:"sc_instanceof", object:#global, className:"de.espirit.firstspirit.access.GenerationContext")$$CMS_END_SET$

    $CMS_SET(set_isGenerationContext, "true".equals(set_isGenerationContext.toString().trim()))$

    $CMS_IF(set_isGenerationContext)$

        Wir sind in einem GenerationContext.

    $CMS_END_IF$

    Vielleicht hilft's wem.

    So long, Heiko

    0
  • Zendesk API User
    Author: mbergmann - 3/11/2019 19:09

    Hallo,

    eine instanceof-Prüfung kann man seit einiger Zeit auch sehr viel einfacher machen, und zwar mit isCase:

    $CMS_IF(class("de.espirit.firstspirit.access.store.pagestore.Page").isCase(someVar))$

    ... entspricht einem

    if(someVar instanceof Page)

    Siehe auch hier: Online Dokumentation FirstSpirit - class(...)

    Viele Grüße

    Michael

    0

Vous devez vous connecter pour laisser un commentaire.