| Home • Forums • Interview Q's • Jobs • Testimonials • Contact Us | ||
Topics:General TopicsEmail a FriendContribute |
Synchronization between Contract and ProjectBy Edukondalu, IBM India FUNCTION zyotcpr_contract_sync_project.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IM_XVBAK1) TYPE VBAK
*" TABLES
*" TBL_XVBAP STRUCTURE VBAPVB
*" TBL_CLI_STAT STRUCTURE ZYOTCPR_CLISTAT
*"----------------------------------------------------------------------
* Author : Edukondalu atla (013262744) *
* Date : 10/19/2009
* Program description : system will synchronize the contract line
*item attributes with the WBS level 2 Billing Element attributes. Most *
* significant is synchronization of system and user status fields. *
*----------------------------------------------------------------------*
CONSTANTS: c_error TYPE char1 VALUE 'E',
c_e TYPE char1 VALUE 'E',
c_i TYPE char1 VALUE 'I',
c_x TYPE char1 VALUE 'X',
c_relnomp TYPE char8 VALUE 'REL NoMP',
c_rel TYPE char3 VALUE 'REL',
c_teco TYPE char4 VALUE 'TECO',
c_fnbl TYPE char4 VALUE 'FNBL',
c_fnbl_sys_stat TYPE char13 VALUE 'REL NoMP FNBL',
c_clsd TYPE char4 VALUE 'CLSD',
* Begin of Modification -005 YDEK919877- Defect 16815
c_zm TYPE parvw VALUE 'ZM',
* End of Modification -005 YDEK919877- Defect 16815
c_1 TYPE char1 VALUE '1'.
TYPES:
BEGIN OF ty_errmessage,
type TYPE bapi_mtype, "Message Type
message TYPE bapi_msg, "Message Text
END OF ty_errmessage,
BEGIN OF ty_prps1,
pspnr TYPE ps_posnr,"WBS Element
vernr TYPE ps_vernr,"Number of the responsible pesson (proj MNGR)
prart TYPE ps_prart,"Project type
pbukr TYPE ps_pbukr,"Company code for WBS element
END OF ty_prps1,
BEGIN OF ty_prps,
posid TYPE ps_posid,"Work Breakdown Structure Element (WBS Element)
objnr TYPE j_objnr,"Object number
zzpre_contract TYPE zzpre_conract,
auart TYPE auart,
END OF ty_prps,
BEGIN OF ty_jest,
objnr TYPE objnr,"Object number
stat TYPE j_status,"status
END OF ty_jest,
BEGIN OF ty_sys_stat,
istat TYPE j_istat,"system Status
txt04 TYPE j_txt04, " Status text
END OF ty_sys_stat,
BEGIN OF ty_user_stat2,
objnr TYPE objnr,
stsma TYPE j_stsma,
estat TYPE j_estat,"user Status
linep TYPE j_linep,
txt04 TYPE j_txt04,"Status text
END OF ty_user_stat2,
BEGIN OF ty_user_stat,
stsma TYPE j_stsma,
estat TYPE j_estat,"user Status
txt04 TYPE j_txt04,"Status text
END OF ty_user_stat,
BEGIN OF ty_user_stat1,
stsma TYPE j_stsma,
estat TYPE j_estat,"user Status
linep TYPE j_linep,"Status text
END OF ty_user_stat1,
BEGIN OF ty_project,
pspid TYPE ps_pspid,"WBS Element
profl TYPE profidproj," status profile
END OF ty_project,
BEGIN OF ty_ztabstat,
zcont_type TYPE auart, " Doc Type
zprecontract TYPE zzpre_conract1," pre contract flag
zcon_header_stat TYPE j_stext,"contract header status
zcon_sys_stat TYPE j_stext,"Contract line item system status
zcon_user_stat TYPE asttx,"Contract line item user status
zwbs_sys_stat TYPE co_sttxt, "WBS system status
zwbs_user_stat TYPE co_sttxtu,"WBS user status
END OF ty_ztabstat,
BEGIN OF ty_wbsstat_in,
auart TYPE auart,
zzpre_contract TYPE zzpre_conract," Pre Contract Flag
zcon_header_stat TYPE j_stext, "contract header status
objnr TYPE objnr, "Object number
stat1 TYPE co_sttxt, "Contract line item system status
stat2 TYPE co_sttxt, "Contract line item user status
END OF ty_wbsstat_in,
BEGIN OF ty_conthead,
objnr TYPE objnr, "Object number
stat TYPE co_sttxt,"contract header status
END OF ty_conthead,
BEGIN OF ty_psphi,
pspsnr TYPE ps_posnr, "WBS Element
psphi TYPE ps_psphi, "Current number of the appropriate project
END OF ty_psphi,
BEGIN OF ty_pspid,
pspsnr TYPE ps_posnr, "WBS Element
pspid TYPE ps_pspid, "Project Definition
END OF ty_pspid,
BEGIN OF ty_sys_str,
sys_stat TYPE j_istat,
END OF ty_sys_str,
BEGIN OF ty_user_str,
user_stat TYPE j_estat,
END OF ty_user_str,
BEGIN OF ty_veda,
vbeln TYPE vbeln_va,
vposn TYPE posnr_va,
vbegdat TYPE vbdat_veda,
venddat TYPE vndat_veda,
END OF ty_veda,
BEGIN OF ty_jsto,
objnr TYPE j_objnr,
stsma TYPE j_stsma,
END OF ty_jsto.
TYPES : BEGIN OF ty_cli_status,
objnr TYPE objpo,
cli_sys_stat TYPE co_sttxt,
cli_user_stat TYPE co_sttxt,
END OF ty_cli_status.
DATA: BEGIN OF fnbl OCCURS 0,
sign(1) TYPE c,
option(2) TYPE c,
low TYPE j_stext,
high TYPE j_stext,
END OF fnbl.
RANGES: r_fnbl FOR zyotcpr_wbsstat-zcon_sys_stat.
r_fnbl-sign = 'I'. "include
r_fnbl-option = 'CP'. "Pattern
r_fnbl-low = '*FNBL*'. "Low Value
r_fnbl-high = ''. "High Value
APPEND r_fnbl.
DATA:
i_jsto TYPE STANDARD TABLE OF ty_jsto,
wg_jsto TYPE ty_jsto,
i_veda TYPE STANDARD TABLE OF ty_veda,
wg_veda TYPE ty_veda,
i_cli_status1 TYPE STANDARD TABLE OF ty_cli_status,
wg_cli_sttus1 TYPE ty_cli_status,
i_sys_stat_tbl TYPE STANDARD TABLE OF ty_sys_str,
wg_sys_stat_tbl TYPE ty_sys_str,
i_user_stat_tbl TYPE STANDARD TABLE OF ty_user_str,
wg_user_stat_tbl TYPE ty_user_str,
i_psphi TYPE STANDARD TABLE OF ty_psphi,
i_pspid TYPE STANDARD TABLE OF ty_pspid,
wg_pspid TYPE ty_pspid,
st_project_definition TYPE bapi_bus2001_chg,
st_project_definition_upd TYPE bapi_bus2001_upd,
st_ext_proj_def TYPE bapi_proj_key-project_defi,
st_int_proj_def TYPE bapi_proj_key-proj_key_int,
st_project_definition2 TYPE bapi_project_definition,
st_project_definition_upd2 TYPE bapi_project_definition_up,
i_return TYPE STANDARD TABLE OF bapiret2 INITIAL SIZE 0,
wg_return TYPE bapiret2 ,
wg_return1 TYPE bapiret1,
i_prps1 TYPE STANDARD TABLE OF ty_prps1,
wg_prps1 TYPE ty_prps1,
wg_vbap TYPE vbapvb,
g_output TYPE ps_posid,
g_temp_wbs_element TYPE ps_posid,
g_pspnr TYPE ps_psp_pnr,
st_project_definition1 TYPE bapi_bus2001_new-project_definition,
i_wbs_element TYPE STANDARD TABLE OF bapi_bus2054_chg
INITIAL SIZE 0,
i_wbs_element2 TYPE STANDARD TABLE OF bapi_bus2054_chg
INITIAL SIZE 0,
wg_wbs_element TYPE bapi_bus2054_chg,
i_update_wbs_element TYPE STANDARD TABLE OF bapi_bus2054_upd,
wg_update_wbs_element TYPE bapi_bus2054_upd,
i_project_definition TYPE bapi_bus2054_detail-project_definition,
i_wbs_element1 TYPE STANDARD TABLE OF bapi_wbs_list,
i_et_wbs_element TYPE STANDARD TABLE OF bapi_bus2054_detail ,
i_et_wbs_element1 TYPE STANDARD TABLE OF bapi_bus2054_detail ,
i_et_wbs_element2 TYPE STANDARD TABLE OF bapi_bus2054_detail ,
wg_et_wbs_element TYPE bapi_bus2054_detail,
wg_et_wbs_element1 TYPE bapi_bus2054_detail,
wg_et_wbs_element2 TYPE bapi_bus2054_detail,
i_prps TYPE STANDARD TABLE OF ty_prps,
i_prps2 TYPE STANDARD TABLE OF ty_prps,
i_prps3 TYPE STANDARD TABLE OF ty_prps,
wg_prps TYPE ty_prps,
wg_prps2 TYPE ty_prps,
wg_prps3 TYPE ty_prps,
i_jest TYPE STANDARD TABLE OF ty_jest,
i_jest_tmp TYPE STANDARD TABLE OF ty_jest,
i_jest1 TYPE STANDARD TABLE OF ty_jest,
i_jest_tmp1 TYPE STANDARD TABLE OF ty_jest,
wg_jest TYPE ty_jest,
wg_jest_temp TYPE ty_jest,
i_wbs_system_status TYPE STANDARD TABLE OF
bapi_wbs_mnt_system_status,
*Begin of Modification-003 -YDEK916677 - SCR1
i_wbs_system_status_single TYPE STANDARD TABLE OF
bapi_wbs_mnt_system_status,
*End of Modification-003 -YDEK916677 - SCR1
wg_wbs_system_status TYPE bapi_wbs_mnt_system_status,
i_wbs_user_status TYPE STANDARD TABLE OF bapi_wbs_mnt_user_status,
wg_wbs_user_status TYPE bapi_wbs_mnt_user_status,
i_result TYPE STANDARD TABLE OF bapi_status_result,
i_sys_stat TYPE STANDARD TABLE OF ty_sys_stat,
wg_sys_stat TYPE ty_sys_stat,
i_user_stat TYPE STANDARD TABLE OF ty_user_stat,
wg_user_stat TYPE ty_user_stat,
i_user_stat1 TYPE STANDARD TABLE OF ty_user_stat1,
wg_user_stat1 TYPE ty_user_stat1,
i_user_stat2 TYPE STANDARD TABLE OF ty_user_stat2,
i_user_stat3 TYPE STANDARD TABLE OF ty_user_stat2,
wg_user_stat2 TYPE ty_user_stat2,
g_profl TYPE ps_stspr,
g_hvlv TYPE zzhvlv,
gd_set TYPE char1,
* g_gbstk TYPE gbstk,
i_ztabstat TYPE STANDARD TABLE OF ty_ztabstat,
wg_ztabstat TYPE ty_ztabstat,
i_wbsstat_in TYPE STANDARD TABLE OF ty_wbsstat_in,
wg_wbsstat_in TYPE ty_wbsstat_in,
lv_index TYPE sy-tabix,
i_prps4 LIKE i_prps3,
i_prps5 LIKE i_prps3,
i_prps6 LIKE i_prps3,
g_line TYPE sy-tabix,
wg_wbsstat_tmp LIKE LINE OF i_wbsstat_in,
i_wbsstat_tmp LIKE i_wbsstat_in,
i_conthead TYPE STANDARD TABLE OF ty_conthead,
wg_conthead TYPE ty_conthead,
g_conthead TYPE j_status ,
g_conthead_txt TYPE j_txt04,
wl_index TYPE sy-tabix,
g_line_sysstat TYPE co_sttxt,
g_line_sysstat_tmp TYPE co_sttxt,
g_line_userstat TYPE co_sttxt,
g_line_userstat_tmp TYPE co_sttxt,
l_no TYPE i,
v_len TYPE i,
v_len1 TYPE i,
lv_len TYPE i,
v_len2 TYPE i.
* WORK AREAS
DATA: wg_project_definition TYPE bapi_project_definition_up,
wg_bapi_method_project TYPE bapi_method_project,
wg_bapi_element_table_update TYPE bapi_wbs_element_update,
wg_bapi_element_table TYPE bapi_wbs_element,
wg_proj_def TYPE bapi_project_definition,
wg_bapi_project_definition_ex TYPE bapi_project_definition_ex,
wg_type TYPE bapireturn1, "Return Parameter
wg_classvarvalues TYPE bapi1003_char_val_r,
wg_wbs_element_table TYPE bapi_wbs_element_exp,
wg_type1 TYPE bapiret2,
wg_e_wbs_element TYPE bapi_wbs_elements.
**&---------------------------------------------------------------------
*
*** INTERNAL TABLE
DATA: i_bapi_method_project TYPE TABLE OF bapi_method_project,
i_bapi_element_table_update TYPE TABLE OF
bapi_wbs_element_update,
i_bapi_element_table TYPE STANDARD TABLE OF
bapi_wbs_element,
i_classvarvalues TYPE STANDARD TABLE OF bapi1003_char_val_r,
i_wbs_element_table TYPE STANDARD TABLE OF
bapi_wbs_element_exp,
i_e_wbs_element TYPE STANDARD TABLE OF bapi_wbs_elements.
** CONSTANTS
CONSTANTS: c_val TYPE string VALUE '000001',
c_one TYPE c VALUE '1',
c_update TYPE string VALUE 'UPDATE',
c_save TYPE string VALUE 'SAVE',
c_wbs_element TYPE string VALUE 'WBS-ELEMENT' ,
c_project TYPE string VALUE 'ProjectDefinition',
c_offering TYPE atwrt VALUE 'OCI',
c_classt TYPE bapi_class_key-classtype VALUE '001' .
*Begin of Modification-003 -YDEK916677 - SCR1
DATA: i_wbs_sys_stat TYPE STANDARD TABLE OF bapi_wbs_system_status,
wg_wbs_sys_stat TYPE bapi_wbs_system_status.
DATA: i_ztabstat_fnbl TYPE STANDARD TABLE OF ty_ztabstat. DATA: i_wbs_elements TYPE STANDARD TABLE OF bapi_wbs_elements,
wg_wbs_elements TYPE bapi_wbs_elements.
CLEAR: wg_wbs_elements. *End of Modification-003 -YDEK916677 - SCR1 DATA: l_char(40) TYPE c. DATA: wg_cli_status TYPE zyotcpr_clistat,
i_status1 TYPE STANDARD TABLE OF zyotcpr_clistat.
DATA : l_pernr TYPE pernr_d,
l_pernr_header TYPE pernr_d.
* End of Modification @002 - Rev track 2732 : YDEK912939 Defect # 12026
*---------------------------------------------------------------*
* Begin of Processing
*---------------------------------------------------------------*
* IF sy-uname EQ '0132627441'."OR
*** sy-uname EQ '00904C744' OR
*** sy-uname EQ '00828G744' or
* sy-uname eq '617633744'.
* added by Debaraj Sahoo to get the line item details entered in
* the Contract screen
DATA: i_xveda TYPE TABLE OF vedavb,
wl_xveda TYPE vedavb.
*Begin of Modification-003 -YDEK916677 - SCR1
DATA: i_xvbpa TYPE TABLE OF vbpavb,
wl_xvbpa TYPE vbpavb.
FIELD-SYMBOLS: <ls_03> TYPE ANY,
<ls_04> TYPE ANY.
ASSIGN '(SAPMV45A)XVBPA[]' TO <ls_03>.
ASSIGN (<ls_03>) TO <ls_04>.
* Begin of Modification 004 YDEK919397 for defect 16277
IF sy-subrc EQ 0.
i_xvbpa[] = <ls_04>.
ENDIF.
* End of Modification 004 YDEK919397 for defect 16277
*End of Modification-003 -YDEK916677 - SCR1
FIELD-SYMBOLS: <ls_01> TYPE ANY,
<ls_02> TYPE ANY.
ASSIGN '(SAPLV45W)xveda[]' TO <ls_01>.
ASSIGN (<ls_01>) TO <ls_02>.
* Begin of Modification 004 YDEK919397 for defect 16277
IF sy-subrc EQ 0.
i_xveda[] = <ls_02>.
ENDIF.
* End of Modification 004 YDEK919397 for defect 16277
* end of addition by Debaraj Sahoo
*Begin of modification YDEK919257 defect no 16277
COMMIT WORK.
* End of modification YDEK919257 defect no 16277
i_status1[] = tbl_cli_stat[].
DELETE ADJACENT DUPLICATES FROM i_status1 COMPARING ALL FIELDS.
LOOP AT i_status1 INTO wg_cli_status.
CONDENSE wg_cli_status-zcli_sys_stat.
CONDENSE wg_cli_status-zcli_user_stat.
MODIFY i_status1 FROM wg_cli_status.
ENDLOOP.
*IF SY-UNAME EQ '00000'.
* Slect the flag which differentiates High Volume Low Value Contract
* if the g_hvlv indicator has some vlaue it belongs to HVLV Contract
SELECT SINGLE zzhvlv FROM vbak
INTO g_hvlv
WHERE vbeln = im_xvbak1-vbeln.
******** added ******************
TYPES: BEGIN OF ty_vbpa,
vbeln TYPE vbeln,
posnr TYPE posnr,
parvw TYPE parvw,
pernr TYPE pernr_d,
END OF ty_vbpa.
DATA: i_wbs_get_stat TYPE STANDARD TABLE OF bapi_wbs_elements,
wg_wbs_get_stat TYPE bapi_wbs_elements.
DATA: i_vbpa TYPE STANDARD TABLE OF ty_vbpa,
wg_vbpa TYPE ty_vbpa.
IF NOT tbl_xvbap[] IS INITIAL.
SELECT vbeln posnr
parvw pernr
FROM vbpa INTO TABLE i_vbpa
FOR ALL ENTRIES IN tbl_xvbap
WHERE vbeln EQ tbl_xvbap-vbeln
* AND posnr EQ tbl_xvbap-posnr
AND parvw EQ 'ZM'.
IF i_vbpa IS NOT INITIAL.
SORT i_vbpa BY vbeln posnr.
ENDIF.
ENDIF.
IF NOT tbl_xvbap[] IS INITIAL.
SELECT objnr stsma
FROM jsto INTO TABLE i_jsto
FOR ALL ENTRIES IN tbl_xvbap
WHERE objnr EQ tbl_xvbap-objnr.
IF i_jsto IS NOT INITIAL.
SORT i_jsto BY objnr.
ENDIF.
ENDIF.
******** added********
SORT tbl_xvbap BY ps_psp_pnr.
* * Get the Current number of the appropriate project from PRPS Table
* Based on the WBS Element present in Contract
* IF sy-uname = '00904C744' .".OR sy-uname = '013262744'.
SELECT objnr stat
FROM jest
INTO TABLE i_conthead
WHERE objnr = im_xvbak1-objnr.
* Filter the Contract header status by filtering the statuses which
* starts with I.
READ TABLE i_conthead INTO wg_conthead WITH KEY stat+0(1) = c_i .
IF sy-subrc = 0.
g_conthead = wg_conthead-stat.
ENDIF.
* get the Contract Header status from tj02t
SELECT SINGLE txt04 FROM tj02t
INTO g_conthead_txt
WHERE istat = g_conthead
AND spras = sy-langu.
* get the Current number of the appropriate project from PRPS by
* providing the WBS Element
DELETE tbl_xvbap WHERE abgru NE ' '
OR objnr EQ ' '.
IF NOT tbl_xvbap[] IS INITIAL.
SELECT pspnr psphi FROM prps
INTO TABLE i_psphi
FOR ALL ENTRIES IN tbl_xvbap
WHERE pspnr = tbl_xvbap-ps_psp_pnr.
ENDIF.
IF NOT i_psphi[] IS INITIAL.
SORT i_psphi BY psphi.
DELETE ADJACENT DUPLICATES FROM i_psphi COMPARING psphi.
* Get the Project from PROJ Table Based on
* the Current number of the Project
SELECT pspnr pspid FROM proj
INTO TABLE i_pspid
FOR ALL ENTRIES IN i_psphi
WHERE pspnr = i_psphi-psphi.
ENDIF.
DESCRIBE TABLE i_psphi LINES l_no.
IF l_no EQ 0.
EXIT.
ELSEIF l_no GT 1.
MESSAGE i010(zyotc).
EXIT.
* IF the Project does not Exist Then Skip all the Further
*Processing
ELSE.
* Get the Status Profile for Project definition from PROJ Table
READ TABLE i_pspid INTO wg_pspid INDEX c_1.
* READ TABLE tbl_xvbap into wg_xvbap.
SELECT SINGLE stspr
FROM proj
INTO g_profl WHERE pspnr = wg_pspid-pspid.
* IF NOT tbl_xvbap IS INITIAL.
SELECT vbeln vposn vbegdat venddat FROM veda INTO TABLE i_veda
FOR ALL ENTRIES IN tbl_xvbap WHERE vbeln = tbl_xvbap-vbeln.
* AND VPOSN = tbl_xvbap-POSNR.
* ENDIF.
READ TABLE i_veda INTO wg_veda INDEX c_1.
i_project_definition = wg_pspid-pspid.
st_project_definition1 = wg_pspid-pspid.
* use the BAPI BAPI_BUS2054_GETDATA to get detailed
* information about WBS elements.
CALL FUNCTION 'BAPI_BUS2054_GETDATA'
EXPORTING
i_project_definition = i_project_definition
i_language = 'EN'
TABLES
it_wbs_element = i_wbs_element1
et_wbs_element = i_et_wbs_element.
CLEAR wg_vbap.
LOOP AT i_et_wbs_element INTO wg_et_wbs_element. IF wg_et_wbs_element-wbs_up IS INITIAL.
APPEND wg_et_wbs_element TO i_et_wbs_element1.
ENDIF.
READ TABLE i_et_wbs_element1 INTO wg_et_wbs_element1 WITH KEY
wbs_element = wg_et_wbs_element-wbs_up.
IF sy-subrc = 0.
APPEND wg_et_wbs_element TO i_et_wbs_element2.
ENDIF.
CLEAR: wg_et_wbs_element,wg_et_wbs_element1.
ENDLOOP.
***********First Section of the Enhancement for Project data Update***** * CLEAR ALL THE WORK AREAS,INTERNAL TABLES
CLEAR : wg_proj_def,wg_project_definition,wg_type,
wg_wbs_element_table, i_wbs_element_table[],
i_bapi_method_project[],
i_bapi_element_table_update[],
i_bapi_element_table[].
READ TABLE i_xveda INTO wl_xveda INDEX c_1.
READ TABLE i_vbpa INTO wg_vbpa
WITH KEY vbeln = wg_vbap-vbeln.
wg_proj_def-project_definition = st_project_definition1.
wg_proj_def-start = wl_xveda-vbegdat.
wg_proj_def-finish = wl_xveda-venddat.
wg_project_definition-project_definition = c_x.
wg_project_definition-start = c_x.
wg_project_definition-finish = c_x.
wg_bapi_method_project-refnumber = c_val.
wg_bapi_method_project-objecttype = c_project.
wg_bapi_method_project-method = c_update.
wg_bapi_method_project-objectkey = c_one.
APPEND wg_bapi_method_project TO i_bapi_method_project.
CLEAR wg_bapi_method_project.
wg_bapi_method_project-method = c_save.
APPEND wg_bapi_method_project TO i_bapi_method_project.
CALL FUNCTION 'BAPI_PROJECT_MAINTAIN'
EXPORTING
i_project_definition = wg_proj_def
i_project_definition_upd = wg_project_definition
IMPORTING
return = wg_return1
TABLES
i_method_project = i_bapi_method_project
i_wbs_element_table_update = i_bapi_element_table_update
i_wbs_element_table = i_bapi_element_table.
IF wg_return1-type EQ c_error .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR i_return.
* EXIT.
ELSE.
* This method executes a COMMIT WORK command.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
CLEAR i_return.
ENDIF.
*******LEVEL1 WBS Element Data Update************************* * * CLEAR ALL THE WORK AREAS,INTERNAL TABLES
CLEAR : wg_proj_def,wg_project_definition,wg_type,
wg_wbs_element_table, i_wbs_element_table[],
i_bapi_method_project[],
i_bapi_element_table_update[],
i_bapi_element_table[].
READ TABLE i_xveda INTO wl_xveda INDEX c_1.
READ TABLE i_vbpa INTO wg_vbpa
WITH KEY vbeln = wg_vbap-vbeln.
wg_proj_def-project_definition = st_project_definition1.
wg_proj_def-start = wl_xveda-vbegdat.
wg_proj_def-finish = wl_xveda-venddat.
wg_project_definition-project_definition = c_x.
wg_project_definition-start = c_x.
wg_project_definition-finish = c_x.
wg_bapi_method_project-refnumber = c_val.
wg_bapi_method_project-objecttype = c_wbs_element.
wg_bapi_method_project-method = c_update.
wg_bapi_method_project-objectkey = c_one.
APPEND wg_bapi_method_project TO i_bapi_method_project.
CLEAR wg_bapi_method_project.
wg_bapi_method_project-method = c_save.
APPEND wg_bapi_method_project TO i_bapi_method_project.
READ TABLE i_et_wbs_element1 INTO wg_et_wbs_element1 INDEX c_1.
IF sy-subrc EQ 0.
wg_bapi_element_table_update-wbs_basic_start_date = c_x.
wg_bapi_element_table_update-wbs_basic_finish_date = c_x.
wg_bapi_element_table_update-proj_type = c_x.
APPEND wg_bapi_element_table_update TO
i_bapi_element_table_update.
wg_bapi_element_table-wbs_element =
wg_et_wbs_element1-wbs_element.
wg_bapi_element_table-wbs_basic_start_date = wl_xveda-vbegdat.
wg_bapi_element_table-wbs_basic_finish_date =
wl_xveda-venddat.
IF g_hvlv = 'X'.
wg_bapi_element_table-proj_type = 'ZH'.
ELSE.
wg_bapi_element_table-proj_type = 'ZC'.
ENDIF.
APPEND wg_bapi_element_table TO i_bapi_element_table.
ENDIF.
CALL FUNCTION 'BAPI_PROJECT_MAINTAIN'
EXPORTING
i_project_definition = wg_proj_def
i_project_definition_upd = wg_project_definition
IMPORTING
return = wg_return1
TABLES
i_method_project = i_bapi_method_project
i_wbs_element_table_update = i_bapi_element_table_update
i_wbs_element_table = i_bapi_element_table.
IF wg_return1-type EQ c_error .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR i_return.
* EXIT.
ELSE.
* This method executes a COMMIT WORK command.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
CLEAR i_return.
ENDIF.
******Second part of the Enhancement for updating WBS Element data***** LOOP AT tbl_xvbap INTO wg_vbap. * CLEAR ALL THE WORK AREAS,INTERNAL TABLES
CLEAR : wg_proj_def,wg_project_definition,wg_type,
wg_wbs_element_table, i_wbs_element_table[],
i_bapi_method_project[],
i_bapi_element_table_update[],
i_bapi_element_table[] ,
wg_return1."
READ TABLE i_xveda INTO wl_xveda WITH KEY vbeln = wg_vbap-vbeln
vposn = wg_vbap-posnr.
* Begin of Modification @005 YDEK919877- Defect 16815
* If line item level data is not present take the header data
IF sy-subrc NE 0.
READ TABLE i_xveda INTO wl_xveda INDEX c_1.
ENDIF.
* READ TABLE i_xvbpa INTO wl_xvbpa WITH KEY vbeln = wg_vbap-vbeln * posnr = wg_vbap-posnr. * If line item level data is not present then consider the header data
READ TABLE i_xvbpa INTO wl_xvbpa WITH KEY vbeln = wg_vbap-vbeln
posnr = wg_vbap-posnr
parvw = c_zm.
IF sy-subrc NE 0.
READ TABLE i_xvbpa INTO wl_xvbpa WITH KEY vbeln = wg_vbap-vbeln
parvw = c_zm.
IF sy-subrc EQ 0.
* do nothing
ENDIF.
ENDIF.
* End of Modification @005 YDEK919877- Defect 16815
* Begin of Modification @002 - Rev track 2732 : YDEK912939 Defect # 12026
* READ TABLE i_vbpa INTO wg_vbpa
* WITH KEY vbeln = wg_vbap-vbeln
* posnr = '000000'.
* l_pernr_header = wg_vbpa-pernr.
*
* READ TABLE i_vbpa INTO wg_vbpa
* WITH KEY vbeln = wg_vbap-vbeln
* posnr = wg_vbap-posnr.
* IF l_pernr_header = wg_vbpa-pernr.
* wg_vbpa-pernr = l_pernr_header.
* ENDIF.
* IF sy-subrc eq 0.
CLEAR l_pernr.
* To check if there is an entry maintained in TCJ04.
SELECT SINGLE vernr INTO l_pernr
FROM tcj04 WHERE vernr EQ wl_xvbpa-pernr.
IF l_pernr IS INITIAL.
CALL FUNCTION 'ZYOTCPR_EMPLOYEE_RESPONSIBLE' DESTINATION ' '
EXPORTING
im_pernr = wl_xvbpa-pernr.
ENDIF.
* ENDIF.
** End of Modification @002 - Rev track 2732 : YDEK912939 Defect # 12026
wg_proj_def-project_definition = st_project_definition1.
wg_proj_def-start = wl_xveda-vbegdat.
wg_proj_def-finish = wl_xveda-venddat.
wg_project_definition-project_definition = c_x.
wg_project_definition-start = c_x.
wg_project_definition-finish = c_x.
wg_bapi_method_project-refnumber = c_val.
wg_bapi_method_project-objecttype = c_wbs_element.
wg_bapi_method_project-method = c_update.
wg_bapi_method_project-objectkey = c_one.
APPEND wg_bapi_method_project TO i_bapi_method_project.
CLEAR wg_bapi_method_project.
wg_bapi_method_project-method = c_save.
APPEND wg_bapi_method_project TO i_bapi_method_project.
* Conversion of Internal to External WBS Element Number
CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
EXPORTING
input = wg_vbap-ps_psp_pnr
IMPORTING
output = g_output.
CLEAR : wg_et_wbs_element1.
READ TABLE i_et_wbs_element2 INTO wg_et_wbs_element1 WITH KEY
wbs_element = g_output.
IF sy-subrc EQ 0.
wg_bapi_element_table_update-wbs_basic_start_date = c_x.
wg_bapi_element_table_update-wbs_basic_finish_date = c_x.
wg_bapi_element_table_update-responsible_no = c_x.
wg_bapi_element_table_update-proj_type = c_x.
APPEND wg_bapi_element_table_update TO
i_bapi_element_table_update.
wg_bapi_element_table-wbs_element = g_output.
wg_bapi_element_table-wbs_basic_start_date = wl_xveda-vbegdat.
wg_bapi_element_table-wbs_basic_finish_date =
wl_xveda-venddat.
wg_bapi_element_table-responsible_no = wl_xvbpa-pernr.
IF g_hvlv = 'X'.
wg_bapi_element_table-proj_type = 'ZH'.
ELSE.
wg_bapi_element_table-proj_type = 'ZC'.
ENDIF.
APPEND wg_bapi_element_table TO i_bapi_element_table.
ENDIF.
CALL FUNCTION 'BAPI_PROJECT_MAINTAIN'
EXPORTING
i_project_definition = wg_proj_def
i_project_definition_upd = wg_project_definition
IMPORTING
return = wg_return1
TABLES
i_method_project = i_bapi_method_project
i_wbs_element_table_update = i_bapi_element_table_update
i_wbs_element_table = i_bapi_element_table.
IF wg_return1-type EQ c_error .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR i_return.
* EXIT.
ELSE.
* This method executes a COMMIT WORK command.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
CLEAR i_return.
ENDIF.
READ TABLE i_et_wbs_element2 INTO wg_et_wbs_element1
WITH KEY wbs_element = g_output.
IF sy-subrc = 0.
wg_prps-objnr = wg_vbap-objnr.
wg_prps-posid = g_output.
wg_prps-zzpre_contract = wg_vbap-zzpre_contract.
wg_prps-auart = im_xvbak1-auart.
APPEND wg_prps TO i_prps.
wg_wbs_get_stat-wbs_element = g_output.
APPEND wg_wbs_get_stat TO i_wbs_get_stat.
ENDIF.
CLEAR wg_vbap.
ENDLOOP.
APPEND LINES OF i_wbs_element2 TO i_wbs_element.
SORT i_wbs_element BY wbs_element.
DELETE ADJACENT DUPLICATES FROM i_wbs_element COMPARING
wbs_element.
CLEAR: g_temp_wbs_element,wg_et_wbs_element,wg_prps-objnr.
CLEAR wg_update_wbs_element.
* get all the statuses of all the line items of Level2 WBS Elements
SELECT objnr stat FROM jest INTO TABLE i_jest
FOR ALL ENTRIES IN i_prps WHERE objnr = i_prps-objnr
AND inact EQ ' '.
IF sy-subrc EQ 0.
i_jest_tmp[] = i_jest[].
SORT i_jest_tmp BY stat.
* delete system statuses from i_jest_tmp so that it contains only user
* statuses System statuses starts with the Letetr 'I'.
DELETE i_jest_tmp WHERE stat+0(1) = c_i.
* delete user statuses from i_jest so that it contains only system
* statuses user statuses starts with the Letetr 'E' .
DELETE i_jest WHERE stat+0(1) = c_e .
ENDIF.
* After this i_jest_tmp contains user status and i_jest
* contains system status
IF NOT i_jest[] IS INITIAL.
* get the system statuses text from the table tj02t for all the
* statuses in the internal table i_jest
SELECT istat txt04 FROM tj02t INTO TABLE i_sys_stat
FOR ALL ENTRIES IN i_jest
WHERE istat = i_jest-stat
AND spras = sy-langu.
IF sy-subrc EQ 0.
SORT i_jest BY objnr.
ENDIF.
ENDIF.
* get the system statuses text from the table tj30t for all the
* statuses in the internal table i_jest_tmp
IF NOT i_jest_tmp[] IS INITIAL.
SELECT stsma estat txt04 FROM tj30t INTO TABLE i_user_stat
FOR ALL ENTRIES IN i_jest_tmp
WHERE estat = i_jest_tmp-stat
AND spras = sy-langu.
SELECT stsma estat linep FROM tj30 INTO TABLE i_user_stat1
FOR ALL ENTRIES IN i_jest_tmp
WHERE estat = i_jest_tmp-stat.
IF sy-subrc EQ 0.
SORT i_jest_tmp BY objnr.
ENDIF.
ENDIF.
LOOP AT i_jest_tmp INTO wg_jest_temp.
READ TABLE i_jsto INTO wg_jsto WITH KEY objnr =
wg_jest_temp-objnr.
IF sy-subrc = 0.
READ TABLE i_user_stat INTO wg_user_stat
WITH KEY estat = wg_jest_temp-stat
stsma = wg_jsto-stsma.
IF sy-subrc = 0.
READ TABLE i_user_stat1 INTO wg_user_stat1
WITH KEY estat = wg_user_stat-estat
stsma = wg_jsto-stsma.
IF sy-subrc = 0.
wg_user_stat2-objnr = wg_jest_temp-objnr.
wg_user_stat2-stsma = wg_user_stat-stsma.
wg_user_stat2-estat = wg_user_stat-estat.
wg_user_stat2-linep = wg_user_stat1-linep.
wg_user_stat2-txt04 = wg_user_stat-txt04.
APPEND wg_user_stat2 TO i_user_stat2.
* endif.
ENDIF.
ENDIF.
ELSE.
READ TABLE i_user_stat INTO wg_user_stat
WITH KEY estat = wg_jest_temp-stat
stsma = wg_jsto-stsma.
IF sy-subrc = 0.
READ TABLE i_user_stat1 INTO wg_user_stat1
WITH KEY estat = wg_user_stat-estat
stsma = wg_jsto-stsma.
IF sy-subrc = 0.
wg_user_stat2-objnr = wg_jest_temp-objnr.
wg_user_stat2-stsma = wg_user_stat-stsma.
wg_user_stat2-estat = wg_user_stat-estat.
wg_user_stat2-linep = wg_user_stat1-linep.
wg_user_stat2-txt04 = wg_user_stat-txt04.
APPEND wg_user_stat2 TO i_user_stat2.
* endif.
ENDIF.
ENDIF.
ENDIF.
CLEAR: wg_user_stat2.
ENDLOOP.
* zyotcpr_wbsstat
SORT i_prps BY objnr.
LOOP AT i_prps INTO wg_prps.
wg_wbsstat_in-auart = wg_prps-auart.
wg_wbsstat_in-zzpre_contract = wg_prps-zzpre_contract.
wg_wbsstat_in-objnr = wg_prps-objnr.
CLEAR : wg_jest.
i_jest1 = i_jest.
DELETE i_jest1 WHERE objnr NE wg_prps-objnr.
DESCRIBE TABLE i_jest1 LINES l_no.
READ TABLE i_jest1 INTO wg_jest
WITH KEY objnr = wg_prps-objnr BINARY SEARCH.
lv_index = sy-tabix.
DO l_no TIMES.
READ TABLE i_jest1 INDEX lv_index INTO wg_jest .
IF wg_prps-objnr = wg_jest-objnr .
* IF sy-subrc = 0 AND ( wg_prps-objnr = wg_jest-objnr ).
READ TABLE i_sys_stat INTO wg_sys_stat
WITH KEY istat = wg_jest-stat BINARY SEARCH.
IF sy-subrc EQ 0.
IF lv_index = 1.
g_line_sysstat = wg_sys_stat-txt04.
ELSE.
g_line_sysstat_tmp = wg_sys_stat-txt04.
CONCATENATE g_line_sysstat g_line_sysstat_tmp INTO
g_line_sysstat SEPARATED BY space.
ENDIF.
ENDIF.
CLEAR : wg_jest,wg_sys_stat.
ENDIF.
lv_index = lv_index + 1.
ENDDO.
CLEAR: lv_index,wg_jest,l_no.
* IMPORT i_cli_status1 FROM MEMORY ID 'ZCLI_STAT'.
wg_wbsstat_in-stat1 = g_line_sysstat.
* i_jest_tmp1 = i_jest_tmp.
i_user_stat3 = i_user_stat2.
READ TABLE i_jsto INTO wg_jsto WITH KEY objnr = wg_prps-objnr.
DELETE i_user_stat3 WHERE objnr NE wg_prps-objnr
OR stsma NE wg_jsto-stsma.
SORT i_user_stat3 BY linep.
DESCRIBE TABLE i_user_stat3 LINES l_no.
READ TABLE i_user_stat3 INTO wg_user_stat2
WITH KEY objnr = wg_prps-objnr BINARY SEARCH.
lv_index = sy-tabix.
DO l_no TIMES.
READ TABLE i_user_stat3 INDEX lv_index INTO wg_user_stat2.
IF wg_prps-objnr = wg_user_stat2-objnr .
IF sy-subrc EQ 0.
IF lv_index = 1.
g_line_userstat = wg_user_stat2-txt04.
ELSE.
g_line_userstat_tmp = wg_user_stat2-txt04.
CONCATENATE g_line_userstat g_line_userstat_tmp INTO
g_line_userstat SEPARATED BY space.
ENDIF.
ENDIF.
CLEAR : wg_jest,wg_user_stat2.
ENDIF.
lv_index = lv_index + 1.
ENDDO.
CLEAR: lv_index,l_no.
wg_wbsstat_in-stat2 = g_line_userstat.
wg_wbsstat_in-zcon_header_stat = g_conthead_txt.
READ TABLE i_status1 INTO wg_cli_status WITH KEY objnr =
wg_wbsstat_in-objnr.
IF sy-subrc EQ 0.
wg_wbsstat_in-objnr = wg_cli_status-objnr.
wg_wbsstat_in-stat1 = wg_cli_status-zcli_sys_stat.
wg_wbsstat_in-stat2 = wg_cli_status-zcli_user_stat.
ENDIF.
APPEND wg_wbsstat_in TO i_wbsstat_in.
ENDLOOP.
IF NOT i_wbsstat_in[] IS INITIAL.
SORT i_wbsstat_in BY objnr.
DELETE ADJACENT DUPLICATES FROM i_wbsstat_in COMPARING objnr.
SELECT zcont_type
zprecontract
zcon_header_stat
zcon_sys_stat
zcon_user_stat
zwbs_sys_stat
zwbs_user_stat INTO TABLE i_ztabstat
FROM zyotcpr_wbsstat
FOR ALL ENTRIES IN i_wbsstat_in
WHERE
zcont_type = i_wbsstat_in-auart
AND zprecontract = i_wbsstat_in-zzpre_contract
AND zcon_header_stat = g_conthead_txt
AND zcon_sys_stat = i_wbsstat_in-stat1
AND zcon_user_stat = i_wbsstat_in-stat2.
SELECT zcont_type
zprecontract
zcon_header_stat
zcon_sys_stat
zcon_user_stat
zwbs_sys_stat
zwbs_user_stat INTO TABLE i_ztabstat_fnbl
FROM zyotcpr_wbsstat
FOR ALL ENTRIES IN i_wbsstat_in
WHERE zcont_type = i_wbsstat_in-auart
AND zprecontract = i_wbsstat_in-zzpre_contract
AND zcon_header_stat = g_conthead_txt
AND zcon_sys_stat IN r_fnbl
AND zcon_user_stat = i_wbsstat_in-stat2.
IF sy-subrc EQ 0.
SORT i_wbsstat_in BY objnr.
ENDIF.
ENDIF.
SORT i_prps BY posid.
* this loop is to seperate the line items assigend to only one WBS
* elemet into internal table i_prps2 and line items assigned with one
* WBS Element into an internal table i_prps3
LOOP AT i_prps INTO wg_prps." i_prps has WBS Elements of LEVEL2
CLEAR gd_set.
AT NEW posid.
gd_set = c_x.
APPEND wg_prps TO i_prps3.
ENDAT.
AT END OF posid.
IF gd_set = c_x.
APPEND wg_prps TO i_prps2.
DELETE i_prps3 WHERE posid = wg_prps-posid .
ENDIF.
ENDAT.
IF gd_set NE c_x.
APPEND wg_prps TO i_prps3.
ENDIF.
ENDLOOP.
* this is to replace the stars(*****) that somes becuase of usage of
* AT NEW and AT END commands
LOOP AT i_prps INTO wg_prps.
READ TABLE i_prps2 INTO wg_prps2
WITH KEY posid = wg_prps-posid.
* idx = sy-tabix.
IF sy-subrc = 0.
wg_prps2-objnr = wg_prps-objnr.
MODIFY i_prps2 INDEX sy-tabix FROM wg_prps2 TRANSPORTING
objnr.
IF sy-subrc = 0.
ENDIF.
ENDIF.
READ TABLE i_prps3 INTO wg_prps3 WITH KEY posid =
wg_prps-posid.
IF sy-subrc = 0.
wg_prps3-objnr = wg_prps-objnr.
MODIFY i_prps3 INDEX sy-tabix FROM wg_prps3 TRANSPORTING
objnr.
IF sy-subrc = 0.
ENDIF.
ENDIF.
ENDLOOP.
SORT : i_prps2 BY posid,
i_wbsstat_in BY objnr.
*******************Getting the statuses for WBS Elements***************
DATA: i_wbs_got_stat TYPE STANDARD TABLE OF bapi_wbs_user_status,
wg_wbs_got_stat TYPE bapi_wbs_user_status,
i_wbs_got_stat1 TYPE STANDARD TABLE OF
bapi_wbs_mnt_user_status,
i_wbs_got_stat2 TYPE STANDARD TABLE OF
bapi_wbs_mnt_user_status,
wg_wbs_got_stat1 TYPE bapi_wbs_mnt_user_status .
CALL FUNCTION 'BAPI_BUS2054_GET_STATUS'
IMPORTING
return = wg_return1
TABLES
i_wbs_elements = i_wbs_get_stat
* E_SYSTEM_STATUS =
e_user_status = i_wbs_got_stat
* E_RESULT =
.
CLEAR i_return.
DELETE i_wbs_got_stat WHERE
user_status = '0001' OR
user_status = '1004' OR
user_status = '1005' OR
user_status = '1006'.
LOOP AT i_wbs_got_stat INTO wg_wbs_got_stat. wg_wbs_got_stat1-wbs_element = wg_wbs_got_stat-wbs_element.
wg_wbs_got_stat1-undo_user_status = wg_wbs_got_stat-user_status.
APPEND wg_wbs_got_stat1 TO i_wbs_got_stat1.
ENDLOOP.
LOOP AT i_wbs_got_stat1 INTO wg_wbs_got_stat1. REFRESH: i_wbs_got_stat2[].
APPEND wg_wbs_got_stat1 TO i_wbs_got_stat2.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR i_return.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
return = wg_return1
TABLES
* I_WBS_SYSTEM_STATUS =
i_wbs_user_status = i_wbs_got_stat2
e_result = i_result
.
IF wg_return1-type EQ c_error .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR i_return.
EXIT.
ELSE.
** Precommit for PS BAPIs
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = i_return.
READ TABLE i_return INTO wg_return WITH KEY type = c_error..
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
* This method executes a COMMIT WORK command.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
CLEAR i_return.
ENDIF.
ENDLOOP.
*******************Getting the statuses for WBS Elements***************
i_prps4[] = i_prps[].
SORT i_prps4 BY posid.
* this is for processing HVLV contracts
IF g_hvlv EQ c_x.
LOOP AT i_prps4 INTO wg_prps.
READ TABLE i_wbsstat_in INTO wg_wbsstat_in WITH KEY objnr = wg_prps-objnr.
IF sy-subrc EQ 0.
IF wg_wbsstat_in-stat1 CS c_fnbl.
wg_wbs_system_status-wbs_element = wg_prps-posid.
wg_wbs_system_status-set_system_status = c_fnbl .
APPEND wg_wbs_system_status TO i_wbs_system_status.
ELSE.
CLEAR :wg_wbsstat_in.
READ TABLE i_wbsstat_in INTO wg_wbsstat_in
WITH KEY objnr = wg_prps-objnr BINARY SEARCH.
IF sy-subrc EQ 0.
CLEAR :wg_ztabstat.
READ TABLE i_ztabstat INTO wg_ztabstat
WITH KEY zcont_type = wg_wbsstat_in-auart
zprecontract = wg_wbsstat_in-zzpre_contract
zcon_header_stat = wg_wbsstat_in-zcon_header_stat
zcon_sys_stat = wg_wbsstat_in-stat1
zcon_user_stat = wg_wbsstat_in-stat2 BINARY SEARCH.
IF sy-subrc EQ 0.
IF wg_ztabstat-zcon_sys_stat = c_relnomp .
wg_wbs_system_status-wbs_element = wg_prps-posid.
wg_wbs_system_status-set_system_status = c_rel .
ENDIF.
APPEND wg_wbs_system_status TO i_wbs_system_status.
ENDIF.
ENDIF.
ENDIF.
ENDIF. ENDLOOP.
*Begin of Modification-003 -YDEK916677 - SCR1
IF NOT i_wbs_system_status IS INITIAL.
READ TABLE i_wbs_system_status INTO wg_wbs_system_status INDEX 1.
IF sy-subrc EQ 0.
wg_wbs_elements = wg_wbs_system_status-wbs_element.
APPEND wg_wbs_elements TO i_wbs_elements.
CALL FUNCTION 'BAPI_BUS2054_GET_STATUS'
IMPORTING
return = wg_return1
TABLES
i_wbs_elements = i_wbs_elements
e_system_status = i_wbs_sys_stat.
IF sy-subrc EQ 0.
CLEAR:wg_wbs_sys_stat.
READ TABLE i_wbs_sys_stat INTO wg_wbs_sys_stat INDEX 1.
ENDIF.
IF wg_wbs_system_status-set_system_status EQ c_fnbl.
IF NOT wg_wbs_sys_stat-system_status IS INITIAL.
IF wg_wbs_sys_stat-system_status NE c_fnbl.
PERFORM f_status_change_for_fnbl USING wg_wbs_system_status-wbs_element.
ENDIF.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR i_return.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
return = wg_return1
TABLES
i_wbs_system_status = i_wbs_system_status
* i_wbs_user_status = i_wbs_user_status_single
e_result = i_result.
IF wg_return1-type EQ c_error .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR i_return.
EXIT.
ELSE.
** Precommit for PS BAPIs
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = i_return.
READ TABLE i_return INTO wg_return WITH KEY type = c_error..
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
* This method executes a COMMIT WORK command.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
CLEAR i_return.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*End of Modification-003 -YDEK916677 - SCR1
ELSE. * This is for processing single item assigned to single WBS Element IF i_prps2 IS NOT INITIAL.
DELETE ADJACENT DUPLICATES FROM i_prps4 COMPARING posid.
LOOP AT i_prps4 INTO wg_prps.
READ TABLE i_prps2 INTO wg_prps2
WITH KEY posid = wg_prps-posid BINARY SEARCH.
IF sy-subrc EQ 0.
CLEAR :wg_wbsstat_in.
READ TABLE i_wbsstat_in INTO wg_wbsstat_in
WITH KEY objnr = wg_prps2-objnr BINARY SEARCH.
IF sy-subrc EQ 0. " If the i_wbsstat_in contains FNBL then FNBL case executeted IF wg_wbsstat_in-stat1 CS c_fnbl. *Begin of Modification-003 -YDEK916677 - SCR1 CLEAR :wg_ztabstat.
READ TABLE i_ztabstat_fnbl INTO wg_ztabstat
WITH KEY zcon_sys_stat = c_fnbl_sys_stat
zcon_user_stat = wg_wbsstat_in-stat2.
IF sy-subrc EQ 0.
wg_wbs_system_status-wbs_element = wg_prps2-posid.
wg_wbs_system_status-set_system_status = "'LKD'.
wg_ztabstat-zwbs_sys_stat.
wg_wbs_user_status-wbs_element = wg_prps2-posid.
wg_wbs_user_status-set_user_status = wg_ztabstat-zwbs_user_stat.
APPEND wg_wbs_user_status TO i_wbs_user_status.
APPEND wg_wbs_system_status TO i_wbs_system_status.
ENDIF.
*End of Modification-003 -YDEK916677 - SCR1
ELSE.
CLEAR :wg_ztabstat.
READ TABLE i_ztabstat INTO wg_ztabstat
WITH KEY zcon_sys_stat = wg_wbsstat_in-stat1
zcon_user_stat = wg_wbsstat_in-stat2.
IF sy-subrc EQ 0.
wg_wbs_system_status-wbs_element = wg_prps2-posid.
wg_wbs_system_status-set_system_status = "'LKD'.
wg_ztabstat-zwbs_sys_stat.
wg_wbs_user_status-wbs_element = wg_prps2-posid.
wg_wbs_user_status-set_user_status = "'0002'.
wg_ztabstat-zwbs_user_stat.
l_char = wg_ztabstat-zwbs_user_stat.
DO 10 TIMES.
SPLIT l_char AT space
INTO wg_wbs_user_status-set_user_status l_char.
APPEND wg_wbs_user_status TO i_wbs_user_status.
IF l_char IS INITIAL.
EXIT.
ENDIF.
ENDDO.
CLEAR l_char.
APPEND wg_wbs_system_status TO i_wbs_system_status.
* APPEND wg_wbs_user_status TO i_wbs_user_status.
ENDIF.
ENDIF. *********************************************************** ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
*********Processing of Case3 Single WBS assigned to Multiple CLI******************** IF i_prps3 IS NOT INITIAL.
i_prps5[] = i_prps3[].
i_prps6[] = i_prps3[].
DELETE ADJACENT DUPLICATES FROM i_prps5 COMPARING posid.
CLEAR wg_prps.
LOOP AT i_prps5 INTO wg_prps.
DELETE i_prps6 WHERE posid NE wg_prps-posid.
DESCRIBE TABLE i_prps6 LINES g_line.
DO g_line TIMES.
READ TABLE i_prps6 INTO wg_prps INDEX sy-tabix.
IF sy-subrc = 0.
READ TABLE i_wbsstat_in INTO wg_wbsstat_in
WITH KEY objnr = wg_prps-objnr.
IF sy-subrc = 0.
CLEAR : wg_wbsstat_tmp.
wg_wbsstat_tmp-objnr = wg_prps-objnr.
wg_wbsstat_tmp-stat1 = wg_wbsstat_in-stat1.
wg_wbsstat_tmp-stat2 = wg_wbsstat_in-stat2.
APPEND wg_wbsstat_tmp TO i_wbsstat_tmp.
ENDIF.
ENDIF.
ENDDO.
SORT i_wbsstat_tmp BY stat1.
DELETE ADJACENT DUPLICATES FROM i_wbsstat_tmp COMPARING stat1.
DESCRIBE TABLE i_wbsstat_tmp LINES g_line.
IF g_line EQ 1.
READ TABLE i_wbsstat_tmp INTO wg_wbsstat_tmp
WITH KEY stat1 = c_relnomp BINARY SEARCH.
IF sy-subrc EQ 0. READ TABLE i_ztabstat INTO wg_ztabstat WITH KEY
zcon_header_stat = g_conthead_txt
zcon_sys_stat = wg_wbsstat_tmp-stat1
zcon_user_stat = wg_wbsstat_tmp-stat2.
IF sy-subrc EQ 0.
wg_wbs_system_status-wbs_element = wg_prps-posid.
wg_wbs_system_status-set_system_status = c_rel.
wg_wbs_user_status-wbs_element = wg_prps-posid.
wg_wbs_user_status-set_user_status =
wg_ztabstat-zwbs_user_stat.
l_char = wg_ztabstat-zwbs_user_stat. DO 10 TIMES. SPLIT l_char AT space
INTO wg_wbs_user_status-set_user_status l_char.
APPEND wg_wbs_user_status TO i_wbs_user_status. IF l_char IS INITIAL.
EXIT.
ENDIF.
ENDDO.
APPEND wg_wbs_system_status TO i_wbs_system_status.
* put wbs stats = REL and respective user status
ENDIF.
*Begin of Modification-003 -YDEK916677 - SCR1
ELSE.
CLEAR :wg_ztabstat.
READ TABLE i_ztabstat_fnbl INTO wg_ztabstat
WITH KEY zcon_sys_stat = c_fnbl_sys_stat
zcon_user_stat = wg_wbsstat_in-stat2.
IF sy-subrc EQ 0.
wg_wbs_system_status-wbs_element = wg_prps-posid.
wg_wbs_system_status-set_system_status = c_fnbl.
wg_wbs_user_status-wbs_element = wg_prps-posid.
wg_wbs_user_status-set_user_status = wg_ztabstat-zwbs_user_stat.
APPEND wg_wbs_system_status TO i_wbs_system_status.
APPEND wg_wbs_user_status TO i_wbs_user_status.
ENDIF.
ENDIF.
*End of Modification-003 -YDEK916677 - SCR1
ENDIF.
* ENDIF.
i_prps6[] = i_prps3[].
ENDLOOP.
ENDIF.
IF NOT i_wbs_system_status IS INITIAL. *-------Part3 of the Enhancement for Updating status update*********
*
*** You can use BAPI_BUS2054_SET_STATUS in a list of WBS elements
*** to revoke a system status and a user status respectively,
*** as well as to set a system status and a user status respectively.
*
* PERFORM f_update_wbs_status ON COMMIT.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR i_return.
*Begin of Modification-003 -YDEK916677 - SCR1
DATA: flg_not_fnbl TYPE char1.
CLEAR: wg_wbs_elements,
flg_not_fnbl.
REFRESH: i_wbs_elements,
i_wbs_sys_stat.
*End of Modification-003 -YDEK916677 - SCR1
LOOP AT i_wbs_user_status INTO wg_wbs_user_status. *Begin of Modification-003 -YDEK916677 - SCR1 READ TABLE i_wbs_system_status INTO wg_wbs_system_status
WITH KEY wbs_element = wg_wbs_user_status-wbs_element.
IF sy-subrc = 0.
CLEAR: i_wbs_system_status_single.
APPEND wg_wbs_system_status TO i_wbs_system_status_single.
wg_wbs_elements = wg_wbs_user_status-wbs_element.
APPEND wg_wbs_elements TO i_wbs_elements.
CALL FUNCTION 'BAPI_BUS2054_GET_STATUS'
IMPORTING
return = wg_return1
TABLES
i_wbs_elements = i_wbs_elements
e_system_status = i_wbs_sys_stat.
IF sy-subrc = 0.
READ TABLE i_wbs_sys_stat INTO wg_wbs_sys_stat INDEX 1.
IF sy-subrc EQ 0.
IF wg_wbs_sys_stat-system_status NE c_fnbl.
flg_not_fnbl = c_x.
ENDIF.
ENDIF.
ENDIF.
IF wg_wbs_system_status-set_system_status EQ c_fnbl.
IF flg_not_fnbl EQ c_x.
PERFORM f_status_change_for_fnbl USING wg_wbs_system_status-wbs_element.
REFRESH: i_wbs_user_status_single[].
APPEND wg_wbs_user_status TO i_wbs_user_status_single.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR i_return.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
return = wg_return1
TABLES
* i_wbs_system_status = i_wbs_system_status
i_wbs_user_status = i_wbs_user_status_single
e_result = i_result.
"i_wbs_user_status
IF wg_return1-type EQ c_error .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR i_return.
EXIT.
ELSE.
** Precommit for PS BAPIs
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = i_return.
READ TABLE i_return INTO wg_return WITH KEY type = c_error..
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
* This method executes a COMMIT WORK command.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
CLEAR i_return.
ENDIF.
ENDIF.
ELSE.
REFRESH: i_wbs_user_status_single[].
APPEND wg_wbs_user_status TO i_wbs_user_status_single.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR i_return.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
return = wg_return1
TABLES
i_wbs_system_status = i_wbs_system_status_single
i_wbs_user_status = i_wbs_user_status_single
e_result = i_result.
"i_wbs_user_status
IF wg_return1-type EQ c_error .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR i_return.
EXIT.
ELSE.
** Precommit for PS BAPIs
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = i_return.
READ TABLE i_return INTO wg_return WITH KEY type = c_error..
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
* This method executes a COMMIT WORK command.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
CLEAR i_return.
ENDIF.
ENDIF.
ENDIF.
* REFRESH: i_wbs_user_status_single[]. * APPEND wg_wbs_user_status TO i_wbs_user_status_single. * * CALL FUNCTION 'BAPI_PS_INITIALIZATION'. * CLEAR i_return. * * CALL FUNCTION 'BAPI_BUS2054_SET_STATUS' * IMPORTING * return = wg_return1 * TABLES * i_wbs_system_status = i_wbs_system_status * i_wbs_user_status = i_wbs_user_status_single * e_result = i_result. * "i_wbs_user_status * * IF wg_return1-type EQ c_error . * CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. * CLEAR i_return. * EXIT. * ELSE. *** Precommit for PS BAPIs * CALL FUNCTION 'BAPI_PS_PRECOMMIT' * TABLES * et_return = i_return. * READ TABLE i_return INTO wg_return WITH KEY type = c_error.. * IF sy-subrc EQ 0. * CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. * ENDIF. ** This method executes a COMMIT WORK command. * CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' * EXPORTING * wait = c_x. * CLEAR i_return. * ENDIF. *End of Modification-003 -YDEK916677 - SCR1 ENDLOOP.
ENDIF.
ENDIF. ENDIF. ENDFUNCTION. |
|
|
Please send us your feedback/suggestions at webmaster@SAPFunctional.COM Home • Contribute • About Us • Privacy • Terms Of Use • Disclaimer • Safe • Companies: Advertise on SAPFunctional.COM | Post Job • Contact Us ©2006-2007 SAPFunctional.COM. All rights reserved. All
product names are trademarks of their respective companies. SAPFunctional.COM,
Inc. is in no way affiliated with SAP AG. Graphic Design by Round the Bend Wizards |
||