werlitz
I'm new here

Datensätze in einer Datenbank per GID identifizieren

Jump to solution

Datensätze erhalten neben der FS_ID auch eine eindeutige GID. Diese kann man z.B. bei über die Datensatzeigenschaften anzeigen (siehe Screenshot). Diese GID findet sich auch im Content Transport bzw. ExtSync wieder z.B.:

<DATA>

    <TABLE name="Gallery_Media" rows="1">

        <ROW index="1">

            <COLUMN name="FS_GID">e289f6fb-631e-445d-960a-d4ff5988d3dd</COLUMN>

            <COLUMN name="fs_id">1792</COLUMN>

...

Schaut man sich aber den konkreten Datensatz in der Datenbank (im Beispiel Oracle) an, so ist diese GID nicht dem Datensatz offensichtlich zugeordnet, da hier nicht die gleiche Repräsentation verwendet wird:

"FS_GID" (Datentyp RAW): DDD38859FFD40A965D441E63FBF689E2

"FS_ID" (Datentyp NUMBER): 1792

Gibt es eine Möglichkeit in FS bzw. über ein DB-Query eine "lesbare" Zuordnung zu ermöglichen?

0 Kudos
1 Solution

Accepted Solutions
Peter_Jodeleit
Crownpeak employee

Mit dieser Funktion können UUIDS in das Speicherformat konvertiert werden:

   public static String convert(final UUID uuid) {

      final long l = uuid.getLeastSignificantBits();

      final long m = uuid.getMostSignificantBits();

      return hex(l, 0) + hex(l, 1) + hex(l, 2) + hex(l, 3) + hex(l, 4) + hex(l, 5) + hex(l, 6) + hex(l, 7) +

         hex(m, 0) + hex(m, 1) + hex(m, 2) + hex(m, 3) + hex(m, 4) + hex(m, 5) + hex(m, 6) + hex(m, 7);

   }

  private static String hex(final long num, final int byteNum) {

      return Long.toHexString((num >> (byteNum * 8))& 0xff).toUpperCase(Locale.US);

   }

Peter

View solution in original post

0 Kudos
3 Replies
Peter_Jodeleit
Crownpeak employee

Mit dieser Funktion können UUIDS in das Speicherformat konvertiert werden:

   public static String convert(final UUID uuid) {

      final long l = uuid.getLeastSignificantBits();

      final long m = uuid.getMostSignificantBits();

      return hex(l, 0) + hex(l, 1) + hex(l, 2) + hex(l, 3) + hex(l, 4) + hex(l, 5) + hex(l, 6) + hex(l, 7) +

         hex(m, 0) + hex(m, 1) + hex(m, 2) + hex(m, 3) + hex(m, 4) + hex(m, 5) + hex(m, 6) + hex(m, 7);

   }

  private static String hex(final long num, final int byteNum) {

      return Long.toHexString((num >> (byteNum * 8))& 0xff).toUpperCase(Locale.US);

   }

Peter
0 Kudos

Hallo Mathias,

benötigst du noch weitere Hilfe oder konnte dir Peters Antwort bereits weiterhelfen? In diesem Fall wäre es toll, wenn du seine "richtige Antwort" entsprechend markierst.

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

Viele Grüße

Michaela

0 Kudos

Verbesserungsvorschlag: Es wäre äußerst hilfreich wenn bei den Datensatzeigenschaften im SiteArchitect auch diese "Speicherformat"-Repräsentation angezeigt werden würde. Dann könnte man einen Datensatz auch ohne die FS_ID eindeutig identifizieren.

Im Allgemeinen macht einem diese unterschiedliche Repräsentation es nicht gerade einfach die Datensätze in der DB und im CMS korrekt zuzuordnen.

Gibt es auch einen Code-Schnipsel für die umgekehrte Transformation (Java / SQL)?

0 Kudos