TechSupport
Crownpeak employee
Crownpeak employee

UID lässt sich nicht vergeben

Manchmal hat man die Anforderung, dass ein neuer Knoten einen bestimmten Referenznamen (UID) bekommen muss, z.B. um vorhandene Verweise auf diese wieder gültig zu machen oder weil ein externes Tool diesen erwartet.

Wenn beim Anlegen des entsprechenden Knotens die UID von FirstSpirit dann mit einer entsprechenden Erweiterung versehen wird (z.B. wird anstelle der UID home ein Knoten mit der UID home_1 angelegt), so ist dies natürlich sehr ärgerlich.

Ursache des Problems ist, dass eine UID in dem entsprechenden Namensraum eindeutig sein muss und FirstSpirit beim Anlegen festgestellt hat, dass diese UID als “noch verwendet” markiert ist. Wenn Sie nach der entsprechenden UID suchen (im SiteArchitect über das Menü Suche/Suche nach Referenznamen) und Sie einen entsprechenden Knoten im selben Namensraum finden, haben Sie kein Problem. Nennen Sie einen der beiden Knoten einfach entsprechend um.

Wenn nicht, so kann dies in den meisten Fällen darauf zurückgeführt werden, dass der entsprechende Knoten zwar im aktuellen Stand, nicht aber im Freigabestand gelöscht wurde. Eine Freigabe der entsprechenden Löschoperation würde das Problem also lösen.

Diese Löschoperation wird durch die Freigabe des Ordners, in dem der Knoten gelöscht wurde, freigegeben. Wenn dieser Ordner nicht bekannt ist, ist dies aber ein Problem. Hier hilft das unten aufgeführte Skript weiter, mit dem man prüfen kann, ob der entsprechende Knoten im Freigabestand referenziert wird und wenn ja den Ordner, der freigegeben werden muss, zurückliefert.

Es besteht natürlich auch die Möglichkeit, dass die UID fälschlicherweise als benutzt markiert wird. In diesem Fall kontaktieren Sie bitte unseren technischen Support, damit dieser das Problem genauer analysieren und lösen kann.

Zum besseren Verständnis hier eine Liste der Namensräume, in denen UIDs vergeben werden können:

Namensräume, in denen ein Freigabestand existiert (es also Sinn mach, das Skript zu nutzen)

GLOBALSTORE → Seiten in den globalen Inhalten

MEDIASTORE_FOLDER → Ordner in der Medien.Verwaltung

MEDIASTORE_LEAF → Medien in der Medien-Verwaltung

PAGESTORE → Ordner und Seiten in der Inhalte-Verwaltung

SITESTORE_FOLDER → Ordner in der Struktur-Verwaltung

SITESTORE_LEAF → Seitenreferenzen in der Struktur-Verwaltung

Und ja, PAGESTORE ist ein Sonderfall, da hier sowohl die Seiten als auch Ordner der Inhalte-Verwaltung in einem Namensraum genutzt werden. Somit kann dort als ein Ordner nicht dieselbe UID bekommen wie eine Seite und umgekehrt.

Namensräume, in denen kein Freigabestand existiert

CONTENTSTORE → Datenquellen in der Datenquellen-Verwaltung

CONTENTSTORE_DATA

TEMPLATESTORE → Seiten-, Absatzvorlagen und Datenbankschemata

TEMPLATESTORE_FORMATTEMPLATE  → Formatvorlagen

TEMPLATESTORE_LINKTEMPLATE  → Verweisvorlagen

TEMPLATESTORE_SCHEMA → Tabellenvorlagen

TEMPLATESTORE_STYLETEMPLATE → Stilvorlagen

TEMPLATESTORE_TABLEFORMATTEMPLATE → Tabellenformatvorlagen

Skript zum Identifizieren von gelöschten Knoten

Hier ein Skript, mit welchem geprüft werden kann, ob eine UID im Freigabestand noch verwendet wird und wenn ja, welcher Knoten freigegeben werden müsste, um die entsprechende UID wieder nutzen zu können. Wenn es die UID auch im aktuellen Stand gibt, so wird dieser Knoten zurückgegeben.

Das Skript besteht aus zwei Teilen. Einmal die Skript GUI, mit der die Eingabekomponenten erzeugt werden, über die die Daten zur Suche eingegeben werden können und dann noch der Skript Quelltext, welcher die entsprechende Funktionalität enthält

Skript GOM:

<CMS_MODULE>

<CMS_INPUT_TEXT name="sc_uid" allowEmpty="no">

   <LANGINFOS>

     <LANGINFO lang="*" label="Name of the blocked UID"/>

     <LANGINFO lang="DE" label="Name der blockierten UID"/>

   </LANGINFOS>

</CMS_INPUT_TEXT>

<CMS_INPUT_COMBOBOX name="sc_type" allowEmpty="no">

   <ENTRIES>

     <ENTRY value="PAGESTORE">

       <LANGINFOS>

         <LANGINFO lang="*" label="Folder or page in the pagestore"/>

         <LANGINFO lang="*" label="Ordner oder Seite in der Inhalte-Verwaltung"/>

       </LANGINFOS>

     </ENTRY>

     <ENTRY value="SITESTORE_FOLDER">

       <LANGINFOS>

         <LANGINFO lang="*" label="Folder in the sitestore"/>

         <LANGINFO lang="*" label="Ordner in der Struktur-Verwaltung"/>

       </LANGINFOS>

     </ENTRY>

     <ENTRY value="SITESTORE_LEAF">

       <LANGINFOS>

         <LANGINFO lang="*" label="Pagereference in the mediastore"/>

         <LANGINFO lang="*" label="Seitenrefrenz in der Struktur-Verwaltung"/>

       </LANGINFOS>

     </ENTRY>

     <ENTRY value="MEDIASTORE_FOLDER">

       <LANGINFOS>

         <LANGINFO lang="*" label="Folder in the mediastore"/>

         <LANGINFO lang="*" label="Ordner in der Medien-Verwaltung"/>

       </LANGINFOS>

     </ENTRY>

     <ENTRY value="MEDIASTORE_LEAF">

       <LANGINFOS>

         <LANGINFO lang="*" label="Media in the mediastore"/>

         <LANGINFO lang="*" label="Medium in der Medien-Verwaltung"/>

       </LANGINFOS>

     </ENTRY>

     <ENTRY value="GLOBALSTORE">

       <LANGINFOS>

         <LANGINFO lang="*" label="Folder or page in the global content"/>

         <LANGINFO lang="*" label="Ordner oder Seite in den globalen Inhalten"/>

       </LANGINFOS>

     </ENTRY>

   </ENTRIES>

   <LANGINFOS>

     <LANGINFO lang="*" label="Type of the blocked UID"/>

     <LANGINFO lang="DE" label="Typ der blockierten UID"/>

   </LANGINFOS>

</CMS_INPUT_COMBOBOX>

</CMS_MODULE>

Skript Quelltext

import de.espirit.firstspirit.agency.StoreAgent;

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.IDProvider;

scriptFormData=context.showForm();

if (scriptFormData != null) {

  uid = scriptFormData.get(null,"sc_uid").get();

  typeoption = scriptFormData.get(null,"sc_type").get();

}

if (scriptFormData != null && typeoption != null && uid != null) {

  type = typeoption.toString();

  switch (type) {

    case "GLOBALSTORE":

      storetype = Store.Type.GLOBALSTORE;

      uidtype = IDProvider.UidType.GLOBALSTORE;

      break;

    case "MEDIASTORE_FOLDER":

      storetype = Store.Type.MEDIASTORE;

      uidtype = IDProvider.UidType.MEDIASTORE_FOLDER;

      break;

    case "MEDIASTORE_LEAF":

      storetype = Store.Type.MEDIASTORE;

      uidtype = IDProvider.UidType.MEDIASTORE_LEAF;

      break;

    case "PAGESTORE":

      storetype = Store.Type.PAGESTORE;

      uidtype = IDProvider.UidType.PAGESTORE;

      break;

    case "SITESTORE_FOLDER":

      storetype = Store.Type.SITESTORE;

      uidtype = IDProvider.UidType.SITESTORE_FOLDER;

      break;

    case "SITESTORE_LEAF":

      storetype = Store.Type.SITESTORE;

      uidtype = IDProvider.UidType.SITESTORE_LEAF;

      break;

    default:

      storetype = null;

      break;

  }

  storeAgent  = context.requestSpecialist(StoreAgent.TYPE);

  currentSiteStore = storeAgent.getStore(storetype);

  releaseSiteStore = storeAgent.getStore(storetype, true);

  searching = true;

  element = releaseSiteStore.getStoreElement(uid,uidtype);

  if (element != null) {

    do {

      if (currentSiteStore.getStoreElement(element.getId()) != null) {

        searching = false;

      } else {

        element = element.getParent();

      }

    } while (searching);

    text = "Folgendes Element muss freigegeben werden, um die UID wieder nutzen zu können:\n";

    if (element.hasUid()) text += "UID:" + element.getUid() + " / ";

      text += "ID = " + element.getId();

      JOptionPane.showMessageDialog(null,text);

  } else {

    JOptionPane.showMessageDialog(null,"Es wurde kein entsprechendes Element gefunden. \nWenn es keinen Fehler bei den Eingaben gab, scheint es hier ein Problem zu geben. \nBitte führen Sie das Skript erneut aus und prüfen Sie die Eingaben (UIDs werden normalerweise in Kleinbuchstaben angegeben).\nWenn Sie erneut diesen Dialog bekommen, so kontaktieren Sie bitte unseren technischen Support, damit dieser das Problem analysieren und lösen kann.");

  }

} else {

  JOptionPane.showMessageDialog(null,"Eingaben abgebrochen. Skript wird beendet!");

}

Labels (1)