Search the FirstSpirit Knowledge Base
Hallo Community,
wie kann ich über die Api eine Spalte in einer Tabelle hinzufügen und anschließende die Tabelle speichern?
Meinen Kode-Ansatz folgt.
Vielen Dank für eure Beitrage
Robert
de.espirit.or.schema.Schema orSchema = tableTemplate.getSchema().getOrSchema();
EntityType entityType = tableTemplate.getEntityType();
String entityTypeName = entityType.getName();
Table table = orSchema.getTable(entityTypeName);
Column col = new ColumnImpl(colName, 64, Column.TypeCode.TYPE_STRING, false);
Schema templateSchema = tableTemplate.getSchema();
try {
templateSchema.setLock(true);
table.add(col);
templateSchema.save();
templateSchema.setLock(false);
} catch (LockException e) {
e.printStackTrace();
} catch (ElementDeletedException e) {
e.printStackTrace();
}
Hallo Robert,
eine Lösung könnte z.B. so aussehen:
// run as contextscript on tabletemplate
TableTemplate tableTemplate = (TableTemplate) context.getStoreElement();
Schema _schema = tableTemplate.getSchema();
String _entityTypeName = "MyTable";
String _attributeName = "MyAttribute";
try {
_schema.setLock(true, false);
final Session orSession = _schema.getSession(false);
final de.espirit.or.schema.Schema orSchema = orSession.getSchema();
final EntityType entityType = orSchema.getEntityType(_entityTypeName);
SimpleAttribute _attribute = entityType.createSimpleAttribute(_attributeName, String.class);
_attribute.setSize(64);
orSession.syncSchemaWithDB(orSchema, false);
_schema.setOrSchema(orSchema);
_schema.save();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
_schema.setLock(false, false);
} catch (Exception ignore) {
// catch exception
}
}
Was bei dir sicherlich noch fehlte war der Sync des geänderten orSchemas in der aktuellen Session, sowie die Zuweiseung zum Templatestore-Schema.
Viele Grüße
Jörg
Hi Robert,
um welche FS-Veersion geht es hier?
In welchem Kontext wird das Skript aufgerufen?
>de.espirit.or.schema.Schema orSchema = tableTemplate.getSchema().getOrSchema();
normalerweise wird das Schema ja so geholt:
schema = context.getUserService().getTemplateStore().getSchemes().getSchemaByName("my_schema");
Gruß,
Walter
Hallo Walter,
erst mal herzlichen Dank für Deine Antwort.
Version: 4.2.447
Umsetzung derzeit als Executable aus dem Client aufgerufen: => GuiScriptContext
Ich versuche sofort den von Dir vorgeschlagenen Weg und danke Dir erst mal für deine Hilfe.
Viele Grüße
Robert
Dein Weg das Schema zu holen ist schon korrekt. Du musst nur nicht auf "Table" arbeiten, sondern auf "EntityType":
SimpleAttribute<String> att = schema.getEntityType("name").createSimpleAttribute("attr", String.class);
attr.setSize(64);
Hallo Peter,
danke auch Dir für die Hilfestellung.
Das höhrt sich schon mal sehr vielversprechend an. Meine ersten versuche das Schema zu erweitern waren allerdings noch nicht erfolgreich. Was muss ich tun um die veränderung zu speichern?
Vielen Dank im Voraus,
Robert
Hallo Robert,
eine Lösung könnte z.B. so aussehen:
// run as contextscript on tabletemplate
TableTemplate tableTemplate = (TableTemplate) context.getStoreElement();
Schema _schema = tableTemplate.getSchema();
String _entityTypeName = "MyTable";
String _attributeName = "MyAttribute";
try {
_schema.setLock(true, false);
final Session orSession = _schema.getSession(false);
final de.espirit.or.schema.Schema orSchema = orSession.getSchema();
final EntityType entityType = orSchema.getEntityType(_entityTypeName);
SimpleAttribute _attribute = entityType.createSimpleAttribute(_attributeName, String.class);
_attribute.setSize(64);
orSession.syncSchemaWithDB(orSchema, false);
_schema.setOrSchema(orSchema);
_schema.save();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
_schema.setLock(false, false);
} catch (Exception ignore) {
// catch exception
}
}
Was bei dir sicherlich noch fehlte war der Sync des geänderten orSchemas in der aktuellen Session, sowie die Zuweiseung zum Templatestore-Schema.
Viele Grüße
Jörg
Hallo Jörg,
danke für die Musterlösung.
das Or-Schema ins Schema zurückstetzen scheint auch bereits zu funktionieren.
Ich habe mehrere Tage alles mögliche gespeichert, commitet, Code dekompiliert usw. was mir viel Zeit im Bezug auf den Abgabetermin. FS-JavaDoc ist noch ausbaufähig, will ich nebenbei anmerken!
Ich danke Dir nochmal für die Kompletlösung, mit den Support von eSpirit kann ich allerdings nicht zufrieden sein.
Viele Grüße
Robert