
(OBN overview)
For the indirect navigation, the symbolic object SalesOrder is introduced with the symbolic method Display. This sequence SalesOrder.Display is in the first instance a pure agreement that states that the application will always call the symbolic name SalesOrder.Display, which can then be mapped in the PFCG onto any target application within a role that is then assigned to the user. At runtime, the roles assigned to the user are then all loaded and scanned for a transaction that is associated with the symbolic name SalesOrder.Display.
The parameter handling is slightly more complex. At the time that the calling application is developed, there is no information available about the target application that will at runtime be selected to handle the call. The calling application knows only that there is a symbolic name SalesOrder.Display available. In addition, to this symbolic method call is now introduced a symbolic parameter nr of the sales order that must be displayed. The calling application can just set the symbolic parameter.
This introduces the concept of a symbolic interface that is effectively a description of the abstract method that is called with the defined parameters as they should be set for the call. For this example, the symbolic interface is SalesOrder.Display( nr:integer ). The calling application will call SalesOrder.Display( nr = 59 ). Note that in the first instance, the symbolic interface is purely a documented agreement that is not enforced.
In the last step, a new target application must be defined to handle this symbolic interface. The target application could have any number of parameters which could even have different names. For example, we wish to call the target application TransactionX( id:integer , mode:string ). Now, during the configuration, a parameter mapping must be done. In this case, we would like to express that the id parameter must be filled from the symbolic parameter nr, achieved with the notation id = {nr}. In addition, we need to hard-code the mode parameter. The complete mapping would then be: SalesOrder.Display( nr:integer ) -> TransactionX( id = {nr}, mode = Display ).
A final remark: although the complete process seems to be rather complex to explain, the two separate halves are each relatively simple. Once the interface is defined, the one half is only the sequence to actually call the symbolic interface. The second half is simply the step to map the symbolic interface onto a concrete application.