on 2018 Nov 23 9:28 AM
Hi All,
We have a requirement to automate the calling of BPC program UJD_TEST_PACKAGE.
I have developed a custom program which fetches selection criteria like region, environment, answer prompt etc dynamically as per the scenario. Above fetched data has to be passed to BPC program UJD_TEST_PACKAGE and automate BPC load.
I have tried SUBMIT program but it does not work.
Please suggest if there is any standard FM/BAPI/CLASS to call BPC program UJD_TEST_PACKAGE from custom program.
Request clarification before answering.
"But then pop-ups will appear." - what do you mean?
Please provide screenshots...
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Sorry, but you will schedule the chain that will include running of your Z-program! And it will be scheduled in background!
I don't understand your issue... I don't understand what you are doing....
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Vadim,
You've got it correct, I will include package triggering code in my Z program and the Z program will be included in process chain and the process chain will be scheduled.
But I need the instance number and status, so I will keep IF_SYNC as YES. But then pop-ups will appear. And pop-ups don't work in scheduled program.
Sorry, but use if-sync = yes, then you will get status!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
P.S. Please read my blog: https://blogs.sap.com/2018/11/23/how-to-run-dm-package-with-current-month-selection-in-bpc-nw/
With a sample of ZUJD_TEST_PACKAGE to select current month.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Sample of ZUJD_TEST_PACKAGE without user interface and all values fixed in code:
REPORT ZUJD_TEST_PACKAGE.
DATA: LF_EXISTS TYPE UJ_FLG,
LF_DEBUG TYPE UJ_FLG,
LF_SCHEDULE TYPE UJ_FLG,
L_ERRORMSG TYPE UJ_STRING,
L_RESULT TYPE UJ_STRING,
L_STATUS_STR TYPE UJ_STRING,
L_LOG_CONTENT TYPE UJ_STRING,
L_LOG_FILE TYPE UJF_DOC-DOCNAME,
L_INSTANCE_ID TYPE RSPC_LOGID,
L_LOG_XCONTENT TYPE UJF_DOC-DOC_CONTENT,
LS_PACKAGE_STATUS TYPE UJD_STATUS,
LS_USER TYPE UJ0_S_USER,
LS_SCHEDULE_INFO TYPE UJD_S_SCHEDULE_INFO,
LS_SCHEDULE_INFO2 TYPE UJD_S_SCHEDULE_INFO2,
LTH_ANSWER_PROMPT TYPE UJD_TH_VALUE,
LS_ANSWER_PROMPT LIKE LINE OF LTH_ANSWER_PROMPT,
LT_MESSAGE TYPE UJ0_T_MESSAGE,
LO_FILE_MGR TYPE REF TO CL_UJF_FILE_SERVICE_MGR,
LO_CONTEXT TYPE REF TO IF_UJ_CONTEXT,
LO_PACKAGE TYPE REF TO CL_UJD_PACKAGE,
L_OX TYPE REF TO CX_ROOT,
LF_RAISE_MSG TYPE UJ_FLG VALUE ABAP_FALSE,
LT_LOG TYPE STRING_TABLE,
L_LOG TYPE STRING,
LF_IF_SYNC TYPE UJ_BOOL,
L_USER TYPE UJ_USER_ID,
L_PACKAGE TYPE UJ_PACKAGE_ID,
L_APPSET TYPE UJ_APPSET_ID,
L_APPL TYPE UJ_APPL_ID,
L_TEAM TYPE UJ_TEAM_ID,
L_GROUP TYPE UJ_PACK_GRP_ID,
L_SCHEDULE TYPE STRING,
LF_IF_MSG TYPE UJ_BOOL.
LF_IF_SYNC = UJ00_CS_BOOL-YES.
L_USER = 'SUPPORT_EXT'.
L_PACKAGE = 'Clear'.
L_APPSET = 'SHELLTEST'.
L_APPL = 'Planning'.
L_TEAM = ''.
L_GROUP = 'Data Management'.
L_SCHEDULE = '<SCHEDULING><IMMEDIATE>Y</IMMEDIATE><STATE>0</STATE><PERIOD>N</PERIOD></SCHEDULING>'.
LF_IF_MSG = UJ00_CS_BOOL-NO.
LS_ANSWER_PROMPT-FIELDNAME = '%SELECTION%'.
LS_ANSWER_PROMPT-VALUE = '/SHELLTEST/Planning/PRIVATEPUBLICATIONS/SUPPORT_EXT/TempFiles/FROM.TMP@@@SAVE@@@@@@EXPAND@@@|DIMENSION:ACCOUNT|PL110|DIMENSION:AUDITTRAIL|Input|' &&
'DIMENSION:CATEGORY|Budget|DIMENSION:ENTITY|DE|DIMENSION:INTERCO|ThirdParty|DIMENSION:PRODUCT|ProductA|DIMENSION:RPTCURRENCY|LC|DIMENSION:TIME|2007.01'.
INSERT LS_ANSWER_PROMPT INTO TABLE LTH_ANSWER_PROMPT.
LS_ANSWER_PROMPT-FIELDNAME = '%SELECTION_KEYDATE%'.
LS_ANSWER_PROMPT-VALUE = ''.
INSERT LS_ANSWER_PROMPT INTO TABLE LTH_ANSWER_PROMPT.
LS_ANSWER_PROMPT-FIELDNAME = '%ENABLETASK%'.
LS_ANSWER_PROMPT-VALUE = '1'.
INSERT LS_ANSWER_PROMPT INTO TABLE LTH_ANSWER_PROMPT.
LS_ANSWER_PROMPT-FIELDNAME = '%CHECKLCK%'.
LS_ANSWER_PROMPT-VALUE = '1'.
INSERT LS_ANSWER_PROMPT INTO TABLE LTH_ANSWER_PROMPT.
LS_USER-USER_ID = L_USER.
CALL METHOD CL_UJ_CONTEXT=>SET_CUR_CONTEXT
EXPORTING
I_APPSET_ID = L_APPSET
IS_USER = LS_USER
I_APPL_ID = L_APPL.
IF LF_IF_SYNC = UJ00_CS_BOOL-YES.
LF_DEBUG = ABAP_TRUE.
ELSE.
LF_DEBUG = ABAP_FALSE.
ENDIF.
TRY.
CL_UJD_SCHEDULE_PARSE=>PARSE_7X_FORMAT( EXPORTING I_SCHEDULE_STR = L_SCHEDULE
IMPORTING ES_SCHEDULE_INFO = LS_SCHEDULE_INFO
ES_SCHEDULE_INFO_NEW = LS_SCHEDULE_INFO2 ).
IF LS_SCHEDULE_INFO-IFIMMEDIATE = UJ00_CS_BOOL-YES.
LF_SCHEDULE = ABAP_FALSE.
ELSE.
LF_SCHEDULE = ABAP_TRUE.
LS_SCHEDULE_INFO2-MODULE_ID = UJD0_CS_MODULE_ID-PACKAGE.
ENDIF.
CREATE OBJECT LO_PACKAGE.
CALL METHOD LO_PACKAGE->RUN_PACKAGE
EXPORTING
I_APPSET_ID = L_APPSET
I_APPL_ID = L_APPL
I_TEAM_ID = L_TEAM
I_GROUP_ID = L_GROUP
I_PACKAGE_ID = L_PACKAGE
ITH_ANSWER_PROMPT = LTH_ANSWER_PROMPT
IS_SCHEDULE_INFO = LS_SCHEDULE_INFO2
IF_SCHEDULE = LF_SCHEDULE
IF_DEBUG = LF_DEBUG.
cl_uja_actvty_mgr=>record_logon_activity(
exporting
i_appset_id = L_APPSET
i_activity = cl_uja_actvty_mgr=>gc_act_report_ujd_test_package ).
CATCH CX_ROOT INTO L_OX. "#EC CATCH_ALL
CALL FUNCTION 'UJ0_CONV_EX2MSG'
EXPORTING
IO_EXCEPTION = L_OX
IMPORTING
ET_MESSAGE_LINES = LT_MESSAGE.
CALL FUNCTION 'UJ0_CONV_MSG2STR'
EXPORTING
IT_MSG = LT_MESSAGE
IMPORTING
E_STR = L_ERRORMSG.
CALL FUNCTION 'DB_ROLLBACK'.
RETURN.
ENDTRY.
CALL FUNCTION 'DB_COMMIT'.
IF L_ERRORMSG IS NOT INITIAL.
WRITE:/ L_ERRORMSG.
ELSE.
WRITE:/ L_RESULT.
ENDIF.
TRY.
CL_UJD_PACKAGE_CONTEXT=>GET_INSTANCE_ID(
IMPORTING E_INSTANCE_ID = L_INSTANCE_ID ).
CL_UJD_PACKAGE_STATUS_DAO=>GET_PACKAGE_STATUS(
EXPORTING I_LOG_ID = L_INSTANCE_ID
IMPORTING ES_PACKAGE_STATUS = LS_PACKAGE_STATUS ).
CASE LS_PACKAGE_STATUS-STATUS.
WHEN UJD0_CS_PACKAGE_STATUS-EXCUTE OR
UJD0_CS_PACKAGE_STATUS-SUCCEED.
L_STATUS_STR = 'Success'. "#EC NOTEXT
WHEN UJD0_CS_PACKAGE_STATUS-WARNING.
L_STATUS_STR = 'Warning'. "#EC NOTEXT
WHEN UJD0_CS_PACKAGE_STATUS-FAILED.
L_STATUS_STR = 'Error'. "#EC NOTEXT
LF_RAISE_MSG = ABAP_TRUE.
WHEN OTHERS.
L_STATUS_STR = 'Cancel'. "#EC NOTEXT
LF_RAISE_MSG = ABAP_TRUE.
ENDCASE.
CONCATENATE 'Package status =>' L_STATUS_STR INTO L_STATUS_STR.
"#EC NOTEXT
WRITE:/ L_STATUS_STR.
L_LOG_FILE = LS_PACKAGE_STATUS-LOG_FILE.
IF L_LOG_FILE IS INITIAL.
RETURN.
ENDIF.
LO_CONTEXT = CL_UJ_CONTEXT=>GET_CUR_CONTEXT( ).
CONCATENATE UJ00_C_WEB_ROOT LO_CONTEXT->D_APPSET_ID
UJD0_CS_FILE_PATH_SLASH LO_CONTEXT->D_APPL_ID
UJD0_CS_FILE_PATH_SLASH UJ00_C_PRIV_PUBLICATION
UJD0_CS_FILE_PATH_SLASH LO_CONTEXT->DS_USER-USER_ID
UJD0_CS_FILE_PATH_SLASH UJ00_C_TEMPFILES
UJD0_CS_FILE_PATH_SLASH L_LOG_FILE INTO L_LOG_FILE.
LO_FILE_MGR = CL_UJF_FILE_SERVICE_MGR=>FACTORY(
IS_USER = LO_CONTEXT->DS_USER
I_APPSET = LO_CONTEXT->D_APPSET_ID ).
TRY.
LO_FILE_MGR->CHECK_DOCUMENT_EXIST(
EXPORTING I_DOCNAME = L_LOG_FILE
IMPORTING E_RESULT = LF_EXISTS ).
CATCH CX_UJF_FILE_SERVICE_ERROR.
RETURN.
ENDTRY.
IF LF_EXISTS = ABAP_TRUE.
LO_FILE_MGR->GET_DOCUMENT(
EXPORTING I_DOCNAME = L_LOG_FILE
I_RETZIP = ABAP_FALSE
IMPORTING E_DOCUMENT_CONTENT = L_LOG_XCONTENT ).
L_LOG_CONTENT = CL_UJ_UTL_CONV=>XSTRING_TO_STRING( I_XSTR = L_LOG_XCONTENT ).
"WRITE:/ L_LOG_CONTENT.
REPLACE ALL OCCURRENCES OF '<' IN L_LOG_CONTENT WITH '<'.
REPLACE ALL OCCURRENCES OF '>' IN L_LOG_CONTENT WITH '>'.
SPLIT L_LOG_CONTENT AT CL_ABAP_CHAR_UTILITIES=>CR_LF INTO TABLE LT_LOG.
LOOP AT LT_LOG INTO L_LOG.
WRITE:/ L_LOG.
ENDLOOP.
ENDIF.
CATCH CX_ROOT. "#EC CATCH_ALL
LF_RAISE_MSG = ABAP_TRUE.
ENDTRY.
IF LF_IF_SYNC = UJ00_CS_BOOL-YES AND LF_IF_MSG = UJ00_CS_BOOL-YES AND LF_RAISE_MSG = ABAP_TRUE.
MESSAGE A001(00) ##MG_MISSING
WITH 'Package Failed'. "#EC NOTEXT
ENDIF.
Working fine:
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi,
Thanks for your input. I copied the code from UJD_TEST_PACKAGE to my Z program and I faced same issue of blank instance.
After test running I found the root cause. I am passing IF_SYNC as UJ00_CS_BOOL-NO. That is why instance is not generated and program was unable to get me status.
I t is working fine if I pass IF_SYNC as UJ00_CS_BOOL-YES, but then generates pop-ups.
My requirement is to keep my Z custom program as a part of process chain step. This process chain will be scheduled in background and in background pop-ups do not work.
If I suppress the pop-ups using IF_SYNC as UJ00_CS_BOOL-YES, the package is triggered but I am unable to get unique 25 digit process chain ID and the status. I want to take action accordingly after the package fails or success.
Thanks,
Rujuta
I am not sure that you are passing all parameters correctly!
In my test case based on Z copy of UJD_TEST_PACKAGE I replaced parameters with fixed values in code. Everything is working fine.
Actually in the code you are using small number of methods:
CALL METHOD CL_UJ_CONTEXT=>SET_CUR_CONTEXT
CL_UJD_SCHEDULE_PARSE=>PARSE_7X_FORMAT
CREATE OBJECT LO_PACKAGE.
CALL METHOD LO_PACKAGE->RUN_PACKAGE
cl_uja_actvty_mgr=>record_logon_activity
CL_UJD_PACKAGE_CONTEXT=>GET_INSTANCE_ID
CL_UJD_PACKAGE_STATUS_DAO=>GET_PACKAGE_STATUS
LO_CONTEXT = CL_UJ_CONTEXT=>GET_CUR_CONTEXT
LO_FILE_MGR = CL_UJF_FILE_SERVICE_MGR=>FACTORY
LO_FILE_MGR->CHECK_DOCUMENT_EXIST
LO_FILE_MGR->GET_DOCUMENT
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Sorry, but it's a strange idea to call UJD_TEST_PACKAGE from your code!
Look on UJD_TEST_PACKAGE code itself. It's very simple 🙂 And you don't need to prepare parameters in the form of UJD_TEST_PACKAGE input.
Create a Z copy of UJD_TEST_PACKAGE
Remove user interface and generate answer prompt with your custom abap code.
Don't increase unnesessary complexity!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
P.S. The format of LTH_ANSWER_PROMPT that you have to fill is very simple:
%SELECTION% has the following format:
/SHELLTEST/Planning/PRIVATEPUBLICATIONS/SUPPORT_EXT/TempFiles/FROM.TMP@@@SAVE@@@@@@EXPAND@@@|DIMENSION:ACCOUNT|PL110|DIMENSION:AUDITTRAIL|Input|DIMENSION:CATEGORY|Budget|DIMENSION:ENTITY|DE|DIMENSION:INTERCO|ThirdParty|DIMENSION:PRODUCT|ProductA|DIMENSION:RPTCURRENCY|LC|DIMENSION:TIME|2007.01
Easy to create!
Let me try that ! I am running out of options 😞
However, is there any drawback to call standard program UJD_TEST_PACKAGE from my custom program using SUBMIT abap command?
As in are there any issues in automating the BPC package execution ?
Are there any other SAP recommended ways to automate UJD_TEST_PACKAGE like keeping the program in a process chain and passing a variant?
Sorry, but simply add code from UJD_TEST_PACKAGE to your custom program 🙂 Not a lot of code...
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
After posting the question I managed to call UJD_TEST_PACKAGE program from my custom code using 'SUBMIT' command.
I am dynamically fetching parameters and passing them in the SUBMIT program.
However when I checked by debugging, the method LO_PACKAGE->RUN_PACKAGE is executing properly in UJD_TEST_PACKAGE without any exception getting caught. But in the next step where instance is getting imported using "CL_UJD_PACKAGE_CONTEXT=>GET_INSTANCE_ID( IMPORTING E_INSTANCE_ID = L_INSTANCE_ID )." method, L_INSTANCE_ID is getting imported as blank.
Hence, the next step where package status is getting fetched using class method "
CL_UJD_PACKAGE_STATUS_DAO=>GET_PACKAGE_STATUS( EXPORTING I_LOG_ID = L_INSTANCE_ID IMPORTING ES_PACKAGE_STATUS = LS_PACKAGE_STATUS ).", exception is getting caught. Because blank instance is fetched in previous step.
I compared all parameters of standard program and my custom program by debugging. Everything is same.
Am I missing something?
I have attached debug mode screenshot.
User | Count |
---|---|
11 | |
10 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.