This page explains the recommendations for a QPPD software architecture.
VART classes
It is generally advisable to encapsulate the functions for all objects of a Specification type in a customer-specific ABAP class. These classes are also called Z-VART classes, which inherit from the standard QPPD ABAP class for the specification type, so-called standard VART class, /SCT/QP_CL_VART, and implement their customer-specific interface. This is described in more detail in Implementing functionality for Specification types (P). The Z-VART class uses the methods of the standard VART class and/or the API of the QPPD, the BUS, as well as its own coding to implement the required functions. The BUS is described further here: Business Service - BUS (P). The aim should be to outsource the required coding to the Z-VART classes as far as possible. This means that coding, e.g. in reports, function modules, modules etc., should be limited to the most necessary and as much coding as possible should be implemented in the Z-VART classes.
BADIS/event handler
The QPPD provides various BADIs, which are described in BADIs (P). We recommend that the above-mentioned Z-VART class implements the BADI interfaces. This creates a central location for all relevant BADI implementations for a specification type. In addition, there are a number of events to which the VART class reacts with ON methods and which can be implemented individually for each customer.
Generation
We recommend creating a SUPER class for all customer-specific generation classes, which inherits from the standard generation class /SCT/QP_CL_GEN_STD, and where all common attributes are instantiated and common methods are made available. The methods of the Z-VART class should be used to implement the generation.
Authorization class
The central class for processing authorizations, /SCT/QP_CL_AUTHORITY, can be extended on a customer-specific basis in order to implement additional checks.
INFO provider
We recommend creating a Z class as an "INFO provider". This class provides simplified access to functions of the QPPD standard and in particular the Z-VART classes. This approach has the advantage that the QPPD-specific programming remains as encapsulated as possible and hardly any QPPD knowledge is required to be able to use QPPD functions.
The following image illustrates the implementation.
