Page 1 of 1

UITable und DateFormat

PostPosted: Mon Aug 09, 2010 10:28 pm
by tak
Wie kann einer Column vom Type TimestampDataType ein DateFormat zugewiesen werden, um dieses für die Anzeige verwenden zu können ?

LG, Tommy

Re: UITable und DateFormat

PostPosted: Tue Aug 10, 2010 5:10 pm
by Support@SIB
Das Format wird im Moment durch den Editor definiert, z.B:

Code: Select all
((IDateCellEditor)<IDataRow>.getRowDefinition().getColumnDefinition(COLUMN).
                              getDataType().getCellEditor()).setDateFormat("yyyy-MM-dd");

Re: UITable und DateFormat

PostPosted: Tue Aug 10, 2010 8:03 pm
by tak
Zu welchem Zeitpunkt soll das DateFormat gesetzt werden?

Nach dem Open des RemoteDataBooks ?

In diesem Fall bekomme ich eine NullPointerException.

Re: UITable und DateFormat

PostPosted: Wed Aug 11, 2010 11:34 am
by Support@SIB
Der Zugriff auf die MetaDaten (Spaltenbezeichnungen) sollte immer nach dem open() durchgeführt werden. Ansonsten wird eine ModelException geworfen, da die Column nicht bekannt ist!

Obiges Beispiel setzt voraus, daß ein Editor auf die Spalte, manuell, gesetzt wurde!

Grundsätzlich wird von JVx für die DataTypes kein Cell Editor direkt zugewiesen, außer es wurde manuell ein CellEditor definiert. Wenn kein CellEditor definiert wurde, dann werden die Default CellEditoren verwendet. Auf die Standard Cell Editoren wird über die Factory zugegriffen:

Code: Select all
getFactory().getDefaultCellEditor(<IDataRow>.getRowDefinition().getColumnDefinition(COLUMN)
            .getDataType().getTypeClass());

Die Default CellEditoren sind veränderbar durch:

Code: Select all
getFactory().setDefaultCellEditor(<Class>, <ICellEditor>);

Re: UITable und DateFormat

PostPosted: Wed Aug 11, 2010 9:31 pm
by tak
Erst einmal danke für die raschen Antworten.

Leider Hilft mir die Antwort nur begrenzt weiter, also Poste ich einfach mal ein kleines Beispiel welches meine Wünsche wohl besser beschreibt.

Code: Select all
//create databook
MemDataBook mdbDaySelection = new MemDataBook();
mdbDaySelection.setName("DAY_SELECTION");
mdbDaySelection.getRowDefinition().addColumnDefinition(new ColumnDefinition("DAY", new TimestampDataType()));
mdbDaySelection.open();

//set correct dateformat in table
mdbDaySelection.getRowDefinition().getColumnDefinition("DAY").getDataType().setCellEditor(new UIDateCellEditor("dd.MM.yyyy"));

//fill with dummy data
mdbDaySelection.insert(false);
mdbDaySelection.setValue("DAY", new java.util.Date(2010-1900,1,1));
mdbDaySelection.saveSelectedRow();

mdbDaySelection.insert(false);
mdbDaySelection.setValue("DAY", new java.util.Date(2010-1900,1,2));
mdbDaySelection.saveSelectedRow();

//create datarow
RowDefinition rdDay = new RowDefinition();
rdDay.addColumnDefinition(new ColumnDefinition("DAY", new TimestampDataType()));      
//DataRow drDay = new DataRow(rdDay);
DataRow drDay = new DataRow(rdDay);

//set linkedcelleditor
UILinkedCellEditor lceDaySelection = new UILinkedCellEditor(new ReferenceDefinition(new String[] {"DAY"},mdbDaySelection,new String[] {"DAY"}));
drDay.getRowDefinition().getColumnDefinition("DAY").getDataType().setCellEditor(lceDaySelection);

//create editor
UIEditor eDay = new UIEditor();
eDay.setColumnName("DAY");
eDay.setDataRow(drDay);


Problem ist nun das der im Editor angezeigte Wert (Format) nicht dem im DataBook zugewiesenem entspricht.
Gibt es eine Möglichkeit das Format für den Editor anzugeben?

Frage am Rande:

Code: Select all
((TimestampDataType)mdbDaySelection.getRowDefinition().getColumnDefinition("DAY").getDataType()).setDateFormat("dd.MM.yyyy");


Hat das im DataType angegebene Format im Moment Auswirkungen auf Komponenten?


Grüße, Tommy

Re: UITable und DateFormat

PostPosted: Thu Aug 12, 2010 12:12 pm
by Development@SIB
Das ursprüngliche Problem der Anzeige, passt nun nicht mehr ganz zum Titel, da folgendes passiert:

Es wird ein LinkedCellEditor mit Daten in der Auswahl verwendet. Diese Daten sind speziell formatiert und diese Formatierung soll dann nach der Auswahl, auch als Text in den Editor übernommen werden.

Im Gegensatz zum DateCellEditor wird beim LinkedCellEditor das Format nicht berücksichtigt. Das Problem besteht im Moment auch bei anderen Type Formatierungen.
(Details siehe Support System)


Im Moment bleiben folgende Workarounds:

1.) Wenn ein java.util.Date Objekt, für die weitere Verarbeitung, benötigt wird

In der Auswahlliste einfach eine zweite Spalte (StringDataType) definieren, die den bereits formatierten Wert enthält. Wenn die Auswahlliste aus der DB über eine View bereitgestellt wird, dann einfach eine formatierte Spalte in die View einfügen.

Den Editor auf die Text Spalte verlinken und den LinkedCellEditor mit Text und Datum Spalte konfigurieren.

Die nicht benötigte Spalte in der Auswahlliste ausblenden.


2.) Wenn keine weitere Verarbeitung erfolgt

Anstatt TimestampDataType einen StringDataType verwenden und die Werte formatiert setzen.


Bezüglich der Frage zum DataType Format: Nein es hat im Moment keine Auswirkung.

Dieses Format wird benötigt um im Model die best-case Typ Konvertierung durchführen zu können, sprich wenn ein String auf eine Timstamp Column gesetzt wird. Nachdem das Model keine Referenz zum UI hält, ist das Format an dieser Stelle notwendig.

Das Type Format sollte auch vom LinkedCellEditor berücksichtigt werden, ist aber in JVx 0.8 beta2 noch nicht der Fall (Details siehe Support System).


Anmerkungen zum geposteten Source Code:

Anstatt: new java.util.Date(2010-1900,1,2)
wäre: java.sql.Timestamp.valueOf("yyyy-mm-dd hh:mm:ss.fffffffff") etwas praktischer.
Um alle Probleme zu vermeiden, würde sich ein Calendar anbieten.