Tabelle über API Anlegen

0 Kudos

Hallo,

ich würde gerne über die API automatisch ein Datenbankschema, eine Tabelle und eine Datenquelle anlegen.

Es geht hierbei um eine Konfigurationstabelle für ein Modul.

Die API bietet hierzu alle Möglichkeiten außer das Anlegen der Tabelle, was schade ist, da damit wieder manuelle Installationsschritte

zusätzlich zur Modulinstallation nötig werden.

createdSchema = schemes.createSchema(SCHEME_NAME, layerNames[0]);

createdSchema.setLock(true);

de.espirit.or.schema.Schema orSchema = createdSchema.getOrSchema();

EntityType entityType = orSchema.createEntityType(TABLE_NAME);

// Workaround: die Funktion ist da aber nicht in der offiziellen API, habe sie nur zufällig über die Beanshell entdeckt

((de.espirit.or.impl.schema.SchemaImpl) createdSchema.getOrSchema()).createTable((EntityTypeImpl) entityType);

...

1 Comment
gockel
Crownpeak employee
Crownpeak employee

Hallo,

die INTERNE Methode #createTable ist auch gar nicht notwendig.

Eine API-Erweiterung ist hier aus meiner Sicht nicht nötig, um das gewünschte zu erreichen.

Nachfolgend ein kurzes Code-Beispiel, ausgeführt in einem Kontextmenüskript auf einem Ordner unterhalb von "Datenbank-Schemata".

========================

layers = context.project.getLayers();

layer = layers.get(0);

folder = context.storeElement;

schema = folder.createSchema("my_schema", layer);

// nicht rekursiv locken

schema.setLock(true, false);

try {

          orSchema = schema.getOrSchema();

          myType = orSchema.createEntityType("my_Type");

          attr = myType.createSimpleAttribute("my_Attr", java.lang.String.class);

 

          //wichtig

          schema.setOrSchema(orSchema);

 

          // hier passiert INTERN der sync in die Datenbank

          // nicht rekursiv entsperren mit sinnvollem Kommentar

          schema.save("entity type 'my_Type' created", false);

} finally {

          // nicht rekursiv entsperren

          schema.setLock(false, false);

}

==================

Sollte es hier dennoch Probleme geben, so schreiben sie bitte ein Posting im Developers Bereich.

Gruß