kannengi
Elite Observer

Verhalten von ReferenceEntry.getReferencedObject()

Jump to solution

Hallo Community,

ich habe ein Workflow-Skript zum Löschen eines Datensatzes. Der Datensatz soll nur dann gelöscht werden, wenn keine Referenzen mehr auf ihn existieren.

Falls Referenzen existieren, sollen diese angezeigt werden, um dem Redakteur die Möglichkeit zu geben, diese zu löschen und dann das Skript nochmal auszuführen.

Das Skript benutzt die Methode ReferenceEntry.getReferencedObject() und unterscheidet dann die Fälle, wenn eine Entity zurückgeliefert wird oder ein IDProvider.

Im Fall des IDProviders kann ich anhand der Methode getId() die ID ausgeben, mit der der Redakteur das entsprechende Inhaltselement auch finden kann.

Im Fall der Entity liegt nach meinem Verständnis eine Referenz von einem (anderen) Datensatz vor. Mit getValue("fs_id") kann ich die ID erhalten.

Meine Frage wäre jetzt, wie ich vom Entity Object auf das Schema komme (um einen informativen Dialog schreiben zu können der Art "Der Datensatz in Tabelle x im Schema y enthält noch eine Referenz auf..".

Hier die relevanten Teile des Sktipts:

// current Session
contentStore = context.getProject().getUserService().getStore(Store.Type.CONTENTSTORE,false);
table = contentStore.getContent2ByName(storeElement.getUid());

// get current row
currentRow = context.getWorkflowable().getEntity();
currentRowId = currentRow.getValue("fs_id");

referenceEntries = table.getDataset(currentRow).getIncomingReferences();
if (referenceEntries != null && referenceEntries.length > 0) {
     for (int i = 0; i < referenceEntries.length; i++) {
          refElement = referenceEntries[i].getReferencedObject();
               if (refElement instanceof de.espirit.or.schema.Entity) {
                    // => referenz von dataset => get ID with refElement.getValue("fs_id") aber wie komme ich auf das schema??
               } else if (refElement instanceof de.espirit.firstspirit.access.store.IDProvider) {
                    // => referenz von Inhaltselement => get ID with refElement.getId()
               } else {
                    // kann null sein => gelöschtes Objekt ?
               }
         
     }
}

FS Version 5.1.311.65223

Danke für einen Tipp! 

Viele Grüße, Benny Kannengießer

// re-lounge

1 Solution

Accepted Solutions
pavone
I'm new here

Hallo Benny,

mir ist leider kein direkter Weg bekannt, um über die Entity an das Schema zu kommen. Soweit ich weiß musst du den Umweg über das Content2 Objekt gehen. Dieses Objekt erhält man aber leider auch nur über einen kleinen Umweg:

Entity entity = ...;

ContentStoreRoot contentStoreRoot = ...;

TypedFilter<StoreElement> content2Filter = new TypedFilter<StoreElement>(StoreElement.class) {

     public boolean accept(final StoreElement storeElement) {

          return storeElement instanceof Content2 && ((Content2) storeElement).getEntityType().getName().equals(entity.getEntityType().getName());

     }

};

Content2 content2 = contentStoreRoot.getChildren(content2Filter, true).iterator().next();

Schema schema = content2.getSchema();

Ich hoffe das hilft dir weiter.

Viele Grüße

Tim

View solution in original post

0 Kudos
2 Replies
pavone
I'm new here

Hallo Benny,

mir ist leider kein direkter Weg bekannt, um über die Entity an das Schema zu kommen. Soweit ich weiß musst du den Umweg über das Content2 Objekt gehen. Dieses Objekt erhält man aber leider auch nur über einen kleinen Umweg:

Entity entity = ...;

ContentStoreRoot contentStoreRoot = ...;

TypedFilter<StoreElement> content2Filter = new TypedFilter<StoreElement>(StoreElement.class) {

     public boolean accept(final StoreElement storeElement) {

          return storeElement instanceof Content2 && ((Content2) storeElement).getEntityType().getName().equals(entity.getEntityType().getName());

     }

};

Content2 content2 = contentStoreRoot.getChildren(content2Filter, true).iterator().next();

Schema schema = content2.getSchema();

Ich hoffe das hilft dir weiter.

Viele Grüße

Tim

0 Kudos
mbergmann
Crownpeak employee

Hallo Benny,

versuch doch mal

entity.getSession().getSchema();

Viele Grüße

Michael

0 Kudos