Kai's Forum Users
28th May 2001, 01:00
>Hallo zusammen,
Hallo Matthias,erstmal kurz ein Link auf eine Antwort von mir zu Deinem letzten
diesbezüglichen Posting:
http://www.f6.parsimony.net/forum6485/messages/1388.htm
Der Produktkonfigurator kennt zwei unterschiedliche Modi, den Compiler-Modus
und den Interpreter-Modus. Im Compiler-Modus werden aus den Beschränkungen
Baan-Objekte erzeugt, im Interpretermodus werden die Beschränkungen zur
Laufzeit interpretiert. Dieser Modus läßt sich über einen PCF-Parameter
steuern. (Wenn nicht zu viele generelle Artikel vorhanden sind, würde
ich übrigens immer den Compiler-Modus empfehlen - schneller, flexibler,
im Notfall sogar zu debuggen).So. Das als Einführung. Wichtig ist das deshalb, weil je nach Modus eine unter-
schiedliche Syntax verwendet werden kann. Im Interpreter-Modus steht nur ein
eingeschränkter Befehlsschatz zur Verfügung - siehe obigen Link: Baan versteht
dann einige spezielle PCF-Konstrukte (z.B.: Produktmerkmal in eckigen Klammern =
Wert des Produktmerkmals) und alles, was die Funktion expr.compile verdauen kann.Im Compiler-Modus dagegen werden die Beschränkungsausdrücke in Funktionen
eines Baan-Programms überführt. Diese Funktionen werden dann vom eigentlichen
Produktkonfigurator während des Konfigurationsprozesses aufgerufen.
In diesem Modus stehen Möglichkeiten zur Verfügung, die Baan 4GL
bietet - mit zwei Ausnahmen: Funktionen können selbst nicht erstellt werden (da
die Beschränkung der Rumpf einer Funktion ist) und die 4GL-"Sections" aus
den Standard-Programmen existieren logischerweise auch nicht.
Man kann aber Variablen definieren, Domains verwenden, Selects absetzen,
alles wie in einem "normalen" Programm. Dabei sollte man allerdings im Hinterkopf haben, dass die Aufrufreihenfolge
der Beschränkungen ziemlich willkürlich sein kann, und manche Beschränkungen
mehrfach ausgeführt werden (siehe den Thread gleich hier drunter:
<a href ="http://www.f6.parsimony.net/forum6485/messages/1439.htm"
http://www.f6.parsimony.net/forum6485/messages/1439.htm
Es funktionieren sogar Preprozessor-Befehle (#include, #define). Allerdings
werden die Beschränkungen in einer bestimmten (alphabetischen) Reihenfolge in
die Quelldatei (für das zu erstellende Objekt) geschrieben. Das zu beachten
ist bei den Preprozessoranweisungen unter Umständen extrem wichtig.
In beiden Fällen (Compiler wie Interpreter) gibt es nun noch Syntaxelemente,
die in den Parametern eingestellt werden (müssen!): Da kann man sich also seine
eigene Syntax bauen. (z.B.: "validate" im Feld "Bewerten" (wenn ich miach an das Label richtig
erinnere): Das heisst dann, dass der PCF
if [size] > 2 then
validate = true
endif
so verstanden wird, dass das Merkmal der Beschränkung gültig ist, die Zeile
der Stückliste ausgewählt wird, etc., wenn das Merkmal "size" einen Wert größer
zwei hat.
So, was nun das Ausrufezeichen angeht: Ich würde es nicht verwenden:
Man braucht es nur, wenn man zwischen beiden Modi hin-und her wechseln will,
was unsinnig ist. Das Ausrufezeichen schottet dann Code, den der Interpreter
nicht versteht, ab. Die Zeilen, die mit einem Ausrufezeichen beginnen, werden
also nur im Compiler-Modus ausgeführt.Ansonsten gilt auch beim PCF mein allgemeiner Programmiertip: Klein anfangen
und Feature für Feature dazulernen: Erst die normalen Produktbeschränkungs-
ausdrücke (s.o.), dann die "normalen" 4GL Befehle, dann selects, und dann
kann man sich an Sachen wagen wie Sessions zu starten.... ;-) Das ist dann
aber schon auch ein Bereich, wo der PCF an seine Grenzen kommt - vergewaltigen
sollte man ihn nicht unbedingt (auch wenn er nicht gerade zimperlich bei dem
ist, was man mit ihm anstellen kann) :-)So, hoffe, das hilft Dir etwas. Eine explizite Dokumentation zum Thema PCF-
Sytanx kenne ich nicht (ausgenommen die o.a. Hilfetexte) - Der Trick
ist halt, die einzelnen Elemente aus PCF-Spezifika, 3GL und 4GL geschickt zu
mischen, und ganz wichtig: DEN ÜBERBLICK ZU BEHALTEN! - Merke: Auch ein PCF-
Produktmodell ist ein Programm, das gewartet werden muss - das Pipezeichen
leitet übrigens Kommentare ein....)
Servus,
Uli
Hallo Matthias,erstmal kurz ein Link auf eine Antwort von mir zu Deinem letzten
diesbezüglichen Posting:
http://www.f6.parsimony.net/forum6485/messages/1388.htm
Der Produktkonfigurator kennt zwei unterschiedliche Modi, den Compiler-Modus
und den Interpreter-Modus. Im Compiler-Modus werden aus den Beschränkungen
Baan-Objekte erzeugt, im Interpretermodus werden die Beschränkungen zur
Laufzeit interpretiert. Dieser Modus läßt sich über einen PCF-Parameter
steuern. (Wenn nicht zu viele generelle Artikel vorhanden sind, würde
ich übrigens immer den Compiler-Modus empfehlen - schneller, flexibler,
im Notfall sogar zu debuggen).So. Das als Einführung. Wichtig ist das deshalb, weil je nach Modus eine unter-
schiedliche Syntax verwendet werden kann. Im Interpreter-Modus steht nur ein
eingeschränkter Befehlsschatz zur Verfügung - siehe obigen Link: Baan versteht
dann einige spezielle PCF-Konstrukte (z.B.: Produktmerkmal in eckigen Klammern =
Wert des Produktmerkmals) und alles, was die Funktion expr.compile verdauen kann.Im Compiler-Modus dagegen werden die Beschränkungsausdrücke in Funktionen
eines Baan-Programms überführt. Diese Funktionen werden dann vom eigentlichen
Produktkonfigurator während des Konfigurationsprozesses aufgerufen.
In diesem Modus stehen Möglichkeiten zur Verfügung, die Baan 4GL
bietet - mit zwei Ausnahmen: Funktionen können selbst nicht erstellt werden (da
die Beschränkung der Rumpf einer Funktion ist) und die 4GL-"Sections" aus
den Standard-Programmen existieren logischerweise auch nicht.
Man kann aber Variablen definieren, Domains verwenden, Selects absetzen,
alles wie in einem "normalen" Programm. Dabei sollte man allerdings im Hinterkopf haben, dass die Aufrufreihenfolge
der Beschränkungen ziemlich willkürlich sein kann, und manche Beschränkungen
mehrfach ausgeführt werden (siehe den Thread gleich hier drunter:
<a href ="http://www.f6.parsimony.net/forum6485/messages/1439.htm"
http://www.f6.parsimony.net/forum6485/messages/1439.htm
Es funktionieren sogar Preprozessor-Befehle (#include, #define). Allerdings
werden die Beschränkungen in einer bestimmten (alphabetischen) Reihenfolge in
die Quelldatei (für das zu erstellende Objekt) geschrieben. Das zu beachten
ist bei den Preprozessoranweisungen unter Umständen extrem wichtig.
In beiden Fällen (Compiler wie Interpreter) gibt es nun noch Syntaxelemente,
die in den Parametern eingestellt werden (müssen!): Da kann man sich also seine
eigene Syntax bauen. (z.B.: "validate" im Feld "Bewerten" (wenn ich miach an das Label richtig
erinnere): Das heisst dann, dass der PCF
if [size] > 2 then
validate = true
endif
so verstanden wird, dass das Merkmal der Beschränkung gültig ist, die Zeile
der Stückliste ausgewählt wird, etc., wenn das Merkmal "size" einen Wert größer
zwei hat.
So, was nun das Ausrufezeichen angeht: Ich würde es nicht verwenden:
Man braucht es nur, wenn man zwischen beiden Modi hin-und her wechseln will,
was unsinnig ist. Das Ausrufezeichen schottet dann Code, den der Interpreter
nicht versteht, ab. Die Zeilen, die mit einem Ausrufezeichen beginnen, werden
also nur im Compiler-Modus ausgeführt.Ansonsten gilt auch beim PCF mein allgemeiner Programmiertip: Klein anfangen
und Feature für Feature dazulernen: Erst die normalen Produktbeschränkungs-
ausdrücke (s.o.), dann die "normalen" 4GL Befehle, dann selects, und dann
kann man sich an Sachen wagen wie Sessions zu starten.... ;-) Das ist dann
aber schon auch ein Bereich, wo der PCF an seine Grenzen kommt - vergewaltigen
sollte man ihn nicht unbedingt (auch wenn er nicht gerade zimperlich bei dem
ist, was man mit ihm anstellen kann) :-)So, hoffe, das hilft Dir etwas. Eine explizite Dokumentation zum Thema PCF-
Sytanx kenne ich nicht (ausgenommen die o.a. Hilfetexte) - Der Trick
ist halt, die einzelnen Elemente aus PCF-Spezifika, 3GL und 4GL geschickt zu
mischen, und ganz wichtig: DEN ÜBERBLICK ZU BEHALTEN! - Merke: Auch ein PCF-
Produktmodell ist ein Programm, das gewartet werden muss - das Pipezeichen
leitet übrigens Kommentare ein....)
Servus,
Uli