Adjustability Criteria from Release 4.5B 
Introduction
Table maintenance dialogs are used mainly to create and transport customizing settings. Experience shows that problems can arise when importing customizing changes into the production system because of the different customizing environment compared to the quality assurance system, requiring additional effort and causing increased costs. Many customers are aware of this problem and avoid it by recreating the customizing settings in the target system (usually the production system) manually. This procedure is made no longer necessary by the Customizing Cross-System Viewer (CCS Viewer) and the Customizing Transfer Assistant (CTA) from Release 4.5A. The CCS Viewer compares the customizing settings in two clients and adjusts any diffences individually (performing all checks). The CTA is a CCS Viewer add-on which automatically controls the checked mass copy of customizing data.
Customizing settings are compared and copied with checks using the standard table maintenance, i.e. the customizing activity must use the view/view cluster maintenance for adjustment to be possible. Individually programmed IMG activities cannot be handled by the CCS Viewer and CTA.
The CCS Viewer and CTA copy the customizing changes into the target client in the associated dialogs. All checks which are made in online maintenance are performed. This procedure is technically unproblematic for unmodified dialogs. If individual checks, dialogs or events have been added to the dialog, the adjustment may not work. For this reason, the two tools cannot currently handle modified dialogs. This is unsatisfactory because many modifications need not prevent adjustment. The person responsible for a modified dialog must decide whether it can be handled by the CCS Viewer and CTA according to fixed criteria. This document describes these criteria to enable the person responsible to decide whether a dialog is "adjustable" or not.
The adjustability is indicated by a flag in the maintenance object description header, which is processed by the CCS Viewer and CTA. The flag can have the following values:
The flag must be set manually for modified dialogs, by the person responsible. This new flag is maintained for individual dialogs in SE54. The flags for all the maintenance dialogs in a development class can be set by the program RSVIEWMOD.
The developer must check the effects of modifications/enhancements on the adjustment, according to the criteria, before setting the flag. The effort required to do this depends on the environment, and cannot be estimated generally.
![]()
The document is divided into sections for view maintenance and view cluster maintenance. Both sections start with an overview of the critical points to allow quick orientation and selective reading.
Modified view maintenance dialog criteria
The following maintenance dialog modifications are critical for automatic and dialog adjustment:
Preliminary remarks
If the VIM_IMPORT_MODE_ACTIVE flag is not SPACE_DIRECT_UPGRADE, the maintenance dialog was called by CTA in automatic adjustment mode.
1. Use of subsets
If a key field is defined as a subset of the view, only this subset is locked in normal view maintenance, and only the data belonging to this subset is read into the internal table TOTAL.
Checked copying completely locks the affected tables, and the entire dataset is read into the table TOTAL. DBA_SELLIST, the internal table conaining the database access selection criteria, contains no value for the subset field at lock and read time
![]()
If there is a subset field value in the ABAP/4 Dictionary, the subset is used for locking and reading.
Application-specific events which assume that DBA_SELLIST contains concrete subset field values at lock or read time are not automatically adjustable.
![]()
Automatic adjustment
Datasets are automatically adjusted and saved by subset, i.e. both DBA_SELLIST and DPL_SELLIST, which contains the selection critera for data display, contain the current subset field value. The table EXTRACT contains the entries to be copied from the adjustment data set.
In contrast to normal processing, the internal table TOTAL contains the complete dataset of the relevant tables during automatic adjustment. Any individual check modules and events before or at saving must handle this correctly.
Dialog adjustment
In contrast to automatic adjustment, only the dataset for the current key, not the entire dataset, is read into the table TOTAL in dialog adjustment. DBA_SELLIST contains the selection criteria, so you can here also not assume that DBA_SELLIST contains exactly one value for a subset field.
The table EXTRACT contains the entries to be copied. Data are copied subset-independently, so the table can contain data records for various subset values. When an indivdual dataset is copied, the current subset value is in the table DPL_SELLIST.
All datasets are saved in one subset-independent step. This must be taken into account in the individual save routine.
2. Field value change sequence
![]()
3. Subobject-specific checks
The CCS Viewer and CTA do not recognize or perform subobject-specific checks or logic. The maintenance object description subobject is not in the change request and is therefore unknown. The associated Set/Get parameter CUS is also not set.
![]()
![]()
If the subobject specifies a subset field value, this value can be determined from DPL_SELLIST during copying and saving (but not when locking and reading, see Use of subsets), so the subobject can be found.
If the subobject specifies selection areas (for non-subset fields), it is not possible to determine the associated subobject, because all view keys in the change request are copied in one step, and data for different subobjects can be read in in the same step
4. Create, change or delete additional data independently of
SaveStandard dialog modifications or enhancements which create change or delete database data or objects independently of the view maintenance Save function, are not allowed for automatic adjustment. These database changes cannot be reset in the case of a CCS Viewer or CTA error, and would cause an inconsistent target system.
![]()
If this is not the case, ensure that the enhancements/modifications are not processed at the adjustment, using the global flag VIM_IMPORT_MODE_ACTIVE. (for the use of VIM_IMPORT_MODE_ACTIVE see:)
![]()
Modifications/enhancements which create, change or delete database data independently of the view maintenance Save function also conflict with the table maintenance online dialog concept and should therefore be revised.
5. Additional table maintenance
Modifications/enhancements of a standard dialog which maintain additional data in tables which are not in the view, are not processed by the CCS Viewer and CTA.
![]()
Additional data derived from the view data and maintained in the background, is handled as in online maintenance, i.e. the dialog can be flagged as adjustable without modification
. Such entries in the work list are ignored by the CCS Viewer and CTA, i.e. the data are not read in from the adjust dataset. This is also not necessary as these data are created in the background during the adjust (as in online maintenance).You must read in and save the additional tables yourself, as in online maintenance. If you do this in the view maintenance events intended for it, these actions are performed in automatic and dialog adjustment (as in online maintenance).
.6. Messages
Messages are logged by the CCS Viewer and CTA in automatic adjustment. The processing of the current record (or records) is also canceled if an error occurs. For messages in modifications and enhancements to the standard dialog to be logged and the copy canceled if an error occurs, note that:
![]()
The form routine interface is as follows:
A batch message type (parameter PM_BATCH_TYPE) must be passed to this routine in addition to the usual MESSAGE parameters. This message type is used when the adjustment runs in the background, i.e. without dialog.
![]()
The parameter for the batch message type is required for technical reasons: only E and A messages lead to a system exception and can be handled by the CCS Viewer and CTA. In dialog mode it is possible and sometimes useful to use S,W, or I messages as well for error handling, for example to check entries in several loop lines for consistency together. Such constructions can cause infinite loops in automatic adjustment, so such messages must have type E or A in automatic mode. The parameter PM_BATCH_TYPE in the routine VIM_PROCESS_MESSAGE must be set appropriately.
![]()
You want an S message in automatic adjustment to be logged, but not to cancel processing of the record:
data:
m_id like sy-msgid,
m_online_type like sy-msgty,
m_batch_type like sy-msgty,
m_nbr like sy-msgno,
m_v2 like sy-msgv1,
m_v3 like sy-msgv1,
m_v4 like sy-msgv1.
m_id = 'xx'.
* in dialog and automatic adjustment
m_online_type = 'S'.
* send S message
m_batch_type = 'S'.
*application-specific message number
m_nbr = 'yyy'.
perform vim_process_message using m-id m-online_type m_batch_type m_nbr m_v1 m_v2 m_v3 m_v4.
instead of
message Syyy(xx) with ...
![]()
The program code for sending an S message which has the character of an E message and cancels the processing of the current record in automatic adjustment, is as follows (with analogous data declaration):
m_id = 'xx'.
m_online_type = 'S'.
m_batch_type = 'E'.
m-id = 'xx'.
*application-specific message number
m_nbr = 'yyy'.
perform vim_process_message using m_id m_online_type m_batch_type m_nbr m_v1 m_v2 m_v3 m_v4.
7. User dialogs
No modifications/enhancements which contain user dialogs are allowed because the CCS Viewer and CTA copy the customizing settings in the background.
![]()
User dialogs can be omitted if the information requested in the dialogs is already in the data to be copied.
If the user dialogs are omitted use the VIM_IMPORT_ACTIVE flag to not process the dialogs in adjustment mode.
If the user dialogs are also necessary in the adjustment and can run in the background, change the program code appropriately (SUPPRESS DIALOG).
You must program your own input field data entry. Otherwise the entire maintenance dialog cannot be adjusted automatically .8. View-specifically generated internal data table access
![]()
This section is only relevant for views, not tables, as generated data tables only exist for views.
You can access the internal tables which contain the view data in view maintenance, using the generated variable <viewname>_TOTAL or <viewname>_EXTRACT, or the global parameters TOTAL and EXTRACT. Both types of access get an internal table header record.
In normal online processing, these header records occupy the same memory space, i.e. the global field symbols defined in the view maintenance, e.g. <VIM_XTOTAL_KEY> or <ACTION> point to this header record. In background copying there are two different header records. If the view is called VHUGO, header records exist for VHUGO_TOTAL and TOTAL, although the rest of the tables VHUGO_TOTAL and TOTAL occupy the same memory.
The field symbols defined by the view maintenance, such as <VIM_XTOTAL_KEY> and <ACTION> point to the header record for TOTAL, but not to the header record for VHUGO_TOTAL. If the generated data declarations and the field symbols are used at the same time in individual routines, e.g. in the statement
sort vhugo_total by <vim_xtotal_key> , the program is canceled.loop at vhugo_total
if <action> =
endloop.
does not have the desired result because <ACTION> points to the header record TOTAL and does not change in the loop.
![]()
You should use the global parameter even if this is inconvenient because of the structure info not being statically available. Program the above examples as follows:
loop at total
if <action> =
endloop.
The use of the generated data requires the definition of user field symbols.
![]()
field_symbols: <vhugo_xtotal_key> type x,
<vhugo_xtotal>.type x,
<vhugoaction> type c.
read table x_header index 1.
assign vhugo_total to <vhugo_xtotal> casting.
assign <vhugo_xtotal> (x_header-after_keyx) to <vhugo_xtotal_key>.
assign <vhugo_xtotal> + x_header-after_tabc (cl_abap_char_utilities => charsize) to <vhugo_action> casting.
sort vhugo_total by <vhugo_xtotal_key>
or
loop at vhugo_total.
if <vhugo_action> = ...
endloop.
![]()
This example assumes that the view VHUGO has the keys K1 and K2.
sort vhugo_total by K1 K2
or
loop at vhugo_total.
if vhugo_total-action = ...
endloop.
Modified view cluster maintenance dialog criteria
Modified view clusters and view clusters with modified individual dialogs are critical for the CCS Viewer and CTA. The following modifications prevent automatic adjustment, but allow dialog adjustment:
The following modifications also prevent dialog adjustment:
Preliminary remarks
The global flag VCL_SPECIAL_MODE specifies the view cluster maintenance mode. If the flag is:
1. Subdialogs which are not automatically adjustable
2. User dialogs
View cluster events must not contain user dialogs, except at events not processed in the automatic comparison, because this would stop the automatic adjustment.
![]()
![]()
If the user dialog is required, the view cluster is not automatically adjustable.
3.
MessagesAll S, I and W messages are ignored in automatic adjustment. As view cluster event error messages must always be sent as S or I messages, the errors are not logged (see also the Application help topic "View cluster events, technical background").
![]()
An individual consistency check error occurs in the event before saving. An I message is sent, and VCL_STOP is set in the event to cancel the save routine. The log does not record the error. In the worst case, such a situation could even lead to an infinite loop becase the error cannot be solved and an I or S message does not cancel the action.
![]()
form vcl_process_message using value(pm_id) like sy-msgid
value(pm_online_type) like sy-msgty
value(pm_batch_type) like sy-msgty
value(pm_nbr) like sy-msgno
value(pm_v1) like sy-msgv1
value(pm_v2) like sy-msgv2
value(pm_v3) like sy-msgv3
value(pm_v4) like sy-msgv4.
Message types for import and online maintenance (PM_BATCH_TYPE/PM_ONLINE_TYPE) can be specified here.
![]()
You perform your own consistency check, which sends the following I error message, in the event before saving:
message I999(yy) with m_v1 m_v2 m_v3 m_v4.
Using the routine produces the following ABAP/4 statement:
perform vcl_process-message using 'yy' 'I' 'E' '999' m_v1 m_v2 m_v3 m_v4.
In online maintenance the routine sends the message normally as an I message like the message statement in the above example. In automatic adjustment the error message is logged. No save is made, so the data which causes the inconsistency is not imported.
To cancel the entire automatic adjustment, use message type A as PM_BATCH_TYPE.
![]()
You use an individual lock routine. A table lock error occurs. In dialog you would continue in display mode after sending a message (by changing the maintenance mode in the routine). In automatic adjustment mode, this call:
m_v1 = sy-uname.
clear:m_v2, m_v3, m_v4.
perform vcl_process-message using 'SV' 'I' 'A' '049' m_v1 m_v2 m_v3 m_v4.
4.
Events not processed in automatic adjustmentThe following view cluster navigation or data maintenance area definition events are not processed:
If these events contain relevant checks, automatic adjustment with the CCS Viewer and CTA is not possible.
![]()
5.
Use of the event SV6.
Switching to display mode in eventsSwitching to display mode in events (in particular events 01, 06, EQ, RE - e.g. if a table cannot be locked) is forbidden because it stops the automatic adjustment.
![]()
7
Use of subsetsIf a subset is defined in a root object for the view cluster, the keys in the change request are used to reconstruct the subsets and automatically adjust by subset. Only the records for a subset in the change request are read in, changed and saved, i.e. the "TOTAL" tables of all subobjects only contain the entries for this subset. The subset field(s) value is entered in the selection list "DBA-SELLIST" for all subobjects, as in online maintenance. Lock is an exception. All tables involved are completely locked at the start of automatic adjustment. So application-specific lock events must lock subset-independently in automatic transfer, otherwise the view cluster is not automatically adjustable.
In the following cases the values for the subset fields cannot be determined from the keys in the change request:

"Generically transported" means: keys in the change request cannot be completely specified, for technical reasons, e.g. because the key of an entry is longer than 120 characters, or it contains special data types, e.g. integer or packed number. In this case the change request contains the key only uo to the 119th place, or until the first field with a special data type. If the key subset field has such a special data type or is "to the right" of such a field in the table, the value of this field cannot be derived from the key in the change request.
If the subset values cannot be reconstructed from the transport key, all entries are processed at once, not by subsets, i.e. the subobject "TOTAL" data tables contain entries for several different subset values and no subset field value is specified in the data read selection lists "DBA_SELLIST". If the event program logic assumes that the "TOTAL" tables only contain entries for one subset, or that the subset value is entered in the "DBA_SELLIST", automatic adjustment is not possible. Lock, read and save events in particular should be checked for this.
![]()
Individual read routines is to be programmed so that the complete tables are read in.
An individual check routine which checks the consistency of all entries for a subset before saving must be modified so that it processes the entries for a subset, not all entries in "TOTAL".
8
Use of the table "EXTRACT" in automatic adjustmentDialog adjustment: General comments
In dialog adjustment the view cluster object hierarchy is presented to the user in its own screen:

The adjustment can be performed per subobject (view/table) from this screen, using the adjust icons. All entries in the change request for a subobject are adjusted in one step, not selectively for the entries which were selected at a higher level. There is no navigation in adjustment as in 'normal' view cluster maintenance, in which entries in a higher-level object are selected and then just the dependent objects can be processed . The reason for this is that a user cannot get an overview of all changed entries, he or she must go to all dependent subobjects of all higher-level entries to make the adjustment
You can go to the 'normal' view cluster maintenance by choosing Object maintenance. You can also adjust individual entries here under Utilities à Adjust. Not all maintenance function are available because you are in adjust mode (Delete, New entries, Copy are not possible). You can return to the adjustment structure overview by choosing Back.
9
Not dialog-adjustable subdialogs10 Events not processed in dialog adjustment
The following view cluster navigation or data maintenance area definition events are not processed, as in automatic adjustment:
If these events contain relevant checks, dialog adjustment with the CCS Viewer and CTA is not possible.
![]()
11. Subset processing
12. Dynamic modifications to the object structure VCL_STRUC_TAB
You can adjust view clusters in dialog by subdialog in the hierarchical view cluster display (See General remarks). Only those subobjects are presented which are not marked as hidden in the object structure (as in the navigation subscreen). Subobjects marked as hidden cannot be adjusted. This is usually not a problem because entries in such a table are also created hidden in the 'normal' dialog, i.e. they are not created explicitly by the end user. These entries are also created hidden because all modifications are also performed in dialog adjustment.
![]()
View clusters in which this hidden flag is changed dynamically in an event are not adjustable (component SUPPRESS in the global internal table VCL_STRUC_TAB).
Viewc lusters with hide flags which hide objects during navigation in an event are also not adjustable.
![]()
Your viewcluster has a root object ROOT and 2 dependent objects DEP1 and DEP2, and a field FLAG. There is an entry in either DEP1 or in DEP2, depending on the value of FLAG. The subobject DEP2 is flagged as hidden. Event 10 determines which navigation entry was set in ROOT and goes dynamically to either DEP1 or DEP2 depending on the value of FLAG in this record, by setting VCL_NEXT_VIEW
This beviour cannot be reproduced in dialog adjustment. This view cluster is not adjustable because not all subobjects are offered for dialog adjustment because of the hidden flag.