JoSt
I'm new here

Schema: Ändern des dbName über API möglich?

Hallo zusammen,

ist es möglich das dbName Attribut eines (OR)Schemas über das API zu ändern? Der manuelle Weg wäre hier im SiteArchitect das schema extern zu bearbeiten und das entsprechende Attribut zu ändern.

Auslesen ist ja über das API kein Problem (Schema.getOrSchema().getDBName() ).

Wenn es keine direkte Möglichkeit für das Attribut gibt, ist es dennoch möglich die komplette Schema-XML über das API zu speichern?

Viele Grüße,

Johannes

0 Kudos
6 Replies
marza
I'm new here

Hallo Johannes,

welche Version von FirstSpirit setzt Du denn ein?

Gruß Marian

0 Kudos

Hallo Marian,

wir verwenden Version 5.1.311.

Viele Grüße,

Johannes

0 Kudos

Hallo Johannes,

was meinst Du mit extern bearbeiten? Geht es darum eine Derby-DB oder eine andere Datenbank zu ändern? Oder einfach nur das komplette Schema der Datenbank als XML-Struktur zu erhalten?

Der erwähnte Getter existiert übrigens offiziell laut Entwickler-API gar nicht. Ich würde mich an Deiner Stelle nicht darauf verlassen, dass er in zukünftigen Versionen von FirstSpirit existent ist.

Gruß Marian

P.S. Siehe http://www.e-spirit.com/odfs51/dev/de/espirit/or/schema/Schema.html

0 Kudos

Hallo Marian,

es geht nicht darum, die externe Datenbank selbst zu ändern, sondern lediglich um das dbName Attribut im OR-Schema.

Der Hintergund ist, dass wir ein Master-Projekt und mehrere Slave-Projekte haben, die unter anderem ein Vorlagenpaket mit dem Schema per CorporateConent Paket erhalten. Die Slave Projekte haben jeweils ihre eigene externe Datenbank inkl. eigenem DB-Layer. Die Anpassung des DB-Layers wird schon durch einen getriggerten Arbeitsablauf nach der Abo-Aktualisierung vorgenommen (Änderung vom Master-Layer auf den Salve-Layer).

Allerdings wird eben auch das dbName Attribut vom Master übernommen, somit werden Einträge, die zuvor unter dem dbName des Slave-Schemas (vor der Aktualisierung) angelegt wurden, unsichtbar.

Bisher haben wir es manuell über die externe bearbeitung des Schemas im SiteArchitekt gelöst. Eine automatische Änderung über Workflow/API wäre allerdings mit weniger Aufwand verbunden und weniger fehleranfällig.

Viele Grüße,

Johannes

0 Kudos

Hallo Johannes,

ich kann Dein Anliegen gut nachvollziehen und verstehe Dich. Aber das ist nicht Teil der offiziellen API, weshalb wir niemanden ermutigen können solche Funktionen zu nutzen. Es kann immer sein, dass inoffizielle API mit der nächsten Version verschwindet. Für die offizielle API muss nämlich relativ lange Bestand gewährt werden.

Das bedeutet jedoch nicht, dass ein solches Feature nicht sinnvoll oder wünschenswert wäre. Wir geben unseren Kunden selbstverständlich die Möglichkeit, auf die Weiterentwicklung von FirstSpirit Einfluss zu nehmen:

https://community.e-spirit.com/community/feedback

Dort kannst Du Deine Idee vortragen und darüber abstimmen lassen. Mit etwas Glück findest Du Unterstützer und Deine Idee findet dann Berücksichtigung.

Grüße Marian

0 Kudos
dehaatbi
Returning Observer

Hallo,

hatte gerade dasselbe Problem und konnte es wie folgt lösen. Der Code nutzt Reflections und ist damit natürlich keine schöne Lösung, und sicherlich auch keine die von Crownpeak irgendwie supported wird, aber es hat erstmal funktioniert:

Schema mySchema = templateStoreRoot.getSchemes().getSchemaByName(SCHEMA_NAME);
de.espirit.or.schema.Schema orSchema = mySchema.getOrSchema();

Field dbNameField = de.espirit.or.impl.schema.SchemaImpl.class.getDeclaredField("_dbName");
dbNameField.setAccessible(true);
dbNameField.set(orSchema, "P5692_3122");
mySchema.setLock(true);
mySchema.setOrSchema(orSchema);
mySchema.save("Restore previous dbName");
mySchema.setLock(false);

 

Gruß Tobi

0 Kudos