KEMBAR78
SAP Note | PDF | Data Type | Subroutine
0% found this document useful (0 votes)
457 views40 pages

SAP Note

This document contains code definitions and class methods for transporting and logging objects between different SAP systems. It defines methods for creating data elements, messages, documentation, and registering inactive objects. Methods are also included for setting context, activating objects, and performing mass activations between systems.

Uploaded by

fairwellmd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
457 views40 pages

SAP Note

This document contains code definitions and class methods for transporting and logging objects between different SAP systems. It defines methods for creating data elements, messages, documentation, and registering inactive objects. Methods are also included for setting context, activating objects, and performing mass activations between systems.

Uploaded by

fairwellmd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 40

*&---------------------------------------------------------------------*

*& Report Z_DOCU_REPORT


*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT Z_NOTE_1871755_MSG.

* Generated by SAP_LOCAL_DOWNPORT_ASSISTANT Version 3.40 on 20.06.2013

* The individual coding starts at 'FORM action.' ( line 1.847 )

PARAMETERS testrun RADIOBUTTON GROUP mode.


PARAMETERS update RADIOBUTTON GROUP mode.
DATA genview.
PARAMETERS showlogs RADIOBUTTON GROUP mode.
DATA: gv_copy_translation.

TYPE-POOLS: seox, seoc, seok, seex, bcwbn, ststc, trmtd.

TYPES: t_switch_id TYPE char30, "sfw_switch_id does not exist in SAP_BASIS 640
t_bfunction TYPE char30, "sfw_bfunction does not exist in SAP_BASIS 640
BEGIN OF t_bf_sw, "sfw_bf_sw
switch_id TYPE t_switch_id,
version,
bfunction TYPE t_bfunction,
no_check,
END OF t_bf_sw,
BEGIN OF
dd43v,typename(30),seckeyname(30),ddlanguage,seckeyunique,accessmode,kind,keydescri
ption(80),END OF dd43v.

TYPES: tt_dd05m TYPE TABLE OF dd05m,


tt_dd17v TYPE TABLE OF dd17v,
tt_dd26v TYPE TABLE OF dd26v,
tt_dd28v TYPE TABLE OF dd28v,
tt_dd30v TYPE TABLE OF dd30v,
tt_dd30tv TYPE TABLE OF dd30tv,
tt_dd31v TYPE TABLE OF dd31v,
tt_dd32v TYPE TABLE OF dd32v,
tt_dd32p TYPE TABLE OF dd32p,
tt_dd33v TYPE TABLE OF dd33v,
tt_dd36m TYPE TABLE OF dd36m,
tt_dd42v TYPE TABLE OF dd42v,
tt_dd43v TYPE TABLE OF dd43v,
tt_e071k TYPE TABLE OF e071k,
tt_langu TYPE TABLE OF sylangu,
tt_sta TYPE TABLE OF rsmpe_stat,
tt_fun TYPE TABLE OF rsmpe_funt,
tt_men TYPE TABLE OF rsmpe_men,
tt_mtx TYPE TABLE OF rsmpe_mnlt,
tt_act TYPE TABLE OF rsmpe_act,
tt_but TYPE TABLE OF rsmpe_but,
tt_pfk TYPE TABLE OF rsmpe_pfk,
tt_set TYPE TABLE OF rsmpe_staf,
tt_doc TYPE TABLE OF rsmpe_atrt,
tt_tit TYPE TABLE OF rsmpe_titt,
tt_biv TYPE TABLE OF rsmpe_buts.

DATA: gr_domname TYPE RANGE OF domname,


gr_rollname TYPE RANGE OF rollname,
gr_tabname TYPE RANGE OF tabname, "structures and database tables
gr_dbtabname TYPE RANGE OF tabname, "only database tables
gt_tabname TYPE TABLE OF tabname,
gr_indexes TYPE RANGE OF trobj_name,
gr_indxtab TYPE RANGE OF tabname,
gr_indxname TYPE RANGE OF indexid,
gr_shlpname TYPE RANGE OF shlpname,
gr_viewname TYPE RANGE OF viewname,
gr_ttypname TYPE RANGE OF ttypename,
gt_ttypname TYPE TABLE OF ttypename,
gr_guistatus TYPE RANGE OF progname,
gr_switchname TYPE RANGE OF t_switch_id,
gr_msg_class TYPE RANGE OF msgid,
gv_trkorr TYPE trkorr,
gv_unit_test,
gv_translation,
gv_repository_changed,
gv_errors_occured,
gv_uname TYPE syuname,
gv_log_handle TYPE balloghndl.

CONSTANTS: c_bal_object TYPE balobj_d VALUE 'SNOTE',


c_bal_subobj TYPE balsubobj VALUE space,
c_bal_context TYPE tabname VALUE 'ADIR_KEY',
c_include6 TYPE fieldname VALUE '.INCLU', ".INCLUDE or .INCLU--AP
or .INCLU-_BY
c_memory_id(40) VALUE 'SAP_LOCAL_DOWNPORT_ASSISTANT',
c_logical_object VALUE 'L'.

DATA: akb_get_tadir TYPE funcname VALUE 'AKB_GET_TADIR'.

*&---------------------------------------------------------------------*
*& Form bal_callback_ucomm
*&---------------------------------------------------------------------*
* called from ballog, e.g. during double click
*----------------------------------------------------------------------*
FORM bal_callback_ucomm CHANGING c_state TYPE bal_s_cbuc. "#EC CALLED
DATA: ls_msg TYPE bal_s_msg,
l_date(8),
ls_tadir TYPE adir_key.
CASE c_state-ucomm.
WHEN '%LONGTEXT' OR '&IC1'.
CALL FUNCTION 'BAL_LOG_MSG_READ'
EXPORTING
i_s_msg_handle = c_state-list_msgh
IMPORTING
e_s_msg = ls_msg
EXCEPTIONS
log_not_found = 1
msg_not_found = 2
OTHERS = 3.
IF ls_msg-msgid EQ 'DO' AND ls_msg-msgno EQ '626'.
"MESSAGE i626(do) WITH 'Click this message to view' 'detailed activation
logs with name' l_logname INTO sy-lisel. "#EC *
SPLIT ls_msg-msgv3 AT ':' INTO sy-lisel l_date.
SUBMIT radprotb WITH protname EQ ls_msg-msgv3
WITH date EQ l_date
* with TIME
* with USER
AND RETURN.
c_state-ucomm_exec = 'X'.
ELSEIF c_state-ucomm EQ '&IC1'.
ls_tadir = ls_msg-context-value.
CHECK ls_tadir-object IS NOT INITIAL.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ls_tadir-obj_name
object_type = ls_tadir-object
EXCEPTIONS
OTHERS = 1.
CHECK sy-subrc EQ 0.
c_state-ucomm_exec = 'X'.
ENDIF.
ENDCASE.
ENDFORM. "bal_callback_ucomm
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
DEFINE bdc_field.
clear: ls_bdc.
ls_bdc-fnam = &1.
ls_bdc-fval = &2.
append ls_bdc to lt_bdc.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
DEFINE bdc_screen.
clear ls_bdc.
ls_bdc-program = &1.
ls_bdc-dynpro = &2.
ls_bdc-dynbegin = 'X'.
append ls_bdc to lt_bdc.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* CLASS lcl_wb DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_wb DEFINITION.
PUBLIC SECTION.

CLASS-METHODS init
IMPORTING
value(i_note) TYPE clike OPTIONAL "note which indicates that report
is not needed anymore
value(i_cinst) TYPE cwbcialeid OPTIONAL "correction instruction which
describes the validity of the report
EXCEPTIONS
stop_processing.

CLASS-METHODS get_object_text
IMPORTING
i_object TYPE e071-object "e.g. TABD
i_obj_name TYPE c OPTIONAL "for DOCU
RETURNING value(r_text) TYPE string.

CLASS-METHODS create_dtel
IMPORTING
i_rollname TYPE rollname
i_domname TYPE domname
i_datatype TYPE dd04v-domname OPTIONAL "only needed if domain is
initial
i_decimals TYPE dd04v-decimals OPTIONAL "only needed if rollname is
initial
i_leng TYPE dd04v-leng OPTIONAL "only needed if domain is
initial
i_devclass TYPE devclass
i_logflag TYPE logflag DEFAULT 'X'
i_memoryid TYPE dd04v-memoryid OPTIONAL
i_headlen TYPE dd04v-headlen OPTIONAL "defaulted with fieldlen
i_scrlen1 TYPE dd04v-scrlen1 DEFAULT 10
i_scrlen2 TYPE dd04v-scrlen2 DEFAULT 15
i_scrlen3 TYPE dd04v-scrlen3 DEFAULT 20
i_langu TYPE sylangu
i_ddtext TYPE ddtext
i_reptext TYPE reptext OPTIONAL
i_scrtext_m TYPE scrtext_m
i_scrtext_l TYPE scrtext_l
i_scrtext_s TYPE scrtext_s
i_shlpname TYPE shlpname OPTIONAL
i_shlpfield TYPE shlpfield OPTIONAL
i_deffdname TYPE deffdname OPTIONAL
i_proxytype TYPE ddproxyty OPTIONAL.

CLASS-METHODS create_message
IMPORTING
i_msgid TYPE msgid
i_msgno TYPE msgno
i_langu TYPE sylangu DEFAULT 'E' "Default EN
i_text TYPE natxt
i_selfdef TYPE doku_selfd DEFAULT 'X'.

CLASS-METHODS create_dtel_docu
IMPORTING
i_rollname TYPE rollname
i_langu TYPE sylangu DEFAULT 'E' "Default EN
i_line TYPE string OPTIONAL "all lines get collected until i_line is
omitted
EXPORTING
et_lines TYPE tline_tab.

CLASS-METHODS create_mess_docu
IMPORTING
i_msgid TYPE msgid
i_msgno TYPE msgno
i_langu TYPE sylangu DEFAULT 'E' "Default EN
i_line TYPE string OPTIONAL "all lines get collected until i_line is
omitted
EXPORTING
et_lines TYPE tline_tab.

CLASS-METHODS add_to_transport
IMPORTING
i_object TYPE e071-object "TABD
i_obj_name TYPE c "flexible number of characters
i_devclass TYPE devclass OPTIONAL
i_langu TYPE sylangu OPTIONAL
EXCEPTIONS
error
simulation.

CLASS-METHODS register_inactive_object
IMPORTING
i_objtype TYPE e071-object
i_treetype TYPE e071-object OPTIONAL "space = do not update tree,
optionally different type in tree, e.g. TABL vs. CDS
i_objname TYPE c.

CLASS-METHODS log_message.

CLASS-METHODS display_log.

CLASS-METHODS set_context
IMPORTING i_object TYPE e071-object
i_obj_name TYPE c
i_obj_name2 TYPE c OPTIONAL
i_text TYPE c OPTIONAL
i_langu TYPE sylangu.

CLASS-METHODS activate
IMPORTING i_result_auth_check TYPE sysubrc OPTIONAL.

CLASS-METHODS mass_activation
IMPORTING
i_step TYPE i DEFAULT 1
i_inactive TYPE c OPTIONAL
i_ddmode TYPE ddmode DEFAULT 'O'
i_logname TYPE c
EXCEPTIONS
error.
ENDCLASS. "lcl_wb DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_dcm_to_po_bridge IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_wb IMPLEMENTATION.

METHOD init.

CLEAR gv_errors_occured.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
tcode = 'SNOTE'
EXCEPTIONS
ok = 0
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
gv_errors_occured = 'X'.
RAISE stop_processing.
ENDIF.

IF showlogs IS NOT INITIAL.


CALL METHOD display_log.
LEAVE PROGRAM.
ENDIF.

DATA: ls_log TYPE bal_s_log.


"prepare application log
ls_log-object = c_bal_object.
ls_log-subobject = c_bal_subobj.
ls_log-extnumber = sy-repid.
ls_log-aldate = sy-datum.
ls_log-altime = sy-uzeit.
ls_log-aluser = sy-uname.
ls_log-alprog = sy-repid.
ls_log-altcode = sy-tcode.
"create standard application log handle
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = ls_log
IMPORTING
e_log_handle = gv_log_handle
EXCEPTIONS
log_header_inconsistent = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
EXPORT gv_log_handle FROM gv_log_handle TO MEMORY ID c_memory_id.

CALL METHOD set_context


EXPORTING
i_langu = space
i_object = space
i_obj_name = space.

"Main check: Last changed by SAP -> Report came via SP / Upgrade
"==> no execution anymore.
IF sy-repid NE 'SAP_LOCAL_DOWNPORT_ASSISTANT' AND sy-repid(1) NE '%'.
SELECT SINGLE prog FROM d010sinf INTO sy-lisel
WHERE prog EQ sy-repid
AND ( unam EQ 'SAP' OR cnam EQ 'SAP' ).
IF sy-subrc EQ 0.
MESSAGE w666(01) WITH 'The neccessary changes already came' 'via support
package.' 'Report execution not required anymore.' INTO sy-lisel. "#EC *
CALL METHOD log_message.
CALL METHOD display_log.
RAISE stop_processing.
ENDIF.
ENDIF.

IF i_note IS NOT INITIAL.


* that that note is not already implemented
* this must not be the note containing the generated report for DDIC but a
follow-up note with the coding using that new DDIC
DATA l_status TYPE c.
CALL FUNCTION 'SCWB_NOTE_IMPL_STATUS_SIMPLE'
EXPORTING
iv_numm = i_note
IMPORTING
ev_status = l_status
EXCEPTIONS
OTHERS = 1.
CASE l_status.
WHEN 'E'.
MESSAGE w666(01) WITH 'SAP Note' i_note 'completely implemented;' 'Report
execution not required anymore.' INTO sy-lisel. "#EC *
CALL METHOD log_message.
CALL METHOD display_log.
RAISE stop_processing.
WHEN 'O'.
MESSAGE w666(01) WITH 'SAP Note' i_note 'is obsolete;' 'Report execution
not required anymore.' INTO sy-lisel. "#EC *
CALL METHOD log_message.
CALL METHOD display_log.
RAISE stop_processing.
WHEN OTHERS. "okay
DATA: ls_note TYPE bcwbn_note.
ls_note-key-numm = i_note.
CALL FUNCTION 'SCWB_NOTE_READ'
EXPORTING
iv_read_corr_instructions = 'X'
CHANGING
cs_note = ls_note
EXCEPTIONS
note_not_found = 1
language_not_found = 2
unreadable_text_format = 3
corr_instruction_not_found = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE e666(01) WITH 'SAP Note' i_note 'cannot be read;' 'Ensure
correct download of note first.' INTO sy-lisel. "#EC *
CALL METHOD log_message.
CALL METHOD display_log.
RAISE stop_processing.
ENDIF.
*------
FIELD-SYMBOLS: <ls_corr> TYPE bcwbn_corr_instruction.
DATA: l_valid TYPE bcwbn_bool.
LOOP AT ls_note-corr_instructions ASSIGNING <ls_corr>.
IF i_cinst IS NOT INITIAL.
CHECK <ls_corr>-key-aleid = i_cinst.
ENDIF.
CALL FUNCTION 'SCWB_CINST_CHECK_VALID'
IMPORTING
ev_valid = l_valid
CHANGING
cs_corr_instruction = <ls_corr>
EXCEPTIONS
corr_inst_not_found = 1
inconsistent_delivery_data = 2
undefined = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF l_valid IS NOT INITIAL.
EXIT.
ENDIF.
ENDLOOP.
IF l_valid IS INITIAL.
MESSAGE e666(01) WITH 'Manual changes cannot be applied;' 'Correction
instruction invalid' 'for current patch level' INTO sy-lisel. "#EC *
CALL METHOD log_message.
CALL METHOD display_log.
RAISE stop_processing.
ENDIF.
ENDCASE.
ENDIF.

CALL FUNCTION 'SCWG_TOOLFLAG_SET'. "Reset will happen at leave of program

IF testrun IS INITIAL.
MESSAGE i666(01) WITH 'Running in Update Mode' INTO sy-lisel. "#EC *
ELSE.
MESSAGE w666(01) WITH 'Running in Test Mode' INTO sy-lisel. "#EC *
ENDIF.
CALL METHOD log_message.

ENDMETHOD. "init

METHOD get_object_text.

STATICS: lt_object_text TYPE TABLE OF ko100,


lt_doktypes TYPE TABLE OF dd07v.

DATA: ls_object_text TYPE ko100,


ls_doktype TYPE dd07v.

IF lt_object_text IS INITIAL.
CALL FUNCTION 'TR_OBJECT_TABLE'
TABLES
wt_object_text = lt_object_text.
SORT lt_object_text BY object.

CALL FUNCTION 'DDIF_DOMA_GET'


EXPORTING
name = 'DOK_ID'
langu = sy-langu
TABLES
dd07v_tab = lt_doktypes
EXCEPTIONS
OTHERS = 0.
SORT lt_doktypes BY domvalue_l.
ENDIF.

IF i_object EQ 'DOCU'.
READ TABLE lt_doktypes INTO ls_doktype BINARY SEARCH
WITH KEY domvalue_l = i_obj_name(2).
IF sy-subrc EQ 0.
CONCATENATE 'Documentation' ls_doktype-ddtext INTO r_text SEPARATED BY
space. "#EC NOTEXT
ELSE.
r_text = 'Documentation'. "#EC NOTEXT
ENDIF.
ELSEIF i_object IS NOT INITIAL.
READ TABLE lt_object_text INTO ls_object_text BINARY SEARCH
WITH KEY object = i_object. "ignore PGMID!
IF sy-subrc EQ 0.
r_text = ls_object_text-text.
ENDIF.
ENDIF.

ENDMETHOD. "get_object_text

METHOD create_dtel.
DATA: ls_dd04v TYPE dd04v,
l_gotstate,
ls_rollname LIKE LINE OF gr_domname VALUE 'IEQ'.

CALL METHOD set_context


EXPORTING
i_langu = i_langu
i_object = 'DTEL'
i_obj_name = i_rollname.

ls_rollname-low = i_rollname.
COLLECT ls_rollname INTO gr_rollname.

CALL FUNCTION 'DDIF_DTEL_GET'


EXPORTING
name = i_rollname
langu = i_langu
state = 'M' "newest version (e.g. inactive)
IMPORTING
dd04v_wa = ls_dd04v
gotstate = l_gotstate
EXCEPTIONS
OTHERS = 1.
IF sy-subrc EQ 0 AND
ls_dd04v-rollname = i_rollname AND
ls_dd04v-logflag = i_logflag AND
ls_dd04v-memoryid = i_memoryid AND
ls_dd04v-ddlanguage = i_langu AND
ls_dd04v-ddtext = i_ddtext AND
ls_dd04v-scrtext_m = i_scrtext_m AND
ls_dd04v-scrtext_l = i_scrtext_l AND
ls_dd04v-scrtext_s = i_scrtext_s AND
ls_dd04v-reptext = i_reptext AND
ls_dd04v-shlpname = i_shlpname AND
ls_dd04v-shlpfield = i_shlpfield AND
ls_dd04v-deffdname = i_deffdname AND
ls_dd04v-proxytype = i_proxytype AND
( ls_dd04v-domname = i_domname OR i_domname IS INITIAL AND
ls_dd04v-datatype = i_datatype AND
ls_dd04v-decimals = i_decimals AND
ls_dd04v-leng = i_leng ).
"data element already exists with that properties
MESSAGE i666(01) WITH 'No update necessary' INTO sy-lisel. "#EC *
CALL METHOD log_message.
RETURN.
ENDIF.

"check whether domain exists


IF i_domname IS NOT INITIAL.
READ TABLE gr_domname TRANSPORTING NO FIELDS WITH KEY low = i_domname.
IF sy-subrc NE 0.
SELECT COUNT(*) FROM dd01l WHERE domname EQ i_domname.
ENDIF.
IF sy-subrc NE 0.
MESSAGE e666(01) WITH 'Domain' i_domname 'does not exist' INTO sy-lisel.
"#EC *
CALL METHOD log_message.
RETURN.
ENDIF.
ENDIF.

CHECK testrun IS INITIAL.

ls_dd04v-ddlanguage = i_langu.
ls_dd04v-ddtext = i_ddtext.
ls_dd04v-scrtext_s = i_scrtext_s.
ls_dd04v-scrlen1 = i_scrlen1.
ls_dd04v-scrtext_m = i_scrtext_m.
ls_dd04v-scrlen2 = i_scrlen2.
ls_dd04v-scrtext_l = i_scrtext_l.
ls_dd04v-scrlen3 = i_scrlen3.
IF i_reptext IS NOT INITIAL.
ls_dd04v-reptext = i_reptext.
IF i_headlen IS INITIAL.
ls_dd04v-headlen = strlen( i_reptext ).
ELSE.
ls_dd04v-headlen = i_headlen.
ENDIF.
ENDIF.

IF gv_copy_translation IS INITIAL.
ls_dd04v-rollname = i_rollname.
ls_dd04v-domname = i_domname.
IF ls_dd04v-domname IS INITIAL.
ls_dd04v-datatype = i_datatype.
ls_dd04v-decimals = i_decimals.
ls_dd04v-leng = i_leng.
ENDIF.
ls_dd04v-shlpname = i_shlpname.
ls_dd04v-shlpfield = i_shlpfield.
ls_dd04v-deffdname = i_deffdname.
ls_dd04v-logflag = i_logflag.
ls_dd04v-memoryid = i_memoryid.
ls_dd04v-proxytype = i_proxytype.

CALL METHOD add_to_transport


EXPORTING
i_object = 'DTEL'
i_obj_name = i_rollname
i_devclass = i_devclass
i_langu = i_langu "masterlanguage (only relevant during first call)
EXCEPTIONS
OTHERS = 1.
CHECK sy-subrc EQ 0.
ENDIF.

"align redundant field DTELMASTER with TADIR-MASTERLANG


SELECT SINGLE masterlang FROM tadir INTO ls_dd04v-dtelmaster
WHERE pgmid EQ 'R3TR'
AND object EQ 'DTEL'
AND obj_name EQ i_rollname.

IF i_langu EQ ls_dd04v-dtelmaster OR gv_copy_translation IS INITIAL.


CALL FUNCTION 'DDIF_DTEL_PUT'
EXPORTING
name = i_rollname
dd04v_wa = ls_dd04v
EXCEPTIONS
dtel_not_found = 1
name_inconsistent = 2
dtel_inconsistent = 3
put_failure = 4
put_refused = 5
OTHERS = 6.

IF sy-subrc NE 0.
CALL METHOD log_message.
RETURN.
ELSE.
MESSAGE i666(01) WITH 'Update successful' INTO sy-lisel. "#EC *
CALL METHOD log_message.
ENDIF.

CALL METHOD register_inactive_object


EXPORTING
i_objtype = 'DTEL'
i_objname = i_rollname.

ELSE.
DATA: ls_dd04l TYPE dd04l,
ls_dd04t TYPE dd04t,
lt_dd04t TYPE TABLE OF dd04t.
MOVE-CORRESPONDING ls_dd04v TO: ls_dd04l, ls_dd04t.
APPEND ls_dd04t TO lt_dd04t.
TRANSLATE l_gotstate USING 'MN'.
CALL FUNCTION 'DD_DTEL_PUT'
EXPORTING
dd04l_wa = ls_dd04l
prid = -2 "no_log
put_state = l_gotstate
rollname = ls_dd04v-rollname
TABLES
dd04t_tab = lt_dd04t
EXCEPTIONS
object_inconsistent = 1
OTHERS = 2.
ENDIF.

ENDMETHOD. "create_dtel

METHOD activate.

DATA: lt_dwinactiv TYPE TABLE OF dwinactiv,


lt_dwinactiv_ddic TYPE TABLE OF dwinactiv,
lv_answer,
l_logname TYPE ddprh-protname,
ls_job TYPE tbtcjob,
lv_rc TYPE sysubrc,
l_dref TYPE REF TO data,
l_message TYPE sy-lisel,
ls_tabname LIKE LINE OF gr_tabname.

FIELD-SYMBOLS: <ls_dwinactiv> LIKE LINE OF lt_dwinactiv.

CALL METHOD set_context


EXPORTING
i_langu = space
i_object = space
i_obj_name = 'Activation'. "#EC *

IF testrun IS INITIAL.

"activate switches "online"


IF gr_switchname IS NOT INITIAL.
SELECT * FROM dwinactiv INTO TABLE lt_dwinactiv
WHERE obj_name IN gr_switchname.
IF lt_dwinactiv[] IS NOT INITIAL.
LOOP AT lt_dwinactiv ASSIGNING <ls_dwinactiv>
WHERE uname NE sy-uname
AND obj_name IN gr_switchname.
<ls_dwinactiv>-uname = sy-uname.
ENDLOOP.
INSERT dwinactiv FROM TABLE lt_dwinactiv ACCEPTING DUPLICATE KEYS.
ENDIF.

MESSAGE s357(scwn).
CALL FUNCTION 'RS_WORKING_OBJECT_ACTIVATE'
EXPORTING
dictionary_only = 'X'
TABLES
objects = lt_dwinactiv
EXCEPTIONS
OTHERS = 5.
ENDIF.

"make sure that ranges are not empty


APPEND 'IEQ' TO: "gr_switchname,
gr_domname,
gr_rollname,
gr_tabname,
gr_shlpname,
gr_viewname,
gr_ttypname,
gr_guistatus,
gr_indexes,
gr_indxtab,
gr_indxname.

SELECT * FROM dwinactiv INTO TABLE lt_dwinactiv


WHERE ( object NE space ) "dummy
AND ( "obj_name IN gr_switchname OR
obj_name IN gr_domname
OR obj_name IN gr_rollname
OR obj_name IN gr_tabname
OR obj_name IN gr_shlpname
OR obj_name IN gr_viewname
OR obj_name IN gr_ttypname
OR obj_name IN gr_guistatus
OR obj_name IN gr_indexes ).
ENDIF.

IF lt_dwinactiv[] IS INITIAL AND gv_repository_changed IS INITIAL.


MESSAGE i666(01) WITH 'No repository changes made' '' '' '' INTO sy-lisel.
"#EC *
CALL METHOD log_message.
IF gv_translation EQ 'X' OR gv_copy_translation EQ 'X'.
MESSAGE i666(01) WITH 'Translation has been updated' '' '' '' INTO sy-
lisel. "#EC *
CALL METHOD log_message.
ENDIF.
ELSEIF gv_errors_occured IS NOT INITIAL.
MESSAGE w666(01) WITH 'Activation was skipped because of errors' 'in previous
steps. Please try again.' INTO sy-lisel. "#EC *
CALL METHOD log_message.
ELSEIF i_result_auth_check IS NOT INITIAL.
MESSAGE e666(01) WITH 'No authorization to activate the DDIC changes.' 'Call
transaction SU53 for details' '' '' INTO sy-lisel. "#EC *
CALL METHOD log_message.
ELSE.
"add all relevant inactive objects also to current user's worklist
"gets relevant if a different user is doing the activation.
"entries for all users will be deleted if any user activates the object
LOOP AT lt_dwinactiv ASSIGNING <ls_dwinactiv> WHERE uname NE sy-uname.
<ls_dwinactiv>-uname = sy-uname.
ENDLOOP.
INSERT dwinactiv FROM TABLE lt_dwinactiv ACCEPTING DUPLICATE KEYS.

LOOP AT lt_dwinactiv TRANSPORTING NO FIELDS


WHERE object = 'DOMA' OR
object = 'DTEL' OR
object = 'TABL' OR
object = 'INDX' OR
object = 'VIEW' OR
object = 'TTYP' OR
object = 'SHLP'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
IF gv_unit_test IS NOT INITIAL OR genview IS NOT INITIAL.
lv_answer = '1'. "force online activation
ELSE.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Activation' "#EC NOTEXT
text_question = 'How do you want to activate DDIC?' "#EC
NOTEXT
text_button_1 = 'Online' "#EC NOTEXT
text_button_2 = 'Batch' "#EC NOTEXT
display_cancel_button = 'X'
IMPORTING
answer = lv_answer
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
CALL METHOD log_message.
ENDIF.
ENDIF.

"DDIC always via RADMASG0


"remove DDIC objects from worklist
LOOP AT lt_dwinactiv ASSIGNING <ls_dwinactiv>
WHERE object = 'DOMA' OR
object = 'DTEL' OR
object = 'TABL' OR
object = 'INDX' OR
object = 'VIEW' OR
object = 'TTYP' OR
object = 'SHLP'.
APPEND <ls_dwinactiv> TO lt_dwinactiv_ddic.
ENDLOOP.
ENDIF.

IF lv_answer NE 'A' AND lt_dwinactiv[] IS NOT INITIAL.


"1) activate non DDIC objects (e.g. CUAD) online
MESSAGE s357(scwn).
CALL FUNCTION 'RS_WORKING_OBJECT_ACTIVATE'
EXPORTING
dictionary_only = ' '
* cwb_mode = 'X'
TABLES
objects = lt_dwinactiv
EXCEPTIONS
OTHERS = 5.
IF sy-subrc NE 0.
lv_answer = 'A'.
CALL METHOD log_message.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.

IF sy-repid(2) EQ '%_'. "Temp. Subroutine Pool


l_logname = 'UDO'.
ELSEIF sy-repid(1) EQ '/'.
SPLIT sy-repid AT '/' INTO l_logname l_logname l_logname. "remove namespace
ELSE.
l_logname = sy-repid.
ENDIF.
CONCATENATE l_logname sy-datum sy-uzeit INTO l_logname SEPARATED BY '_'.

IF lv_answer = '1'. "online


"2a) activate DDIC online
IF sy-repid(2) EQ '%_'. "Temp. Subroutine Pool
l_logname = 'UDO'.
ELSEIF sy-repid(1) EQ '/'.
SPLIT sy-repid AT '/' INTO l_logname l_logname l_logname. "remove
namespace
ELSE.
l_logname = sy-repid.
ENDIF.

CONCATENATE l_logname ':' sy-datum ':' sy-uzeit INTO l_logname.

CALL METHOD mass_activation "Step 1


EXPORTING
i_step = 1
i_logname = space "no log, any error messages will appear in step 2
also
i_ddmode = 'T'
i_inactive = 'X'
EXCEPTIONS
error = 1.
IF sy-subrc EQ 0.
CALL METHOD mass_activation "Step 2
EXPORTING
i_step = 2
i_logname = l_logname
i_ddmode = 'O'
i_inactive = ' '
EXCEPTIONS
error = 1.
ENDIF.

CLEAR l_message.
IF sy-subrc EQ 0.
LOOP AT gr_dbtabname INTO ls_tabname WHERE low IS NOT INITIAL.
"make a test SELECT * FROM table UP TP 1 ROWS to see whether it is
really consistent
"go via RFC to have the chance to catch short dumps
CALL FUNCTION 'RFC_READ_TABLE' DESTINATION 'NONE' "#EC FB_PAR_MIS
EXPORTING
query_table = ls_tabname-low
rowcount = 1
EXCEPTIONS
system_failure = 1 MESSAGE l_message
table_not_available = 0
OTHERS = 0.
IF sy-subrc <> 0.
MESSAGE e666(01) WITH l_message INTO sy-lisel. "#EC *
CALL METHOD log_message.
ENDIF.
ENDLOOP.

APPEND LINES OF gr_ttypname TO gr_tabname.


APPEND LINES OF gr_rollname TO gr_tabname.

LOOP AT gr_tabname INTO ls_tabname WHERE low IS NOT INITIAL.


TRY.
CREATE DATA l_dref TYPE (ls_tabname-low).
CATCH cx_sy_create_data_error.
MESSAGE e666(01) WITH 'Data Type' ls_tabname-low 'is inconsistent'
INTO l_message. "#EC *
CALL METHOD log_message.
ENDTRY.
ENDLOOP.
IF l_message IS INITIAL.
CLEAR sy-subrc.
ELSE.
MESSAGE e666(01) WITH 'DDIC activation step 3 ended with errors.' INTO
sy-lisel. "#EC *
CALL METHOD log_message.
sy-subrc = 4.
ENDIF.
ENDIF.

IF sy-subrc EQ 0.
MESSAGE s666(01) WITH 'DDIC activation successful' INTO sy-lisel. "#EC *
CALL METHOD log_message.
MESSAGE i626(do) WITH 'Click this message to view' 'detailed activation
logs with name' l_logname INTO sy-lisel. "#EC *
CALL METHOD log_message.
ELSE.
"make sure that the objects appear as inactive; corresponding are removed
by DDIC activation phase 1 although phase 2 or 3 may fail.
MODIFY dwinactiv FROM TABLE lt_dwinactiv_ddic.
MESSAGE e626(do) WITH 'Click this message to view' 'detailed activation
logs with name' l_logname INTO sy-lisel. "#EC *
CALL METHOD log_message.
ENDIF.

ELSEIF lv_answer = '2' .


"2b) activate DDIC objects via batch job
ls_job-jobname = sy-repid.

CALL FUNCTION 'JOB_OPEN'


EXPORTING
jobname = ls_job-jobname
IMPORTING
jobcount = ls_job-jobcount
CHANGING
ret = lv_rc
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc <> 0 OR lv_rc NE 0.
MESSAGE e026(bt) WITH ls_job-jobname INTO sy-lisel. "#EC *
CALL METHOD log_message.
ELSE.
SUBMIT radmasg0 WITH domname IN gr_domname
WITH rollname IN gr_rollname
WITH tabname IN gr_tabname
WITH indxtab IN gr_indxtab
WITH indxname IN gr_indxname
WITH viewname IN gr_viewname
WITH ttypname IN gr_ttypname
WITH shlpname IN gr_shlpname
WITH logname EQ l_logname
WITH logshow EQ 'X' "show log in SPOOL

WITH ddmode EQ 'T'


WITH inactive EQ 'X'

VIA JOB ls_job-jobname


NUMBER ls_job-jobcount
AND RETURN.

SUBMIT radmasg0 WITH domname IN gr_domname


WITH rollname IN gr_rollname
WITH tabname IN gr_tabname
WITH indxtab IN gr_indxtab
WITH indxname IN gr_indxname
WITH viewname IN gr_viewname
WITH ttypname IN gr_ttypname
WITH shlpname IN gr_shlpname
WITH logname EQ l_logname
WITH logshow EQ 'X' "show log in SPOOL

WITH ddmode EQ 'O'


WITH inactive EQ ' '

VIA JOB ls_job-jobname


NUMBER ls_job-jobcount
AND RETURN.

CALL FUNCTION 'JOB_CLOSE'


EXPORTING
jobcount = ls_job-jobcount
jobname = ls_job-jobname
strtimmed = 'X'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc EQ 0.
MESSAGE s305(ut) WITH ls_job-jobname INTO sy-lisel. "#EC *
CALL METHOD log_message.
MESSAGE i666(01) WITH 'Use Report RADPROTB to view' 'activation log'
l_logname 'after job has finished in transaction SMX.'. "#EC *
CALL METHOD log_message.
ELSE.
MESSAGE e026(bt) WITH ls_job-jobname INTO sy-lisel. "#EC *
CALL METHOD log_message.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

SET PARAMETER ID 'EUK' FIELD space.


EXPORT current_devclass FROM space TO MEMORY ID 'EUK'.
ENDMETHOD. "activate

METHOD mass_activation.

DATA: lt_log TYPE TABLE OF trlog,


ls_log TYPE trlog.

SUBMIT radmasg0 WITH domname IN gr_domname


WITH rollname IN gr_rollname
WITH tabname IN gr_tabname
WITH indxtab IN gr_indxtab
WITH indxname IN gr_indxname
WITH viewname IN gr_viewname
WITH ttypname IN gr_ttypname
WITH shlpname IN gr_shlpname
WITH logname EQ i_logname
WITH logshow EQ space

WITH inactive EQ i_inactive


WITH ddmode EQ i_ddmode

AND RETURN.

IMPORT act_rc TO sy-subrc FROM MEMORY ID 'ACRC'.

CHECK i_logname IS NOT INITIAL.

IF sy-subrc > 4. "4 is only warning


CHECK i_step <> 1. "messages of step 1 have to be ignored
MESSAGE e666(01) WITH 'DDIC activation step' i_step 'ended with errors:' INTO
sy-lisel. "#EC *
CALL METHOD log_message.
CALL FUNCTION 'TR_READ_LOG'
EXPORTING
iv_log_type = 'DB'
iv_logname_db = i_logname
TABLES
et_lines = lt_log
EXCEPTIONS
invalid_input = 1
access_error = 2
OTHERS = 3.
"append errors from activation log
LOOP AT lt_log INTO ls_log WHERE severity EQ 'E'.
MESSAGE e666(01) WITH ls_log-line INTO sy-lisel. "#EC *
CALL METHOD log_message.
ENDLOOP.
RAISE error.
ENDIF.

ENDMETHOD. "mass_activation

METHOD add_to_transport.
STATICS: s_object LIKE i_object,
s_obj_name TYPE string,
s_subrc TYPE sysubrc.

DATA: l_tadir_name TYPE tadir-obj_name,


l_object_name TYPE string,
l_object_class TYPE string,
l_extend,
l_global_lock,
ls_trkey TYPE trkey.

CLEAR sy-subrc.
CHECK gv_copy_translation IS INITIAL.
CHECK testrun IS INITIAL.

IF i_object NE s_object OR
i_obj_name NE s_obj_name.

s_object = i_object.
s_obj_name = i_obj_name.

CASE i_object.
WHEN 'REPT' OR 'FUNC' OR 'CUAD' OR 'DOCU'.
l_object_class = i_object.
l_object_name = i_obj_name.
WHEN 'DOCV' OR 'DOCT' OR 'DSYS' OR 'STCS' OR 'MSAG'
OR 'SFRN' OR 'OSOD'. "logical transport object
l_object_class = i_object.
l_object_name = i_obj_name.
l_global_lock = 'X'.
l_extend = 'X'.
l_tadir_name = i_obj_name.
WHEN 'MESS'.
l_object_class = 'T100'.
l_object_name = i_obj_name.
WHEN 'CLAS' OR 'FUGR' OR 'PARA' OR 'VCLS' OR 'AUTH'.
l_object_class = i_object.
l_object_name = i_obj_name.
l_tadir_name = i_obj_name.
l_global_lock = 'X'.
WHEN 'DOMA' OR 'DTEL' OR 'TABL' OR 'VIEW' OR 'INDX' OR 'TTYP' OR 'SHLP'.
l_object_class = 'DICT'.
CONCATENATE i_object i_obj_name
INTO l_object_name.
l_tadir_name = i_obj_name.
WHEN OTHERS.
l_object_class = i_object.
l_object_name = i_obj_name.
ENDCASE.

"create TADIR entry in advance avoid popup


IF l_tadir_name IS NOT INITIAL.
DATA: ls_tadir_old TYPE tadir.
SELECT SINGLE * FROM tadir INTO ls_tadir_old
WHERE pgmid EQ 'R3TR'
AND object EQ i_object
AND obj_name EQ l_tadir_name.
IF i_langu CA 'ED'.
"set correct language and package on first call per object
"skip this for other languages than EN/DE.
CALL FUNCTION 'TR_TADIR_INTERFACE'
EXPORTING
* WI_DELETE_TADIR_ENTRY = ' '
wi_test_modus = space
wi_tadir_pgmid = 'R3TR'
wi_tadir_object = i_object
wi_tadir_obj_name = l_tadir_name
wi_tadir_devclass = i_devclass
wi_tadir_masterlang = i_langu
EXCEPTIONS
OTHERS = 25.
IF sy-subrc <> 0.
ENDIF.
ENDIF.
IF i_devclass IS NOT INITIAL.
"set correct package in memory
EXPORT current_devclass FROM i_devclass TO MEMORY ID 'EUK'.
SET PARAMETER ID 'EUK' FIELD i_devclass.
ENDIF.
ENDIF.

CALL FUNCTION 'RS_CORR_INSERT' "and create TADIR-entry


EXPORTING
object = l_object_name
object_class = l_object_class
devclass = i_devclass
korrnum = gv_trkorr
global_lock = l_global_lock
* AUTHOR = ' '
master_language = i_langu
* GENFLAG = ' '
* PROGRAM = ' '
* OBJECT_CLASS_SUPPORTS_MA = ' '
extend = l_extend
* SUPPRESS_DIALOG = ' '
* MOD_LANGU = ' '
* ACTIVATION_CALL = ' '
IMPORTING
korrnum = gv_trkorr
* ORDERNUM =
* NEW_CORR_ENTRY =
* AUTHOR =
transport_key = ls_trkey
* NEW_EXTEND =
EXCEPTIONS
cancelled = 1
permission_failure = 2
unknown_objectclass = 3
OTHERS = 4.
s_subrc = sy-subrc.

"correct master language if neccessary


IF l_tadir_name IS NOT INITIAL AND ls_tadir_old IS INITIAL.
IF i_langu CA 'ED'.
UPDATE tadir SET masterlang = i_langu
WHERE pgmid EQ 'R3TR'
AND object EQ i_object
AND obj_name EQ l_tadir_name
AND masterlang NE i_langu.
ENDIF.
ENDIF.

ENDIF.

IF s_subrc NE 0.
MESSAGE e666(01) WITH 'Could not add to transport request' INTO sy-lisel.
"#EC *
CALL METHOD log_message.
RAISE error.
ENDIF.

ENDMETHOD. "add_to_transport

METHOD register_inactive_object.

DATA: l_obj_name TYPE e071-obj_name.

l_obj_name = i_objname.
CALL FUNCTION 'RS_INSERT_INTO_WORKING_AREA'
EXPORTING
object = i_objtype
obj_name = l_obj_name
EXCEPTIONS
wrong_object_name = 1
OTHERS = 2.

IF i_treetype IS SUPPLIED.
CHECK i_treetype NE space.
CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT'
EXPORTING
type = i_treetype
object = l_obj_name.
ELSE.
CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT'
EXPORTING
type = i_objtype
object = l_obj_name.
ENDIF.

ENDMETHOD. "register_inactive_object

METHOD create_message.

DATA: lt_bdc TYPE TABLE OF bdcdata,


ls_bdc TYPE bdcdata,
ls_bdcp TYPE bdcdata,
ls_opt TYPE ctu_params.
DATA: ls_t100 TYPE t100,
ls_t100a TYPE t100a,
ls_t100u TYPE t100u,
l_obj_name TYPE dokil-object,
ls_msg_class LIKE LINE OF gr_msg_class VALUE 'IEQ'.

ls_msg_class-low = i_msgid.
COLLECT ls_msg_class INTO gr_msg_class.
CALL METHOD set_context
EXPORTING
i_langu = i_langu
i_object = 'MESS'
i_obj_name = i_msgid
i_obj_name2 = i_msgno.

SELECT SINGLE * FROM t100a INTO ls_t100a


WHERE arbgb EQ i_msgid.
IF sy-subrc NE 0.
IF testrun IS INITIAL OR i_msgid NOT IN gr_msg_class.
MESSAGE e509(eu) WITH i_msgid INTO sy-lisel. "#EC *
CALL METHOD log_message.
ENDIF.
RETURN.
ENDIF.

SELECT SINGLE * FROM t100 INTO ls_t100


WHERE sprsl EQ i_langu
AND arbgb EQ i_msgid
AND msgnr EQ i_msgno.

SELECT SINGLE * FROM t100u INTO ls_t100u


WHERE arbgb EQ i_msgid
AND msgnr EQ i_msgno.
IF i_text EQ ls_t100-text.
IF i_selfdef IS INITIAL AND ls_t100u-selfdef IS INITIAL OR
i_selfdef IS NOT INITIAL AND ls_t100u-selfdef IS NOT INITIAL.
MESSAGE i666(01) WITH 'No update necessary' INTO sy-lisel. "#EC *
CALL METHOD log_message.
RETURN.
ENDIF.
ENDIF.

CHECK testrun IS INITIAL.

CALL FUNCTION 'DOCU_OBJECT_NAME_CONCATENATE'


EXPORTING
docu_id = 'NA'
element = i_msgid
addition = i_msgno
IMPORTING
object = l_obj_name
EXCEPTIONS
OTHERS = 0.

CALL METHOD add_to_transport


EXPORTING
i_object = 'MESS'
i_obj_name = l_obj_name
EXCEPTIONS
OTHERS = 1.
CHECK sy-subrc EQ 0.

IF i_langu EQ ls_t100a-masterlang AND gv_copy_translation IS INITIAL.


"create or change message and write into transport request
"if sy-langu is different from master language SE91 will switch to master
lang
"-------------------------------------------
ls_bdcp-program = 'SAPLWBMESSAGES'.
ls_bdcp-dynpro = '0100'.
ls_bdcp-dynbegin = 'X'.
APPEND ls_bdcp TO lt_bdc.

* ls_bdc-fnam = 'BDC_CURSOR'.
* ls_bdc-fval = 'MSG_NUMMER'.
* APPEND ls_bdc TO lt_bdc.

ls_bdc-fnam = 'RSDAG-ARBGB'.
ls_bdc-fval = i_msgid.
APPEND ls_bdc TO lt_bdc.

ls_bdc-fnam = 'MSG_NUMMER'.
ls_bdc-fval = i_msgno.
APPEND ls_bdc TO lt_bdc.

ls_bdc-fnam = 'RSDAG-MSGFLAG'.
ls_bdc-fval = 'X'.
APPEND ls_bdc TO lt_bdc.

ls_bdc-fnam = 'BDC_OKCODE'.
ls_bdc-fval = '=WB_EDIT'.
APPEND ls_bdc TO lt_bdc.

"-------------------------------------------
ls_bdcp-dynpro = '1000'.
ls_bdcp-dynbegin = 'X'.
APPEND ls_bdcp TO lt_bdc.

ls_bdc-fnam = 'BDC_SUBSCR'.
ls_bdc-fval = 'SAPLWBMESSAGES 0101SUB'.
APPEND ls_bdc TO lt_bdc.

ls_bdc-fnam = 'T100-TEXT(01)'.
ls_bdc-fval = i_text.
APPEND ls_bdc TO lt_bdc.

ls_bdc-fnam = 'LISTTAB-DOKU_FLAG(01)'.
IF i_selfdef IS INITIAL.
ls_bdc-fval = ' '.
ELSE.
ls_bdc-fval = 'X'.
ENDIF.
APPEND ls_bdc TO lt_bdc.

ls_bdc-fnam = 'BDC_OKCODE'.
ls_bdc-fval = '=WB_SAVE'.
APPEND ls_bdc TO lt_bdc.

"-------------------------------------------
ls_bdcp-dynpro = '1000'.
ls_bdcp-dynbegin = 'X'.
APPEND ls_bdcp TO lt_bdc.

ls_bdc-fnam = 'BDC_OKCODE'.
ls_bdc-fval = '=WB_BACK'.
APPEND ls_bdc TO lt_bdc.
"-------------------------------------------
ls_bdcp-dynpro = '0100'.
ls_bdcp-dynbegin = 'X'.
APPEND ls_bdcp TO lt_bdc.

ls_bdc-fnam = 'BDC_OKCODE'.
ls_bdc-fval = '=WB_BACK'.
APPEND ls_bdc TO lt_bdc.

ls_opt-dismode = 'E'.
ls_opt-racommit = 'X'.
ls_opt-nobinpt = 'X'.
ls_opt-nobiend = 'X'.

"-------------------------------------------
CALL TRANSACTION 'SE91' USING lt_bdc OPTIONS FROM ls_opt.
ELSE.
"update translation only
ls_t100-arbgb = i_msgid.
ls_t100-msgnr = i_msgno.
ls_t100-sprsl = i_langu.
ls_t100-text = i_text.
MODIFY t100 FROM ls_t100. "no activation needed
ENDIF.
MESSAGE i666(01) WITH 'Update successful' INTO sy-lisel. "#EC *
CALL METHOD log_message.
gv_translation = 'X'.
gv_repository_changed = 'X'.

ENDMETHOD. "create_message

METHOD create_mess_docu.

STATICS: lt_line TYPE TABLE OF tline.

DATA: ls_head TYPE thead,


lt_line_old LIKE lt_line,
ls_line TYPE tline,
ls_tadir TYPE tadir,
lv_no_masterlang.

IF i_line IS NOT INITIAL.


ls_line = i_line.
SHIFT ls_line-tdline LEFT.
APPEND ls_line TO lt_line.
ELSE.
CALL METHOD set_context
EXPORTING
i_langu = i_langu
i_object = 'MESS'
i_obj_name = i_msgid
i_obj_name2 = i_msgno
i_text = 'Message Longtext'. "#EC NOTEXT

ls_head-tdobject = 'DOKU'.
CONCATENATE i_msgid i_msgno INTO ls_head-tdname.
ls_head-tdid = 'NA'. "Nachricht/Message
ls_head-tdspras = i_langu.
ls_head-tdform = 'S_DOCU_SHOW'.
ls_head-tdstyle = 'S_DOCUS1'.

CALL FUNCTION 'DOCU_GET'


EXPORTING
id = ls_head-tdid(2)
langu = ls_head-tdspras
object = ls_head-tdname(60)
TABLES
line = lt_line_old
EXCEPTIONS
OTHERS = 0.

IF et_lines IS SUPPLIED.
et_lines[] = lt_line[] = lt_line_old[].
RETURN.
ENDIF.

IF lt_line_old[] EQ lt_line.
REFRESH lt_line.
"no update necessary
MESSAGE i666(01) WITH 'No update necessary' INTO sy-lisel. "#EC *
CALL METHOD log_message.
RETURN.
ENDIF.

IF testrun IS INITIAL.

CONCATENATE ls_head-tdid ls_head-tdname INTO ls_tadir-obj_name.

CALL METHOD add_to_transport


EXPORTING
i_object = 'DOCU'
i_obj_name = ls_tadir-obj_name
EXCEPTIONS
OTHERS = 0.

SELECT SINGLE * FROM tadir INTO ls_tadir


WHERE pgmid EQ 'R3TR'
AND object EQ 'MSAG'
AND obj_name EQ i_msgid.
IF ls_head-tdspras NE ls_tadir-masterlang.
lv_no_masterlang = 'X'.
ENDIF.

"create new version


DATA l_dokversion TYPE dokhl-dokversion.
SELECT MAX( dokversion ) FROM dokhl INTO l_dokversion "#EC *
WHERE id = ls_head-tdid(2)
AND object = ls_head-tdname
AND langu = ls_head-tdspras.
ADD 1 TO l_dokversion.

ls_head-tdfdate = sy-datum.
ls_head-tdftime = sy-uzeit.
ls_head-tdfuser = sy-uname.
ls_head-tdldate = sy-datum.
ls_head-tdltime = sy-uzeit.
ls_head-tdluser = sy-uname.

CALL FUNCTION 'DOCU_UPDATE'


EXPORTING
* ACTCLASS = ' '
head = ls_head
no_masterlang = lv_no_masterlang
state = 'A'
typ = 'E'
version = l_dokversion
TABLES
line = lt_line.

MESSAGE i666(01) WITH 'Update successful' 'for longtext of message' i_msgid


i_msgno INTO sy-lisel. "#EC *
CALL METHOD log_message.
ENDIF.
gv_translation = 'X'.
REFRESH lt_line.
ENDIF.

ENDMETHOD. "create_mess_docu

METHOD create_dtel_docu.

STATICS: lt_line TYPE TABLE OF tline.

DATA: ls_head TYPE thead,


lt_line_old LIKE lt_line,
ls_line TYPE tline,
ls_tadir TYPE tadir,
lv_no_masterlang.

IF i_line IS NOT INITIAL.


ls_line = i_line.
SHIFT ls_line-tdline LEFT.
APPEND ls_line TO lt_line.
ELSE.
CALL METHOD set_context
EXPORTING
i_langu = i_langu
i_object = 'DTEL'
i_obj_name = i_rollname
i_text = 'Data Element Longtext'. "#EC NOTEXT

ls_head-tdobject = 'DOKU'.
ls_head-tdname = i_rollname.
ls_head-tdid = 'DE'. "Data element
ls_head-tdspras = i_langu.
ls_head-tdform = 'S_DOCU_SHOW'.
ls_head-tdstyle = 'S_DOCUS1'.

CALL FUNCTION 'DOCU_GET'


EXPORTING
id = ls_head-tdid(2)
langu = ls_head-tdspras
object = ls_head-tdname(60)
TABLES
line = lt_line_old
EXCEPTIONS
OTHERS = 0.

IF et_lines IS SUPPLIED.
et_lines[] = lt_line[] = lt_line_old[].
RETURN.
ENDIF.

IF lt_line_old[] EQ lt_line.
REFRESH lt_line.
"no update necessary
MESSAGE i666(01) WITH 'No update necessary' INTO sy-lisel. "#EC *
CALL METHOD log_message.
RETURN.
ENDIF.

IF testrun IS INITIAL.

CONCATENATE ls_head-tdid ls_head-tdname INTO ls_tadir-obj_name.

CALL METHOD add_to_transport


EXPORTING
i_object = 'DOCU'
i_obj_name = ls_tadir-obj_name
EXCEPTIONS
OTHERS = 1.
CHECK sy-subrc EQ 0.

SELECT SINGLE * FROM tadir INTO ls_tadir


WHERE pgmid EQ 'R3TR'
AND object EQ 'DTEL'
AND obj_name EQ i_rollname.
IF ls_head-tdspras NE ls_tadir-masterlang.
lv_no_masterlang = 'X'.
ENDIF.

"create new version


DATA l_dokversion TYPE dokhl-dokversion.
SELECT MAX( dokversion ) FROM dokhl INTO l_dokversion "#EC *
WHERE id = ls_head-tdid(2)
AND object = ls_head-tdname
AND langu = ls_head-tdspras.
ADD 1 TO l_dokversion.

ls_head-tdfdate = sy-datum.
ls_head-tdftime = sy-uzeit.
ls_head-tdfuser = sy-uname.
ls_head-tdldate = sy-datum.
ls_head-tdltime = sy-uzeit.
ls_head-tdluser = sy-uname.

CALL FUNCTION 'DOCU_UPDATE'


EXPORTING
* ACTCLASS = ' '
head = ls_head
no_masterlang = lv_no_masterlang
state = 'A'
typ = 'E'
version = l_dokversion
TABLES
line = lt_line.

MESSAGE i666(01) WITH 'Update successful' 'for longtext of data element'


i_rollname INTO sy-lisel. "#EC *
CALL METHOD log_message.
ENDIF.
gv_translation = 'X'.
REFRESH lt_line.
ENDIF.

ENDMETHOD. "create_dtel_docu

METHOD log_message.

DATA: ls_msg TYPE bal_s_msg.

IF sy-msgno IS INITIAL OR sy-msgid IS INITIAL.


MESSAGE i666(01) WITH 'unknown error' INTO sy-lisel. "#EC *
ENDIF.
MOVE-CORRESPONDING syst TO ls_msg.

CALL FUNCTION 'BAL_LOG_MSG_ADD'


EXPORTING
i_log_handle = gv_log_handle
i_s_msg = ls_msg
EXCEPTIONS
OTHERS = 0.

IF ls_msg-msgty CA 'EA'.
gv_errors_occured = 'X'.
ENDIF.

ENDMETHOD. "log_message

METHOD display_log.

DATA: lt_log_handle TYPE bal_t_logh,


ls_profile TYPE bal_s_prof,
l_s_fcat TYPE bal_s_fcat,
lt_dfies TYPE TABLE OF dfies,
ls_dfies TYPE dfies.
DATA: ls_filter TYPE bal_s_lfil,
lr_filter TYPE bal_s_extn, "range table
lr_extnumber TYPE bal_s_extn,
lt_log_header TYPE balhdr_t.

IF gv_log_handle IS INITIAL.

CLEAR: ls_filter, lr_extnumber.

*- Search only log file of this application


lr_filter-sign = 'I'.
lr_filter-option = 'EQ'.
lr_filter-low = c_bal_object.
APPEND lr_filter TO ls_filter-object.

lr_filter-sign = 'I'.
lr_filter-option = 'EQ'.
lr_filter-low = c_bal_subobj.
APPEND lr_filter TO ls_filter-subobject.

*- Search only log file of this change number


lr_extnumber-low = sy-repid.
lr_extnumber-sign = 'I'.
lr_extnumber-option = 'EQ'.
APPEND lr_extnumber TO ls_filter-extnumber.

*-- Search for log files on the database


CALL FUNCTION 'BAL_DB_SEARCH'
EXPORTING
i_s_log_filter = ls_filter
IMPORTING
e_t_log_header = lt_log_header
EXCEPTIONS
log_not_found = 1
no_filter_criteria = 2
OTHERS = 3.
IF sy-subrc EQ 0.
*-- Load log files from database into memory
CALL FUNCTION 'BAL_DB_LOAD'
EXPORTING
i_t_log_header = lt_log_header
IMPORTING
e_t_log_handle = lt_log_handle
EXCEPTIONS
no_logs_specified = 1
log_not_found = 2
log_already_loaded = 3
OTHERS = 4.
ENDIF.
ELSE.
APPEND gv_log_handle TO lt_log_handle.
ENDIF.

IF 1 = 1.
"grid
CALL FUNCTION 'BAL_DSP_PROFILE_SINGLE_LOG_GET'
IMPORTING
e_s_display_profile = ls_profile
EXCEPTIONS
OTHERS = 0.
"Set profile
ls_profile-show_all = abap_on.
ls_profile-use_grid = abap_on.
ls_profile-tree_ontop = abap_on.
ls_profile-exp_level = 1.
ls_profile-mess_mark = abap_on.
ELSE.
"tree
CALL FUNCTION 'BAL_DSP_PROFILE_DETLEVEL_GET'
IMPORTING
e_s_display_profile = ls_profile
EXCEPTIONS
OTHERS = 0.
ENDIF.

"add own fields to field cat


CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = c_bal_context
TABLES
dfies_tab = lt_dfies
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
ASSERT sy-subrc EQ 0.

LOOP AT lt_dfies INTO ls_dfies WHERE fieldname EQ 'OBJECT'


OR fieldname EQ 'OBJ_NAME'.
l_s_fcat-ref_table = c_bal_context.
l_s_fcat-ref_field = ls_dfies-fieldname.
l_s_fcat-outputlen = ls_dfies-outputlen + 1.
* l_s_fcat-col_pos = 100 + sy-tabix. "most rigth columns
APPEND l_s_fcat TO ls_profile-mess_fcat.
ENDLOOP.

"set parameters for saving layout.


ls_profile-disvariant-report = sy-repid.
ls_profile-disvariant-handle = c_bal_subobj.

ls_profile-clbk_ucbf-userexitp = sy-repid.
ls_profile-clbk_ucbf-userexitf = 'BAL_CALLBACK_UCOMM'.
* ls_profile-clbk_ucom-userexitp = sy-repid.
* ls_profile-clbk_ucom-userexitf = 'BAL_CALLBACK_UCOMM'.
* ls_profile-ext_push1-active = 'X'.
* ls_profile-ext_push1-def-text = 'DDIC'.
* ls_profile-ext_push1-def-icon_id = icon_history.
* ls_profile-ext_push1-def-icon_text = 'DDIC'.
* ls_profile-ext_push1-def-quickinfo = 'DDIC Activation log'.

IF testrun IS NOT INITIAL.


ls_profile-title = 'UDO - Simulation log'. "#EC *
ELSEIF update IS NOT INITIAL.
ls_profile-title = 'UDO - Change Log'. "#EC *
ELSEIF genview IS NOT INITIAL.
ls_profile-title = 'UDO - View Generation Log'. "#EC *
ENDIF.

CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'


EXPORTING
i_t_log_handle = lt_log_handle
i_s_display_profile = ls_profile
i_amodal = space
EXCEPTIONS
OTHERS = 0.

CALL FUNCTION 'BAL_DB_SAVE'


EXPORTING
i_t_log_handle = lt_log_handle
EXCEPTIONS
OTHERS = 0.

ENDMETHOD. "display_log

METHOD set_context.

STATICS: BEGIN OF lss_key, "save last key


i_object TYPE e071-object,
i_obj_name TYPE adir_key-obj_name,
i_obj_name2 TYPE adir_key-obj_name,
i_text TYPE string,
i_langu TYPE sylangu,
END OF lss_key.

DATA: ls_msg_defaults TYPE bal_s_mdef,


ls_context TYPE adir_key,
l_text(70),
l_mode TYPE string,
ls_key LIKE lss_key.

DATA: ls_e071 TYPE e071,


ls_tadir TYPE tadir,
ls_tadir_key TYPE tadir.

ls_key-i_object = i_object.
ls_key-i_obj_name = i_obj_name.
ls_key-i_obj_name2 = i_obj_name2.
ls_key-i_text = i_text.
ls_key-i_langu = i_langu.
IF ls_key EQ lss_key. "check last key
"avoid double message like "add field to table"
RETURN.
ELSE.
lss_key = ls_key.
ENDIF.

ls_context-object = i_object.
CONCATENATE i_obj_name i_obj_name2 INTO ls_context-obj_name.
ls_msg_defaults-log_handle = gv_log_handle.
ls_msg_defaults-context-value = ls_context.
ls_msg_defaults-context-tabname = c_bal_context.

CALL FUNCTION 'BAL_GLB_MSG_DEFAULTS_SET'


EXPORTING
i_s_msg_defaults = ls_msg_defaults
EXCEPTIONS
OTHERS = 0.

"try to check if object exists


IF i_object IS NOT INITIAL AND i_obj_name IS NOT INITIAL.
ls_e071-pgmid = 'R3TR'.
ls_e071-object = i_object.
ls_e071-obj_name = i_obj_name.

CALL FUNCTION 'SCWB_GET_TADIR_REM'


EXPORTING
is_e071 = ls_e071
IMPORTING
es_tadir_key = ls_tadir_key
es_tadir = ls_tadir.
IF ls_tadir_key IS INITIAL.
ls_e071-pgmid = 'LIMU'.
CALL FUNCTION 'SCWB_GET_TADIR_REM'
EXPORTING
is_e071 = ls_e071
IMPORTING
es_tadir_key = ls_tadir_key
es_tadir = ls_tadir.
ENDIF.

IF ls_tadir IS INITIAL.
l_mode = 'Create'. "#EC NOTEXT
ELSE.
l_mode = 'Change'. "#EC NOTEXT
"check if object has been manually modified by customer.
SELECT COUNT( * ) FROM adiraccess WHERE pgmid EQ ls_tadir-pgmid
AND object EQ ls_tadir-object
AND obj_name EQ ls_tadir-obj_name.
IF sy-dbcnt NE 0.
MESSAGE w666(01) WITH ls_tadir-object ls_tadir-obj_name 'was manually
changed before.' 'Please adjust manually afterwards' INTO sy-lisel. "#EC *
CALL METHOD log_message.
ENDIF.
ENDIF.
ENDIF.

IF i_text IS INITIAL.
CALL METHOD get_object_text
EXPORTING
i_object = i_object
i_obj_name = i_obj_name
RECEIVING
r_text = l_text.

CONCATENATE l_mode l_text INTO l_text SEPARATED BY space.


ELSE.
l_text = i_text.
ENDIF.

IF l_text IS NOT INITIAL.


IF i_langu IS NOT INITIAL.
MESSAGE s666(01) WITH l_text '( language' i_langu ')' INTO l_text.
ENDIF.
CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT'
EXPORTING
i_msgty = 'I'
i_text = l_text
EXCEPTIONS
OTHERS = 0.
ENDIF.

ENDMETHOD. "set_context
ENDCLASS. "lcl_wb IMPLEMENTATION

START-OF-SELECTION.
PERFORM action.

*&---------------------------------------------------------------------*
FORM action.

CALL METHOD lcl_wb=>init "#EC *


* EXPORTING
* i_note = ' "<note which indicates that report is not needed
anymore>
EXCEPTIONS
stop_processing = 1
others = 2.
IF sy-subrc EQ 0 and ( update IS NOT INITIAL OR testrun IS NOT INITIAL ).
*
*
*"-- LIMU DOCU DE/FSPAM/_POSTING_CATG (language: EN , source: FHD )
* CALL METHOD lcl_wb=>create_dtel_docu "#EC *
* EXPORTING
* i_rollname = '/FSPAM/_POSTING_CATG'
* i_langu = 'E'
* i_line =:'U1 &DEFINITION&',
"#EC NOTEXT
* 'AS Specifies whether the system only simulates the posting of
a payment', "#EC NOTEXT
* ' order or actually posts a payment order.',
"#EC NOTEXT
* 'U1 &USE&',
"#EC NOTEXT
* 'AS The system fills this field automatically during processes
that call PAM', "#EC NOTEXT
* ' and uses this information when it creates internal payment
orders via', "#EC NOTEXT
* ' PAM. This field can have one of the following values:',
"#EC NOTEXT
* 'B1 1',
"#EC NOTEXT
* 'AL Simulation run - the system does not post the payment
order.', "#EC NOTEXT
* 'B1 2',
"#EC NOTEXT
* 'AL Posting run - the system posts the payment order and makes
an entry in', "#EC NOTEXT
* ' the database table.',
"#EC NOTEXT
* 'U1 &DEPENDENCIES&',
"#EC NOTEXT
* 'AS',
"#EC NOTEXT
* 'U1 &EXAMPLE&',
"#EC NOTEXT
* 'AS',
"#EC NOTEXT
* space.
*
*
*"-- LIMU DOCU DE/FSPAM/_PYMT_DIRECTIVE_TYPE (language: EN , source: FHD )
* CALL METHOD lcl_wb=>create_dtel_docu "#EC *
* EXPORTING
* i_rollname = '/FSPAM/_PYMT_DIRECTIVE_TYPE'
* i_langu = 'E'
* i_line =:'U1 &DEFINITION&',
"#EC NOTEXT
* 'AS For more information, see',
"#EC NOTEXT
* '= <DS:GLOS.88EB2DDB8D891042869ABAF798A60821>payment
directive type</>.', "#EC NOTEXT
* 'U1 &DEPENDENCIES&',
"#EC NOTEXT
* 'AS You define the payment directive types in Customizing for
<LS>Account', "#EC NOTEXT
* ' Management (FS-AM)</>. Choose <LS>Basic Settings</> ->
<LS>Payment', "#EC NOTEXT
* ' Directive Types</> ->',
"#EC NOTEXT
* '= <DS:SIMG._TB_GS_PDI_DITYP>Define Payment Directive
Types</>.', "#EC NOTEXT
* 'U1 &EXAMPLE&',
"#EC NOTEXT
* 'AS',
"#EC NOTEXT
* space.

"- MSAG -------------------------------------------------------------------------


Message Classes
"-- LIMU MESS /FSPAM/_PYMT_ADV058 (language: EN , source: FHD )
* CALL METHOD lcl_wb=>create_message "#EC *
* EXPORTING
* i_msgid = '/FSPAM/_PYMT_ADV'
* i_msgno = '058':
* i_langu = 'E'
* i_selfdef = ''
* i_text = 'Payment Advice Category &1 not customized'.
*
*
*"-- LIMU MESS /FSPAM/_PYMT_ADV059 (language: EN , source: FHD )
* CALL METHOD lcl_wb=>create_message "#EC *
* EXPORTING
* i_msgid = '/FSPAM/_PYMT_ADV'
* i_msgno = '059':
* i_langu = 'E'
* i_selfdef = ''
* i_text = 'Carrier class not available for Paymt Adv Catg &1'.

"-- LIMU MESS /FSPAM/_PYMT_ADV063 (language: EN , source: FHD )


CALL METHOD lcl_wb=>create_message "#EC *
EXPORTING
i_msgid = '/FSPAM/_PYMT_ADV'
i_msgno = '063':
i_langu = 'E'
i_selfdef = ''
i_text = 'SDD type (core/B2B) is not defined for recipient transaction
type &1'.
"-- LIMU MESS /FSPAM/_PYMT_ADV065 (language: EN , source: FHD )
CALL METHOD lcl_wb=>create_message "#EC *
EXPORTING
i_msgid = '/FSPAM/_PYMT_ADV'
i_msgno = '065':
i_langu = 'E'
i_selfdef = ''
i_text = 'You cannot use a payment advice type that manages mandates
externally'.

"-- LIMU MESS /FSPAM/_PYMT_ADV066 (language: EN , source: FHD )


CALL METHOD lcl_wb=>create_message "#EC *
EXPORTING
i_msgid = '/FSPAM/_PYMT_ADV'
i_msgno = '066':
i_langu = 'E'
i_selfdef = '3'
i_text = 'Enter a payment advice type'.

*
*"-- LIMU DOCU NA/FSPAM/_PYMT_ADV058 (language: EN , source: FHD )
* CALL METHOD lcl_wb=>create_mess_docu "#EC *
* EXPORTING
* i_msgid = '/FSPAM/_PYMT_ADV'
* i_msgno = '058'
* i_langu = 'E'
* i_line =:'U1 &CAUSE&',
"#EC NOTEXT
* 'AS Payment Advice Category &SYST-MSGV1& is not
customizied', "#EC NOTEXT
* 'U1 &SYSTEM_RESPONSE&',
"#EC NOTEXT
* 'AS PPO is created with Business Process ''/FSPAM''',
"#EC NOTEXT
* 'U1 &WHAT_TO_DO&',
"#EC NOTEXT
* 'AS Customize your payment advice category in the following
link', "#EC NOTEXT
* '= <DS:SIMG./FSPAM/_V_PAC>Define Payment Advice
Category</>', "#EC NOTEXT
* 'U1 &SYS_ADMIN&',
"#EC NOTEXT
* 'AS',
"#EC NOTEXT
* space.

*"-- LIMU DOCU NA/FSPAM/_PYMT_ADV059 (language: EN , source: FHD )


* CALL METHOD lcl_wb=>create_mess_docu "#EC *
* EXPORTING
* i_msgid = '/FSPAM/_PYMT_ADV'
* i_msgno = '059'
* i_langu = 'E'
* i_line =:'U1 &CAUSE&',
"#EC NOTEXT
* 'AS Carrier class not customized for Payment Advice Category
&SYST-MSGV1&', "#EC NOTEXT
* 'U1 &SYSTEM_RESPONSE&',
"#EC NOTEXT
* 'AS PPO is created with business process ''/FSPAM''',
"#EC NOTEXT
* 'U1 &WHAT_TO_DO&',
"#EC NOTEXT
* 'AS Customize class name of Carrier class against your Payment
Advice', "#EC NOTEXT
* ' Category in the folllowing link',
"#EC NOTEXT
* '= <DS:SIMG./FSPAM/_V_PAC>Define Payment Advice
Category</>', "#EC NOTEXT
* 'AS The default Carrier class provided by SAP is
/FSPAM/_CARRIER.', "#EC NOTEXT
* 'AS If payment processing for your Payment Advice Category has
specifc', "#EC NOTEXT
* ' behavior, create a carrier implimentation class by
inheriting from', "#EC NOTEXT
* ' /FSPAM/_CARRIER class and handle the payment processing.',
"#EC NOTEXT
* 'U1 &SYS_ADMIN&',
"#EC NOTEXT
* 'AS',
"#EC NOTEXT
* space.

"-- LIMU DOCU NA/FSPAM/_PYMT_ADV060 (language: EN , source: FHD )


CALL METHOD lcl_wb=>create_mess_docu "#EC *
EXPORTING
i_msgid = '/FSPAM/_PYMT_ADV'
i_msgno = '060'
i_langu = 'E'
i_line =:'U1 &CAUSE&',
"#EC NOTEXT
'AS The system determines whether the payment advice type is
<LS>Core </>or', "#EC NOTEXT
' <LS>B2B </>as follows:',
"#EC NOTEXT
'N1 Identifies the payment directive type assigned to the
payment advice', "#EC NOTEXT
' type',
"#EC NOTEXT
'N1 Identifies the recipient transaction type assigned to the
payment', "#EC NOTEXT
' directive type derived in step 1',
"#EC NOTEXT
'N1 Identifies the SDD type of the recipient transaction type
derived in', "#EC NOTEXT
' step 2',
"#EC NOTEXT
'AS The system determines the mandate type based on the <LS>B2B
</>flag on', "#EC NOTEXT
' the mandate.',
"#EC NOTEXT
'AS You chose a counterparty whose mandate type does not match
the payment', "#EC NOTEXT
' advice type (core/B2B).',
"#EC NOTEXT
'U1 &SYSTEM_RESPONSE&',
"#EC NOTEXT
'AS You cannot save the payment advice.',
"#EC NOTEXT
'U1 &WHAT_TO_DO&',
"#EC NOTEXT
'AS You can do one of the following:',
"#EC NOTEXT
'B1 Choose a different payment advice type',
"#EC NOTEXT
'B1 Choose a different counterparty',
"#EC NOTEXT
'B1 Contact your system administrator',
"#EC NOTEXT
'U1 &SYS_ADMIN&',
"#EC NOTEXT
'AS You make the corresponding settings as follows:',
"#EC NOTEXT
'B1 You assign the payment directive type to the payment advice
type in the', "#EC NOTEXT
' Customizing activity',
"#EC NOTEXT
'= <DS:SIMG./FSPAM/_V_PAT>Define Payment Advice Type</>',
"#EC NOTEXT
'B1 You assign the recipient transaction type to the payment
directive type', "#EC NOTEXT
' in the Customizing activity',
"#EC NOTEXT
'= <DS:SIMG._AM_OM_PO_INPO_PDTY>Assign a Payment Directive
Type with', "#EC NOTEXT
' Transaction Types , Medium/PaytMeth</>',
"#EC NOTEXT
'B1 You assign the SDD type of the recipient transaction type
in the', "#EC NOTEXT
' Customizing activity',
"#EC NOTEXT
'= <DS:SIMG.BCAG35_MND_ORD>Define Lead Days for SEPA Direct
Debits</>', "#EC NOTEXT
space.

"-- LIMU DOCU NA/FSPAM/_PYMT_ADV061 (language: EN , source: FHD )


CALL METHOD lcl_wb=>create_mess_docu "#EC *
EXPORTING
i_msgid = '/FSPAM/_PYMT_ADV'
i_msgno = '061'
i_langu = 'E'
i_line =:'U1 &CAUSE&',
"#EC NOTEXT
'AS',
"#EC NOTEXT
'U1 &SYSTEM_RESPONSE&',
"#EC NOTEXT
'AS You cannot save the payment advice.',
"#EC NOTEXT
'U1 &WHAT_TO_DO&',
"#EC NOTEXT
'AS Contact your system administrator.',
"#EC NOTEXT
'U1 &SYS_ADMIN&',
"#EC NOTEXT
'AS Enter the payment advice type in the Customizing activity',
"#EC NOTEXT
'= <DS:SIMG./FSPAM/_V_PAT>Define Payment Advice Type</>.',
"#EC NOTEXT
space.

"-- LIMU DOCU NA/FSPAM/_PYMT_ADV062 (language: EN , source: FHD )


CALL METHOD lcl_wb=>create_mess_docu "#EC *
EXPORTING
i_msgid = '/FSPAM/_PYMT_ADV'
i_msgno = '062'
i_langu = 'E'
i_line =:'U1 &CAUSE&',
"#EC NOTEXT
'AS',
"#EC NOTEXT
'U1 &SYSTEM_RESPONSE&',
"#EC NOTEXT
'AS You cannot save the payment advice.',
"#EC NOTEXT
'U1 &WHAT_TO_DO&',
"#EC NOTEXT
'AS Contact your system administrator.',
"#EC NOTEXT
'U1 &SYS_ADMIN&',
"#EC NOTEXT
'AS Assign the transaction type/payment method/medium to the
payment', "#EC NOTEXT
' directive type in the Customizing activity',
"#EC NOTEXT
'= <DS:SIMG._AM_OM_PO_INPO_PDTY>Assign a Payment Directive
Type with', "#EC NOTEXT
' Transaction Types and Medium/PaytMeth</>.',
"#EC NOTEXT
space.

"-- LIMU DOCU NA/FSPAM/_PYMT_ADV063 (language: EN , source: FHD )


CALL METHOD lcl_wb=>create_mess_docu "#EC *
EXPORTING
i_msgid = '/FSPAM/_PYMT_ADV'
i_msgno = '063'
i_langu = 'E'
i_line =:'U1 &CAUSE&',
"#EC NOTEXT
'AS',
"#EC NOTEXT
'U1 &SYSTEM_RESPONSE&',
"#EC NOTEXT
'AS The system cannot check whether the direct debit type of
the mandate (', "#EC NOTEXT
'= <LS>Core/B2B</>) and the SDD type for the payment advice
type are', "#EC NOTEXT
' compatible. You cannot save the payment advice.',
"#EC NOTEXT
'U1 &WHAT_TO_DO&',
"#EC NOTEXT
'AS Contact your system administrator.',
"#EC NOTEXT
'U1 &SYS_ADMIN&',
"#EC NOTEXT
'AS Assign the <LS>SEPA Direct Debit Type</>
( <LS>CORE/B2B</> ) to the R', "#EC NOTEXT
'= <LS>ecipient Transaction Type</> in the Customizing
activity', "#EC NOTEXT
'= <DS:SIMG.BCAG35_MND_ORD>Define Lead Days for SEPA Direct
Debits</>.', "#EC NOTEXT
space.

"-- LIMU DOCU NA/FSPAM/_PYMT_ADV065 (language: EN , source: FHD )


CALL METHOD lcl_wb=>create_mess_docu "#EC *
EXPORTING
i_msgid = '/FSPAM/_PYMT_ADV'
i_msgno = '065'
i_langu = 'E'
i_line =:'U1 &CAUSE&',
"#EC NOTEXT
'AS The payment advice type &V2& is assigned to the SEPA Direct
Debit', "#EC NOTEXT
' payment advice category and the payment directive type
&V1&. This', "#EC NOTEXT
' payment directive type has been assigned to payment method
&V3&, which', "#EC NOTEXT
' manages mandates externally. The system identifies mandates
as being', "#EC NOTEXT
' externally managed if the <LS>Control </>field has the
value <LS>Mandate', "#EC NOTEXT
' </>in the Customizing activity',
"#EC NOTEXT
'= <DS:SIMG._AM_OR_TBKKG1>Define Medium/Payment Method</>.',
"#EC NOTEXT
'AS Payment Advice Management does not support mandates that
are managed', "#EC NOTEXT
' externally.',
"#EC NOTEXT
'U1 &SYSTEM_RESPONSE&',
"#EC NOTEXT
'AS Depending on the action you were performing, the system
does one of the', "#EC NOTEXT
' following:',
"#EC NOTEXT
'B1 The system does not allow you to assign this payment
directive type to', "#EC NOTEXT
' the payment advice type in the Customizing activity',
"#EC NOTEXT
'= <DS:SIMG./FSPAM/_V_PAT>Define Payment Advice Type</>.',
"#EC NOTEXT
'B1 The system does not allow you to select this payment advice
type while', "#EC NOTEXT
' maintaining payment advices for the account, order, and so
on.', "#EC NOTEXT
'U1 &WHAT_TO_DO&',
"#EC NOTEXT
'AS Contact your system administrator.',
"#EC NOTEXT
'U1 &SYS_ADMIN&',
"#EC NOTEXT
'AS You can do one of the following:',
"#EC NOTEXT
'B1 Change the payment method that is assigned to this payment
advise type', "#EC NOTEXT
' so that mandates are not managed externally. To do this,
change the', "#EC NOTEXT
' value for the <LS>Control </>field to a value other than
<LS>Mandate', "#EC NOTEXT
' </>in the Customizing activity',
"#EC NOTEXT
'= <DS:SIMG._AM_OR_TBKKG1>Define Medium/Payment Method</>.',
"#EC NOTEXT
'B1 Assign a payment method to the payment directive type that
does not', "#EC NOTEXT
' manage mandates externally in the Customizing activity',
"#EC NOTEXT
'= <DS:SIMG._AM_OM_PO_INPO_PDTY>Assign a Payment Directive
Type with', "#EC NOTEXT
' Transaction Types ,Medium/PaytMeth</>.',
"#EC NOTEXT
space.

ENDIF.

CALL METHOD lcl_wb=>activate.

CALL METHOD lcl_wb=>display_log.


ENDFORM.

You might also like