FAQ

Aus Salespoint

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
Zeile 1: Zeile 1:
-
==Zur Nutzung der FAQ
 
Diese FAQ beschäftigt sich ausschließlich mit Fragen zum Framework. Fragen zum Praktikum werden auf der entsprechenden FAQ-Seite zum Praktikum beantwortet. Außerdem findet man dort Hilfe bei allgemeinen Problemen mit Java und den Entwicklungswerkzeugen.  
Diese FAQ beschäftigt sich ausschließlich mit Fragen zum Framework. Fragen zum Praktikum werden auf der entsprechenden FAQ-Seite zum Praktikum beantwortet. Außerdem findet man dort Hilfe bei allgemeinen Problemen mit Java und den Entwicklungswerkzeugen.  
Zeile 27: Zeile 26:
==Beim Iterieren bekomme ich eine ConcurrentModificationException.==
==Beim Iterieren bekomme ich eine ConcurrentModificationException.==
Das geschieht, wenn der Iterator feststellt, dass sich die Datenbasis, über die er iteriert, verändert hat. Um potentiell falsche Ergebnisse zu vermeiden wird lieber kontrolliert abgebrochen. Vermutlich wurde versucht, mit dem Iterator ein Objekt (z.B. CatalogItem) zu finden und dies dann aus dem Katalog zu löschen. Um den Fehler zu vermeiden, ist statt der remove() Methode des Kataloges (Stocks,...) die remove() Methode des Iterators zu benutzen.  
Das geschieht, wenn der Iterator feststellt, dass sich die Datenbasis, über die er iteriert, verändert hat. Um potentiell falsche Ergebnisse zu vermeiden wird lieber kontrolliert abgebrochen. Vermutlich wurde versucht, mit dem Iterator ein Objekt (z.B. CatalogItem) zu finden und dies dann aus dem Katalog zu löschen. Um den Fehler zu vermeiden, ist statt der remove() Methode des Kataloges (Stocks,...) die remove() Methode des Iterators zu benutzen.  
-
+
 
 +
==Wie kann ich Kataloge/Stocks filtern?==
 +
Dafür gibt es spezielle Catalog- und StockFilter (package data.filters). Zum Anzeigen der gefilterten Daten werden diese anstatt der originalen Stocks/Kataloge an die FormSheets übergeben. Es ist nicht möglich, die Filterung im TED vorzunehmen. Man kann zwar dort die Anzeige von Items unterdrücken, es würde aber dennoch eine leere Zeile angezeigt.
 +
 
 +
=Desktopspezifisches=
==Ich kann keine Items im DataExchangeFormSheet verschieben.==
==Ich kann keine Items im DataExchangeFormSheet verschieben.==
Wenn man sich ein DataExchangeFormSheet an einem Gate anzeigen lässt, muss man darauf achten, dass das Gate zum Zeitpunkt, zu dem das FormSheet erzeugt wird, bereits existiert. Folgender Code funktioniert:  
Wenn man sich ein DataExchangeFormSheet an einem Gate anzeigen lässt, muss man darauf achten, dass das Gate zum Zeitpunkt, zu dem das FormSheet erzeugt wird, bereits existiert. Folgender Code funktioniert:  
Zeile 74: Zeile 77:
==Der DataBasket in meinem Prozess ist null, obwohl ich einen DataBasket zugewiesen habe.==  
==Der DataBasket in meinem Prozess ist null, obwohl ich einen DataBasket zugewiesen habe.==  
Beim Starten eines Prozesses übernimmt der Prozess automatisch den DataBasket vom SalesPoint, auf dem er läuft. Der DataBasket sollte also schon an den SalesPoint gehängt worden sein. Falls der DataBasket im Prozess gesetzt werden muss, darf das nicht im Konstruktor passieren. Die Methode getInitialGate() bietet sich stattdessen an.  
Beim Starten eines Prozesses übernimmt der Prozess automatisch den DataBasket vom SalesPoint, auf dem er läuft. Der DataBasket sollte also schon an den SalesPoint gehängt worden sein. Falls der DataBasket im Prozess gesetzt werden muss, darf das nicht im Konstruktor passieren. Die Methode getInitialGate() bietet sich stattdessen an.  
-
 
+
=Webspezifisches=
-
==Wie kann ich Kataloge/Stocks filtern?==
+
-
Dafür gibt es spezielle Catalog- und StockFilter (package data.filters). Zum Anzeigen der gefilterten Daten werden diese anstatt der originalen Stocks/Kataloge an die FormSheets übergeben. Es ist nicht möglich, die Filterung im TED vorzunehmen. Man kann zwar dort die Anzeige von Items unterdrücken, es würde aber dennoch eine leere Zeile angezeigt.
+

Version vom 12:26, 7. Apr. 2010

Diese FAQ beschäftigt sich ausschließlich mit Fragen zum Framework. Fragen zum Praktikum werden auf der entsprechenden FAQ-Seite zum Praktikum beantwortet. Außerdem findet man dort Hilfe bei allgemeinen Problemen mit Java und den Entwicklungswerkzeugen.

Inhaltsverzeichnis

Wo gibt es den Quellcode von SalesPoint?

Der Quellcode wird nicht zum Download bereitgestellt. Bei Interesse kann aber über die Javadoc auf ihn zugegriffen werden. In der Detailansicht einer Klasse klickt man dazu auf den Klassen- oder einen Methodennamen und gelangt an die entsprechende Stelle im Code.

Wie kann ich mit meiner Tabelle dies und jenes anzeigen lassen?

Die Darstellung von Tabellen wird vom TableEntryDescriptor gesteuert. Dieser ist dem sogenannten Tabellenmodell, welches für die originalen Swing-Tabellen benutzt wird, sehr änlich. Das auf den folgenden Seiten vermittelte Wissen lässt sich deshalb ohne größere Probleme für SalesPoint-Tabellen nutzen:

Wie kann ich CatalogItems editierbar machen?

Um sich ein editierbares CatalogItem zu holen, ist die get() Methode des Catalogs zu verwenden. Ist der dritte Parameter true, ist das zurückgegebene CatalogItem editierbar.

CatalogItem ciEditable = myCatalog.get("key1", db, true);

Dabei ist zu beachten, dass ein ShallowClone zurückgeliefert wird, nicht das originale CatalogItem. Der DataBasket darf nicht null sein.

Wie kann ich Kataloge schachteln?

Man kann einem Katalog mit der add() Methode einen anderen Katalog als "Kind" hinzufügen. Allerdings ist der Kindkatalog nicht editierbar und kann damit keine weiteren CatalogItems aufnehmen. Man kann den Kindkatalog wie ein gewöhnliches CatalogItem editerbar machen (#Wie kann ich CatalogItems editierbar machen?) oder die Methode getEditableCopy(DataBasket db) verwenden. Der DataBasket darf dabei nicht null sein.


Die Methode getCatalog() liefert mir null zurück, obwohl ich den Catalog gesetzt habe.

Ein oft gemachter Fehler ist, die Kataloge am Shop anzumelden bevor der Shop gesetzt wurde. Es ist wichtig, dass zuerst setTheShop() ausgeführt wird und erst danach Kataloge und Stocks gesetzt werden.

Beim Iterieren bekomme ich eine ConcurrentModificationException.

Das geschieht, wenn der Iterator feststellt, dass sich die Datenbasis, über die er iteriert, verändert hat. Um potentiell falsche Ergebnisse zu vermeiden wird lieber kontrolliert abgebrochen. Vermutlich wurde versucht, mit dem Iterator ein Objekt (z.B. CatalogItem) zu finden und dies dann aus dem Katalog zu löschen. Um den Fehler zu vermeiden, ist statt der remove() Methode des Kataloges (Stocks,...) die remove() Methode des Iterators zu benutzen.

Wie kann ich Kataloge/Stocks filtern?

Dafür gibt es spezielle Catalog- und StockFilter (package data.filters). Zum Anzeigen der gefilterten Daten werden diese anstatt der originalen Stocks/Kataloge an die FormSheets übergeben. Es ist nicht möglich, die Filterung im TED vorzunehmen. Man kann zwar dort die Anzeige von Items unterdrücken, es würde aber dennoch eine leere Zeile angezeigt.

Desktopspezifisches

Ich kann keine Items im DataExchangeFormSheet verschieben.

Wenn man sich ein DataExchangeFormSheet an einem Gate anzeigen lässt, muss man darauf achten, dass das Gate zum Zeitpunkt, zu dem das FormSheet erzeugt wird, bereits existiert. Folgender Code funktioniert:

Gate testGate = new UIGate(null, null);
DataExchangeFormSheet defs = DataExchangeFormSheet.create(. . .);
testGate.setFormSheet(defs);

Dieser dagegen nicht:

Gate testGate = null;
DataExchangeFormSheet defs = DataExchangeFormSheet.create(. . .);
testGate = new UIGate(defs, null);


Wie kann ich die Oberfläche meines Shops anpassen?

Erzeuge eine Unterklasse von sale.multiwindow.MultiWindow. Das ist die Klasse, die für die Shopoberfläche verantwortlich ist. In dieser Klasse überschreibe die Methode createFramePane(). Es muss ein JPanel zurückgeliefert werden, das JPanel wird die Shopoberfläche sein, es kann beliebig verschönert werden. In der Shop-Klasse überschreibe die Methode createShopFrame(), so dass sie das neue MultiWindow zurückliefert.

Klasse MyShop:

...
protected sale.multiwindow.MultiWindow createShopFrame() {
return new MyShopFrame(getTheShop());
}
...

Klasse MyShopFrame:

...
public MyShopFrame(Shop s) {
super(s, WINDOW_VIEW);
}
 
protected JPanel createFramePane() {
JPanel jp = new JPanel();
jp.add(new JLabel("Mein Shop"));
return jp;
}
...


Der DataBasket in meinem Prozess ist null, obwohl ich einen DataBasket zugewiesen habe.

Beim Starten eines Prozesses übernimmt der Prozess automatisch den DataBasket vom SalesPoint, auf dem er läuft. Der DataBasket sollte also schon an den SalesPoint gehängt worden sein. Falls der DataBasket im Prozess gesetzt werden muss, darf das nicht im Konstruktor passieren. Die Methode getInitialGate() bietet sich stattdessen an.

Webspezifisches

Persönliche Werkzeuge