Post Processing Framework (PPF) Guidelines For Application Developers PDF
Post Processing Framework (PPF) Guidelines For Application Developers PDF
Contents:
1 PPF Overview ............................................................................................................................... 4
2 Preparation ................................................................................................................................... 5
2.1 Necessary Classes .............................................................................................................................. 5
The implementation steps are explained using the example of a demo application. The demo application and all
mentioned classes are available in all systems (transaction SPPFDEMO, development class SPPF_DEMO). ......... 5
2.1.1 Application Class ........................................................................................................................................ 5
2.1.2 Application-Specific Processing ................................................................................................................. 9
2.2 Customizing ..................................................................................................................................... 15
2.2.1 Define New Application ........................................................................................................................... 15
2.2.2 Defining the Action Profile ....................................................................................................................... 16
2.2.3 Define Action Definitions for the Action Profile ...................................................................................... 17
2.2.4 Details for the Action Definition .............................................................................................................. 18
2.2.5 Assignment of Processing Types for an Action Definition ....................................................................... 20
2.3 Determination and Merging of Actions......................................................................................... 23
2.3.1 Determination (Condition Configuration) ................................................................................................. 23
2.3.2 Action Merging ......................................................................................................................................... 28
3 Interaction Between Application and PPF at Runtime ............................................................ 29
3.1 Calling the PPF................................................................................................................................ 29
3.2 Processing Actions........................................................................................................................... 32
3.2.1 Immediate Processing ............................................................................................................................... 32
3.2.2 Processing with Document Posting ........................................................................................................... 32
3.2.3 Later Processing ........................................................................................................................................ 32
3.2.4 Manual Triggering of Processing in the Dialog ........................................................................................ 32
3.3 User Interface at Runtime .............................................................................................................. 33
3.3.1 Standard User Interface ............................................................................................................................. 33
3.3.2 Connection of Generic Object Services (GOS)......................................................................................... 35
3.4 Transaction Concept ....................................................................................................................... 36
3.4.1 Overview................................................................................................................................................... 36
3.4.2 Object Pool ............................................................................................................................................... 36
4 Administration User Interface ................................................................................................... 38
5 Extendibility ................................................................................................................................ 39
5.1 Business Application Add Ins (BAdIs) .......................................................................................... 39
5.1.1 Exit for the printer determination (PRINTER_DETERM_PPF) .............................................................. 39
5.1.2 Exit After Generated Action (TRIGGER_EXECUTED) ......................................................................... 39
The BADI has the application names as the filter value. The action is also transferred and can
deliver its processing status (successful, with error) or other information........................................... 39
5.1.3 Exit for Context Extension (CONTEXT_EXTEND_PPF) ....................................................................... 39
5.1.4 Exit for Completion of Processing Options (COMPLETE_PROC_PPF) ................................................. 40
5.1.5 Extend Container for Condition Evaluation (CONTAINER_PPF)........................................................... 40
5.1.6 Exit for Execution of Actions (EXEC_METHODCALL_PPF) ............................................................... 40
5.1.7 Exit for Getting Possible Partner Functions of an Application (GET_PARTN_ROLES_PPF )............... 41
5.1.8 Exit for Double Clicking on Values in the Display (GRID_CLICK_PPF) ............................................... 41
5.1.9 Exit for Checking if Deletion of Action Profile is allowed (CONTEXT_DELETE_PPF) ....................... 41
5.1.10 Exit for evaluation of schedule conditions (EVAL_SCHEDCOND_PPF) ............................................... 41
5.1.11 Exit for evaluation of start conditions (EVAL_STARTCOND_PPF) ...................................................... 41
5.1.12 Exit for Adding further data to workflow container (WF_CONT_MODIFY_PPF) ................................. 41
5.2 PPF Interface ................................................................................................................................... 42
5.2.1 Connection of Your Own Processing Options .......................................................................................... 42
5.2.2 Connection of a Logic for the Determination ........................................................................................... 42
Page 2
PPF
Page 3
PPF
1 PPF Overview
The Post Processing Framework (PPF) is a tool for the generic execution of functions and processes. It
provides the applications with a uniform interface to any actions. Actions can be outputs in the traditional
sense such as print, fax, mail, or XML but functions such as the triggering of workflows or any method call
can also be triggered. Which actions this eventually are, is determined by an individually configurable or a
self-programmable determination technology, depending on the application document data. Execution of the
action can also take place depending on the data of the application document.
Therefore, the PPF automatically generates actions from document data (for example, delivery notes or
order confirmations, generation of an item in the document, creation of a subsequent document).
PPF additionally provides uniform action administration. There is status management and a processing log
for every action.
The PPF itself was programmed with ABAP objects. In addition, various object services were used.
However, you do not have to program your PPF application in an object-oriented manner to use the PPF.
Overview graphic:
Application Object
Merging Logic
Actions
Actions
Actions Processing Logic
Page 4
PPF
2 Preparation
The implementation steps are explained using the example of a demo application.
The demo application and all mentioned classes are available in all systems
(transaction SPPFDEMO, development class SPPF_DEMO).
The classes to be implemented by the application are shaded in gray in the following graphics. All other
classes are provided by the PPF.
The PPF expects a persistent class so it can handle different types of application objects.
In most cases, the application object is not implemented as a persistent class, or it is a BOR object. You
must then create a persistent proxy class that does nothing other than refer to the actual application object.
The key of the application object also appears as an attribute of the proxy class. The application object
implements the interface IF_LOCK_PPF and thus both methods for locking and unlocking the application
object. These two methods are important so that an action does not operate on documents that are already
locked. If the interface is not implemented, this can result in actions being executed twice under certain
circumstances. Generally, the interface must be implemented.
When using the workflow conditions, a BOR object is necessary in addition to the persistent application
object since the schedule condition and start condition is defined on attributes of the BOR object (more on
this in the relevant sections).
The implementation of IF_LOCK_PPF is important so that the action does not change document
data for a document that is being processed. The implementation also prevents the same action
being executed multiple times in parallel processing.
Page 5
PPF
IF_LOCK_PPF
IF_TIME_CONTEXT_PPF IF_BOR_OBJECT_PPF
+ENQUEUE()
+DEQUEUE() +GET_TIME_CONTEXT() +GET_BOR_OBJECT()
implements
application class
CL_BOOK_PPF
-ID : CHAR10
+IF_LOCK_PPF~ENQUEUE()
+IF_LOCK_PPF~DEQUEUE()
+IF_TIME_CONTEXT_PPF~GET_TIME_CONTEXT() application object
+IF_BOR_OBJECT_PPF~GET_BOR_OBJECT() identified by business
key
DATA:
* reference to application/proxy object
appl_object TYPE REF TO cl_book_ppf,
book_id TYPE CHAR10.
* create a persistent application object via the class agent of it’s co-class
* object services create 2 service classes for any persistent class
ca class contains all persistency services, e.g. creation of persistent object
create application object, key (book_id) must be set before
appl_object ?=
ca_book_ppf=>agent->if_os_factory~create_persistent_by_key(
i_key = book_id ).
Partner class
Create a partner class for the document partner that implements the interface IF_PARTNER_PPF. The
document partners are collected in a collection and transferred to the PPF. The class of the partner collection
already exists.
A partner consists of a partner function, partner number, and the data assigned from the central address
management (CAM: ZAV “Zentrale Adressverwaltung” in German): Person number, address number, and
address type. This data must be made available for every document partner by the application.
The PPF determines the relevant communication data for fax processing or mail processing using the
address numbers transferred.
Page 6
PPF
CL_PARTNER_COLL_PPF IF_PARTNER_PPF
Belegpartner
+ADD_ELEMENT() +GET_ZAV_ADDRESS()
+GET_PARTNER()
implements
partner class
CL_BOOK_PARTNER_PPF
-PARTNER_NO : PPFDPARTNO
-PARTNER_ROLE : PPFDPARTRL
-ZAV_ADDRESSNO : AD_ADDRNUM
-ZAV_PERSNO : AD_ADDRNUM
-ZAV_ADDR_TYPE : PPFDADRTYP
-PARTNER_TEXT : TEXT60
+IF_PARTNER_PPF~GET_ZAV_ADDRESS()
+IF_PARTNER_PPF~GET_PARTNER()
DATA:
* reference to partner object
partner TYPE REF TO cl_book_partner_ppf,
* reference to partner collection
partner_coll TYPE REF TO cl_partner_coll_ppf,
Context class
The context class encapsulates all the application data necessary for the PPF:
Application name
Reference to the application object (instance of the application class or proxy object)
Page 7
PPF
CL_CONTEXT_PPF
CL_PARTNER_COLL_PPF
NAME PPFDCNTXT
APPL REF TO OBJECT
APPLCTN PPFDAPPL
+ADD_ELEMENT()
PARTNER REF TO CL_PARTNER_COLL_PPF
GET_VALUE_OF_ATTRIBUTE
inherits from
REF TO
CL_DEMO_CONTEXT_PPF
-NAME : PPFDCNTXT
-APPL : REF TO OBJECT context class
-APPLCTN : APPLDAPPL
-PARTNER : REF CL_PARTNER_COLL_PPF
-ID : CHAR14
-PAGECOUNT : NUM4
-STATUS : PPFDDSTAT
-CREATOR : SYUNAME
+GET_VALUE_OF_ATTRIBUTE() : REF TO
CL_BOOK_PPF
-ID : CHAR10
DATA:
* reference to context object
context TYPE REF TO cl_demo_context_ppf.
Page 8
PPF
CL_SF_PROCESSING_PPF
+EXEC_SMART_FORM()
+EXEC_SMART_FORM()
+PROCESS_SMART_FORM() common out parameters
of smart forms function module
METHOD process_smart_form .
* function name
DATA: function_name TYPE rs38l_fnam,
Page 9
PPF
dummy(254) TYPE c.
Page 10
PPF
Page 11
PPF
IMPORTING
document_output_info = es_document_output_info
job_output_info = es_job_output_info
job_output_options = es_job_output_options
EXCEPTIONS
output_canceled = 1
parameter_error = 2
OTHERS = 3
.
IF sy-subrc <> 0.
* add an error message to processing protocol
CASE sy-subrc.
WHEN 1.
MESSAGE e016(sppf_media).
...
ENDCASE.
CALL METHOD cl_log_ppf=>add_message
EXPORTING
ip_problemclass = '1'
ip_handle = cp_application_log.
ENDIF.
ENDMETHOD.
The return parameter is evaluated centrally using the PPF. You can add your own entries to the processing
log and should also do this so that the application specific processing routines are also logged. A handle on
the application log is transferred for this as the parameter: ip_application_log. Entries can simply be made
using the interface of the service class CL_LOG_PPF:
Example:
MESSAGE i015(sppf_media) WITH ip_smart_form.
CALL METHOD cl_log_ppf=>add_message
EXPORTING
ip_problemclass = '1'
ip_handle = ip_application_log.
Page 12
PPF
The filter value is created when the BADI implementation is created and is therefore freely definable. A
description for the filter value should also be entered. For processing, you receive a reference to its
application object and hence have access to the document data. In addition, the document partner, a
reference to an application log (processing log), and a container with parameters are transferred. The
parameter values can be determined in Customizing. After processing, the processing status must be set
correspondingly (processed successfully = 1, processed with errors = 2). If the status is not explicitly set, the
PPF sets the status to processed with errors = 2.
In the BADI-Builder (transaction SE19), this can appear as follows:
Page 13
PPF
The logic for calling the Smart Forms is the same as the processing above, for an example, see the
implementation BCS_PROC (transaction SE19).
Page 14
PPF
2.2 Customizing
In Customizing (transaction SPPFC) you make your classes known to the PPF and define the determination
of the outputs: You assign the possible action definitions (for example, delivery note, order acknowledgment,
and so on) to your application. You must define a determination technology for each output type (see section
“Determination and Merging of Actions“).
The definition in Customizing only determines the framework, that is, all potential actions and their possible
processing options are declared. This definition can be used in an additional Customizing step to define
conditions (see 2.3 onwards). The actions only appear when the conditions have been maintained. Definition
in Customizing alone does not lead to the generation of actions.
Transaction SPPFC should never be added to the IMG directly. It can be called in a separate
application specific transaction when the parameter is set for the application.
An application that wants to use the PPF must be entered in Customizing of the PPF. In the initial screen,
you only enter a name and a description. In addition, you can enter the date profile of the application and the
BOR object or the business class here. The date profile and the object type are required for the definition of
the schedule condition. The conditions are based on attributes of the object type and date rules of the date
profile can also be integrated. Here you must also enter the name of your context class.
Since Basis Release 6.10, the application is maintained in a separate transaction (SPPFCADM).
Page 15
PPF
An action profile is a collection area for actions in a specific application context (for example, leasing actions,
actions for contracts, and so on).
You can transfer all relevant application data to the PPF using an instance of the context class. If you
maintained the context class at the application level, it does not have to be entered again here when it is
created from new. It is copied as the default value. The same applies for the date profile and object type.
The composite profile flag specifies that a profile is used as composite profile. A composite profile can be
inserted in other action profiles. Thus the actions from the composite profile can be used in the current
profile.
Used as
composite
Name of the Description profile
action profile
Business Object
Type and Date
Profile for Time
Rules
Name of the
context class
Page 16
PPF
An action profile can be assigned various action definitions. An action definition is the smallest business unit
that is to be output or processed – for example, if all delivery notes belong to the ’delivery note’ action
definition, whether they should now be printed, faxed, or output as normal.
You can deactivate an action using the action setting. If the action is set to inactive, it is ignored for action
determinations. It can therefore be ’deactivated’.
The actions in the document can be sorted using the sort function.
By double-clicking on the action definition, you can display the detailed settings.
Page 17
PPF
Page 18
PPF
Settings in detail
The search help for the partner function field can only deliver values if the application creates
and delivers a BAdI implementation for GET_PARTN_ROLES_PPF. Here you can use the
example implementation for the demo application (GET_ROLES_BOOK_PPF) to get more
information.
Page 19
PPF
Actions always occur using the execution of a processing. Currently, Smart Forms are supported as print, fax
or mail, plus the triggering of workflows and any method call. The new processing external sending can
replace the existing Smart Forms processing and additionally offers further extended functions.
Add a separate configuration for every processing. The settings made here serve as default values and can
be overridden in the conditions.
Assignment of
possible processing
options to an action
definition
Detailed settings
for Smart Forms
processing
Page 20
PPF
Make sure that the implementation was activated, otherwise it is not displayed in the F4 Help.
Page 21
PPF
When sending a fax, you have the option of sending a fax cover page. The name of the cover page (Smart
Form) is entered here. The format is fixed. FAX_COVER_PAGE_BCS must always be entered.
Optical archiving is possible. The object type and the document type must be added in the same way as with
Smart Forms.
Page 22
PPF
The determination returns templates for actions if the previously defined conditions are fulfilled by the
application data. The application data is transferred as a BOR object (for determination using conditions that
can be transported) or attributes of the action profile class (for determination using conditions). The
determination technology defines which conditions must be fulfilled by which application data.
A condition is encapsulated by a rule. You can think of the rule as an application data filter that controls
which data is finally released to the condition. A template for an action is appended to the rule. It is returned
as soon as the condition is fulfilled (and thus the rule).
The determination technology is appended to each action definition. Thus different action definitions can use
different determination techniques. The determination technology itself manages one or more rules.
Schedule Condition
As standard, a general tool for condition evaluation is used. In Message Control condition technology was
used for this purpose. Currently, the PPF offers the workflow condition editor and a self-developed
determination technology with generated coding conditions as tools. The determination technology with
generated coding conditions should no longer be used. It will not be developed any further. Instead, the
workflow conditions should be used. The workflow conditions can also be transported, but the coding
conditions cannot.
In release 6.30 there is a new condition logic available. These conditions are similar to the generated coding
conditions, however they are realized by BAdI implementations and thus they are also transportable.
Page 23
PPF
2.3.1.1 Workflow Condition Editor (Determination Using Conditions that Can Be Transported)
For Basis Release 6.10, the workflow condition editor replaces the old PPF determination technology. The
condition editor provides a graphical user interface and a transport connection. Thus, the applications can
preconfigure conditions (for example, document complete, example configurations) and deliver them to the
customers.
To ensure good performance, there should be generated workflow conditions. The user interface is similar to
PPF condition evaluation. The condition tool is simply a different one.
The conditions and settings can be transported and can thus be delivered.
Page 24
PPF
The parameter BOOK_DAMAGED is checked. If the book is damaged, the condition is fulfilled and the
relevant action is scheduled.
The user interface for merging the conditions is the workflow condition editor. Here the conditions are simply
brought together using the mouse. All attributes of the business object (here PPF demo object) and further
parameters (here: BOOK_DAMAGED) are available.
Page 25
PPF
This condition logic should not be used any more. Use either the workflow conditions or for
special scenarios the BadI conditions.
Conditions for
the action
definition
Action profile and action
definitions
Definition of the
condition as Result, if the
ABAP Coding condition is
fulfilled
The action profile of the application and the relevant action definitions are displayed in the top left-hand
screen area above. The conditions that were assigned to the action definitions appear right of this in the list.
The overview displays a number, the description of the condition, the assigned action (here: 2 expressions),
the stop flag, and a check symbol that displays whether the condition definition is consistent. The stop flag
means that once the condition has been met, further conditions are ignored.
There are 2 types of conditions: Conditions with an action and process conditions. Conditions with an action
are always assigned one action as a result. The process conditions do not have action templates. They
have a controlling character. The other conditions are only evaluated if the process condition returns FALSE
as the return value.
An action template (bottom right) can be assigned multiple processing options. If an invoice is to be sent by
post, for example and also printed out, simply assign the mail and fax as the processing here and perform
Page 26
PPF
the corresponding settings. If the condition is fulfilled, an action template with 2 processing options is
returned. The runtime system creates 2 separate actions from this.
The current conditions are created by an administrator in the production system since they are generally
based on application data that is only known in the productive system. A transport of conditions and thus a
preconfiguration provided by SAP is not possible with this tool.
Page 27
PPF
Merging is always necessary if existing, unprocessed actions have to be mixed with newly found actions.
This is the case, for example, if an existing document is changed. Since all data has changed, actions, that
were found when creating the document can be omitted, or new ones can be found. A new logic is required
for the merging of new and old actions.
The PPF currently provides three standard logics.
2.3.2.1 One unprocessed action only
This logic only permits one unprocessed action for each action type. The first unprocessed action remains
and all other actions are deleted. If the action is processed and another unprocessed action is found, then
this one remains.
2.3.2.2 One unprocessed action only per processing type
This logic only permits one unprocessed action for each processing type, that is one print, fax, or mail action.
Therefore, there can be multiple actions, but only one per processing type. The first unprocessed action of
the processing type remains, all further actions are deleted.
2.3.2.3 Only one action
This logic only permits one action for each action type. The first action remains, all further actions are
deleted.
2.3.2.4 Configurable action merging
This logic can be configured using a separate user interface. It can be set whether altogether one
unprocessed action may be produced or whether one unprocessed action may be produced for each
processing type.
In addition, the number of unprocessed actions can be restricted. For example, as shown here, you can set
that an action may only be successfully executed three times. Afterwards, the action is no longer scheduled.
Page 28
PPF
DATA:
* reference to application/proxy object
appl_object TYPE REF TO cl_book_ppf, ”application defined class
* reference to context object
context TYPE REF TO cl_demo_context_ppf, ”application defined class
* reference to partner object
partner TYPE REF TO cl_book_partner_ppf, ”application defined class
* reference to partner collection
partner_coll TYPE REF TO cl_partner_coll_ppf, ”PPF defined class
* reference to PPF manager (interface to PPF services)
manager TYPE REF TO cl_manager_ppf, ”PPF defined class
* determination protocol
determination_protocol TYPE balloghndl
book_id TYPE CHAR10.
Get an instance of class CL_MANAGER_PPF. This class displays the interface for PPF. All service methods
are called by it.
Generate the application object and set the key fields so that the application object can be found or
generated again. If the application object is a BOR object then its ID is set here. In our case, we set the key
fields of table PPFTBOOK so as to be able to access the entry later.
appl_object ?=
ca_book_ppf=>agent->if_os_factory~create_persistent_by_key(
i_key = book_id ).
Page 29
PPF
Generate a partner collection that can include several partner objects. The partner collection represents the
document partner
Generate a partner object and append it to the collection. You perform this step for every document partner.
The action profile object that encapsulates all information for the PPF. The name of the application and the
action profile that were defined in Customizing are transferred. The reference to the application is transferred
and also the partner collection. In addition, the application-specific fields are set for the action profile that are
relevant for determination. Conditions for an action are defined in these fields.
Page 30
PPF
context->creator = sy-uname.
...
Determination is started. As a return value, the application receives a determination log that displays how
many actions were found and why some actions were found. The determination log is not persistently stored
by the PPF itself. It is always created dynamically at runtime.
* start PPF
CALL METHOD manager->determine
EXPORTING io_context = context
IMPORTING ep_protocol = determination_protocol.
COMMIT WORK
The PPF uses the persistence services of Object Services. These services run after a COMMIT WORK, that
is, a COMMIT WORK must take place at the end so that the generated actions can be written to the
database.
Page 31
PPF
The action is executed as soon as it is found. Execution takes place during document editing. This can make
sense if you want an item in the document to be generated automatically, for example.
In this processing type, the actions are processed immediately after document processing, that is, after a
COMMIT WORK. Processing is triggered implicitly by the PPF.
Example: After the order is booked, an order confirmation is immediately sent by mail.
In later processing, the application itself must trigger the processing of actions. This generally occurs using a
selection report that selects the actions to be processed and triggers their processing. The PPF already
offers such a report (RSPPFPROCESS or transaction SPPFP). The report can also be triggered in the
background (without user interface).
Example: All faxes are to be sent at night in a batch run.
Actions can be generated here without the document already being posted. This processing type must be
declared in Customizing as permitted.
Example: A letter of invitation should be printed during the maintenance of a contact.
Page 32
PPF
The PPF provides a standardized user interface to display the found and manually added actions. In
addition, you can of course create your own user interface for your application. The APIs provide all functions
that are needed for this. The necessary function modules and subscreens are available in the function group
SPPF_VIEW_CRM. The standard UI is highly configurable, you can exactly determine which columns and
functions are to be displayed.
The user interface displays the existing actions and their status for a document. Newly found actions are also
displayed. A determination log documents in detail which actions have been found this time.
Page 33
PPF
Additional functions:
Actions can be added manually
There is a processing log for every processed action
The processing can be repeated (if allowed)
Page 34
PPF
Using this service, actions can also be provided from the worklist for scheduling from here.
Action service
A BOR object is needed to connect the GOS toolbar with the action service. The BOR object must implement
the BOR Interface IFGOSPPF (see TA SWO1). The interface defines 2 methods that are needed:
GET_MODE read mode (change or display mode)
GET_CONTEXTS read action profile
The service is contacted in Generic Object Services using the name PPFACTION. This name must be
transferred for the toolbar constructor. For more information on the Generic Object Services, read the
corresponding online documentation.
Page 35
PPF
3.4.1 Overview
Transactions ensure that a certain number of editing steps are either completely executed or not executed at
all. When the transaction ends, the transaction is either ended regularly and all data is written to the
database or the transaction is rolled back and none of the changes made reach the database.
The PPF essentially supports the transaction concept of the object services. For more documentation on
this, see Object Services. The object services do not support any parallel transactions, that is, two objects
(documents) cannot be edited in parallel, one is to be canceled and the other is to be saved. This is not
covered by the transaction model of object services. Since CRM really needs such a transactions concept,
an extension of the existing transaction model, the Object Pool, was implemented in cooperation with the
object services.
The Object Pool enables the parallel editing of documents. Here, the Object Pool is always notified which
document is currently active. Only one document can be edited for each session. Individual documents can
be selected for either saving or canceling (roll back of changes) after editing.
The following example shows how a call of the object pool can appear. First a document 1 is generated.
Here, the GUID of this document is used to start a transaction using set_guid. All persistent objects (in the
sense of Object Services) that are created from here on are linked to this transaction and can later be saved
or rejected. A document 2 can now be created in this mode. During its editing this document GUID must now
be set. Like before, all of the objects created are linked to the transaction with this GUID. After the document
is edited, the first document is saved here and the second document and the objects (actions) created are
rejected.
Page 36
PPF
time create
CRM business document 1
GUID: ABC
setGUID( 'ABC' )
CL_OBJECT_POOL
determine
CL_MANAGER_PPF
create
CRM business document 2
GUID: DEF
setGUID( 'DEF' )
CL_OBJECT_POOL
determine
CL_MANAGER_PPF
resetGUID( 'ABC' )
CL_OBJECT_POOL
saveGUID( 'ABC' )
CL_OBJECT_POOL
Page 37
PPF
All applications are displayed and there are links to the action definition, the condition configuration, and the
Wizard. You can also correct possible inconsistencies.
Page 38
PPF
5 Extendibility
The printer is generally returned by the determination with the template for the action. The determination
returns an action template with action processing. A printer can be entered in action processing.
It is often the case that a specific printer is to be used due to the application data. In this way, for example,
the printer can be determined depending on the sales organization. At definition time of the action template,
the sales organization is naturally unknown. For this reason, the following BADI is called provided the
template or the determination does not return a printer.
The BADI has the name of the action type as a filter value. As a further import parameter the implementing
class has a reference to the actions profile object and thus access to all document data. A printer can now be
found and returned using the document data.
Example implementation: PRINTER_DET_SUSR_PPF (transaction SE19)
The example implementation reads the master data of the current user and returns the printer maintained
there.
This BADI is called after the action is completed, that is, after the action is processed. As a result, the action
can perform subsequent actions. If processing is incorrect (that is, there were errors with the processing of
the action) a routine or transaction can be executed for error handling, for example.
The BADI has the application names as the filter value. The action is
also transferred and can deliver its processing status (successful, with
error) or other information.
Take care of the performance. An implementation of this BadI will be called after the execution
of any action within the application, as the application serves as filter value here. A better option
might be to listen to the executed event of CL_TRIGGER_PPF.
The BADI is used for potential extensions of the action profile class by the customers. If the attributes
defined in the action profile of the application are not sufficient for the customer’s determination, then he or
she can extend the application using action profile class using inheritance. The additional attributes must be
Page 39
PPF
provided with values. This BADI is used for this. The implementations are created for each trigger type. The
application should deliver example implementations.
The BAdI is called after the action determination has taken place and before the created action is checked.
Here additional data might be set for the processing of the action. The following methods are available
depending on the type of processing:
COMPLETE_MAIL Completes Mail Processing
COMPLETE_FAX Completes Fax Processing
COMPLETE_PRINT Completes Print Processing
COMPLETE_METHOD Completes BADI Processing
COMPLETE_WORKFLOW Completes Workflow Processing
COMPLETE_SEND Completes Transmission Processing
COMPLETE_ALERT Completes Alert Processing
The BAdI is called whenever a condition for the given BOR object type has to be evaluated. The
CI_CONTAINER contains the BOR object and the CI_PARAMETER the uses parameters. Additional objects
or parameters might be added to the container for condition evaluation.
An implementation will only work for buiness object repository (BOR) objects and not for class
objects. As the filter is only the business object type, the BAdI will be called whenever this object
type is used in a workflow condition. This BAdI should be only used after consulting PPF
development.
Page 40
PPF
The BAdI is a standard exit for enhancing business logic with dynamic processing. Via the implementation
PPF can trigger arbitrary business logic. After implementing the BAdI can be assigned in PPF customizing as
methodcall processing. Internal development is encouraged to use this processing type for generic
processing. Customers may also use this feature for customer specific processing.
Page 41
PPF
The PPF provides standard processing options. This is currently Smart Forms Print, Smart Forms Fax,
Smart Forms Mail, and generic action processing. In the future, even more processing options like XML or
workflow will be supported.
If this is not sufficient to you, you can add your own action media at any time using the action media
provided. By implementing the interfaces you automatically integrate the processing options without the need
for coding changes inside the PPF.
Further information on this topic is available on request.
If the standard determination technologies are insufficient or if any specific determination technologies are
necessary, your own determinations can be connected using the IF_DETERMINATION_PPF interface. The
new determination class implements the interface and the methods of the interface. Thus the new
determination is integrated in the framework and can be used. You can select it using the possible entries in
the Customizing of the action definition.
GET_PERSISTENCY_TABLE
Delivers the table in which persistent data for the determination object is to be stored. The information is
needed for the creation of the transport request in Customizing.
DETERMINE
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile class
IP_TTYPE Importing Type PPFDTT Action type
IP_DETLOG Importing Type BALLOGHNDL Log handle
RO_TRIGGER_TEMPL_COLL Returning Type Ref To CL_TRIGGER_TEMPL_COLL_PPF Collection of output templates
The actual determination method receives a reference to an actions profile object as the import parameter,
the action type, and a handle to a determination log that the condition is to fill. Using this information, the
determination returns one or multiple action templates.
Many different logics are also conceivable for the merging of existing and newly found actions. We offer
various standard logics. A self-defined logic is very easy to integrate. You must create a class for this that
implements the interface IF_MERGE_PPF. As a template, you can view the following classes:
CL_MERGE_MAX1_FOR_TYPE_PPF max. 1 unprocessed action for each action definition
CL_MERGE_MAX1_PPF max. 1 unprocessed action
Interface methods:
GET_PERSISTENCY_TABLE
Delivers a table in which the persistent data is stored for the determination object. The information is
necessary for the merging of the transport request in Customizing.
MERGE
Page 42
PPF
The merge method is called after determination to merge newly found actions with possible existing
actions using determination.
MERGE_SINGLE
The method MERGE_SINGLE is called after the manual generation of an action (see User Interface
section) to merge this with possible existing actions.
Page 43
PPF
6 Appendix
6.1.1 CL_MANAGER_PPF
The class CL_MANAGER_PPF serves as a central interface (API) for PPF. The following methods (services)
are offered:
GET_INSTANCE (Static Method)
Parameter: None
Effect: Delivers an instance of the class (singleton)
ADD_TRIGGER (Instance Method)
Parameter:
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
CO_TRIGGER Changing Type Ref To CL_TRIGGER_PPF Action
Effect:
Adds a new action for the action profile supplied
REPEAT_TRIGGER (Instance Method)
Parameter:
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
IO_TRIGGER Importing Type Ref To CL_TRIGGER_PPF Action to be repeated
RO_TRIGGER Returning Type Ref To CL_TRIGGER_PPF Repeated action
Effect:
Repeats processing of the action transferred
DELETE_TRIGGER (Instance Method)
Parameter:
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
IO_TRIGGER Importing Type Ref To CL_TRIGGER_PPF Action
Effect:
Deletes the unprocessed action transferred
DELETE_ALL_TRIGGERS (Instance Method)
Parameter:
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
IO_FORCE Importing Type BOOLE_D Without checks
Effect:
Deletes the actions of the transferred action profile. The method should be called when the document is
called.
GET_TTYPES (Instance Method)
Parameter:
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
RO_TTYPES Returning Type Ref To CL_TTYPE_COLL_PPF Action types of the action profile
Page 44
PPF
Effect:
Delivers the action types for the action profile transferred
GET_TRIGGERS (Instance Method)
Parameter:
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
RO_TRIGGERS Returning Type Ref To CL_TRIGGER_COLL_PPF Actions for action profile
Effect:
Delivers all possible actions for the action profile
CREATE_TRIGGER (Instance Method)
Parameter:
IP_TTYPE_NAME Importing Type PPFDTT Action definition
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
RO_TRIGGER Returning Type Ref To CL_TRIGGER_PPF Action
Effect:
Generates an action of the transferred type for this action profile
DETERMINE (Instance Method)
Parameter:
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
EP_PROTOCOL Exporting Type BALLOGHNDL Determination log
Effect:
Starts the determination for the action profile transferred and returns the determination log
SET_APPLKEY (Instance Method)
Parameter:
IP_APPLKEY Importing Type PPFDAPPKEY Application key
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
Effect:
Sets the field APPLKEY in all actions of the action profile with which the system can later search and
sort by
REFRESH (Instance Method)
Parameter: None
Effect: All data of the PPF manager is lost
Resets the PPF manager, allocated memory is released
LOCK_TRIGGERS (Instance Method)
Parameter:
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
Effect:
Locks the triggers of this action profile for processing, recommended for incomplete documents
UNLOCK_TRIGGERS (Instance Method)
Parameter:
IO_CONTEXT Importing Type Ref To CL_CONTEXT_PPF Action profile
Page 45
PPF
Effect:
Unlocks triggers of this action profile for processing
Events:
DETERMINATION_DONE Determination was performed
CHANGED Changes were performed
REFRESHED Manager was reset
GRID_CHANGED Changes in the interface were made
Attribute:
LOCALE_UPDATE Boolean variable default = 'X'
The effect of the attribute is that actions that are to be processed when the document is saved are
processed synchronously. If the flag is set to SPACE, processing takes place asynchronously using
RFC.
Page 46
PPF
Logische Ansicht
CL_TTYPE_CUST_PPF
-NAME : PPFDTT
IF_DETERMINATION_PPF CL_CONTEXT_DEF_PPF
-DESCRIPTION : PPFDTTT
-CHANGEABLE : PPFDCHNG
-MULTIPLE_ISSUING : PPFDMULTP -NAME : PPFDCNTXT
+GET_PERSISTENCY_TABLE() -PARTNER_INDEP : PPFDNOPART -DESCRIPTION : PPFDCNTXTT
triggerTypeList
+DETERMINE() -PARTNER_ROLE : PPFDPARTRL -CLASS : PPFDCLASS
-DISPATCH_TIME : PPFDDSPTCH
-DEACTIVATED : PPFDTTIACT
-MEDIUM_COLL : CL_MEDIUM_CUST_COLL_PPF
-DETERMINATION : IF_DETERMINATION_PPF
IF_MERGE_PPF -MERGE : IF_MERGE_PPF
+GET_PARTNER_INDEP()
+CONSTRUCTOR() contextList
+GET_PERSISTENCY_TABLE() +SET_DATA_FROM_DB()
+MERGE() +GET_ALL_DATA()
+MERGE_SINGLE() +SET_MEDIUM_COLL()
+GET_MEDIUM_COLL()
+GET_DISPATCH_TIME()
+GET_DEFAULT_MEDIUM()
CL_APPL_CUST_PPF
CL_MEDIUM_GENERIC_CUST_PPF
CL_CUST_MANAGER_PPF
Page 47
PPF
manager
Logische Ansicht
CL_CONTEXT_MANAGER_PPF CL_MANAGER_PPF - singleton
processing
triggerTypeList IF_MEDIUM_PPF protocol
+CHECK()
newTrigger +MEDIUM_CHANGED()
CL_TTYPE_PPF List CL_PARTNER_PPF +COPY()
+EXECUTE() CL_PROTOCOL_PROC_PPF
-NAME : PPFDTT -PARTNNO : PPFDPARTNO +PREVIEW()
-DETERMINATION : IF_DETERMINATION_PPF -PARTNROLE : PPFDPARTRL +IS_EQUAL()
-MERGE : IF_MERGE_PPF -PARTNTEXT : PPFDPARTTX +LANGUAGE_IS_EQUAL()
-NEW_TRIGGER_LIST : CL_TRIGGER_COLL_PPF CL_TRIGGER_PPF -PARTNTY : PPFDPARTTY +COMPLETE()
-CURRENT_TRIGGER_LIST : CL_TRIGGER_COLL_PPF -ZAVADDR : AD_ADDRNUM +PARTNER_IS_EQUAL()
-MEDIUM_LIST : CL_MEDIUM_CUST_COLL_PPF -APPL : Object -ZAVPERS : AD_ADDRNUM +GET_PARTNER()
-CONTEXT : IF_CONTEXT_PPF -APPLCTN : PPFDAPPL -ZAVTYPE : PPFDADRTYP +GET_PROCESSING_LOG()
-TTYPE_CUSTOMIZING : CL_TTYPE_CUST_PPF -APPLKEY : SYSUUID_C -ZAVCOMMNO : AD_CONSNUM +SET_PARTNER()
+GET_TRIGGERS() -CONTEXT : PPFDCNTXT +GET_TYPE()
+GET_TTYPE_CUSTOMIZING() -DISPATCH : PPFDDSPTCH
+CHECK_TRIGGER() -IS_CHANGED : PPFDTTCHNG
+CREATE_TRIGGER() -IS_INACTIV : PPFDIACT
+CONSTRUCTOR() -IS_LOCKED : PPFDTLOCK
+ADD_TRIGGER() -IS_REPEAT : PPFDTRPT
CL_SF_PRINT_PPF CL_SF_FAX_PPF CL_SF_MAIL_PPF CL_MEDIUM_GENERIC_PPF
+DETERMINE() -MEDIUM : IF_MEDIUM_PPF
+DELETE_TRIGGER() -STATUS : PPFDTSTAT
+REPEAT_TRIGGER() -TIMECHANGE : PPFDTCHNGD
-TIMECREATE : PPFDTCREAT
-TTYPE : PPFDTT
determination -USERCHANGE : PPFDUCHNGD calls processing
protocol currentTrigger
-USERCREATE : PPFDUCREAT method of this
List
+CREATE_TRIGGER_FROM_CUST() calls processing class calls processing
MEDIUM_LIST +CREATE_TRIGGER_FROM_TEMPLATE() method of this method of this
+CREATE_TRIGGER() class class
+DELETE_TRIGGER()
+COPY()
+EXECUTE()
CL_PROTOCOL_FIND_PPF +REPEAT()
+PREVIEW() inherits
CL_PROCESSING_DEMOBOOK_PPF CL_SF_PROCESSING_PPF
from
IF_MEDIUM_CUST_PPF
Page 48
PPF
The super class CL_CONTEXT_PPF encapsulates all necessary data for the action
determination. Any application using PPF has to define a class which inherits from
CL_CONTEXT_PPF and extends it with further attributes which can be used as sort fields for
later processing of the action. A reference to this class will be transmitted to the PPF
framework in order to determine the appreciate actions.
CL_CONTEXT_PPF CL_PARTNER_COLL
+NAME : PPFDCNTXT
+APPL : REF TO OBJECT business document IF_PARTNER_PPF
+APPLCTN : PPFDAPPL +ADD_ELEMENT() partner
+PARTNER : REF TO CL_PARTNER_COLL_PPF +DELETE_ELEMENT()
+GET_NEXT_ELEMENT() +GET_ZAV_ADDRESS()
GET_VALUE_OF_ATTRIBUTE +GET_NUMBER_OF_ELEMENTS() +GET_PARTNER()
+RESET_ITERATOR()
+CLEAR()
+CONTAINS()
implements
CL_BOOK_PARTNER_PPF
-PARTNER_NO : PPFDPARTNO
-PARTNER_ROLE : PPFDPARTRL
-PARTNER_TYPE : PPFDPARTTY
CL_DEMO_CONTEXT_PPF -ZAV_ADDRESSNO : AD_ADDRNUM
-ZAV_PERSNO : AD_ADDRNUM
-NAME : PPFDCNTXT -ZAV_ADDR_TYPE : PPFDADRTYP
-APPL : REF TO OBJECT -PARTNER_TEXT : TEXT60
-APPLCTN : PPFDAPPL REF TO +IF_PARTNER_PPF~GET_ZAV_ADDRESS()
-PARTNER : REF CL_PARTNER_COLL_PPF +IF_PARTNER_PPF~GET_PARTNER()
-ID : CHAR10
-PAGECOUNT : NUM4
-STATUS : PPFDDSTAT
-CREATOR : SYUNAME
+GET_VALUE_OF_ATTRIBUTE() : the PPF demo application for example
defines the following context class
REF TO
IF_LOCK_PPF
CL_BOOK_PPF implements
-ID : CHAR10
+ENQUEUE()
+TITLE : TEXT60
+DEQUEUE()
+AUTHOR : TEXT60
-... :
+IF_LOCK_PPF~ENQUEUE()
+IF_LOCK_PPF~DEQUEUE()
Page 49
PPF
/
«class» /
user-defined IF_OS_TRANS :CL_MANAGE
CL_OS_SYST IF_OS_TRANS
program ACTION_MAN R_PPF
EM ACTION
AGER
get_transaction_manager()
:IF_OS_TRANSACTION_MANAGER
create_transaction()
:IF_OS_TRANSACTION
start()
start of transaction
get_instance()
:CL_MANAGER_PPF Why is this object created by
Implementing class the user? Could be provided
get reference to persistent application has to be user- as Singleton (or static class)
object, eg via get_persistent_*, defined and managed by
create_persistent_*, etc. (name of he IF_CONTEXT_PPF
'application object' application class is needed probably)
/
«create»
IF_CONTEXT_
PPF
Implementing class
has to be user-
«create» :CL_PARTNER defined
_COLL_PPF
/
[all partners] «create» ( "parameter list defining the partner" )
IF_PARTNER_
PPF
set up partners
[all partners] append( :IF_PARTNER_PPF )
determine( :CL_MANAGER_PPF )
see further
determination sequence
diagram
end()
end of transaction
COMMIT WORK
Page 50
PPF
Determination, Scenario A : part 1 - trigger type does not exist yet (AH_990909)
get_all_data()
PPFSTTCUAT
get_instance()
:CL_TRIGGER_SELECTOR_PPF
select_by_context_appl_type(:OBJECT,
context?, ttype?, status)
current_trigger_list:CL_TRIGGER_COLL_P
PF
current_trigger_
[current_trigger_list is initial] «create»
list:CL_TRIGG
ER_COLL_PPF
new_trigger_list
«create»
:CL_TRIGGER
_COLL_PPF
:CL_CONTEXT_MANAGER_PPF
Page 51
PPF
/
:CL_CONTEXT «class» / / new_trigger_list ttype_customizi :CL_TRIGGER /
:CL_MANAGE IF_OS_TRANS :CL_TTYPE_C :CL_TTYPE_P
_MANAGER_P CL_OS_SYST IF_OS_TRANS IF_DETERMIN :CL_TRIGGER ng:CL_TTYPE_ _TEMPL_COLL IF_MERGE_PP
main program R_PPF ACTION_MAN OLL_PPF PF
PF EM ACTION ATION_PPF _COLL_PPF CUST_PPF _PPF F
AGER
determine()
get_transaction_manager()
:CL_OS_TRANSACTION_MAN
AGER
register on event
'FINISHED' which is
raised by get_current_transaction()
IF_OS_TRANSACTI /IF_OS_TRANSACTION
ON (needed to start
activities after
'COMMIT WORK') set handler 'on_finished'
determine(:IF_CONTEXT_PPF,
ttype)
:CL_TRIGGER_TEMPL_COLL_PPF
clear()
get_all_data()
PPFSTTCUAT
Page 52