Académique Documents
Professionnel Documents
Culture Documents
* =======
CONSTANTS: REL_SPECIFIC_VER(15) TYPE C VALUE '1_2005'.
* =======
CONSTANTS:
CO_NEW_LINE TYPE ABAP_CHAR1 VALUE CL_ABAP_CHAR_UTILITIES=>NEWLINE.
TYPE-POOLS: SATRE.
*-------------------------------------------------------
* Includes
*-------------------------------------------------------
INCLUDE <ICON>.
*-------------------------------------------------------
* Type-pools
*-------------------------------------------------------
TYPE-POOLS: ABAP.
*-------------------------------------------------------
* Class
*-------------------------------------------------------
CLASS CL_IXML DEFINITION LOAD.
*-------------------------------------------------------
* Constants
*-------------------------------------------------------
CONSTANTS:
CDATA_END_REPLACE(15) TYPE C VALUE '&xml_cdata_end&',
SKIP_EMPTY_TAGS TYPE C VALUE 'X',
C_LINE_FEED(3) TYPE C VALUE '@.@' ,
WITH_BATCH_INPUT_AND_MSGS TYPE C VALUE ' ',
MAX_TIME_FOR_LOCKED_WP(4) TYPE N VALUE 1800,
C_MAX_BUFFER_SIZE TYPE I VALUE 100000,
C_SCENARIO_NAME_DEFAULT TYPE C VALUE ' ',
C_OFFLINE_MODE TYPE C VALUE ' ',
GZIP_COMMAND LIKE SXPGCOLIST-NAME
VALUE 'ZZ_COMPRESS',
EXTERNALLY_CALLED_START TYPE TCODE VALUE '$PANAYA_START_REC$',
EXTERNALLY_CALLED_END TYPE TCODE VALUE '$PANAYA_END$',
EXTERNALLY_CALLED_PARAMS TYPE TCODE VALUE '$PANAYA_PARAMS$',
EXTERNALLY_CALLED_START_RTT TYPE TCODE VALUE '$PANAYA_START_RTT$',
RTT_WAIT_TIME TYPE I VALUE 10,
EXTERNALLY_CALLED_RESTORE TYPE TCODE VALUE '$PANAYA_RESTORE$',
G_DELIMITER(3) TYPE C VALUE '~#~',
RECORDING TYPE C VALUE 'R',
RESUME_PAUSE TYPE C VALUE 'P',
PAUSE_PLAY TYPE C VALUE 'P',
* Flush the log data to client side file .log
GC_FLUSH_LOG TYPE FLAG VALUE ABAP_TRUE,
* For each line of the log except for control lines
* write data to file or to internal table
GC_LOG_WRITE TYPE FLAG VALUE ABAP_FALSE,
* This will be used when writing trace in text mode ( for debugging )
SHOULD_ENCODE_BASE_64_DEBUG(1) TYPE C VALUE 'X',
* States whether to run the runtime trace or not ( for debugging )
SHOULD_RUN_RUNTIME_TRACE(1) TYPE C VALUE 'X',
* Panaya's troubleshoot mode ( for debugging )
PANAYA_TROUBLESHOOT_MODE(1) TYPE C VALUE ' '.
*-------------------------------------------------------
* Types
*-------------------------------------------------------
TYPES: BEGIN OF THFB_TRACE,
ID TYPE I,
WPTYPE(3),
LEVEL(2),
MAIN(1),
DIAG(1),
ABAP(1),
DB(1),
IPC(1),
ROLL(1),
PAGE(1),
BATCH(1),
ENQ(1),
SPOOL(1),
DYNP(1),
DBSL(1),
SNC(1),
EM(1),
DBG(1),
NLS(1),
VMC(1),
ITS(1),
ICF(1),
RES1(1),
END OF THFB_TRACE.
* The max size of SAP user parameter is 250
* if the size is changed from 250
* in 4.6c version add local types till the new length in ver_def
TYPES: BEGIN OF PARAM_VALUE,
ID TYPE TPARA-PARAMID,
VALUE(250) TYPE C,
END OF PARAM_VALUE.
TYPES: PARAMS_VALUE_TAB TYPE TABLE OF PARAM_VALUE.
TYPES: BEGIN OF PARAMS_PER_GROUP,
GROUP_ID(25) TYPE C,
PID TYPE TPARA-PARAMID,
VALUE(250) TYPE C,
END OF PARAMS_PER_GROUP.
*-------------------------------------------------------
* Data definition
*-------------------------------------------------------
DATA: URL_PREF TYPE CHAR1024 VALUE
'https://my.panaya.com'.
DATA: PREV_MODE TYPE I.
DATA: PREV_COMP TYPE I.
DATA: ENCODING TYPE STRING.
DATA: GT_BDCDATA TYPE TABLE OF BDCDATA,
GT_MSG TYPE TABLE OF BDCMSGCOLL,
G_XML_SIZE TYPE I.
DATA: CAB_FILEPATH TYPE STRING.
DATA: TH_TRCCOMPS(40) TYPE C.
DATA: P_FILE TYPE STRING.
DATA: TH_OPCODE(1) TYPE X.
DATA: CURR_WP_NO TYPE I.
DATA: G_FIRST_REL_POS(12) TYPE N.
DATA: G_TRANS_INDEX(4) TYPE N.
DATA: MAX_TIME_FOR_LOCKED_WP_MIN(2) TYPE N,
G_IT_PARAMS_VALUES TYPE TABLE OF TPARA WITH HEADER LINE.
DATA: G_USERS_PARAMS TYPE PARAM_GROUP_TAB WITH HEADER LINE.
DATA: GT_TIME_STAT TYPE TABLE OF TIME_STATS_TYPE WITH HEADER LINE.
DATA: G_FILENAME TYPE STRING.
DATA: G_BUFFER_ITAB TYPE STRING_TAB.
DATA: G_WAS_FILE_CREATED.
DATA: G_STARTTIME LIKE SY-UZEIT.
DATA: G_FIELDS TYPE TABLE OF SVAL.
DATA: G_FIELD LIKE LINE OF G_FIELDS.
DATA: G_TRANS_ADDED_TO_FILE,
TEXT TYPE STRING,
G_OLD_TRACE_SIZE(8) TYPE N,
G_OLD_TRACE_TIME(6) TYPE N.
DATA: LEN TYPE I.
DATA: SEL_FILENAME TYPE STRING,
INITIAL_DIRECTORY TYPE STRING,
DEFAULT_EXTENSION TYPE STRING,
DEFAULT_FILENAME TYPE STRING,
FILE_FILTER TYPE STRING,
USER_ACTION TYPE I,
FULLPATH TYPE STRING,
PATH TYPE STRING,
SAP_WORK_DIR TYPE SDOK_CHTRD.
DATA: DIR_EXISTS TYPE ABAP_BOOL,
DIRECTORY TYPE STRING.
DATA: G_FILE_IS_APPEND_MODE_SERVER TYPE CHAR01 VALUE SPACE.
DATA: G_FILE_IS_APPEND_MODE_CLIENT TYPE CHAR01 VALUE SPACE.
DATA: TEMP_XML_FILENAME(250).
DATA: IS_ZIP_AVAILABLE.
DATA: VALID_CHARS TYPE STRING.
DATA: CALLED_EXTERNALLY_START.
DATA: CALLED_EXTERNALLY_END.
DATA: CALLED_EXTERNALLY_START_RTT.
DATA: G_LOG_FILENAME TYPE STRING.
*DATA: g_glob_params_filename TYPE string.
DATA: CALLED_EXTERNALLY_RESTORE.
DATA: G_PAUSE_XML_FILENAME TYPE STRING,
G_RECORDING_PARAM_DIRECTORY TYPE STRING,
G_RECORDING_PARAM_FILENAME TYPE STRING,
G_CURRENT_PARAM_FILENAME TYPE STRING.
DATA: G_RESUME_PAUSE_FILENAME TYPE STRING.
DATA: G_APPEND_USER_PARAMS(1) TYPE C.
DATA: G_LOG_FILE_APPEND_MODE_CLIENT.
DATA: G_SHOW_TRANS_STATUS_APPEARS.
DATA: DECIMAL_FORMAT LIKE USR01-DCPFM VALUE '-',
DATE_FORMAT LIKE USR01-DATFM VALUE '-'.
DATA: MAX_LOCK_ATTEMPTS VALUE 3.
DATA: G_XML_LOG_MESSAGES TYPE STRING_TAB.
DATA: WAS_RTT_ACTIVATED.
DATA: ATRA_FILENAME TYPE SE30FNAME.
DATA: ATRA_SESSION_ID TYPE SE30SESID.
DATA: ATRA_SESSION_TIME TYPE SE30SESTIM.
DATA: TASK_NAME TYPE STRING.
DATA: ATRA_ENDED.
DATA: ATRA_LOG1 TYPE STRING.
DATA: GV_VALIDATION_MODE TYPE FLAG,
GV_PGMNA TYPE PROGRAM_ID.
DATA: GT_LOG_DATA TYPE STRING_TAB,
GT_MEASUREMENT_LOG TYPE STANDARD TABLE OF TY_MEASUREMENT_LOG,
GV_LAST_MEASURE TYPE I.
DATA: GV_UNICODE_SYSTEM TYPE FLAG,
GV_SAP_APPL TYPE STRING,
GV_SAP_HR TYPE STRING,
GV_EA_HR TYPE STRING.
*-------------------------------------------------------
* Selection screen
*-------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TIT1.
SELECTION-SCREEN SKIP 1.
* Transaction code
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 4(20) TIT_TCOD.
PARAMETERS: P_TCODE TYPE TCODE OBLIGATORY.
SELECTION-SCREEN END OF LINE.
* Scenario name
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 4(20) TIT_NAM.
PARAMETERS: P_SCENAR(132) TYPE C LOWER CASE.
SELECTION-SCREEN END OF LINE.
* Scenario description
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 4(20) DES_NAM.
PARAMETERS: P_DESC(128) TYPE C LOWER CASE.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Offline mode
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 4.
PARAMETERS C_OFF AS CHECKBOX USER-COMMAND OFF DEFAULT ' ' .
SELECTION-SCREEN COMMENT 6(12) TIT_OFF.
SELECTION-SCREEN END OF LINE.
*Info
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TIT2.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN SKIP 1.
TIT2 = 'Info'.
CONCATENATE ICON_MESSAGE_INFORMATION
'Before you start recording or playing test scenarios'
INTO TEXT1 SEPARATED BY SPACE.
CONCATENATE
'Please consult the installation guide for'
'the required installation steps.'
INTO TEXT3 SEPARATED BY SPACE.
SAP_WORK_DIR = 'C:\'.
INITIAL_DIRECTORY = SAP_WORK_DIR.
P_OFF = INITIAL_DIRECTORY.
LOOP AT SCREEN.
ENDLOOP.
AT SELECTION-SCREEN ON P_TCODE.
DATA: TTEXT LIKE TSTCT-TTEXT.
IF PANAYA_TROUBLESHOOT_MODE IS INITIAL.
* Show the message
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Panaya recorder - ERROR'
TXT1 =
'Recording test scenarios directly from SAP is not supported.'
TXT2 =
'Please start the recording from the Panaya web '
TXT3 =
'application,'
TXT4 =
'by clicking the "Record Scenario" button.'.
LEAVE PROGRAM.
ENDIF.
* Check transaction
PERFORM CHECK_TRANSACTION.
IF SY-SUBRC IS INITIAL.
CONCATENATE 'Unit test for '
P_TCODE '-' TTEXT
INTO P_SCENAR
SEPARATED BY SPACE.
ENDIF.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON P_OFF.
ENDIF.
IF SY-SUBRC <> 0.
MESSAGE I000(CONV) WITH 'Error when choosing directory '
' for offline processing. Error message: ' SY-SUBRC.
ENDIF.
*-------------------------------------------------------
* Start of selection event
*-------------------------------------------------------
START-OF-SELECTION.
ENDIF.
*---------------------------------------------------------------------*
* FORM ADD_TIME_STAT *
*---------------------------------------------------------------------*
FORM ADD_TIME_STAT USING P_STEP P_STARTTIME.
GT_TIME_STAT-STEP = P_STEP.
GT_TIME_STAT-STARTTIME = P_STARTTIME.
GT_TIME_STAT-ENDTIME = SY-UZEIT.
GT_TIME_STAT-STARTDATE = SY-DATUM.
GT_TIME_STAT-ENDDATE = SY-DATUM.
APPEND GT_TIME_STAT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form check_transaction
*&---------------------------------------------------------------------*
FORM CHECK_TRANSACTION.
IF SY-SUBRC <> 1.
CONCATENATE 'You are not authorized to run transaction '
P_TCODE '.' INTO TEXT SEPARATED BY SPACE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form main
*&---------------------------------------------------------------------*
FORM MAIN USING P_TCODE TYPE TCODE.
DO.
IF IS_TRANSACTION_CHOSEN = SPACE.
EXIT.
ENDIF.
PERFORM POPUP_RECORDING_COMPLETED.
*&---------------------------------------------------------------------*
*& Form ENABLE_DIAG_PARSER_TRACE
*&---------------------------------------------------------------------*
FORM SET_DIAG_TRACE.
* Find current WP
CALL FUNCTION 'TH_GET_OWN_WP_NO'
IMPORTING
SUBRC = SUCC
WP_INDEX = CURR_WP_NO.
IF SY-SUBRC <> 0.
MSG = SUCC.
CONCATENATE :
'Error fetching current Work Process. Error code:'
MSG
INTO
MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_FLUSH_LOG.
ADD 1 TO COUNT.
* Lock current WP
PERFORM TH_LOCK_WP.
IF TEMP_CURR_WP_NO = CURR_WP_NO.
PROCESS_LOCKED = 'X'.
MSG = CURR_WP_NO.
CONCATENATE 'Verified locking of wp:' MSG INTO MSG.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
* Save the current workprocess to memory
C_CURR_WP = CURR_WP_NO.
SET PARAMETER ID 'PANAYA_SR31' FIELD C_CURR_WP.
ELSE.
* Write log
MSG1 = CURR_WP_NO.
MSG2 = TEMP_CURR_WP_NO.
CONCATENATE 'Lock Failed. Current work process changed from '
MSG1 ' to ' MSG2 INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
CURR_WP_NO = TEMP_CURR_WP_NO.
ENDIF.
ENDWHILE.
* Activate trace
PERFORM TH_SET_WP_TRACE.
ENDFORM. "SET_DIAG_TRACE
*&---------------------------------------------------------------------*
*& Form DISABLE_DIAG_PARSER_TRACE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM RESET_DIAG_TRACE USING WP_NO TYPE I.
* Unlock the WP
PERFORM TH_UNLOCK_WP USING WP_NO.
ENDFORM. "RESET_DIAG_TRACE
*&---------------------------------------------------------------------*
*& Form record_transaction
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IT_BDCDATA text
* -->IT_MSG text
* -->P_TCODE text
*----------------------------------------------------------------------*
FORM RECORD_TRANSACTION TABLES IT_BDCDATA STRUCTURE BDCDATA
IT_MSG STRUCTURE BDCMSGCOLL
USING P_TCODE TYPE TCODE
CHANGING P_WAS_RECORDED.
CLEAR P_WAS_RECORDED.
IF SY-SUBRC <> 1.
CONCATENATE 'You are not authorized to run transaction '
P_TCODE '.' INTO TEXT SEPARATED BY SPACE.
IF WITH_BATCH_INPUT_AND_MSGS IS INITIAL.
ELSE.
* Record the batch input and messages in addition to the trace.
IF SY-SUBRC <> 0.
PERFORM SHOW_ERROR USING 'Error while recording'
'transaction. Error :' SY-SUBRC ' '.
ELSE.
* Recording was performed
P_WAS_RECORDED = 'X'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. "record_transaction
*&---------------------------------------------------------------------*
*& Form add_transaction_to_xml
*&---------------------------------------------------------------------*
FORM ADD_TRANSACTION_TO_XML TABLES T_BDCDATA STRUCTURE BDCDATA
T_MSG STRUCTURE BDCMSGCOLL
USING P_TCODE TYPE TCODE
P_SHOULD_ADD_TRANS TYPE FLAG
CHANGING C_XML_SIZE TYPE I.
DATA: TCODE_STR TYPE STRING,
LV_STRING TYPE STRING,
STEP_NO TYPE STRING,
L_NO_OF_LINES TYPE I,
L_NO_OF_ADDED_LINES TYPE I,
PWP_INDEX(5) TYPE C,
FULL_TRACE_FILENAME LIKE RLGRAP-FILENAME,
CURR_LINE TYPE STRING,
CURR_LINE_LEN TYPE I,
L_IS_FIRST_TRACE_LINE,
L_TRANS_HEADER TYPE STRING,
MSG TYPE STRING,
LOG_MESSAGE TYPE STRING,
L_READ_ALSO_OLD_TRACE TYPE C,
L_OLD_TRACE_FILENAME LIKE RSMRGSTR-NAME,
L_TRACE_FILENAME LIKE RLGRAP-FILENAME,
L_CURR_OLD_TRACE_SIZE TYPE RSFILLST-LEN,
L_CURR_OLD_TRACE_TIME TYPE RSFILLST-MTIME.
IF P_SHOULD_ADD_TRANS = 'X'.
L_TRANS_HEADER = ' <TRANSACTION'.
ENDIF.
* Get filename
WRITE CURR_WP_NO TO PWP_INDEX LEFT-JUSTIFIED.
PERFORM GET_FILENAME USING PWP_INDEX CHANGING FULL_TRACE_FILENAME.
* Write log:
MSG = G_FIRST_REL_POS.
SHIFT MSG LEFT DELETING LEADING '0'.
CONCATENATE 'Attempting to read trace data from file'
FULL_TRACE_FILENAME 'from line number' MSG
'. Current process number is' PWP_INDEX INTO MSG
SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
IF L_READ_ALSO_OLD_TRACE = 'X'.
PERFORM ADD_TRACE_TO_BUFFER USING L_OLD_TRACE_FILENAME
G_FIRST_REL_POS.
PERFORM ADD_TRACE_TO_BUFFER USING L_TRACE_FILENAME 1.
ELSE.
PERFORM ADD_TRACE_TO_BUFFER USING L_TRACE_FILENAME
G_FIRST_REL_POS.
ENDIF.
ELSE.
PERFORM SHOW_ERROR USING
'Trace filename was not found. ' ' ' ' ' ' '.
ENDIF.
IF P_SHOULD_ADD_TRANS = 'X'.
ENDFORM. "ADD_TRANSACTION_TO_XML
*---------------------------------------------------------------------*
* FORM add_trace_to_buffer *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_FILENAME *
* --> P_START_LINE *
*---------------------------------------------------------------------*
FORM ADD_TRACE_TO_BUFFER USING P_FILENAME
P_START_POS.
* Open file
DATA: FILE_OPENED TYPE C,
LV_X(65535) TYPE X,
LV_EOF_SUBRC TYPE I,
L_NO_OF_READS TYPE I,
LEN TYPE I,
CURR_LINE TYPE STRING,
CURR_LINE_LEN TYPE I,
MSG TYPE STRING.
MSG = P_FILENAME.
PERFORM FILL_MEASUREMENT USING
ABAP_TRUE ABAP_FALSE 'READ TRACE FILE DATA' MSG
'Start read trace file data'.
CLEAR : MSG.
PERFORM CHECK_UNICODE_SYSTEM.
DO.
* Read trace file data
IF NOT GV_UNICODE_SYSTEM IS INITIAL.
* Unicode read the data in binary
READ DATASET P_FILENAME INTO LV_X LENGTH LEN.
ELSE.
* Non unicode read the data in textual
READ DATASET P_FILENAME INTO CURR_LINE LENGTH CURR_LINE_LEN.
ENDIF.
IF G_WAS_FILE_CREATED IS INITIAL.
G_WAS_FILE_CREATED = 'X'.
ENDIF.
ADD 1 TO L_NO_OF_READS.
* Close wp file
CLOSE DATASET P_FILENAME.
MSG = P_FILENAME.
PERFORM FILL_MEASUREMENT USING
ABAP_FALSE ABAP_TRUE 'READ TRACE FILE DATA' MSG
'End read trace file data'.
CLEAR : MSG.
ENDFORM.
*---------------------------------------------------------------------*
* FORM check_read_also_old_trace *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_READ_ALSO_OLD_TRACE *
*---------------------------------------------------------------------*
FORM CHECK_READ_ALSO_OLD_TRACE CHANGING P_READ_ALSO_OLD_TRACE TYPE C.
CLEAR P_READ_ALSO_OLD_TRACE.
ENDFORM.
*---------------------------------------------------------------------*
* FORM build_xml_header
*---------------------------------------------------------------------*
FORM BUILD_XML_HEADER.
DATA:
L_SIMPLE_ELEM TYPE REF TO IF_IXML_ELEMENT,
L_ELEM TYPE REF TO IF_IXML_ELEMENT,
L_RESULT TYPE I,
L_NAME TYPE STRING,
L_CODE_VERSION(20) TYPE C,
L_DATE_FORMAT LIKE USR01-DATFM,
L_STRING TYPE STRING,
L_ENCODING TYPE STRING,
LT_EMPTY_TAB TYPE STRING_TAB.
* Username
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'User' SY-UNAME
CHANGING L_STRING.
* Date format
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'UserDateFormat'
DATE_FORMAT
CHANGING L_STRING.
* Decimal format
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'UserDecimalFormat'
DECIMAL_FORMAT
CHANGING L_STRING.
* Application server
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'ApplicationServer'
SY-HOST
CHANGING L_STRING.
* System name
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'SystemName' SY-SYSID
CHANGING L_STRING.
* Client
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'Client' SY-MANDT
CHANGING L_STRING.
* Scenario name
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'ScenarioName' P_SCENAR
CHANGING L_STRING.
* Scenario Description
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'ScenarioDesc' P_DESC
CHANGING L_STRING.
* Sap version
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'SAPVersion' SY-SAPRL
CHANGING L_STRING.
*---------------------------------------------------------------------*
* FORM APPEND_ATTRIBUTE_TO_XML_TAG *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_ATT_NAME *
* --> P_ATT_VAL *
* --> P_STRING *
*---------------------------------------------------------------------*
FORM APPEND_ATTRIBUTE_TO_XML_TAG USING P_ATT_NAME P_ATT_VAL
CHANGING P_STRING.
L_ATT_VAL = P_ATT_VAL.
ENDFORM.
*&---------------------------------------------------------------------
*& Form GET_FILENAME_FROM_PATH
*&---------------------------------------------------------------------
FORM GET_FILENAME_FROM_PATH USING FILEPATH TYPE STRING
CHANGING FILENAME TYPE STRING.
DATA: PATH_TAB TYPE TABLE OF STRING,
PATH_LENGTH TYPE I.
*&---------------------------------------------------------------------*
*& Form th_get_trace_setting
*&---------------------------------------------------------------------*
FORM TH_GET_TRACE_SETTING USING WP_NO TYPE I
CHANGING TRC TYPE THFB_TRACE.
CONSTANTS:
OPCODE_WP_TRCINFO LIKE TH_OPCODE VALUE 11.
IF SY-SUBRC <> 0.
PERFORM SHOW_ERROR USING 'Error while retrieving trace '
'settings. Error code: ' SY-SUBRC ' '.
ENDIF.
CLEAR TRC.
TRC-ID = CURR_WP_NO.
TRC-LEVEL = ACT_TRC.
TRC-WPTYPE = WPTYPE.
IF ACT(3) = 'all'.
IF ACT+4 CS 'D'. TRC-DIAG = 'X'. ENDIF.
ELSE.
TRC-DIAG = 'X'.
IF ACT+4 CS 'D'. TRC-DIAG = ' '. ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form th_set_wp_trace
*&---------------------------------------------------------------------*
FORM TH_SET_WP_TRACE.
CONSTANTS:
OPCODE_WP_TRCSWITCH LIKE TH_OPCODE VALUE 10.
DATA : MSG TYPE STRING,
LV_SUBRC TYPE STRING.
CONSTANTS:
OPCODE_WP_TRCSWITCH LIKE TH_OPCODE VALUE 10.
DATA: MSG TYPE STRING,
LV_SUBRC TYPE STRING.
MSG = WP_NO.
CONCATENATE 'Resetting trace for work process:' MSG
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
IF SY-SUBRC IS INITIAL.
CLEAR FOUND_WP_WITH_TRACE.
* If no trace was enabled for any work process, delete the trace files
IF FOUND_WP_WITH_TRACE IS INITIAL.
CONCATENATE 'Deleting all trace files (dev_w*) since no other wp'
'with enabled trace was found' INTO MSG
SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
*&---------------------------------------------------------------------*
*& Form TH_LOCK_WP
*&---------------------------------------------------------------------*
FORM TH_LOCK_WP.
DATA:
OPCODE TYPE X,
STATE TYPE I,
WP TYPE I,
STAMP(14),
MSG TYPE STRING,
LV_SUBRC TYPE STRING.
* Write Log
MSG = CURR_WP_NO.
CONCATENATE 'Locking work process: ' MSG INTO MSG.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
OPCODE = 26.
CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE
ID 'LOCK_STATE' FIELD STATE
ID 'WP_ID' FIELD CURR_WP_NO
ID 'STAMP' FIELD STAMP.
IF STATE = 0.
CLEAR: MSG.
LV_SUBRC = SY-SUBRC .
CONCATENATE : 'Error while locking work process. RC:'
LV_SUBRC
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_FLUSH_LOG.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form TH_UNLOCK_WP
*&---------------------------------------------------------------------*
FORM TH_UNLOCK_WP USING VALUE(WP_NO) TYPE I.
DATA:
OPCODE TYPE X,
STATE TYPE I,
WP TYPE I,
STAMP(14),
MSG TYPE STRING,
LV_SUBRC TYPE STRING.
* Write Log
MSG = WP_NO.
CONCATENATE 'Unlocking work process: ' MSG INTO MSG.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
OPCODE = 27.
CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE
ID 'LOCK_STATE' FIELD STATE
ID 'WP_ID' FIELD WP_NO
ID 'STAMP' FIELD STAMP.
IF STATE = 1.
CLEAR: MSG.
LV_SUBRC = SY-SUBRC .
CONCATENATE :'Error while unlocking work process. RC:'
LV_SUBRC
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_FLUSH_LOG.
*&---------------------------------------------------------------------*
*& Form TH_DELETE_MODE
*&---------------------------------------------------------------------*
FORM TH_DELETE_MODE USING VALUE(WP_NO) TYPE I.
DATA:
OPCODE TYPE X,
MSG TYPE STRING,
LV_SUBRC TYPE STRING.
* Write Log
MSG = WP_NO.
CONCATENATE 'Deleting work process:' MSG INTO MSG.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
OPCODE = 05.
CALL 'ThWpInfo' ID 'OPCODE' FIELD OPCODE
ID 'WP_INDEX' FIELD WP_NO.
IF SY-SUBRC <> 0.
CLEAR: MSG.
LV_SUBRC = SY-SUBRC .
CONCATENATE :'Error while deleting mode. RC:'
LV_SUBRC
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_FLUSH_LOG.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM READ_TRACE_INFO *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_FILENAME *
* --> P_TRACE_SIZE *
* --> P_TRACE_TIME *
*---------------------------------------------------------------------*
FORM READ_TRACE_INFO USING P_FILENAME TYPE RSMRGSTR-NAME
CHANGING P_TRACE_SIZE TYPE RSFILLST-LEN
P_TRACE_TIME TYPE RSFILLST-MTIME.
DIRNAME = WORKDIR.
FILENAME = P_FILENAME.
IF SY-SUBRC <> 0.
RC = SY-SUBRC.
CONCATENATE 'Problem reading list of files in' DIRNAME
'.subrc=' RC '. assuming file is missing:' P_FILENAME
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
ELSE.
P_TRACE_SIZE = SIZE.
CONCATENATE 'Found trace:' P_FILENAME ', size:' P_TRACE_SIZE
', time:' P_TRACE_TIME INTO MSG
SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM GET_OLD_TRACE_FILENAME *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_FILENAME *
*---------------------------------------------------------------------*
FORM GET_OLD_TRACE_FILENAME CHANGING P_FILENAME.
CLEAR P_FILENAME.
WP = CURR_WP_NO.
CONCATENATE 'dev_w' WP '.old' INTO P_FILENAME.
CONDENSE P_FILENAME NO-GAPS.
ENDFORM.
*---------------------------------------------------------------------*
* FORM GET_TRACE_FILENAME *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_FILENAME *
*---------------------------------------------------------------------*
FORM GET_TRACE_FILENAME CHANGING P_FILENAME.
CLEAR P_FILENAME.
WP = CURR_WP_NO.
CONCATENATE 'dev_w' WP INTO P_FILENAME.
CONDENSE P_FILENAME NO-GAPS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form calc_relevant_pos_in_trace
*&---------------------------------------------------------------------*
FORM CALC_RELEVANT_POS_IN_TRACE.
* Get the length of the file BEFORE the recording started and update
* the relevant position of the trace file
DATA: FULL_TRACE_FILE TYPE STRING_TAB,
TRACE_POS TYPE I.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form release_locked_wps
*&---------------------------------------------------------------------*
FORM RELEASE_LOCKED_WPS.
* Check that there are no Dialog Work processes that are locked for
* more than a certain amount of time. This shoudl prevent a situation
* when a Dump occured in the middle of a recording but te WP remained
* locked and with enabled log.
CALL FUNCTION 'TH_GET_WPINFO'
TABLES
WPLIST = WP_LIST.
IF SY-SUBRC IS INITIAL.
MSG = LV_WPS_NUM.
CONCATENATE 'Number of work processs:'
MSG INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
TIME_TYPE_N = WP_LIST-WP_ELTIME.
IF CURR_TRACE-LEVEL = '2'
AND CURR_TRACE-DIAG = 'X'.
LV_TRACE2_WPS = LV_TRACE2_WPS + 1.
IF WP_LIST-WP_WAITING = 'LOCK'.
LV_LOCKED_WPS = LV_LOCKED_WPS + 1.
* Release locked wp
IF TIME_TYPE_N >= MAX_TIME_FOR_LOCKED_WP.
* write log
CLEAR : MSG.
MSG = WP_LIST-WP_INDEX.
CONCATENATE 'Releasing locked work process:'
MSG INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
CLEAR : MSG.
MSG = LV_DIALOG_WPS.
CONCATENATE 'Number of dialog wps:'
MSG INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
CLEAR : MSG.
MSG = LV_TRACE2_WPS.
CONCATENATE 'Number of dialog wps with trace level 2:'
MSG INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
CLEAR : MSG.
MSG = LV_LOCKED_WPS.
CONCATENATE 'Number of locked dialog wps with trace level 2'
'(before process lock):'
MSG INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
ELSE.
CLEAR: MSG.
LV_SUBRC = SY-SUBRC .
CONCATENATE :'Error while getting list of WP. RC:'
LV_SUBRC
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_FLUSH_LOG.
DO.
REPLACE PATTERN WITH SUBSTITUTE INTO TEXT.
IF SY-SUBRC <> 0. EXIT. ENDIF.
ENDDO.
* CONCATENATE
* 'Turn off the flag by right clicking on the system name'
* '(in SAP logon)'
* INTO THIRD_LINE SEPARATED BY SPACE.
*
* FORTH_LINE =
* '-> Properties -> Advanced -> uncheck ''Low-Speed Connection'''.
CONCATENATE
'For more information please refer to'
'''Test scenario recorder guide'', located in:'
INTO THIRD_LINE SEPARATED BY SPACE.
CONCATENATE
'https://my.panaya.com/help/guides/'
'TestScenarioRecorderSetupGuide.pdf'
INTO FORTH_LINE.
LEAVE PROGRAM.
ELSE.
* SE38 validation checks mode
CONCATENATE 'Low-Speed Connection'
' flag is turned on in your SAP logon'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form clear_params
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_PARAMS_VALUES text
*----------------------------------------------------------------------*
FORM CLEAR_GLOBAL_PARAMS.
IF SY-SUBRC IS INITIAL
AND NOT IT_PARAMS-PARAMID = 'GR0'
AND NOT IT_PARAMS-PARAMID = 'AVW'
AND NOT IT_PARAMS-PARAMID = 'UGR'
AND NOT IT_PARAMS-PARAMID = 'MOL'
AND NOT IT_PARAMS-PARAMID = 'RUN'
AND NOT IT_PARAMS-PARAMID = 'PRJ'
AND NOT IT_PARAMS-PARAMID = 'KPO'
AND NOT IT_PARAMS-PARAMID = 'KNR'
AND NOT IT_PARAMS-PARAMID = 'EFB'
AND NOT IT_PARAMS-PARAMID = 'EVO'
AND NOT IT_PARAMS-PARAMID CP 'GUI*'
* Don't clear parameters that are flags (like FOP and FO2)
AND IS_PARAM_VALUE-VALUE CN 'X '
AND ( NOT ( IT_PARAMS-PARAMID = 'ENJ_CALL_ME23N'
AND CALLED_EXTERNALLY_START = 'X' ) )
AND ( NOT ( IT_PARAMS-PARAMID = 'ENJ_CALL_ME53N'
AND CALLED_EXTERNALLY_START = 'X' ) )
.
ELSE.
* If 'ENJ_CALL_ME53N' and 'ENJ_CALL_ME23N' didn't exist,
* add them with space
IF ( IT_PARAMS-PARAMID = 'ENJ_CALL_ME53N' OR
IT_PARAMS-PARAMID = 'ENJ_CALL_ME23N' )
AND CALLED_EXTERNALLY_START = ''.
ENDIF.
ENDIF.
ENDLOOP.
* The F4 screens are recorded in the trace file only if they are not
* ActiveX screens.
SET PARAMETER ID 'F4METHOD' FIELD 'NoActiveX'.
CLEAR G_IT_PARAMS_VALUES[].
ENDFORM. " restore_params
*&---------------------------------------------------------------------*
*& Form ADD_TIME_STAT_TO_XML
*&---------------------------------------------------------------------*
FORM ADD_TIME_STAT_TO_XML USING STARTIME LIKE SY-UZEIT.
*&---------------------------------------------------------------------*
*& Form set_filename
*&---------------------------------------------------------------------*
FORM SET_FILENAME.
DATA: WORKDIR(120),
PLATFORM TYPE STRING,
SCEN_NAME_TRUNC(20) TYPE C,
SCEN_NAME_TRUNC_STR TYPE STRING,
TEMP_STR TYPE STRING,
CURR_IDX TYPE I,
TOTAL_STR_LENGTH TYPE I,
CURR_CHAR,
PREV_CHAR,
SERVER_WORKDIR_LEN TYPE I,
LOCAL_WORKDIR_LEN TYPE I,
MAX_WORKDIR_LEN TYPE I,
MAX_SCEN_LEN TYPE I,
TEMP_STR_LEN TYPE I.
ENDIF.
ADD 1 TO CURR_IDX.
ENDWHILE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form build_html_header
*&---------------------------------------------------------------------*
FORM BUILD_HTML_HEADER USING IS_ZIP_SUCC.
CLEAR G_BUFFER_ITAB[].
CONCATENATE URL_PREF
'/site/pages/scenarioRecorder.jsf'
INTO URL_STR.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form build_html_suffix
*&---------------------------------------------------------------------*
FORM BUILD_HTML_SUFFIX.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form build_xml_suffix
*&---------------------------------------------------------------------*
FORM BUILD_XML_SUFFIX.
PERFORM APPEND_XML_TO_BUFFER USING '</ROOT>'.
PERFORM FLUSH_BUFFER USING ' ' ' '.
ENDFORM. " build_xml_suffix
*&---------------------------------------------------------------------*
*& Form build_html
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_XML text
*----------------------------------------------------------------------*
FORM CALL_BROWSER.
*&---------------------------------------------------------------------*
*& Form DELETE_HTML
*&---------------------------------------------------------------------*
FORM DELETE_XML.
IF SY-SUBRC <> 0.
RC = SY-SUBRC.
MSG = SY-SUBRC .
CONCATENATE :'Error while deleting the created. RC:'
MSG
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_FLUSH_LOG.
*&---------------------------------------------------------------------*
*& Form INIT_RECORDING
*&---------------------------------------------------------------------*
FORM INIT_RECORDING TABLES FIELDS TYPE SVAL_TAB.
* Set filename
PERFORM SET_FILENAME.
*&---------------------------------------------------------------------*
*& Form RECORD_AND_WRITE_TRANSACTION
*&---------------------------------------------------------------------*
FORM RECORD_AND_WRITE_TRANSACTION CHANGING ANSWER.
ENDIF.
* Reset trace
PERFORM RESET_DIAG_TRACE USING CURR_WP_NO.
*&---------------------------------------------------------------------*
*& Form CHOOSE_NEW_TRANSACTION
*&---------------------------------------------------------------------*
FORM CHOOSE_NEW_TRANSACTION CHANGING P_IS_TRANSACTION_CHOSEN.
CLEAR P_IS_TRANSACTION_CHOSEN.
IF SY-SUBRC <> 0.
PERFORM SHOW_ERROR USING 'Error while '
'choosing next transaction '
'Error code: '
SY-SUBRC.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form finish_and_show_file
*&---------------------------------------------------------------------*
FORM FINISH_AND_SHOW_FILE USING P_STARTTIME LIKE SY-UZEIT.
DATA:
FILELEN TYPE I,
FILE_PREFIX TYPE STRING,
FILE_MIDDLE TYPE STRING,
FILE_SUFFIX TYPE STRING,
FIRST_LINE TYPE STRING,
IS_ZIP_SUCC.
* Zip the file and read the zipped info ( only if zip is available )
* In case of recovery mode - check GZIP was not performed in current
* session and we need to recheck it ( without showing the error,
* because it was checked in the first session )
PERFORM CHECK_GZIP USING ' '.
IF NOT IS_ZIP_AVAILABLE IS INITIAL.
PERFORM ZIP_XML CHANGING IS_ZIP_SUCC.
IF IS_ZIP_SUCC IS INITIAL.
MESSAGE I001(00) WITH
'Data compression failed (RC : ' SY-SUBRC
'). Scenario will be generated without compression.'.
ENDIF.
ENDIF.
CONCATENATE ICON_MESSAGE_INFORMATION
'Recording saved to the following file '
INTO FIRST_LINE SEPARATED BY SPACE.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Recording saved'
TXT1 = FIRST_LINE
TXT2 = FILE_PREFIX
TXT3 = FILE_MIDDLE
TXT4 = FILE_SUFFIX.
ENDIF.
ENDFORM. " finish_and_show_file
*&---------------------------------------------------------------------*
*& Form read_trace_file
*&---------------------------------------------------------------------*
FORM GET_TRACE_SIZE CHANGING FILE_SIZE TYPE I.
* Get filename
WRITE CURR_WP_NO TO PWP_INDEX LEFT-JUSTIFIED.
PERFORM GET_FILENAME USING PWP_INDEX
CHANGING FULL_TRACE_FILENAME.
CONCATENATE
'Find number of bytes in trace file (before recording):'
FULL_TRACE_FILENAME INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
ELSE.
PERFORM SHOW_ERROR USING
'Trace filename was not found. ' ' ' ' ' ' '.
ENDIF.
CLEAR MSG.
POS_AS_N = FILE_SIZE.
SHIFT POS_AS_N LEFT DELETING LEADING '0'.
CONCATENATE 'Number of bytes in trace file (before recording):'
POS_AS_N INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
* Make all the needed transformations fro adding the xml string to
* buffer - only in case that zipping is not used
* PERFORM HANDLE_XML_ESCAPING CHANGING XML_CONTENT_STR.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form APPEND_STRING_TO_BUFFER
*&---------------------------------------------------------------------*
FORM APPEND_STRING_TO_BUFFER USING STR TYPE STRING
IN_CLIENT
P_ADD_END_OF_LINE.
DATA: NO_OF_LINES TYPE I.
IF NO_OF_LINES = C_MAX_BUFFER_SIZE.
IF NOT IN_CLIENT IS INITIAL.
PERFORM ADD_DATA_TO_FILE_IN_CLIENT USING
G_BUFFER_ITAB
P_ADD_END_OF_LINE
G_FILENAME
'Error while downloading file to client.'
CHANGING
G_FILE_IS_APPEND_MODE_CLIENT.
IF G_WAS_FILE_CREATED IS INITIAL.
G_WAS_FILE_CREATED = 'X'.
ENDIF.
ELSE.
PERFORM ADD_DATA_TO_FILE_IN_SERVER USING G_BUFFER_ITAB.
ENDIF.
CLEAR G_BUFFER_ITAB[].
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FLUSH_BUFFER
*&---------------------------------------------------------------------*
FORM FLUSH_BUFFER USING IN_CLIENT
P_ADD_END_OF_LINE.
* Write log
DESCRIBE TABLE G_BUFFER_ITAB LINES LIN.
IF IN_CLIENT = 'X'.
MSG = '(In client).'.
CONCATENATE 'Flushing buffer to file: '
G_FILENAME '.In client:' IN_CLIENT
'.Buffer Size (lines): ' LIN MSG INTO MSG SEPARATED BY SPACE.
ELSE.
MSG = '(In server).'.
CONCATENATE 'Flushing buffer to file: '
TEMP_XML_FILENAME '.In client:' IN_CLIENT
'.Buffer Size (lines): ' LIN MSG INTO MSG SEPARATED BY SPACE.
ENDIF.
IF G_WAS_FILE_CREATED IS INITIAL.
G_WAS_FILE_CREATED = 'X'.
ENDIF.
ELSE.
PERFORM ADD_DATA_TO_FILE_IN_SERVER USING G_BUFFER_ITAB.
ENDIF.
CLEAR G_BUFFER_ITAB[].
ENDIF.
ENDFORM. " FLUSH_BUFFER
*&---------------------------------------------------------------------*
*& Form SET_TRANS_INFO
*&---------------------------------------------------------------------*
FORM SET_TRANS_INFO.
DATA: FILENAME_FULL(1024) TYPE C,
FILENAME_C1(250),
FILENAME_C2(250),
FILENAME_LENGTH TYPE I,
IS_SPLIT.
* Since filename could be more than 250 characters ( and maximum length
* of field is 250 characters ), we assume that it is not longer than
* 500 characters and split it into two fields. The third field is
* boolean - was filename split.
FILENAME_LENGTH = STRLEN( G_FILENAME ).
IF FILENAME_LENGTH >= 250.
IS_SPLIT = 'X'.
FILENAME_FULL = G_FILENAME.
CALL FUNCTION 'STRING_SPLIT_AT_POSITION'
EXPORTING
STRING = FILENAME_FULL
POS = 250
IMPORTING
STRING1 = FILENAME_C1
STRING2 = FILENAME_C2
EXCEPTIONS
STRING1_TOO_SMALL = 1
STRING2_TOO_SMALL = 2
POS_NOT_VALID = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* If splitting failed - abort
PERFORM SHOW_ERROR USING 'Splitting filename failed. '
'Error code: '
SY-SUBRC ' '.
ENDIF.
ELSE.
ENDIF.
* PANAYA_SR1 =>
Was transaction recording started?
* PANAYA_SR2 =>
Current transaction
* PANAYA_SR3 =>
First line of trace of current transaction
* PANAYA_SR4 =>
Start time of transaction
* PANAYA_SR5 =>
If filename split
* PANAYA_SR6 =>
First part of filename in case that the filename
* is split. If not split - this is filename.
* PANAYA_SR7 => Second part of filename in case that it is split.
* PANAYA_SR8 => Transaction index
* PANAYA_SR9 => Online/Oflline mode
* PANAYA_SR10 => Offline directory name
* PANAYA_SR11 => Temp xml filename
SET PARAMETER ID: 'PANAYA_SR1' FIELD 'X',
'PANAYA_SR2' FIELD P_TCODE,
'PANAYA_SR3' FIELD G_FIRST_REL_POS,
'PANAYA_SR4' FIELD G_STARTTIME,
'PANAYA_SR5' FIELD IS_SPLIT,
'PANAYA_SR6' FIELD FILENAME_C1,
'PANAYA_SR7' FIELD FILENAME_C2,
'PANAYA_SR8' FIELD G_TRANS_INDEX,
'PANAYA_SR9' FIELD C_OFF,
'PANAYA_SR10' FIELD P_OFF,
'PANAYA_SR11' FIELD TEMP_XML_FILENAME.
*&---------------------------------------------------------------------*
*& Form RESET_TRANS_INFO
*&---------------------------------------------------------------------*
FORM RESET_TRANS_INFO.
*&---------------------------------------------------------------------*
*& Form FINISH_PREV_RECORDING
*&---------------------------------------------------------------------*
FORM FINISH_PREV_RECORDING.
IF SY-SUBRC <> 0.
CLEAR: MSG.
MSG = SY-SUBRC .
CONCATENATE :'Error fetching current Work Process. RC:'
MSG
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_FLUSH_LOG.
* Delete the file that was created if the user chooses not to upload
* it to Panaya
G_WAS_FILE_CREATED = 'X'.
PERFORM DELETE_XML.
MESSAGE S001(00) WITH 'Recording not sent to Panaya.'.
ENDIF.
* Submit the recorder again once the user finished the recovery mode,
* since many global variables were used during the recovery mode and
* should be refreshed for a new recording
SUBMIT (SY-CPROG) VIA SELECTION-SCREEN.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form POPUP_RECORDING_COMPLETED
*&---------------------------------------------------------------------*
FORM POPUP_RECORDING_COMPLETED.
* Finish creating the file ( all suffixes ) and call the browser to
* show the HTML.
PERFORM FINISH_AND_SHOW_FILE USING G_STARTTIME.
ELSE.
* Delete the file that was created if the user chose not to upload
* it to Panaya
PERFORM DELETE_XML.
MESSAGE S001(00) WITH 'Recording not sent to Panaya.'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CONVERT_TRACE_LINE
*&---------------------------------------------------------------------*
FORM CONVERT_TRACE_LINE CHANGING P_LINE TYPE STRING.
*&---------------------------------------------------------------------*
*& Form GET_SAP_WORKDIR_ON_SERVER
*&---------------------------------------------------------------------*
FORM GET_SAP_WORKDIR_ON_SERVER CHANGING P_WORKDIR.
*---------------------------------------------------------------------*
* FORM GET_SAP_WORKDIR_ON_SERVER_SEP *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_WORKDIR *
*---------------------------------------------------------------------*
FORM GET_SAP_WORKDIR_ON_SERVER_SEP CHANGING P_WORKDIR.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ZIP_XML
*&---------------------------------------------------------------------*
FORM ZIP_XML CHANGING IS_SUCC.
ENDIF.
*&---------------------------------------------------------------------*
*& Form ZIP_XML_IN_UNIX
*&---------------------------------------------------------------------*
FORM ZIP_XML_IN_UNIX CHANGING IS_SUCC.
DATA: CMD(254),
RESULT(255) OCCURS 100 WITH HEADER LINE,
LV_ZIPED_FILENAME(250).
CLEAR IS_SUCC.
IF SY-SUBRC LE 0.
* Check that the ziped file was created at the server
CONCATENATE TEMP_XML_FILENAME '.gz'
INTO LV_ZIPED_FILENAME .
IF SY-SUBRC <> 0.
IS_SUCC = SPACE.
ELSE.
IS_SUCC = 'X'.
CLOSE DATASET LV_ZIPED_FILENAME.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form ZIP_XML_IN_EXTERNAL_CMD
*&---------------------------------------------------------------------*
FORM ZIP_XML_IN_EXTERNAL_CMD CHANGING IS_SUCC.
CLEAR IS_SUCC.
IF SY-SUBRC <> 0.
IS_SUCC = SPACE.
ELSE.
IS_SUCC = 'X'.
CLOSE DATASET LV_ZIPED_FILENAME.
ENDIF.
ELSE.
LV_SUBRC = SY-SUBRC.
CONCATENATE : 'Zipping command failed , RC:'
LV_SUBRC
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form add_data_to_file_in_client
*&---------------------------------------------------------------------*
FORM ADD_DATA_TO_FILE_IN_CLIENT USING P_DATA_TAB TYPE STRING_TAB
P_ADD_END_OF_LINE
P_FILENAME TYPE STRING
P_ERROR_MSG TYPE STRING
CHANGING P_IS_APPEND_MODE.
CASE LV_SUBRC.
WHEN 1."file_write_error
MESSAGE E001(00) WITH MSG
'Error code: ' LV_SUBRC ' - File write error'.
WHEN 5."No authority
MESSAGE E001(00) WITH MSG
'Error code: ' LV_SUBRC ' - No authority'.
WHEN 15."access_denied
MESSAGE E001(00) WITH MSG
'Error code: ' LV_SUBRC ' - Access denied'.
WHEN 17."disk_full
MESSAGE E001(00) WITH MSG
'Error code: ' LV_SUBRC ' - Disk full'.
WHEN OTHERS.
MESSAGE E001(00) WITH MSG
'Error code: ' LV_SUBRC.
ENDCASE.
ELSE.
MSG = P_FILENAME.
CONCATENATE :
'GUI_DOWNLOAD finished successfully to file:'
MSG
INTO MSG SEPARATED BY SPACE.
IF P_IS_APPEND_MODE IS INITIAL.
P_IS_APPEND_MODE = 'X'.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form CHECK_GZIP
*&---------------------------------------------------------------------*
FORM CHECK_GZIP USING SHOW_MSG.
CLEAR IS_ZIP_AVAILABLE.
* Winzip command
CONCATENATE
WORKDIR
'\1.gz'
INTO
LV_ZIP_FILE.
CONCATENATE
WORKDIR
'\1.txt'
INTO
LV_CHECK_FILE.
CONCATENATE
LV_ZIP_FILE
LV_CHECK_FILE
INTO
PARAMETERS
SEPARATED BY SPACE.
ENDIF.
IF SY-SUBRC <> 0.
IF SHOW_MSG = 'X'.
RC = SY-SUBRC.
* Create first line of the message
FIRST_LINE =
'Compression software is required for making scenario generation work '.
CONCATENATE ICON_MESSAGE_INFORMATION
'Compression software is required for making scenario generation work '
INTO FIRST_LINE
SEPARATED BY SPACE.
* Second line
SECOND_LINE =
'much faster. However, operating system command for compression is not'.
* Show sy-subrc
CONCATENATE 'defined (RC : '
RC
'). Please follow the installation guide to define the command'
INTO THIRD_LINE
SEPARATED BY SPACE.
*&---------------------------------------------------------------------*
*& Form FIND_PLATFORM
*&---------------------------------------------------------------------*
FORM FIND_PLATFORM CHANGING P_PLATFORM.
P_PLATFORM = SY-OPSYS.
ENDFORM. " FIND_PLATFORM
*&---------------------------------------------------------------------*
*& Form HANDLE_XML_ESCAPING
*&---------------------------------------------------------------------*
FORM HANDLE_XML_ESCAPING CHANGING XML_CONTENT_STR TYPE STRING.
*&---------------------------------------------------------------------*
*& Form EXTERNAL_START_REC
*&---------------------------------------------------------------------*
FORM EXTERNAL_START_REC.
PERFORM GENERATE_UPARAMS_FILENAMES.
* Save the current state of the user parameters in a file for later use.
PERFORM SAVE_UPARAMS_TO_ITAB TABLES G_USERS_PARAMS
USING P_PGRPID.
PERFORM ADD_TO_UPARAMS_FILE TABLES G_USERS_PARAMS
USING G_RECORDING_PARAM_FILENAME.
* The F4 screens are recorded in the trace file only if they are not
* ActiveX screens.Therefore regardless to what the users have we always
* set this to no activex.
SET PARAMETER ID 'F4METHOD' FIELD 'NoActiveX'.
* Calculate where starts the relevant trace ( and save it using set
* parameter )
PERFORM CALC_RELEVANT_POS_IN_TRACE.
PERFORM LOG_SYSTEM_WP_PARAMETERS.
PERFORM ADD_WPS_STATUS_TO_LOG.
DATA: IS_ZIP_SUCC,
WORKDIR(120),
L_FILENAME(128),
L_ENCODING TYPE STRING,
COUNTER(3) TYPE N,
MAX_PARAM_NO(3) TYPE N,
L_PARAMS LIKE LINE OF G_IT_PARAMS_VALUES,
PARAM_NAME(13) TYPE C,
L_REC_STARTED,
MSG TYPE STRING,
FILE_PATH TYPE TABLE OF STRING,
FILE_PATH_LENGTH TYPE I,
FILENAME TYPE STRING,
WP_NO_AT_START TYPE I,
C_WP_NO(5) TYPE C,
WP_NO_AT_END TYPE I,
LV_WP_CHANGED TYPE FLAG,
SUCC LIKE SY-SUBRC,
C_SUCC(10) TYPE C.
PERFORM GENERATE_UPARAMS_FILENAMES.
IF SY-SUBRC <> 0.
C_SUCC = SUCC.
CONCATENATE
'Error fetching current Work Process. Error code:'
C_SUCC INTO MSG SEPARATED BY SPACE.
CLEAR MSG.
ENDIF.
* Get the work process at start time
GET PARAMETER ID 'PANAYA_SR31' FIELD C_WP_NO.
WP_NO_AT_START = C_WP_NO.
* Check that the work process hasn't changed from start time.
IF WP_NO_AT_END NE WP_NO_AT_START.
PERFORM ADD_TO_LOG USING
'WORK_PROCESS_CHANGED = TRUE'
GC_LOG_WRITE.
LV_WP_CHANGED = ABAP_TRUE.
ELSE.
PERFORM ADD_TO_LOG USING
'WORK_PROCESS_CHANGED = FALSE'
GC_LOG_WRITE.
LV_WP_CHANGED = ABAP_FALSE.
ENDIF.
IF P_MODE EQ PAUSE_PLAY.
* In player mode, save the state at the end of the playback
* incase this is a pause playback
PERFORM CREATE_PAUSE_UPARAMS_XML_FILE USING GC_LOG_WRITE.
ENDIF.
IF P_MODE NE RECORDING.
DATA: DELETE_FILE TYPE C VALUE 'X',
ONLY_RESTORE_CALLED VALUE ' '.
* Add the trace file data to a temp file at the server side
* temp_xml_filename
* The log data is addded at the end of the trace dat to the same
* temp_xml_filename
* Any other data written to the log afterwards will not appear in the
* xml sent to Panaya !!!
PERFORM ADD_TRANSACTION_TO_XML
TABLES GT_BDCDATA GT_MSG
USING P_TCODE ' '
CHANGING G_XML_SIZE.
* Reset trace
PERFORM RESET_DIAG_TRACE USING CURR_WP_NO.
* Zip the file and read the zipped info. Here - don't show
* error if zipping failed
PERFORM CHECK_GZIP USING ' '.
IF NOT IS_ZIP_AVAILABLE IS INITIAL.
PERFORM ZIP_XML CHANGING IS_ZIP_SUCC.
ENDIF.
PERFORM NO_END_TO_FAILURE_FILE.
ENDIF.
*&---------------------------------------------------------------------*
*& Form HADNLE_EXTERNALLY_CALLED
*&---------------------------------------------------------------------*
FORM HADNLE_EXTERNALLY_CALLED.
G_FILENAME = P_SCENAR.
PERFORM GENERATE_UPARAMS_FILENAMES.
*&---------------------------------------------------------------------*
*& Form CHECK_EXTERNAL_FILENAME
*&---------------------------------------------------------------------*
FORM CHECK_EXTERNAL_FILENAME.
MESSAGE E001(00) WITH 'Could not delete the created file at :'
G_FILENAME 'RC:' LV_SUBRC.
ENDIF.
*&---------------------------------------------------------------------*
*& Form RESET_EXT_GLOBAL_PARAMETER
*&---------------------------------------------------------------------*
FORM RESET_EXT_GLOBAL_PARAMETERS.
*&---------------------------------------------------------------------*
*& Form ADD_TO_LOG
*&---------------------------------------------------------------------*
FORM ADD_TO_LOG USING
P_MSG TYPE STRING
IV_DOWNLOAD_DATA TYPE FLAG.
CLEAR : GT_LOG_DATA[].
ENDIF.
ENDFORM. " ADD_TO_LOG
*&---------------------------------------------------------------------*
*& Form add_log_to_xml
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ADD_LOG_TO_XML.
IF SY-SUBRC = 0.
* Get measures from log
PERFORM GET_MEASURES_FROM_LOG
TABLES G_XML_LOG_MESSAGES.
ENDLOOP.
ELSE.
LV_SUBRC = SY-SUBRC.
CONCATENATE : 'Failed to upload log file:'
G_LOG_FILENAME
'RC:' LV_SUBRC
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_FLUSH_LOG.
ENDIF.
*&---------------------------------------------------------------------*
*& Form CHECK_SHOW_TRAN_STAT
*&---------------------------------------------------------------------*
* We need not to show the transfer status in case it shows because
* external command where we do not want to see any messages. In ECC6
* SPS6 and lower - the parameter doesn't exist. In ECC6 when calling
* to Function Module with a non existing parameter - a dump is shown.
* That's why we want to check it beforehand.
FORM CHECK_SHOW_TRAN_STAT CHANGING P_DOES_APPEAR.
CLEAR P_DOES_APPEAR.
IF SY-SUBRC IS INITIAL.
P_DOES_APPEAR = 'X'.
ENDIF.
*---------------------------------------------------------------------*
* FORM GENERATE_FORMATS_FILE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM GENERATE_CLIENT_DATA_FILE.
* Check the user file access ability only if he has auth for it
IF LV_DATASET_FAILED IS INITIAL.
* Check server files access - temp create + write + read +delete
PERFORM CHECK_SERVER_FILE_ACCESS CHANGING CLIENT_DATA_ITAB.
ENDIF.
CLEAR LS_KERNEL_VERSION.
READ TABLE LT_KERNEL_VERSION INTO LS_KERNEL_VERSION INDEX 12.
P_KRELEASE = LS_KERNEL_VERSION-DATA.
CLEAR LS_KERNEL_VERSION.
READ TABLE LT_KERNEL_VERSION INTO LS_KERNEL_VERSION INDEX 15.
P_KPATCH = LS_KERNEL_VERSION-DATA.
CLEAR LS_KERNEL_VERSION.
READ TABLE LT_KERNEL_VERSION INTO LS_KERNEL_VERSION INDEX 14.
P_KCCOMPILATION = LS_KERNEL_VERSION-DATA.
CLEAR LS_KERNEL_VERSION.
READ TABLE LT_KERNEL_VERSION INTO LS_KERNEL_VERSION INDEX 20.
P_KABAPLOAD = LS_KERNEL_VERSION-DATA.
CLEAR LS_KERNEL_VERSION.
READ TABLE LT_KERNEL_VERSION INTO LS_KERNEL_VERSION INDEX 21.
P_KCAULOAD = LS_KERNEL_VERSION-DATA.
CLEAR LS_KERNEL_VERSION.
READ TABLE LT_KERNEL_VERSION INTO LS_KERNEL_VERSION INDEX 22.
P_KMODE = LS_KERNEL_VERSION-DATA.
ENDFORM. " GET_KERNEL_DATA
*---------------------------------------------------------------------*
* FORM check_server_parameters *
*---------------------------------------------------------------------*
* Check server settings for recorder program if incorrect add to the
* log .data file
*---------------------------------------------------------------------*
* --> CT_CLIENT_DATA_ITAB *
*---------------------------------------------------------------------*
FORM CHECK_SERVER_PARAMETERS
USING IV_PERFORM_CHECKS TYPE FLAG
CHANGING CT_CLIENT_DATA_ITAB TYPE STRING_TAB.
DATA :
CLIENT_DATA_LINE TYPE STRING,
LV_PARAMETER_NAME LIKE TPFET-PARNAME ,
LV_PARAMETER_VALUE LIKE TPFET-PVALUE.
* Check that the parameters needed for the recorder were set correctly
* sapgui/user_scripting
LV_PARAMETER_NAME = 'sapgui/user_scripting'.
CLEAR : LV_PARAMETER_VALUE , CLIENT_DATA_LINE.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD LV_PARAMETER_NAME
ID 'VALUE' FIELD LV_PARAMETER_VALUE.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE
'sapgui/user_scripting='
LV_PARAMETER_VALUE
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
IF LV_PARAMETER_VALUE <> 'TRUE'.
CONCATENATE 'System parameter'
LV_PARAMETER_NAME
'is not defined correctly'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
* sapgui/user_scripting_disable_recording
LV_PARAMETER_NAME = 'sapgui/user_scripting_disable_recording'.
CLEAR : LV_PARAMETER_VALUE , CLIENT_DATA_LINE.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD LV_PARAMETER_NAME
ID 'VALUE' FIELD LV_PARAMETER_VALUE.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE
'sapgui/user_scripting_disable_recording='
LV_PARAMETER_VALUE
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
IF LV_PARAMETER_VALUE <> 'FALSE'.
CONCATENATE 'System parameter'
LV_PARAMETER_NAME
'is not defined correctly'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
* sapgui/user_scripting_set_readonly
LV_PARAMETER_NAME = 'sapgui/user_scripting_set_readonly'.
CLEAR : LV_PARAMETER_VALUE , CLIENT_DATA_LINE.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD LV_PARAMETER_NAME
ID 'VALUE' FIELD LV_PARAMETER_VALUE.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE
'sapgui/user_scripting_set_readonly='
LV_PARAMETER_VALUE
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
IF LV_PARAMETER_VALUE <> 'FALSE'.
CONCATENATE 'System parameter'
LV_PARAMETER_NAME
'is not defined correctly'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
* rdisp/TRACE_LOGGING
LV_PARAMETER_NAME = 'rdisp/TRACE_LOGGING'.
CLEAR : LV_PARAMETER_VALUE , CLIENT_DATA_LINE.
CALL 'C_SAPGPARAM' ID 'NAME' FIELD LV_PARAMETER_NAME
ID 'VALUE' FIELD LV_PARAMETER_VALUE.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE
'rdisp/TRACE_LOGGING='
LV_PARAMETER_VALUE
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
IF LV_PARAMETER_VALUE <> 'on, 99 m'.
CONCATENATE 'System parameter'
LV_PARAMETER_NAME
'is not defined correctly in RZ11 transaction'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
ENDFORM .
*&---------------------------------------------------------------------*
*& Form transaction_defined
*&---------------------------------------------------------------------*
* Check ZP_RECORD transaction defined correctly
*----------------------------------------------------------------------*
* <--P_CLIENT_DATA_ITAB text
*----------------------------------------------------------------------*
FORM TRANSACTION_DEFINED
USING IV_PERFORM_CHECKS TYPE FLAG
CHANGING CT_CLIENT_DATA_ITAB TYPE STRING_TAB.
CONSTANTS : LC_REP_TRAN LIKE TSTC-CINFO VALUE '80',
LC_VAR_TRAN LIKE TSTC-CINFO VALUE '10'.
DATA : CLIENT_DATA_LINE TYPE STRING,
LV_CINFO LIKE TSTC-CINFO.
* Transaction exists
IF SY-SUBRC <> 0.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'RecorderTransactionDefined='
'FALSE'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Transaction ZP_RECORD is ' 'missing'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ELSE.
* 80 hex - report transaction
IF LV_CINFO O LC_REP_TRAN AND
LV_CINFO Z LC_VAR_TRAN.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'ReportTransaction='
'TRUE'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ELSE.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'ReportTransaction='
'FALSE'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
IF LV_CINFO O LC_VAR_TRAN.
CONCATENATE 'Transaction ZP_RECORD can not be defined'
'as variant transaction'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Transaction ZP_RECORD is not defined'
'as report transaction'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
ENDIF.
CLEAR : CLIENT_DATA_LINE.
CONCATENATE 'The main program of transaction ZP_RECORD'
'is not the current program'
SY-REPID
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
DATA :
CLIENT_DATA_LINE LIKE LINE OF CT_CLIENT_DATA_ITAB,
LV_SECU TYPE SECU.
* S_TCODE - object
CLEAR : CLIENT_DATA_LINE.
AUTHORITY-CHECK OBJECT 'S_TCODE'
ID 'TCD' FIELD 'ZP_RECORD'.
IF SY-SUBRC <> 0.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'AuthorizationFailed1='
'Object: S_TCODE,'
'Transacton code: ZP_RECORD'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Additional authorization object required:'
'Object: S_TCODE'
'Transacton code: ZP_RECORD'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
* S_ADMI_FCD - object
CLEAR : CLIENT_DATA_LINE.
AUTHORITY-CHECK OBJECT 'S_ADMI_FCD'
ID 'S_ADMI_FCD' FIELD 'PADM'.
IF SY-SUBRC <> 0.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'AuthorizationFailed2='
'Object: S_ADMI_FCD,'
'Admin function: PADM'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Additional authorization object required:'
'Object: S_ADMI_FCD'
'Admin function: PADM'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
IF SY-SUBRC <> 0.
* The user doesnt have server file access auth
* further validation checks on server access
* will not be made
EV_DATASET_FAILED = ABAP_TRUE.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'AuthorizationFailed3='
'Object: S_DATASET'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Additional authorization object required:'
'Object: S_DATASET'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
ENDIF.
* S_PROGRAM - object
* checked both for * program group and zp_record report auth group
* only if both are not set for the user the auth is failed
IF SY-SUBRC <> 0.
AUTHORITY-CHECK OBJECT 'S_PROGRAM'
ID 'P_GROUP' FIELD LV_SECU
ID 'P_ACTION' FIELD 'BTCSUBMIT'.
IF SY-SUBRC <> 0.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'AuthorizationFailed7='
'Object: S_PROGRAM,'
'Action: BTCSUBMIT'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Additional authorization object required:'
'Object: S_PROGRAM'
'Action: BTCSUBMIT'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
ENDIF.
IF SY-SUBRC <> 0.
AUTHORITY-CHECK OBJECT 'S_PROGRAM'
ID 'P_GROUP' FIELD LV_SECU
ID 'P_ACTION' FIELD 'SUBMIT'.
IF SY-SUBRC <> 0.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'AuthorizationFailed8='
'Object: S_PROGRAM,'
'Action: SUBMIT'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Additional authorization object required:'
'Object: S_PROGRAM'
'Action: SUBMIT'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
ENDIF.
IF SY-SUBRC <> 0.
AUTHORITY-CHECK OBJECT 'S_PROGRAM'
ID 'P_GROUP' FIELD LV_SECU
ID 'P_ACTION' FIELD 'VARIANT'.
IF SY-SUBRC <> 0.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'AuthorizationFailed9='
'Object: S_PROGRAM,'
'Action: VARIANT'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Additional authorization object required:'
'Object: S_PROGRAM'
'Action: VARIANT'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
ENDIF.
* S_C_FUNCT - object
CLEAR : CLIENT_DATA_LINE.
AUTHORITY-CHECK OBJECT 'S_C_FUNCT'
ID 'PROGRAM' FIELD GV_PGMNA
ID 'ACTVT' FIELD '16'
ID 'CFUNCNAME' FIELD 'SYSTEM'.
IF SY-SUBRC <> 0.
IF IV_PERFORM_CHECKS = SPACE.
CONCATENATE 'AuthorizationFailed10='
'Object: S_C_FUNCT,'
'Program:'
GV_PGMNA
',Activity: 16,'
'C routine: SYSTEM'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Additional authorization object required:'
'Object: S_C_FUNCT'
'Program:'
GV_PGMNA
'Activity: 16'
'C routine: SYSTEM'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
ENDFORM." authority_check
*&---------------------------------------------------------------------*
*& Form validation_checks
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM VALIDATION_CHECKS.
IF LV_ERRORS > 0.
ENDFORM. "SAVE_USER_PARAMETERS
*&---------------------------------------------------------------------*
*& Form ADD_UPARAMS_TO_XML
*&---------------------------------------------------------------------*
* Add the user parameters section to the xml
*----------------------------------------------------------------------*
FORM ADD_UPARAMS_TO_XML TABLES P_USER_PARAMS TYPE PARAM_GROUP_TAB.
DATA:
L_XML_DATA_WA TYPE STRING,
XML_DATA_TAB TYPE TABLE OF STRING.
ENDFORM. "ADD_UPARAMS_TO_XML
*&---------------------------------------------------------------------*
*& Form READ_UPARAMS_FROM_FILE
*&---------------------------------------------------------------------*
* Read user parameters file into an iTab
*----------------------------------------------------------------------*
FORM READ_UPARAMS_FROM_FILE TABLES P_USER_PARAMETERS
USING P_FILENAME
P_DELETE_FILE
P_WRITE_TO_FILE.
S_FILENAME = P_FILENAME.
* Read the parameters that were passed by a file from the player
* into a global table, inorder to restore the state of the user
* parameters state at recording.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = S_FILENAME
TABLES
DATA_TAB = T_USER_PARAMS_TAB
* DATA_TAB = G_CURR_USERS_PARAMS
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
SY_SUBRC_CHAR = SY-SUBRC.
PERFORM FILL_MEASUREMENT USING
ABAP_FALSE ABAP_TRUE 'GUI_UPLOAD'
S_FILENAME 'End of gui_upload user parameters'.
* If error occured during the read of the file, we do not want to fail
* the process at this point because the recording can actually be
* completed. An error will be added to the log file
IF SY_SUBRC_CHAR <> 0.
CONCATENATE
'Reading the global parameters file from the player failed so they'
'will not '
'be updated properally. The recording will be completed '
'but we recommend to restart current session. '
'Filename: ' P_FILENAME '.Error code:'
SY_SUBRC_CHAR
INTO TEXT SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING TEXT GC_FLUSH_LOG.
IF SY-SUBRC <> 0.
SY_SUBRC_CHAR = SY-SUBRC.
CONCATENATE
'Failed deleting parameters file. '
'Filename: ' S_FILENAME
'Error code:' SY_SUBRC_CHAR
INTO TEXT SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING TEXT P_WRITE_TO_FILE.
ENDIF.
ENDFORM. "READ_UPARAMS_FROM_FILE
*&---------------------------------------------------------------------*
*& Form SET_PLAYBACK_UPARAMS
*&---------------------------------------------------------------------*
* Set User Parameters in SAP memory
*----------------------------------------------------------------------*
FORM SET_UPARAMS_IN_MEMORY TABLES P_USER_PARAMS
USING P_WRITE_TO_FILE.
* The F4 screens are recorded in the trace file only if they are not
* ActiveX screens.Therefore regardless to what the users have we always
* set this to no activex.
SET PARAMETER ID 'F4METHOD' FIELD 'NoActiveX'.
ENDFORM. "SET_PLAYBACK_UPARAMS
*&---------------------------------------------------------------------*
*& Form ADD_TO_UPARAMS_FILE
*&---------------------------------------------------------------------*
* writes user parameters from an itab to a file
*----------------------------------------------------------------------*
* -->P_USER_PARAMS text
* -->P_FILENAME text
*----------------------------------------------------------------------*
FORM ADD_TO_UPARAMS_FILE TABLES P_USER_PARAMS
USING P_FILENAME.
DATA: DATA_TAB TYPE STRING_TAB,
DATA_WA TYPE STRING,
CURR_TIME TYPE STRING,
R_PARAMS_VALUES LIKE LINE OF G_USERS_PARAMS,
L_GLOB_PARAMS_FILE_APPEND_MODE.
* Download file
PERFORM ADD_DATA_TO_FILE_IN_CLIENT USING
DATA_TAB
'X'
P_FILENAME"G_UPARAMS_PASS_VAL_FILENAME
'Could not create global parameters file in client.'
CHANGING
G_APPEND_USER_PARAMS.
ENDFORM. "ADD_TO_USER_PARAMS_FILE
*&---------------------------------------------------------------------*
*& Form clear_uparams_in_memory
*&---------------------------------------------------------------------*
* Clears all the users parameters in the SAP memory
*----------------------------------------------------------------------*
FORM CLEAR_UPARAMS_IN_MEMORY USING P_WRITE_TO_FILE.
DATA: IS_PARAM_VALUE TYPE PARAM_VALUE.
DATA: IT_PARAMS TYPE TABLE OF TPARA WITH HEADER LINE,
MSG TYPE STRING.
PERFORM ADD_TO_LOG USING 'Clearing User Parameters' P_WRITE_TO_FILE.
*&---------------------------------------------------------------------*
*& Form SAVE_PAUSE_UPARAMS_TO_FILE
*&---------------------------------------------------------------------*
* Creates an xml file withe the user parameters
*----------------------------------------------------------------------*
FORM CREATE_PAUSE_UPARAMS_XML_FILE USING P_WRITE_TO_FILE.
XML_DATA_WA = '<ROOT>'.
APPEND XML_DATA_WA TO XML_DATA_TAB.
XML_DATA_WA = '</ROOT>'.
APPEND XML_DATA_WA TO XML_DATA_TAB.
*&---------------------------------------------------------------------*
*& Form GENERATE_UPARMS_FILENAMES
*&---------------------------------------------------------------------*
* Create the general file names from the incoming file name
*----------------------------------------------------------------------*
FORM GENERATE_UPARAMS_FILENAMES.
* If the location is good - create the log and global parameters
* filenames
CONCATENATE G_FILENAME '.log' INTO G_LOG_FILENAME.
*&---------------------------------------------------------------------*
*& Form GENERATE_UPARAM_XML_SECTION
*&---------------------------------------------------------------------*
* This form prepares a string table with the user parameters xml section
*----------------------------------------------------------------------*
FORM GENERATE_UPARAM_XML_SECTION TABLES P_XML_DATA
P_PARAMS_TAB TYPE
PARAM_GROUP_TAB.
DATA: PARAM_WA TYPE PARAMS_PER_GROUP,
XML_DATA_WA TYPE STRING.
* Run through the user parameters table received, and create an xml tag
* for each one.
LOOP AT P_PARAMS_TAB INTO PARAM_WA.
* Start a new group section
AT NEW GROUP_ID.
CONCATENATE '<PARAMGRP ID="' PARAM_WA-GROUP_ID '">' INTO
XML_DATA_WA.
APPEND XML_DATA_WA TO P_XML_DATA.
CLEAR XML_DATA_WA.
ENDAT.
* Create the parameter tag
XML_DATA_WA = '<PARAMETER '.
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'PID' PARAM_WA-PID
CHANGING XML_DATA_WA.
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG USING 'VALUE' PARAM_WA-VALUE
CHANGING XML_DATA_WA.
CONCATENATE XML_DATA_WA '/>' INTO XML_DATA_WA.
*&---------------------------------------------------------------------*
*& Form RESTORE_UPARAMS
*&---------------------------------------------------------------------*
* reads a file of user parameters and sets it in the SAP memory
*----------------------------------------------------------------------*
FORM RESTORE_UPARAMS USING P_FILENAME
P_DELETE_FILE
P_WRITE_TO_FILE.
ENDFORM. "RESTORE_UPARAMS
*&---------------------------------------------------------------------*
*& Form READ_USED_UPARAMS_FROM_DIRECTORY
*&---------------------------------------------------------------------*
* reads all files from a given directory into an itab and deletes
* the files and the directory
*----------------------------------------------------------------------*
FORM READ_UPARAMS_FROM_DIRECTORY TABLES P_UPARAMS
USING P_DIRECTORY
P_WRITE_TO_FILE.
IF SY-SUBRC <> 0.
SY_SUBRC_CHAR = SY-SUBRC.
CONCATENATE 'Error while getting files from directory: ' P_DIRECTORY
' - Error code: ' SY_SUBRC_CHAR INTO TEXT.
PERFORM ADD_TO_LOG USING TEXT P_WRITE_TO_FILE.
ENDIF.
CLEAR L_CURR_USERS_PARAMS[].
IF SY-SUBRC <> 0.
SY_SUBRC_CHAR = SY-SUBRC.
CONCATENATE 'Error while deleting directory: ' P_DIRECTORY
' - Error code: ' SY_SUBRC_CHAR INTO TEXT.
PERFORM ADD_TO_LOG USING TEXT P_WRITE_TO_FILE.
ENDIF.
ENDFORM. "READ_USED_UPARAMS
*&---------------------------------------------------------------------*
*& Form fill_measurement
*&---------------------------------------------------------------------*
* fill measurement log
*----------------------------------------------------------------------*
* -->iv_start flag
* -->iv_end flag
* -->iv_operation string
* -->iv_varible string
*----------------------------------------------------------------------*
FORM FILL_MEASUREMENT USING IV_START TYPE FLAG
IV_END TYPE FLAG
IV_OPERATION TYPE STRING
IV_VARIBLE TYPE STRING
IV_MESSAGE TYPE STRING.
LS_MEASUREMENT_LOG-TIME_MILI = LV_MEASURE.
LS_MEASUREMENT_LOG-ACTION = IV_OPERATION.
LS_MEASUREMENT_LOG-VAR = IV_VARIBLE.
LS_MEASUREMENT_LOG-DESCRIPTION = IV_MESSAGE.
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG
USING
'TIME' LS_MEASUREMENT_LOG-TIME
CHANGING
LV_MEASURE_TAG .
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG
USING
'ACTION' LS_MEASUREMENT_LOG-ACTION
CHANGING
LV_MEASURE_TAG .
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG
USING
'MODE' LS_MEASUREMENT_LOG-MODE
CHANGING
LV_MEASURE_TAG .
PERFORM APPEND_ATTRIBUTE_TO_XML_TAG
USING
'DESCRIPTION' LS_MEASUREMENT_LOG-DESCRIPTION
CHANGING
LV_MEASURE_TAG .
ENDLOOP.
PERFORM APPEND_XML_TO_BUFFER USING '</MEASUREMENTS>'.
CLEAR : GT_MEASUREMENT_LOG[].
CLEAR : GT_LOG_DATA[].
ENDFORM. " add_measures_to_log
*&---------------------------------------------------------------------*
*& Form get_measures_from_log
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_MEASURES_FROM_LOG
TABLES IT_LOG_DATA TYPE STRING_TAB.
LV_STRING = LS_LOG_DATA.
* Append to the previous measurements,START / RESTORE,
* to the measurements log
LV_STRING = LV_STRING+16.
SPLIT LV_STRING AT ':'
INTO LS_MEASUREMENT_LOG-TIME
LS_MEASUREMENT_LOG-ACTION
LS_MEASUREMENT_LOG-MODE
LS_MEASUREMENT_LOG-TIME_MILI
LS_MEASUREMENT_LOG-DESCRIPTION
LS_MEASUREMENT_LOG-VAR.
CV_DEVFILE = 'dev_w'.
CV_DEVFILE+5 = IV_PWP_INDEX.
IF SY-SUBRC IS INITIAL.
MSG = LV_WPS_NUM.
CONCATENATE 'Number of work process:'
MSG INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
IF CURR_TRACE-LEVEL = '2'
AND CURR_TRACE-DIAG = 'X'.
LV_TRACE2_WPS = LV_TRACE2_WPS + 1.
IF WP_LIST-WP_WAITING = 'LOCK'.
LV_LOCKED_WPS = LV_LOCKED_WPS + 1.
ENDIF.
ENDIF.
ENDIF.
CLEAR : MSG.
MSG = LV_DIALOG_WPS.
CONCATENATE 'Number of dialog wps:'
MSG INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
CLEAR : MSG.
MSG = LV_TRACE2_WPS.
CONCATENATE 'Number of dialog wps with trace level 2:'
MSG INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
CLEAR : MSG.
MSG = LV_LOCKED_WPS.
CONCATENATE 'Number of locked dialog wps with trace level 2'
'(before process release):'
MSG INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING MSG GC_LOG_WRITE.
ENDIF.
CLEAR: MSG.
CONCATENATE
'Current wp:' WP_ID
'lock state is:' LOCK_WP
INTO MSG SEPARATED BY SPACE.
LO_STRUC_DESCR ?=
CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( 'WPINFO' ).
CLEAR LV_UCLEN.
CALL 'CUR_LCL' ID 'UC_LN' FIELD LV_UCLEN.
IF LV_UCLEN > 1.
GV_UNICODE_SYSTEM = ABAP_TRUE.
PERFORM ADD_TO_LOG USING
'The system is unicode system' GC_LOG_WRITE.
ELSE.
PERFORM ADD_TO_LOG USING
'The system is a NON unicode system' GC_LOG_WRITE.
ENDIF.
PERFORM OPEN_DATASET
USING LV_TEMP_FILE ABAP_FALSE.
PERFORM OPEN_DATASET
USING LV_TEMP_FILE ABAP_TRUE.
IF NOT SY-SUBRC IS INITIAL.
CLEAR : LV_MSG.
LV_MSG = SY-SUBRC.
CONCATENATE
'ServerFileFailed1='
'open file in'
LV_WORKDIR
'failed with RC:'
LV_MSG
INTO
CLIENT_DATA_LINE
SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
LV_FILE_OPENED = ABAP_TRUE.
ENDIF.
IF G_LOG_FILENAME IS INITIAL.
DATA : LV_SAP_WORKDIR TYPE SDOK_CHTRD,
LV_ERROR_MESSAGE TYPE IWERRORMSG.
CALL FUNCTION 'IW_C_GET_SAPWORKDIR'
IMPORTING
SAPWORKDIR = LV_SAP_WORKDIR
ERROR_MSG = LV_ERROR_MESSAGE.
CONCATENATE
LV_SAP_WORKDIR
'PanayaFailure.txt'
INTO
G_LOG_FILENAME.
ENDIF.
IF SY-SUBRC <> 0.
MSG = SY-SUBRC.
MESSAGE E001(00) WITH
'Could not write failure log file at'
G_LOG_FILENAME
'finished with RC:'
MSG.
ENDIF.
DO.
READ DATASET LV_DEV_DISP_FILE INTO LV_DATA.
IF NOT SY-SUBRC IS INITIAL.
EXIT.
ENDIF.
APPEND LV_DATA TO LT_DATA.
DESCRIBE TABLE LT_DATA LINES LV_DATA_SIZE.
IF LV_DATA_SIZE > LC_BUFFER_SIZE.
* Use the log file to add dev_disp data
CLEAR : GT_LOG_DATA[].
GT_LOG_DATA[] = LT_DATA[].
PERFORM ADD_TO_LOG USING 'DEV_DISP' GC_FLUSH_LOG.
CLEAR: LT_DATA[].
ENDIF.
ENDDO.
SELECT SINGLE *
FROM SXPGCOSTAB
INTO LS_SXPGCOSTAB
WHERE NAME = GZIP_COMMAND.
IF LS_SXPGCOSTAB-OPCOMMAND CP '*gzip*'.
CV_GZIP = 'X'.
LV_MSG = 'Archive type : GZIP'.
ELSE.
IF LS_SXPGCOSTAB-OPCOMMAND CP '*winzip*' OR
LS_SXPGCOSTAB-OPCOMMAND CP '*winrar*'.
CV_GZIP = ' '.
LV_MSG = 'Archive type : WINZIP/WINRAR'.
ELSE.
CV_GZIP = 'X'.
ENDIF.
ENDIF.
DATA: WORKDIR(120),
DEVFILE(20),
EXTENSION(10).
DEVFILE+10 = EXTENSION.
CONDENSE DEVFILE NO-GAPS.
CALL 'BUILD_DS_SPEC' ID 'PATH' FIELD WORKDIR
ID 'FILENAME' FIELD DEVFILE
ID 'OPSYS' FIELD SY-OPSYS
ID 'RESULT' FIELD P_FULL_TRACE_FILENAME.
IF SY-SUBRC <> 0.
PERFORM SHOW_ERROR USING
'Error while reading trace file. Filename '
P_FULL_TRACE_FILENAME
'Error : '
SY-SUBRC.
EXIT.
CLEAR P_FULL_TRACE_FILENAME.
EXIT.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form add_data_to_file_in_server
*&---------------------------------------------------------------------*
FORM ADD_DATA_TO_FILE_IN_SERVER USING P_DATA_TAB TYPE STRING_TAB.
* Close file
CLOSE DATASET TEMP_XML_FILENAME.
IF G_WAS_FILE_CREATED IS INITIAL.
G_WAS_FILE_CREATED = 'X'.
ENDIF.
ENDFORM. "ADD_DATA_TO_FILE_IN_SERVER
*&---------------------------------------------------------------------*
*& Form get_current_encoding
*&---------------------------------------------------------------------*
FORM GET_CURRENT_ENCODING CHANGING ENCOD TYPE STRING.
ENCOD = 'UTF-8'.
ENDFORM. "get_current_encoding
*&---------------------------------------------------------------------*
*& Form check_directory_exists
*&---------------------------------------------------------------------*
FORM CHECK_DIRECTORY_EXISTS.
IF SY-SUBRC <> 0.
MESSAGE E000(CONV) WITH 'Error when checking directory '
DIRECTORY ' exists. Error message: ' SY-SUBRC.
ELSE.
IF DIR_EXISTS = ABAP_FALSE.
MESSAGE E000(CONV) WITH 'The provided directory '
'does not exist. Please enter existing directory.'.
ENDIF.
ENDIF.
ENDFORM. "check_directory_exists
*&---------------------------------------------------------------------*
*& Form ADD_XML_TEXT_CONTENT_TO_FILE
*&---------------------------------------------------------------------*
FORM ADD_XML_TEXT_CONTENT_TO_FILE USING SHOULD_ADD_XML_ESC.
* Open the original text file in text mode in UTF-8 ( that's how
* it was written to the server )
OPEN DATASET TEMP_XML_FILENAME IN TEXT MODE FOR INPUT ENCODING
UTF-8.
DO.
CLEAR REC_C.
ENDDO.
* Close file
CLOSE DATASET TEMP_XML_FILENAME.
*&---------------------------------------------------------------------*
*& Form ENCODE_BASE64_AND_ADD_TO_FILE
*&---------------------------------------------------------------------*
FORM ENCODE_BASE64_AND_ADD_TO_FILE USING IS_ZIP_SUCC.
* Read the file content into record. The record will be converted to
* string with its hexa representation
DO.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
* Convert the X type to string with the hexa representation and add
* it to buffer
************************************************
* REGULAR - NO BASE 64
************************************************
* STRING_REC = REC_X.
*
* Add the string into buffer
* PERFORM APPEND_STRING_TO_BUFFER USING STRING_REC 'X' ' '.
*
* ENDDO.
************************************************
************************************************
* BASE 64
************************************************
* Add the x record into table of type x
APPEND TAB_X.
HEX_LENGTH = HEX_LENGTH + LINE_LENGTH.
ENDDO.
************************************************
* REGULAR - NO BASE 64
************************************************
* FULL_LAST_LINE_HEXA = REC_X.
* LINE_LENGTH = LINE_LENGTH * 2.
* STRING_REC = FULL_LAST_LINE_HEXA(LAST_LINE_LENGTH).
* PERFORM APPEND_STRING_TO_BUFFER USING STRING_REC 'X' ' '.
************************************************
************************************************
* BASE 64
************************************************
HEX_LENGTH = HEX_LENGTH + LINE_LENGTH.
APPEND TAB_X.
************************************************
ENDIF.
************************************************
* BASE 64
************************************************
PERFORM ADD_TO_LOG USING
'Encode the file to base 64'
GC_LOG_WRITE.
IF SY-SUBRC <> 0.
CLEAR : MSG.
LV_SUBRC = SY-SUBRC.
CONCATENATE :
'Conversion to BASE64 failed. RC:'
LV_SUBRC
INTO MSG SEPARATED BY SPACE.
PERFORM ADD_TO_LOG USING
MSG
GC_LOG_WRITE.
ENDLOOP.
ENDIF.
*&---------------------------------------------------------------------*
*& Form check_gui_auth
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IV_PERFORM_CHECKS text
* -->CT_CLIENT_DATA_ITAB text
*----------------------------------------------------------------------*
FORM CHECK_GUI_AUTH
USING IV_PERFORM_CHECKS TYPE FLAG
CHANGING CT_CLIENT_DATA_ITAB TYPE STRING_TAB.
DATA :
CLIENT_DATA_LINE LIKE LINE OF CT_CLIENT_DATA_ITAB.
* S_GUI - object
AUTHORITY-CHECK OBJECT 'S_GUI'
ID 'ACTVT' FIELD '61'.
IF SY-SUBRC <> 0.
IF IV_PERFORM_CHECKS = ABAP_FALSE.
CONCATENATE 'AuthorizationFailed11='
'Object: S_GUI '
'Activity: 61'
INTO CLIENT_DATA_LINE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ELSE.
CONCATENATE 'Additional authorization object required:'
'Object: S_GUI'
'Activity: 61'
INTO CLIENT_DATA_LINE SEPARATED BY SPACE.
APPEND CLIENT_DATA_LINE TO CT_CLIENT_DATA_ITAB.
ENDIF.
ENDIF.
ENDFORM. "check_gui_auth
*&---------------------------------------------------------------------*
*& Form OPEN_FILE
*&---------------------------------------------------------------------*
FORM OPEN_FILE USING P_FULL_TRACE_FILENAME
P_START_POS
CHANGING P_FILE_OPENED TYPE C.
CLEAR P_FILE_OPENED.
SELECT *
FROM CVERS
INTO CORRESPONDING FIELDS OF TABLE LT_CVERS
WHERE COMPONENT IN ('SAP_APPL', 'SAP_HR', 'EA-HR').
IF SY-SUBRC = 0.
LV_PATCH = LS_CVERS-EXTRELEASE.
LV_RELEASE = LS_CVERS-RELEASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form END_RTT
*&---------------------------------------------------------------------*
FORM END_RTT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form START_RTT_FROM_ABAP4_CALL_TRAN
*&---------------------------------------------------------------------*
FORM START_RTT_FROM_ABAP4_CALL_TRAN.
ENDFORM. "START_RTT_FROM_ABAP4_CALL_TRAN
*&---------------------------------------------------------------------*
*& Form ADD_RTT_DATA_FILE
*&---------------------------------------------------------------------*
FORM ADD_RTT_DATA_FILE .
ENDFORM. "ADD_RTT_DATA_FILE