on 04-20-2016 1:38 AM
Hi Personas experts,
I am trying to use BAPI in my personas script logic to set user status in notification and saw some sample code as below link gives in example 3
How to call Remote Enabled ABAP Function Modules in Personas 3.0 - SAP Imagineering - SCN Wiki
Unfortunately the user status does not change.
I am passing notification number and INTERN variable in STATUS.
Kindly suggest or advice where i might have gone wrong .
Best regards,
pradeep.
You probably also have to call function module BAPI_TRANSACTION_COMMIT following the first one. Most BAPIs are designed this way.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi tamas, I have used BAPI_TRANSACTION_COMMIT in my ZBAPI. var rfc = session.createRFC( "ZBAPI_ISUSMNOTIF_USERSTATUSSET" ); rfc.setParameter( "NUMBER", notification ); var status = { intern: "E0005" } ; rfc.setParameter( "STATUS", JSON.stringify(status)); rfc.requestResults(JSON.stringify(["RETURN"])); rfc.send(); session.utils.log(notification) ; Not sure why it does not update the status . Kindly advice. best regards, pradeep.
Hi tamas, Yes I did call bapi_transaction_commit. FUNCTION ZBAPI_ISUSMNOTIF_USERSTATUSSET. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" VALUE(NUMBER) LIKE VIQMEL-QMNUM *" VALUE(STATUS) LIKE BAPI_STATUS STRUCTURE BAPI_STATUS OPTIONAL *" VALUE(INACTIVE) LIKE BAPIFLAG-BAPIFLAG DEFAULT ' ' *" VALUE(VALUE) LIKE BAPI_STATUS-INTERN *" EXPORTING *" VALUE(RETURN) LIKE BAPIRET2 STRUCTURE BAPIRET2 *"---------------------------------------------------------------------- DATA: l_msg LIKE sy-msgv1, l_viqmel LIKE viqmel, l_language TYPE spras, co_msg_service LIKE sy-msgid , co_msg_error TYPE emsg_gen-msgty , co_msg_not_existent LIKE sy-msgno , l_language_found TYPE spras. CLEAR return. * --Lock the notification object CALL FUNCTION 'ENQUEUE_EIQMEL' EXPORTING qmnum = number EXCEPTIONS foreign_lock = 1 system_failure = 2. IF sy-subrc <> 0. CALL FUNCTION 'BALW_BAPIRETURN_GET2' EXPORTING type = sy-msgty cl = sy-msgid number = sy-msgno par1 = sy-msgv1 par2 = sy-msgv2 par3 = sy-msgv3 par4 = sy-msgv4 IMPORTING return = return. EXIT. ENDIF. * --Set the language or convert the ISO-representation IF NOT status-langu IS INITIAL. l_language = status-langu. ELSEIF status-langu_iso IS INITIAL. l_language = sy-langu. ELSE. CALL FUNCTION 'LANGUAGE_CODE_ISO_TO_SAP' EXPORTING iso_code = status-langu_iso IMPORTING sap_code = l_language EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc <> 0. CALL FUNCTION 'BALW_BAPIRETURN_GET2' EXPORTING type = sy-msgty cl = sy-msgid number = sy-msgno par1 = sy-msgv1 par2 = sy-msgv2 par3 = sy-msgv3 par4 = sy-msgv4 IMPORTING return = return. CALL FUNCTION 'DEQUEUE_EIQMEL' EXPORTING qmnum = number. EXIT. ENDIF. ENDIF. * --Read the notications header line CALL FUNCTION 'READ_NOTIFICATION' EXPORTING qmnum = number IMPORTING iviqmel = l_viqmel EXCEPTIONS invalid_number = 1 OTHERS = 2. IF sy-subrc <> 0. l_msg = number. CALL FUNCTION 'BALW_BAPIRETURN_GET2' EXPORTING type = co_msg_error cl = co_msg_service number = co_msg_not_existent par1 = l_msg IMPORTING return = return. CALL FUNCTION 'DEQUEUE_EIQMEL' EXPORTING qmnum = number. EXIT. ENDIF. * --Authority check for the change of the notification object CALL FUNCTION 'ISU_NOTIF_AUTHORITY_CHECK' EXPORTING mode = '02' x_qmart = l_viqmel-qmart EXCEPTIONS no_permission_s_tcode = 1 no_permission_i_tcode = 2 no_permission_iqmel = 3 userdata_error = 4 no_profile = 5 no_object = 6 system_error = 7 OTHERS = 8. IF sy-subrc <> 0. CALL FUNCTION 'BALW_BAPIRETURN_GET2' EXPORTING type = sy-msgty cl = sy-msgid number = sy-msgno par1 = sy-msgv1 par2 = sy-msgv2 par3 = sy-msgv3 par4 = sy-msgv4 IMPORTING return = return. CALL FUNCTION 'DEQUEUE_EIQMEL' EXPORTING qmnum = number. EXIT. ENDIF. * --Prepare the status buffer CALL FUNCTION 'STATUS_BUFFER_REFRESH'. * --Convert the external status to an internal represenation IF NOT status-extern IS INITIAL. CALL FUNCTION 'STATUS_TEXT_CONVERSION' EXPORTING language = l_language mode = 'E' objnr = l_viqmel-objnr txt04 = status-intern IMPORTING language_found = l_language_found status_number = VALUE EXCEPTIONS insufficient_input = 1 not_found = 2 object_not_found = 3 wrong_mode = 4 OTHERS = 5. IF sy-subrc <> 0 OR l_language_found <> l_language. l_msg = status-extern. CALL FUNCTION 'BALW_BAPIRETURN_GET2' EXPORTING type = 'E' cl = 'BS' number = '057' par1 = l_msg IMPORTING return = return. CALL FUNCTION 'DEQUEUE_EIQMEL' EXPORTING qmnum = number. EXIT. ENDIF. ENDIF. * --Set the user status CALL FUNCTION 'STATUS_CHANGE_EXTERN' EXPORTING client = l_viqmel-mandt objnr = l_viqmel-objnr user_status = VALUE set_inact = inactive EXCEPTIONS object_not_found = 1 status_inconsistent = 2 status_not_allowed = 3 OTHERS = 4. IF sy-subrc <> 0. CALL FUNCTION 'BALW_BAPIRETURN_GET2' EXPORTING type = sy-msgty cl = sy-msgid number = sy-msgno par1 = sy-msgv1 par2 = sy-msgv2 par3 = sy-msgv3 par4 = sy-msgv4 IMPORTING return = return. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' . CALL FUNCTION 'DEQUEUE_EIQMEL' EXPORTING qmnum = number. EXIT. ENDIF. CALL FUNCTION 'STATUS_UPDATE_DIALOG'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' . CALL FUNCTION 'DEQUEUE_EIQMEL' EXPORTING qmnum = number. ENDFUNCTION. Best regards, pradeep.
Hi Tamas, Am I doing something wrong ? When I check session logs ,I am getting the message number as 000. But user status on SAP screen is not getting updated . var objTable = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell"); var firstVisibleRow = objTable.firstVisibleRow ; var selectedVisibleRow = parseInt( session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectedRows ); var selectedTableRow = firstVisibleRow + selectedVisibleRow ; var colName = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").getColumnName(1) ; var notification = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").getCellValue(selectedTableRow ,"QMNUM") ; session.findById("wnd[0]/usr/txtPersonas_1461014548992").text = notification ; var rfc = session.createRFC("ZBAPI_ISUSMNOTIF_USERSTATUSSET") ; rfc.setParameter("NUMBER", notification); rfc.setParameter("VALUE", "E0005"); var rfc1 = session.createRFC("BAPI_TRANSACTION_COMMIT") ; rfc.requestResults(JSON.stringify(["RETURN"])); rfc.send(); var result = JSON.parse(rfc.getResult("RETURN")); session.utils.log(result.NUMBER); session.utils.log(result.MESSAGE); session.utils.log(result.NUMBER); session.utils.log(result.LOG_NO); session.utils.log(result.LOG_MSG_NO); session.utils.log(result.MESSAGE_V1); session.utils.log(result.MESSAGE_V2); session.utils.log(result.MESSAGE_V3); session.utils.log(result.MESSAGE_V4); Best regards, pradeep.
Honestly, I don't know
I suggest testing your process from ABAP first. I.e. write an ABAP program where you are calling the BAPI the exact same way you do from your Personas script, and then of course call the BAPI_TRANSACTION_COMMIT function module as well. This should update the field you are after. If that doesn't work, then the problem is not in Personas.
Hi Sushant, I tested with 2 sample values and when I execute it is showing me result with return number 000 both the times. First time it is fine as the parameter I entered is right value , but to test what exactly is happening second time I gave incorrect parameter and it is supposed to show different return number 061 but it showed me 000. These are in session logs. Could you please advice me on how to debug ? Best regards, pradeep.
User | Count |
---|---|
87 | |
10 | |
10 | |
10 | |
7 | |
6 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.