Grenzen der BO-Modell Redefinition

Nachfolgend soll anhand von ein paar Beispielen die Grenze einer Redefinition aufgezeigt werden.

Attributdefinitionen

Das Attribut Sprache (Addr.LangNo) ist in der Datenbank als numerisch definiert. Über die Business-Logik ist festgelegt, dass im BC 87751nur Sprachnummern von 1 – 9 erfasst werden können.
Praxis-BO_Redef_15.jpg
 
Wird im WS 11000 nun etwas anderes als eine gültige Sprachnummer eingegeben, so erscheint die gewohnte Fehlermeldung.
Praxis-BO_Redef_16.jpg
 
Nun verändern wir via BO-Modell Redefinition das Attribut Addr.LangNo so, dass wir im User Interface etwas ganz anderes eingeben können. z.B. Die Sprache im Klartext. Wir ändern also die Eigenschaft auf alphanumerisch, 10-stellig.
Praxis-BO_Redef_17.jpg
 
Im User Interface (WS 11000) kann nun die Sprache im Klartext eingegeben werden.
Praxis-BO_Redef_18.jpg
 
Aber der Business-Server lässt sich dadurch nicht überlisten. Die Fehlermeldung beim Speichern ist klar.
Praxis-BO_Redef_19.jpg
 
Das System weist uns hier darauf hin, dass ein numerischer Wert in der Form N2.0 erwartet wird. (Was durch den Business-Server noch weiter eingeschränkt ist, da nur einstellige Sprachnummern erlaubt sind.)
Nun schränken wir die Eingabemöglichkeit auf Numerisch einstellig ein.
Praxis-BO_Redef_20.jpg
 
Damit kann nun im User Interface schon gar kein zweistelliger Wert mehr eingegeben werden. Also schon eine weitere Eingabehilfe für den User.

Vorgabewerte

Vorgabewerte sind ein beliebtes Hilfsmittel um den User beim Erstellen von neuen Datensätzen (z.B. Adressen) zu unterstützen. In diesem Zusammenhang ist es wichtig zu wissen, dass die Vorgabewerte nur in denjenigen Kontexten zum tragen kommen, die beim Neuerstellen eines Datensatzes auch aktiv sind.
Ein schönes Beispiel um dieses Verhalten aufzuzeigen ist das Neuerstellen einer Adresse.
Praxis-BO_Redef_21.jpg
 
Vorgabewerte kommen nur zum Tragen, wenn sie Attribute betreffen die in diesem BC vorhanden sind. Man kann also keinen Vorgabewert beispielsweise für Addr.Phone1 erfassen, weil dieses Attribut hier nicht vorhanden ist. Warum ist das so? Das hat mit dem Kontext zu tun. Beim neu Erfassen einer Adresse besteht der Record in der Datenbank noch nicht. Unser Business Server kann also einen Vorgabewert nirgends ablegen. Nur für Attributwerte die im Neuerfassungs-BC vorhanden sind, kann der Vorgabewert aus der BO-Modell Redefinition gelesen und in obigem BC verwendet werden.
Diese Einschränkung kann jedoch folgendermassen umgangen werden:
Es wird ein DIY-BC erstellt mit dem man eine neue Adresse erfasst. Für alle dort verwendeten Attribute können jetzt Vorgabewerte definiert werden und diese werden dann auch korrekt vorgeschlagen.
Beispiel:
Die Telefonnummer1 (Addr.Phone1) wird folgendermassen redefiniert:
Praxis-BO_Redef_22.jpg
 
Dann wird ein DIY-BC erstellt mit welchem man eine Adresse neu erstellen kann. Dort muss nun auch die Telefonnummer1 eingetragen sein. Der in der BO-Modell Redefinition eingetragene Wert wird jetzt korrekt vorgeschlagen.
Praxis-BO_Redef_23.jpg
 

Verbinden eines freien Attributes mit Textblöcken

Auch bei den Verknüpfungen mit Textblöcken gibt es Einschränkungen. So ist es beispielsweise nicht möglich sich eine Textblock-Nr. in einem freien Feld eines Adress-Pools anzeigen zu lassen.
Die BO-Modell Redefinition sähe so aus:
Praxis-BO_Redef_24.jpg
 
Beim Verwenden dieses Attributs wird nun aber folgende Fehlermeldung angezeigt:
Praxis-BO_Redef_25.jpg
 
Grund: Pro Adresse können mehrere Textblöcke aktiv sein. Das lässt sich in einem freien Feld nicht abbilden. Ausserdem kann es noch einen Textblock pro Sprache geben, was die Anzahl der Beziehungen zusätzlich erweitert.

Bereichs-Beziehung

Bei der BO-Modell Redefinition können wir auch eine Bereichs-Beziehung eingeben. Das bedeutet, dass der auf diesem Attribut eingegebene Wert mit dem hier definierten Bereich verglichen wird. Befindet sich der eingegebene Wert ausserhalb des Bereiches, bleibt die rote Markierung im User Interface bestehen und weist den User darauf hin, dass hier etwas nicht stimmt.
Um das zu demonstrieren, wird wieder die Sprachnummer (Addr.LangNo) herangezogen. In unserer Beispiel-Installation, haben wir folgende Sprachnummern erfasst: 1 Deutsch, 2 Français, 3 English, 4 Italiano, 9 Suaheli. Die Sprachnummer wird nun via BO-Modell Redefinition so angepasst, dass nur noch Sprachnummern von 2 bis 4 gültig sind.
Praxis-BO_Redef_26.jpg
 
Wird nun eine Sprachnummer eingetragen die nicht dem definierten Bereich entspricht, wird dies wie oben beschrieben mit einer roten Markierung dargestellt.
Praxis-BO_Redef_27.jpg
 
Wird eine Sprachnummer eingegeben die im Bereich liegt, so verschwindet die Markierung.
Praxis-BO_Redef_28.jpg
 
Ist die Checkbox Eingabe von Werten ausserhalb der Beziehung möglich auf obiger Redefinition passiv, so lassen sich beispielsweise im WS 11000 keine falschen Werte speichern.
Diese Funktionalität ist jedoch nicht durchgängig verfügbar. Gerade wenn Attributwerte über Drittprogramme gespeichert werden, dann ist es möglich "falsche" Werte zu speichern.
Grund: Diese Werte sind gem. Business Server plausibel und können vom System gespeichert werden. Ein Fehler würde erst auftreten, wenn z.B. die Sprachnummer 2 im System nicht erfasst ist.
Es ist Aufgabe des Programmierers, hier allenfalls eine Fehlermeldung auszugeben.
Mit dem Service GetInfoBoAttr lässt sich die BO-Modell Redefinition auslesen. Anschliessend kann auf die Eingabe von "falschen" Werten entsprechend reagiert werden. (Infos zu GetInfoBoAttr siehe separates Kapitel.)

Sperren von Attributen

Eine weitere sicher in div. Projekten vorkommende Anforderung wird das Sperren von Attributen sein. Ziel ist es damit beispielsweise das Verändern von durch Abläufe vorgegebenen Werten zu verhindern. Wie weiter oben beschrieben, sind die Redefinitionen immer abhängig vom Kontext. Somit ergeben sich auch hier wieder Grenzen die nicht alles ermöglichen was man in einem Projekt gerne umsetzen möchte. Aufgezeigt wird es am Beispiel des Netto-Preises auf der Verkaufsposition. (SalDocItem.NetSP)
Es soll erreicht werden, dass dieses Attribut beim Erfassen einer neuen Position nicht beschrieben werden kann.
Es ist nun zu beachten, dass beim Neuerstellen einer Position ja grundsätzlich dieselben Umstände herrschen wie sie im Beispiel mit dem Neuerstellen einer Adresse beschrieben worden sind. d.h. Was zu diesem Zeitpunkt nicht im Kontext steht, kann auch nicht berücksichtigt werden.
BO-Modell Redefinition:
Praxis-BO_Redef_29.jpg
 
Aus dem eingangs erwähnten Grund, ist nun aber im WS 51000 das Attribut beim Neuerstellen einer Position nicht gesperrt. Zu diesem Zeitpunkt gibt es keinen Kontext der das ermöglichen würde. (Technische Umsetzung im WS 51000. Also das Konzept dieses WS)
Praxis-BO_Redef_30.jpg
 
Erst wenn die Position gespeichert wurde, kann ein Kontext hergestellt werden und das Attribut ist für die weitere Bearbeitung gesperrt.
Praxis-BO_Redef_31.jpg
 
Wird nun aber ein DIY-BC erstellt mit dem man eine Position neu erfassen kann und ist das Attribut SalDocItem.NetSP in diesem DIY-BC vorhanden, so kann der Kontext sofort hergestellt werden. Das Attribut ist von Beginn an für die Eingabe gesperrt.
Praxis-BO_Redef_32.jpg
 
Praxis-BO_Redef_33.jpg