philippr
Returning Spectator

MetaDaten setzen nach Package Rollout

Jump to solution

Im Zuge einer Projektlösung wurde ein Workflow entwickelt der Folgendes tut:

Nach einem Package Rollout (Modul Corporate Content) werden durch einen Workflow die Metadaten von den Objekten des Quellprojektes an die entsprechenden Objekte des Zielprojektes kopiert. Dabei ist nun aufgefallen, dass dies nicht sicher für Absätze funktioniert.

Der Workflow ruft durch ein Script eine Java Methode auf, die Folgendes leistet:

Ziel: Nach dem Workflow sind die Metadaten der ausgerollten Objekte (Page und Section) identisch mit den Metadaten die auf den Quellobjekten definiert wurden.

Vorgehen nach dem erfolgreichen Rollout einer neuen Paketversion:

  1. Im Zielprojekt wird der PageStoreRoot rekursiv durchlaufen, dabei werden die Knoten ausfindig gemacht, die ((Page oder Section) und PackageItem sind) sowie ob das Paket des PackageItem dem Paket entspricht, dass gerade ausgerollt wurde
  2. Die Metadaten vom entsprechenden Quellobjekt werden ermittelt. Hierbei wird unterschieden ob die Metadaten auf einer Page oder einer Section gesetzt werden müssen, für eine Section gestaltet es sich allerdings schwierig, da diese nicht eindeutig im Quellprojekt gefunden werden kann: Der aktuelle Ansatz ist Folgender:

...

// node entspricht einem Knoten, der in dem passenden Inhaltspaket steckt

else if (node instanceof Section) {
            final Page masterPage = (Page) storeElementAgent.loadStoreElement(node.getParent().getParent().getUid(), node.getParent().getParent().getUidType(), true);
            final String nodeName = node.getName();
            final Body body = (Body) node.getParent();
            for (final Section sec : masterPage.getBodyByName(body.getName()).getChildren(Section.class)) {
                if (nodeName.equals(sec.getName())) {
                    masterNode = sec;
                }
            }

        }
...

Dies verursacht bei Objekten immer dann einen Fehler, wenn die Section im Zielprojekt nicht mehr an der Page verortet ist, an der sie ursprünglich mal gesessen hat. (Weil diese im Zielprojekt z.B. auf eine andere Page verschoben wurde).

Diesen Fehler wollten wir soeben beheben, dabei ist aufgefallen, dass die Section des Zielprojektes ja gar nicht eindeutig im Quellprojekt ausfindig gemacht werden kann. Eine UID gibt es für die Section nicht. Allerdings ist das Modul Corporate Content ja irgendwie in der Lage die Section im Zielprojekt trozt, dass diese verschoben wurde zu aktualisieren. Die Frage ist, wie kann eine eindeutige Zuordnung (Section im Zielprojekt -> Section im Quellprojekt) gewährleistet werden? Bzw. soweit mir bekannt, arbeitet das Modul Corporate Content über ein ID Mapping? Kann auf dieses ID Mapping zugegriffen werden, um sicher an die korrekte Section des Quellprojektes zu gelangen?

FirstSpirit 5.1.4xx

Danke für eure Unterstützung,

Philipp

1 Solution

Accepted Solutions
marza
I'm new here

Hallo Philipp,

seit FS 5.1.504 (und ab FS 5.2.103) gibt es ein neues API mit der man eine eindeutige ID am Quellobjekt ermitteln kann:

de.espirit.firstspirit.access.packagepool.Subscription:

- IdTranslator Subscription.getElementIdTranslator()

- IdTranslator Subscription.getTemplateIdTranslator()

(und mit dem IdTranslator kann man dann:

- Long IdTranslator.translateIdToPublisher(Long subscriberId) 

- Long IdTranslatortranslateIdToSubscriber(Long publisherId)

)

Leider ist das noch nicht im offiziellen API-Doc dokumentiert, da wird z.Z. noch dran gearbeitet.

Die interne Ticket-Nummer lautet 176746 falls Du Dich bei unserem TechnicalSupport über den Stand der Dinge informieren möchtest.

Viele Grüße

Marian Zaplatynski

View solution in original post

1 Reply
marza
I'm new here

Hallo Philipp,

seit FS 5.1.504 (und ab FS 5.2.103) gibt es ein neues API mit der man eine eindeutige ID am Quellobjekt ermitteln kann:

de.espirit.firstspirit.access.packagepool.Subscription:

- IdTranslator Subscription.getElementIdTranslator()

- IdTranslator Subscription.getTemplateIdTranslator()

(und mit dem IdTranslator kann man dann:

- Long IdTranslator.translateIdToPublisher(Long subscriberId) 

- Long IdTranslatortranslateIdToSubscriber(Long publisherId)

)

Leider ist das noch nicht im offiziellen API-Doc dokumentiert, da wird z.Z. noch dran gearbeitet.

Die interne Ticket-Nummer lautet 176746 falls Du Dich bei unserem TechnicalSupport über den Stand der Dinge informieren möchtest.

Viele Grüße

Marian Zaplatynski