Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 8493

Re: PR release workflow 2nd level automatically releasing issue:

$
0
0

In SWDD:

Get_Agent_s  Activity step(This activity step just for getting agents):-

 

screen1.pngscreen2.pngscreen3.pngscreen4.pngscreen5.png

 

 

 

Get_agent method coding:

BEGIN_METHOD GET_AGENT CHANGING CONTAINER.
data:
      E_AGENT TYPE T16FW-OBJID,
      I_PRNUMBER TYPE EBAN-BANFN,
      E_LAGENT TYPE MARA-LVORM,
      E_RELEASELEVEL TYPE EBAN-FRGST,
      init_uid type pa0105-usrid,
      init_uname type vornamc,
      lv_pernr type pernr_d,
      lv_nachn type pad_nachn,
      lv_vorna type pad_vorna,
      lv_uname type cname,
      lv_mailid type COMM_ID_LONG,
      E_INITNAME TYPE CNAME,
      E_USERID TYPE PA0105-USRID OCCURS 0,
      E_USRNAME TYPE PA0002-VORNA OCCURS 0,
      E_MAILID TYPE PA0105-USRID_LONG OCCURS 0,
      E_INITMAILID TYPE PA0105-USRID_LONG.
  SWC_GET_ELEMENT CONTAINER 'I_PRNumber' I_PRNUMBER.
  SWC_GET_ELEMENT CONTAINER 'init_uid' INIT_UID.

 


CALL FUNCTION 'ZACINPSFM0000001'
  EXPORTING
    ipurchase_req       = I_PRNUMBER
IMPORTING
   EAGENT_ZID          = E_AGENT
   ELAST_AGENT         = E_LAGENT
   E_RELEASELEVEL      = E_RELEASELEVEL
  tables
    E_USRID           E_USERID
    E_USRNAME         E_USRNAME
    E_MAILID          E_MAILID.
*---> getting the name,maild of initiator.
clear lv_pernr.
select single pernr
        from pa0105
        into lv_pernr
        where usrid = init_uid+2.
        if sy-subrc = 0.
clear lv_mailid.
select single USRID_LONG
       from pa0105
       into lv_mailid
       where pernr = lv_pernr
       and subty = '0010'.
     if sy-subrc = 0.
     E_INITMAILID = lv_mailid.
      endif.
clear lv_uname.
select single nachn
              vorna
       into (lv_nachn, lv_vorna)
       from pa0002
       where pernr = lv_pernr.

if sy-subrc = 0.
concatenate lv_nachn lv_vorna into lv_uname.
e_initname = lv_uname.
endif.
endif.
  SWC_SET_ELEMENT CONTAINER 'e_agent' E_AGENT.
  SWC_SET_ELEMENT CONTAINER 'e_lagent' E_LAGENT.
  SWC_SET_ELEMENT CONTAINER 'E_INITMAILID' E_INITMAILID.
  SWC_SET_TABLE CONTAINER 'e_userid' E_USERID.
  SWC_SET_TABLE CONTAINER 'e_usrname' E_USRNAME.
  SWC_SET_TABLE CONTAINER 'e_mailid' E_MAILID.
  SWC_SET_ELEMENT CONTAINER 'E_RELEASELEVEL' E_RELEASELEVEL.
  SWC_SET_ELEMENT CONTAINER 'e_initname' e_initname.
END_METHOD.

 

CALL FUNCTION 'ZACINPSFM0000001'.(This is the code inside function module).

  CONSTANTS: lv_gr(2) TYPE c VALUE 'G1',
             lv_08(2TYPE c VALUE '08'.
*-----------DECLARING LOCAL VARIABLES
  DATA:
        lv_frgzu TYPE eban-frgzu,
        lv_x(02) TYPE c,
        name TYPE vornamc,
        lv_fname TYPE pad_vorna,
        lv_lname TYPE  pad_nachn.


*--------->>>>>>>>>>>
  SELECT banfn
         frgkz
         frgzu
         frgst
    FROM eban INTO TABLE gi_eban
    WHERE banfn = ipurchase_req.
*--->getting the release  level
  READ TABLE gi_eban INTO gs_eban WITH KEY banfn = ipurchase_req.
  IF sy-subrc = 0.
    e_releaselevel = gs_eban-frgst.
  ENDIF.
  SELECT frggr
      frgsx
      frgc1
      frgc2
      frgc3
      frgc4
      frgc5
      frgc6
      frgc7
      frgc8
    FROM t16fs INTO TABLE gi_t16fs
    FOR ALL ENTRIES IN gi_eban
    WHERE frggr = lv_gr
    AND frgsx = gi_eban-frgst.

  LOOP AT gi_eban INTO gs_eban.
    lv_frgzu = gs_eban-frgzu.
    IF lv_frgzu = ''.

      SELECT frggr
             frgco
             werks
             otype
             objid
       FROM t16fw INTO TABLE gi_t16fw
       FOR ALL ENTRIES IN gi_t16fs
*       WHERE frggr = lv_gr
*       AND frgco = gi_t16fs-frgc1.
* seetha
        WHERE frgco = gi_t16fs-frgc1
        and frggr = lv_gr.
**** 23-08-14 seetha determine codes


* seetha changes.

        if sy-subrc eq 0.

      LOOP AT gi_t16fw INTO gs_t16fw.
        eagent_zid = gs_t16fw-objid.
      ENDLOOP.
    endif.
    ELSEIF lv_frgzu = 'X'.

      SELECT frggr
             frgco
             werks
             otype
             objid
      FROM t16fw INTO TABLE gi_t16fw
      FOR ALL ENTRIES IN gi_t16fs
*      WHERE frggr = lv_gr
*      AND frgco = gi_t16fs-frgc2.
         WHERE frgco = gi_t16fs-frgc2
        and frggr = lv_gr.

**** 23-08-14 seetha determine codes

      if sy-subrc = 0.

      LOOP AT gi_t16fw INTO gs_t16fw.
        eagent_zid = gs_t16fw-objid.
      ENDLOOP.
      endif.

    ELSEIF lv_frgzu = 'XX'.
      SELECT frggr
             frgco
             werks
             otype
             objid
      FROM t16fw INTO TABLE gi_t16fw
      FOR ALL ENTRIES IN gi_t16fs
*      WHERE frggr = lv_gr
*      AND frgco = gi_t16fs-frgc3.
         WHERE frgco = gi_t16fs-frgc3
        and frggr = lv_gr.

        if sy-subrc = 0.

      LOOP AT gi_t16fw INTO gs_t16fw.
        eagent_zid = gs_t16fw-objid.
      ENDLOOP.
      endif.

    ELSEIF lv_frgzu = 'XXX'.

      SELECT frggr
             frgco
             werks
             otype
             objid
      FROM t16fw INTO TABLE gi_t16fw
      FOR ALL ENTRIES IN gi_t16fs
*      WHERE frggr = lv_gr
*      AND frgco = gi_t16fs-frgc4.
         WHERE frgco eq gi_t16fs-frgc4
        and frggr eq lv_gr.

        if sy-subrc = 0.

      LOOP AT gi_t16fw INTO gs_t16fw.
        eagent_zid = gs_t16fw-objid.
*        elast_agent = 'X'.
      ENDLOOP.

      endif.

*seetha
        ELSEIF lv_frgzu = 'XXXX'.

      SELECT frggr
             frgco
             werks
             otype
             objid
      FROM t16fw INTO TABLE gi_t16fw
      FOR ALL ENTRIES IN gi_t16fs
      WHERE frggr = lv_gr
      AND frgco = gi_t16fs-frgc5.

        if sy-subrc = 0.

      LOOP AT gi_t16fw INTO gs_t16fw.
        eagent_zid = gs_t16fw-objid.
      ENDLOOP.

      endif.

        ELSEIF lv_frgzu = 'XXXXX'.

      SELECT frggr
             frgco
             werks
             otype
             objid
      FROM t16fw INTO TABLE gi_t16fw
      FOR ALL ENTRIES IN gi_t16fs
      WHERE frggr = lv_gr
      AND frgco = gi_t16fs-frgc6.

        if sy-subrc = 0.

      LOOP AT gi_t16fw INTO gs_t16fw.
        eagent_zid = gs_t16fw-objid.
         elast_agent = 'X'.
      ENDLOOP.

      endif.

*        ELSEIF lv_frgzu = 'XXXXXX'.
*
*      SELECT frggr
*             frgco
*             werks
*             otype
*             objid
*      FROM t16fw INTO TABLE gi_t16fw
*      FOR ALL ENTRIES IN gi_t16fs
*      WHERE frggr = lv_gr
*      AND frgco = gi_t16fs-frgc7.
*
*      LOOP AT gi_t16fw INTO gs_t16fw.
*        eagent_zid = gs_t16fw-objid.
*      ENDLOOP.
*
*  ELSEIF lv_frgzu = 'XXXXXXX'.
*
*      SELECT frggr
*             frgco
*             werks
*             otype
*             objid
*      FROM t16fw INTO TABLE gi_t16fw
*      FOR ALL ENTRIES IN gi_t16fs
*      WHERE frggr = lv_gr
*      AND frgco = gi_t16fs-frgc8.
*
*      LOOP AT gi_t16fw INTO gs_t16fw.
*        eagent_zid = gs_t16fw-objid.
**        elast_agent = 'X'.
*      ENDLOOP.

    ENDIF.
  ENDLOOP.



*---> Fetching pernr correspodingn to the position.uerid


  SELECT pernr
         plans
    FROM pa0001 INTO TABLE gi_pa0001
    WHERE plans = eagent_zid.
* kavitha

if sy-subrc eq 0.
  SELECT
         pernr
         usrid
*         usrid_long
   FROM pa0105 INTO TABLE gi_pa0105
    FOR ALL ENTRIES IN gi_pa0001
    WHERE pernr = gi_pa0001-pernr.
endif.
  LOOP AT gi_pa0105 INTO gs_pa0105.
    CONCATENATE 'US' gs_pa0105-usrid INTO gs_pa0105-usrid.
    move:gs_pa0105-usrid to gs_t16-objid.
    condense gs_t16-objid.
    append gs_t16 to gi_t16.
    delete ADJACENT DUPLICATES FROM gi_t16.
    clear:gs_pa0105-usrid.
      MODIFY  gi_pa0105 FROM gs_pa0105 .
    DELETE gi_pa0105 WHERE usrid = ''.

  ENDLOOP.
*---> getting  the userid
*e_usrid[] = gi_pa0105[].
e_usrid[] =   gi_t16[].


*    get user fname and lastname.
  IF gi_pa0001 IS NOT INITIAL.
    SELECT pernr
           nachn
           vorna
   FROM pa0002 INTO TABLE gi_pa0002
    FOR ALL ENTRIES IN gi_pa0001
    WHERE pernr = gi_pa0001-pernr.
*
    IF sy-subrc EQ 0.
      LOOP AT gi_pa0002 INTO gs_pa0002.
        CONCATENATE gs_pa0002-vorna gs_pa0002-nachn INTO gs_uname-uname.
        APPEND gs_uname TO gi_uname.
      ENDLOOP.

      e_usrname[] = gi_uname[].
    ENDIF.
*  to get mail id of the user
    SELECT
           pernr
           usrid
           usrid_long
     FROM pa0105 INTO TABLE gi_emailid
      FOR ALL ENTRIES IN gi_pa0001
      WHERE pernr = gi_pa0001-pernr
      AND subty = '0010'.
    IF sy-subrc EQ 0.
      LOOP AT gi_emailid INTO gs_emailid.
        gs_email-email_id = gs_emailid-email_id.
        APPEND gs_email TO gi_email.
      ENDLOOP.
      e_mailid[] = gi_email[].
    ENDIF.
  ENDIF.
  clear : gs_emailid,gs_pa0105,gs_eban,gs_pa0002.
ENDFUNCTION.

 

 

 

 

2. checking agent is found or not? and sending mail to agent:

 

screen6.pngscreen7.png

 

 

3.PR_release activity step(here getting workitem to agent):

 

 

screen8.pngscreen9.pngscreen10.pngscreen11.pngscreen12.png

 

 

Release_pr method coding:

BEGIN_METHOD RELEASE_PR CHANGING CONTAINER.
DATA:
      PR_NUMBER TYPE EBAN-BANFN,
      E_USER_AP_REJ TYPE SY-UNAME,
      E_PAPRVR TYPE PA0105-USRID,
      lv_pernr type pernr_d,
      lv_mailid type COMM_ID_LONG,
      E_APPMAILID type COMM_ID_LONG,
      IM_USRID TYPE PA0105-USRID OCCURS 0,
      WA_USRID LIKE LINE OF IM_USRID,
      lin type i.
      SWC_GET_ELEMENT CONTAINER 'IM_USRID' IM_USRID.
  set PARAMETER ID 'BAN' field object-key.
  call transaction 'ME54N'.
  E_USER_AP_REJ = SY-UNAME.
  CONCATENATE 'US' E_USER_AP_REJ INTO  E_USER_AP_REJ.
*---> getting the agent id & mail id of the parallel approver
  clear lin.
DESCRIBE TABLE IM_USRID lines lin.
if lin > 1.
clear wa_usrid.
loop at im_usrid into wa_usrid.
if wa_usrid NE E_USER_AP_REJ.
  E_PAPRVR wa_usrid.
*---> getting mail id
select single pernr
        from pa0105
        into lv_pernr
        where usrid = E_PAPRVR+2.
        if sy-subrc = 0.
clear lv_mailid.
select single USRID_LONG
       from pa0105
       into lv_mailid
       where pernr = lv_pernr
       and subty = '0010'.
     if sy-subrc = 0.
     E_APPMAILID = lv_mailid.
      endif.
      ENDIF.
      ENDIF.
endloop.
SWC_SET_ELEMENT CONTAINER 'E_PAPRVR' E_PAPRVR.
SWC_SET_ELEMENT CONTAINER 'E_APPMAILID' E_APPMAILID.
endif.
SWC_SET_ELEMENT CONTAINER 'E_USER_AP_REJ' E_USER_AP_REJ.
END_METHOD.

 

 

 

4. update status in EBAN table activity step(here we ubdating status as X (or) XX(or)  XXX(or)XXXX(or)XXXXX(or)XXXXXX(or)etc..

X means 1st level released

XX means 2nd level released

ETC………….

 

screen13.pngscreen14.pngscreen15.pngscreen16.pngscreen17.png

 

UPDATE_EBAN method coding:

 

BEGIN_METHOD UPDATE_EBAN CHANGING CONTAINER.
DATA:
      PR_NUMBER TYPE EBAN-BANFN,
        i       type char1.
  SWC_GET_ELEMENT CONTAINER 'pr_number' PR_NUMBER.
  CALL FUNCTION 'ZACINPSFM_UPDATE'
    EXPORTING
      im_prnumber       = PR_NUMBER.
END_METHOD.

 

 

CALL FUNCTION 'ZACINPSFM_UPDATE'. This is the code used in this function module:

*  ------>>>>>local varible declaration-->>.
   DATA:
        lv_frgzu TYPE eban-frgzu,
        gi_eban TYPE TABLE OF eban,
        gs_eban TYPE eban.
*-------->>>>>>>fetch current  pr release status

if IM_PRNUMBER is NOT INITIAL.
  SELECT SINGLE frgzu
    FROM eban INTO lv_frgzu
    WHERE banfn = im_prnumber.


*----->>>>>update eban with next level of release status.

CASE lv_frgzu.
  when ''.
    UPDATE eban SET FRGZU = 'X' WHERE BANFN = IM_PRNUMBER.
    CLEAR LV_FRGZU.
    when 'X'.
      UPDATE eban SET FRGZU = 'XX' WHERE BANFN = IM_PRNUMBER.
       CLEAR LV_FRGZU.
     when 'XX'.
        UPDATE eban SET FRGZU = 'XXX' WHERE BANFN = IM_PRNUMBER.
        CLEAR LV_FRGZU.
     when 'XXX'.
        UPDATE eban SET FRGZU = 'XXXX' WHERE BANFN = IM_PRNUMBER.
        CLEAR LV_FRGZU.
     when 'XXXX'.
        UPDATE eban SET FRGZU = 'XXXXX' WHERE BANFN = IM_PRNUMBER.
        CLEAR LV_FRGZU.
     when 'XXXXX'.
        UPDATE eban SET FRGZU = 'XXXXXX' WHERE BANFN = IM_PRNUMBER.
        CLEAR LV_FRGZU.
     when 'XXXXXX'.
        UPDATE eban SET FRGZU = 'XXXXXXX' WHERE BANFN = IM_PRNUMBER.
        CLEAR LV_FRGZU.
     ENDCASE.
CLEAR LV_FRGZU.
  ENDIF.


ENDFUNCTION.

 

 

Workflow log:-

Pls check it.

PR Release 2nd level Automatically approved issue:

Loop1—1st level at workflow log :

Based on configuration is picking   e_agent =  50000001(position in HR tables)

Which agent is maintained in HR tables for particular position(50000001) work item is going that Agent only.(first level is perfect)

 

 

screen18.png

 

 

Loop2---3rd level:

 

Based on configuration(see SPRO screen shots below) here  e_agent =  50000003(position in HR tables).

But in the below screen shot please observe e_agent =  50000004.

Which agent is maintained in HR tables for particular position(50000004) work item is going that Agent only.(third level is perfect)

 

 

screen19.png

 

 

SPRO—configration

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

screen20.pngscreen21.pngscreen22.pngscreen23.pngscreen25.pngscreen24.png


Viewing all articles
Browse latest Browse all 8493

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>