cancel
Showing results for 
Search instead for 
Did you mean: 

BAPI -Personas 3.0

pakula123
Participant
0 Kudos

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.

Accepted Solutions (1)

Accepted Solutions (1)

tamas_hoznek
Product and Topic Expert
Product and Topic Expert
0 Kudos

You probably also have to call function module BAPI_TRANSACTION_COMMIT following the first one. Most BAPIs are designed this way.

pakula123
Participant
0 Kudos

Hi Tamas,

After the code that is written for setting user status would this work ?

var rfc = session.createRFC("BAPI_TRANSACTION_COMMIT");

Best regards,

pradeep.

pakula123
Participant
0 Kudos

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.

tamas_hoznek
Product and Topic Expert
Product and Topic Expert
0 Kudos

Yes, it should.

tamas_hoznek
Product and Topic Expert
Product and Topic Expert
0 Kudos

Did you call the commit FM afterwards?

pakula123
Participant
0 Kudos

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.

0 Kudos

hi,

can you please at least format your code a bit so that its readable?

Did you debug to find out why its not updating.

-sushant

pakula123
Participant
0 Kudos

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.

tamas_hoznek
Product and Topic Expert
Product and Topic Expert
0 Kudos

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.

pakula123
Participant
0 Kudos

Hi Tamas and Sushant , FM is working fine when I execute in SAP ABAP side . When I execute in personas its not updating but I can see logs in session.util methods with return number 000. could you please let me know how I can debug ? Best regards, pradeep.

0 Kudos

so you do see the results coming back when you use session.util.log?

pakula123
Participant
0 Kudos

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.

0 Kudos

hi pradeep,

just put an "external breakpoint" in your abap code and execute your personas script.

See what your FM is recieving and returning.

-Sushant

pakula123
Participant
0 Kudos

Thank you  Sushant .I will try it as suggested .

pakula123
Participant
0 Kudos

Hi Sushant , Thank you very much . I debugged and checked it worked well. Issue is with the notification number with out (3 zeros infront of it). I fixed it. Awarded points for you . Kudo's ,your team (Personas product team) is doing great job supporting via SAP SCN. Best regards, pradeep.

Answers (0)