BOPF Property Concept: Eine Einführung
Das Property Concept des Business Object Processing Frameworks (BOPF) unterscheidet zwischen statischen und dynamischen Properties. In diesem Beitrag werden Ihnen beide Arten vorgestellt und der Unterschied erklärt.
Wozu Properties in BOPF?
Properties sind eine Möglichkeit, um die Eingabe- bzw. Interaktionsmöglichkeiten eines Benutzers mit einer Anwendung einzuschränken. In BOPF können über sie die Interaktion mit diversen Elementen gesteuert werden. Dazu gehört es beispielsweise, Attribute durch die Eigenschaft “Enabled” für den Consumer sichtbar zu machen, sie bei Bedarf auf Read-Only zu setzen oder als Pflichtfeld zu markieren. Dies kann unter anderem in der GUI Erstellung mit einer FPM UI genutzt werden, um dort Felder zu sperren oder auszublenden. Dieser Fall tritt zum Beispiel bei Schlüsselfeldern, die automatisch vergeben werden oder bei einigen transienten Feldern ein.
Properties können auch genutzt werden um die weitere Bearbeitung des Business Objects zu beeinflussen. So kann beispielsweise verhindert werden, dass bei einer bereits verschickten Rechnung weitere Artikel hinzugefügt werden können. Die Properties sind dabei nicht nur auf die Attribute eines Geschäftsobjektes beschränkt. Sie können auch für Aktionen und weitere Entitäten genutzt werden.
Dynamische oder Statische Properties, wo ist der Unterschied?
Properties können in BOPF entweder dynamisch oder statisch gesetzt werden.
Statische Properties können nur zur Design-Zeit gesetzt und können von dynamischen Properties überschrieben werden. Um das Überschreiben zu verhindern ist es möglich, Properties als final zu kennzeichnen.
Dynamische Properties können dagegen zur Laufzeit verändert werden und sind somit auch nur zur Laufzeit gültig. Sie beziehen sich immer auf genau eine Instanz und können damit, zum Beispiel in Abhängigkeit von Benutzereingaben, Felder auf Read-Only oder Mandatory setzen. Setzt also ein Nutzer eine Rechnung auf den Status “bezahlt”, finden keine weiteren Änderungen an der Rechnung statt. Über dynamische Properties können bei einer Änderung des Status alle weiteren Felder auf Read-Only gesetzt werden.
Setzen von statischen Properties
Properties können für verschiedene Entitäten festgelegt werden. Alle Einstellungen erfolgen in der entsprechenden Pflegetransaktion für BOPF. Dort ist zunächst ein Business Object auszuwählen. Unter dem Knoten “Node Elements” ist der gewünschte Knoten auszuwählen. Dort befinden sich der Knoten “Node Categories”. Innerhalb des Knotens können dann die Einstellungen vorgenommen werden. Abbildung 1 zeigt, wie die Properties für Attribute gesetzt werden können.
Setzen von dynamischen Properties
Das Setzen der dynamischen Properties ist etwas aufwändiger im Vergleich zu statischen Properties. Im Falle der dynamischen Properties werden sogenannte Property Determinations genutzt, die für den betroffenen Knoten angelegt werden. In der Determination wird die Property Node bei Request Nodes genutzt.
In diesem Fall werden keine Trigger ausgewählt. Beim Node Category Assignment wird “Before Retrieve” als Zeitpunkt für die Determination ausgewählt. Zusätzlich muss noch die Determination Klasse implementiert werden. In dieser Klasse wird die Helferklasse /bobf/cl_lib_h_set_property genutzt um die gewünschten Properties zu setzen.
DATA lo_set_property TYPE REF TO /bobf/cl_lib_h_set_property. ” create service object for dynamic properties CREATE OBJECT lo_set_property EXPORTING is_context = is_ctx io_modify = io_modify. |
Eine ausführliche Auflistung aller möglichen Methoden zum Setzen der Properties finden sich auf den Seiten der SAP.
Um eine Action zu deaktivieren kann der folgende Codeausschnitt genutzt werden. Der Wert für if_action_key kann dabei aus dem Interface des Business Objects bezogen werden.
lo_set_property->set_action_enabled( EXPORTING iv_key = ls_root–key if_action_key = /bobf/if_invoice_c=>sc_action–root–invoice_issued iv_value = abap_false ). |
Um ein Feld auf Read-Only zu setzen kann folgender Code genutzt werden.
lo_set_property->set_attribute_read_only( EXPORTING iv_attribute_name = /mind2/if_map_conf_c=>sc_node_attribute–root–bo_name iv_key = ls_root–key iv_value = abap_true ). |
Auch alle weiteren Methoden können auf die gleiche Art genutzt werden.
Wie Sie sehen, ist das Property Concept von BOPF sehr flexibel und bietet viele Möglichkeiten. Gleichzeitig ist durch die Einstellung der Eigenschaften im Geschäftsobjekt auch sichergestellt, dass alle Consumer die gleichen Eigenschaften für das Geschäftsobjekt haben.
Abschließend interessiert mich natürlich: Welche Erfahrungen haben Sie bereits mit BOPF im Allgemeinen und dessen Property Concept im speziellen gemacht? Ich freue mich auf Ihre Kommentare.