ErnstLustig
I'm new here

Referenznamen generieren

Gibt es eine statische Funktion oder ähnliches die mir aus einem String einen gültigen Referenznamen generiert, sprich Groß- in Kleinbuchstaben, Leerzeichen in Unterstriche, etc. umwandeln? Das ist zum Beispiel relevant, wenn ich (z.B: über ein Skript) Bilder in die Medienverwaltung lege, ich auch die Namen der einzelnen Bilder weiß, aber natürlich nicht den dazugehörigen Referenznamen. Ich habe in der API nichts finden können.

11 Replies
ErnstLustig
I'm new here

Kann mir hier niemand einen Tipp geben?

Wenn es eine solche Funktion nicht (öffentlich) verfügbar gibt, muss ich mir diese eben selbst bauen. Dazu würde ich gerne wissen, welche Zeichen genau in welche Zeichen beim Generieren des Referenznamens umgewandelt werden.

0 Kudos
broszeit
I'm new here

Hallo,

man kann sich ganz einfach die Referenznamen der angelegten Bilder holen.

Wenn die Medien mithilfe von MediaFolder.createMedia(...) angelegt werden, bekommt man sofort das entsprechende Media-Objekt zurückgeliefert und kann dann den Referenznamen mit getUid() erhalten.

Viele Grüße

Rouven

0 Kudos

Vielen Dank, schon mal ein guter Hinweis.

Leider ist es nicht genau das, was ich benötige/meinte.

Das Anlegen der Medien geschieht zu einem unbekannten Zeitpunkt vorher (z.B. durch einen anderen Benutzer). Es muss doch möglich sein, den Referenznamen anhand des Dateinamens zu bestimmen (wobei doppelte Dateinamen ausgeschlossen sind um _1 etc. zu vermeiden)?

0 Kudos

Wenn ich das richtig verstehe, soll anhand des bekannten Dateinamen eines Bildes herausgefunden werden, welcher Referenzname gebildet wurde, wobei sichergestellt ist, dass keine doppelten Dateinamen existieren?

Die Frage zielt also auf die "Codierung" für die Referenznamen ab?

Für die Erzeugung der Referenznamen existieren folgende Regeln:

* Großbuchstaben werden in Kleinbuchstaben umgewandelt

* Sonder- und Leerzeichen werden durch Unterstriche ersetzt (pro Zeichen, Klammer auf Leerzeichen Klammer zu ergibt drei aufeinanderfolgende Unterstriche)

* Kleinbuchstaben, Unterstrichen und Zahlen werden nicht ersetzt

Hallo Frau Pahl,

genau darum geht es mir. Eine solche Liste ist schon mal hilfreich. Ich hatte aber gehofft, dass ich auf eine API-Funktion zugreifen kann, sodass ich erstens die Umwandlung nicht nachprogrammieren muss, ich zweitens garantieren kann, dass die Umwandlung korrekt ist und vor allem - das ist das wichtigste - ich bei möglichen Änderungen an der Referenznamengenierung (man denke an FS3 zu FS4) ich weiterhin kompatibel bleibe. Ich gehe nämlich davon auf, dass es eine Funktion gibt, mit der FS selbst die Referenznamen generiert und die ich gerne verwenden würde. Aber offensichtlich ist diese nicht über die API zugreifbar. Schade.

0 Kudos

Das ist "nicht berechenbar". FS stellt sicher, das trotz Namens-Konflikten ein eindeutiger Name berechnet wird. Das wird über ein zwei-Phasen-Protokoll sichergestellt. D.h. es kann keine API-Methode für dieses Problem geben.

Etwas anschaulicher: Dein Importer bekommt ein Bild mit dem Namen "hurz.jpg". Wenn du es importierst, wird daraus die UID "hurz_1", weil in der Medienverwaltung bereits ein anderes Bild mit diesem Namen liegt, das nicht über deinen Importer gekommen ist.

Das wird jetzt gelöscht, damit wird die UID "hurz" wieder frei.

Wenn du jetzt dein Importer das Bild "hurz.jpg" erneut bearbeitet, wäre korrekt, wenn er die Bilddaten von "hurz_1" aktualisiert. Deine Funktion berechnet aber als Bildnamen "hurz" und denkt, das Bild wurde noch nicht importiert.

Peter

Es wäre wünschenswert, wenn es eine API Funktion geben würde, die zumindest die Konvertierung eines Strings in einen gültigen Referenznamen ermöglicht. D.h. diese Funktion würde Leerzeichen ersetzen, Kleinbuchstaben verwenden und Sonderzeichen ersetzen.

Diesen String könnte man dann z.B. verwenden, wenn man einen Referenznamen ändern möchte. Wenn dann dieser Referenzname nochmal von FirstSpirit bearbeitet wird, um eine Eindeutigkeit sicherzustellen, wäre das vollkommen akzeptabel.


Unverständlich ist jedoch wenn

  • bei manueller Eingabe der Referenzname in Kleinbuchstaben konvertiert und Sonderzeichen ersetzt werden,
  • bei Verwendung von folder.CreatePage(…) Sonderzeichen ersetzt werden, es jedoch keine Konvertierung in Lowercase gibt,
  • bei Verwendung von page.setUid(title) überkeine Konvertierung erfolgt.

Ist es vielleicht alternativ möglich den SourceCode für die Konvertierung zur Verfügung zu stellen (ohne Sicherstellung der Eindeutigkeit). Andernfalls stellt sich ja die Frage welche Sonderzeichen z.B. bei setUiD überhaupt ersetzt werden sollen.

Hallo Herr Penack.

Wenn Sie anhand des Dateinamens an die vormals daraus entstandene Referenz gelangen wollen, hilft Ihnen vielleicht die DuplicateReferenceNameException weiter, die Ihnen bei versuchter Neuanlage des Mediums ohne Zwangsunifizierung zumindest die alte UID des bereits vorhandenen Mediums zurückliefert.

Hierfür müssten Sie allerdings immernoch den Referenznamen erraten.

HTH

Grüße

Hagen Jäger

0 Kudos

Zusätzlich zu den Punkten, die Michaela aufgeführt hat, ist ein Referenzname auch noch auf 128 Zeichen begrenzt.

Viele Grüße

Thorsten Marx