Get error while update the PA_TRANSACTION_INTERFACE_ALL table

本文介绍了一种解决在更新PA_TRANSACTION_INTERFACE_ALL表时出现ORA-28115策略检查选项违规错误的方法。通过在更新SQL之前运行特定的脚本来设置策略上下文,可以避免触发此错误。

As some data error, i am going to update the Project Number filed on PA_TRANSACTION_INTERFACE_ALL Table. But once i applied the SQL, there will appear the error message:

MSG-20003: ORA-20003: import1_prog:
ORA-
28115: policy with check option violation
ORA-
06512at "APPS.PA_TRANSACTION_INTERFACE_T3", line 99
ORA-
04088: error during execution of trigger 'APPS.PA_TRANSACTION_INTERFACE_T3'
ORA-
06512at "APPS.PA_TRX_IMPORT", line 9368

Metalink refer docs:

--Transaction Import Error MSG-20003: ORA-20003: import1_prog:ORA-28115: policy with check option violation (Doc ID 1618365.1)

--PA_TRANSACTION_INTERFACE_ALL - How to Resolve ORA-28115:Policy with check violation (Doc ID 1492752.1)

Solution is adding one script before run the update SQL:

/*alter session set current_schema = apps;
begin
mo_global.set_policy_context('S',3138);
end;*/

After execute above SQL, then re-run the update SQL,there will no error and data modified successfully.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22816976/viewspace-2121418/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22816976/viewspace-2121418/

根据BAPI_ALM_ORDER_MAINTAIN源代码分析原因: FUNCTION bapi_alm_order_maintain. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" VALUE(IV_MMSRV_EXTERNAL_MAINTENACE) TYPE BAPI_FLAG OPTIONAL *" TABLES *" IT_METHODS STRUCTURE BAPI_ALM_ORDER_METHOD *" IT_HEADER STRUCTURE BAPI_ALM_ORDER_HEADERS_I OPTIONAL *" IT_HEADER_UP STRUCTURE BAPI_ALM_ORDER_HEADERS_UP OPTIONAL *" IT_HEADER_SRV STRUCTURE BAPI_ALM_ORDER_SRVDAT_E OPTIONAL *" IT_HEADER_SRV_UP STRUCTURE BAPI_ALM_ORDER_SRVDAT_UP OPTIONAL *" IT_USERSTATUS STRUCTURE BAPI_ALM_ORDER_USRSTAT OPTIONAL *" IT_PARTNER STRUCTURE BAPI_ALM_ORDER_PARTN_MUL OPTIONAL *" IT_PARTNER_UP STRUCTURE BAPI_ALM_ORDER_PARTN_MUL_UP OPTIONAL *" IT_OPERATION STRUCTURE BAPI_ALM_ORDER_OPERATION OPTIONAL *" IT_OPERATION_UP STRUCTURE BAPI_ALM_ORDER_OPERATION_UP OPTIONAL *" IT_RELATION STRUCTURE BAPI_ALM_ORDER_RELATION OPTIONAL *" IT_RELATION_UP STRUCTURE BAPI_ALM_ORDER_RELATION_UP OPTIONAL *" IT_COMPONENT STRUCTURE BAPI_ALM_ORDER_COMPONENT OPTIONAL *" IT_COMPONENT_UP STRUCTURE BAPI_ALM_ORDER_COMPONENT_UP OPTIONAL *" IT_OBJECTLIST STRUCTURE BAPI_ALM_ORDER_OBJECTLIST OPTIONAL *" IT_OBJECTLIST_UP STRUCTURE BAPI_ALM_ORDER_OLIST_UP OPTIONAL *" IT_OLIST_RELATION STRUCTURE BAPI_ALM_OLIST_RELATION OPTIONAL *" IT_TEXT STRUCTURE BAPI_ALM_TEXT OPTIONAL *" IT_TEXT_LINES STRUCTURE BAPI_ALM_TEXT_LINES OPTIONAL *" IT_SRULE STRUCTURE BAPI_ALM_ORDER_SRULE OPTIONAL *" IT_SRULE_UP STRUCTURE BAPI_ALM_ORDER_SRULE_UP OPTIONAL *" IT_TASKLISTS STRUCTURE BAPI_ALM_ORDER_TASKLISTS_I OPTIONAL *" EXTENSION_IN STRUCTURE BAPIPAREX OPTIONAL *" RETURN STRUCTURE BAPIRET2 OPTIONAL *" ET_NUMBERS STRUCTURE BAPI_ALM_NUMBERS OPTIONAL *" IT_REFORDER_ITEM STRUCTURE BAPI_REFORDER_ITEM_I OPTIONAL *" IT_REFORDER_ITEM_UP STRUCTURE BAPI_REFORDER_ITEM_UP OPTIONAL *" IT_REFORDER_SERNO_OLIST_INS STRUCTURE *" BAPI_REFORDER_SERNO_OLIST_I OPTIONAL *" IT_REFORDER_SERNO_OLIST_DEL STRUCTURE *" BAPI_REFORDER_SERNO_OLIST_I OPTIONAL *" IT_PRT STRUCTURE BAPI_ALM_ORDER_PRT_I OPTIONAL *" IT_PRT_UP STRUCTURE BAPI_ALM_ORDER_PRT_UP OPTIONAL *" IT_REFORDER_OPERATION STRUCTURE BAPI_REFORDER_OPERATION *" OPTIONAL *" IT_SERVICEOUTLINE STRUCTURE BAPI_ALM_SRV_OUTLINE OPTIONAL *" IT_SERVICEOUTLINE_UP STRUCTURE BAPI_ALM_SRV_OUTLINE_UP *" OPTIONAL *" IT_SERVICELINES STRUCTURE BAPI_ALM_SRV_SERVICE_LINE OPTIONAL *" IT_SERVICELINES_UP STRUCTURE BAPI_ALM_SRV_SERVICE_LINE_UP *" OPTIONAL *" IT_SERVICELIMIT STRUCTURE BAPI_ALM_SRV_LIMIT_DATA OPTIONAL *" IT_SERVICELIMIT_UP STRUCTURE BAPI_ALM_SRV_LIMIT_DATA_UP *" OPTIONAL *" IT_SERVICECONTRACTLIMITS STRUCTURE *" BAPI_ALM_SRV_CONTRACT_LIMITS OPTIONAL *" IT_SERVICECONTRACTLIMITS_UP STRUCTURE *" BAPI_ALM_SRV_CONTRACT_LIMITS_U OPTIONAL *" ET_NOTIFICATION_NUMBERS STRUCTURE BAPI_ALM_NOTIF_NUMBERS *" OPTIONAL *" IT_PERMIT STRUCTURE BAPI_ALM_ORDER_PERMIT OPTIONAL *" IT_PERMIT_UP STRUCTURE BAPI_ALM_ORDER_PERMIT_UP OPTIONAL *" IT_PERMIT_ISSUE STRUCTURE BAPI_ALM_ORDER_PERMITISSUE OPTIONAL *" IT_ESTIMATED_COSTS STRUCTURE BAPI_ALM_ORDER_COSTS_EST_I *" OPTIONAL *" IT_HEADER_JVA STRUCTURE BAPI_ALM_ORDER_JVA OPTIONAL *" IT_HEADER_JVA_UP STRUCTURE BAPI_ALM_ORDER_JVA_UP OPTIONAL *" IT_ADDITIONAL_TEXT STRUCTURE BAPI_ALM_CC4_ADDITIONAL_TEXT *" OPTIONAL *"---------------------------------------------------------------------- ENHANCEMENT-POINT bapi_alm_order_maintain_g8 SPOTS es_saplibapi_alm_order STATIC. ENHANCEMENT-POINT bapi_alm_order_maintain_g6 SPOTS es_saplibapi_alm_order. * BAPI Funktionsbaustein zum Bearbeiten von ALM Aufträgen (PM/CS) * Die gewünschten Funktionen müssen über eine Methodentabelle * übergeben werden. Darin stehen die auszuführenden Methoden. * Die dazugehörigen Daten sind in den einzelnen Datentabellen * zuzuordnen. * Weitere Informationen befinden sich im BAPI Explorer unter * Instandhaltungsabwicklung bzw. Serviceabwicklung * Datendefinitionen *************************************** DATA lt_methods TYPE bapi_alm_order_method_t. * Zu bearbeitende Aufträge, die gelesen werden müssen DATA lt_orders TYPE almb_ord_pre_tab. * Methodenreihenfolge DATA lt_method_level TYPE almb_proc_level_tab. * Interne Datentabellen *********************************** * Auftragsköpfe DATA lt_caufvd TYPE almb_caufvd_tab_int. DATA lt_caufvd_up TYPE almb_caufvd_up_tab_int. * Servicedaten Auftragsköpfe DATA lt_pmsdo TYPE almb_caufvd_srv_tab_int. DATA lt_pmsdo_up TYPE almb_caufvd_srv_up_tab_int. * Auftragsköpfe (extern) DATA lt_bapihead TYPE almb_caufvd_tab. DATA ls_bapihead TYPE LINE OF almb_caufvd_tab. DATA lt_bapihead_up TYPE almb_caufvd_up_tab. DATA ls_bapihead_up TYPE LINE OF almb_caufvd_up_tab. DATA lt_bapihead_old TYPE almb_caufvd_tab. DATA lt_bapihead_old_up TYPE almb_caufvd_up_tab. * Servicedaten Auftragsköpfe (extern) DATA lt_bapisrvcdata TYPE almb_caufvd_srv_tab. DATA ls_bapisrvcdata TYPE LINE OF almb_caufvd_srv_tab. DATA lt_bapisrvcdata_up TYPE almb_caufvd_srv_up_tab. DATA ls_bapisrvcdata_up TYPE LINE OF almb_caufvd_srv_up_tab. DATA lt_bapisrvcdata_old TYPE almb_caufvd_srv_tab. DATA lt_bapisrvcdata_old_up TYPE almb_caufvd_srv_up_tab. * Auftragskopfdaten nach BADI für Abwärtskompatibilität DATA ls_header TYPE bapi_alm_order_headers_i. DATA ls_header_up TYPE bapi_alm_order_headers_up. DATA ls_header_srv TYPE bapi_alm_order_srvdat_e. DATA ls_header_srv_up TYPE bapi_alm_order_srvdat_up. DATA lt_header TYPE TABLE OF bapi_alm_order_headers_i. DATA lt_header_up TYPE TABLE OF bapi_alm_order_headers_up. DATA lt_header_srv TYPE TABLE OF bapi_alm_order_srvdat_e. DATA lt_header_srv_up TYPE TABLE OF bapi_alm_order_srvdat_up. * Userstatus DATA lt_userstatus TYPE almb_userstatus. * Partner DATA lt_partner TYPE almb_partner_tab. DATA lt_partner_up TYPE almb_partner_up_tab. * Vorgänge DATA lt_afvgd TYPE almb_afvgd_tab. DATA lt_afvgd_up TYPE almb_afvgd_up_tab. * Anordnungsbeziehungen DATA lt_afabd TYPE almb_afabd_tab. DATA lt_afabd_up TYPE almb_afabd_up_tab. * Komponenten DATA lt_resbd TYPE almb_resbd_tab. DATA lt_resbd_up TYPE almb_resbd_up_tab. * Objektliste DATA lt_riwol TYPE almb_riwol_tab. DATA lt_riwol_up TYPE almb_riwol_up_tab. * Objectlist: Relation Operation to Objectlist DATA lt_olist_relation TYPE almb_olist_relation_tab. * Task lists DATA lt_tasklists TYPE ibapi_order_tasklists_i_t. * Settlement rules DATA lt_cobl TYPE almb_cobl_tab. DATA lt_cobl_up TYPE almb_cobl_up_tab. * Langtexte DATA lt_text TYPE almb_text_tab. DATA lt_text_add TYPE almb_cc4_add_text_tab. "note 2756658 DATA lt_text_lines TYPE tlinetab. * Rückgabe der Nachrichten DATA lt_messages TYPE bal_t_msg. DATA ls_messages TYPE bal_s_msg. DATA ls_return LIKE LINE OF return[]. DATA lv_error TYPE sy-subrc. *Refurbishment order DATA lt_afpod TYPE ibapi_afpod_tt. DATA lt_afpod_resbd TYPE ibapi_reforder_comp_tt. DATA lt_serno_olist_ins TYPE reford_serno_olist_t. DATA lt_serno_olist_del TYPE reford_serno_olist_t. DATA lt_afpod_up TYPE ibapi_afpod_update_tt. DATA lt_afpod_resbd_up TYPE ibapi_reforder_comp_update_tt. DATA lt_reford_afvgd TYPE almb_afvgd_tab. *PRTs DATA lt_prt TYPE bapi_alm_order_prt_i_t. DATA lt_prt_up TYPE bapi_alm_order_prt_up_t. *Service packages DATA lt_serviceoutline TYPE bapi_alm_srv_outline_t. DATA lt_serviceoutline_up TYPE bapi_alm_srv_outline_up_t. DATA lt_servicelines TYPE bapi_alm_srv_service_line_t. DATA lt_servicelines_up TYPE bapi_alm_srv_service_line_up_t. DATA lt_servicelimit TYPE bapi_alm_srv_limit_data_t. DATA lt_servicelimit_up TYPE bapi_alm_srv_limit_data_up_t. DATA lt_servicecontractlimits TYPE bapi_alm_srv_contract_limit_t. DATA lt_servicecontractlimits_up TYPE bapi_alm_srv_contr_limits_u_t. * Note 1989741 - begin DATA: ls_extension_up TYPE almb_extension_up. DATA: lt_extension_up TYPE almb_extension_up_tab. * Note 1989741 - end *Permits DATA lt_permit TYPE eam_t_permit_order. DATA lt_permit_up TYPE eam_t_permit_order_up. DATA lt_permit_issue TYPE eam_t_permit_issue. * Estimated costs DATA: lt_est_cost TYPE bapi_alm_order_costs_est_i_tt. " 1672966 EAMCC PM110 * Settlement profiles DATA: lt_settlmt_profile TYPE almb_settlmt_profile_tab. * >>>>> Begin note 2304265: DFPS specific variables data lv_method_del type abap_bool. * <<<<< End note 2304265 * DATA lt_serno_olist_up TYPE REFORD_SERNO_OLIST_UPDATE_TT. FIELD-SYMBOLS <fs_olist_relation> LIKE LINE OF lt_olist_relation. FIELD-SYMBOLS <fs_methods> LIKE LINE OF lt_methods. "1837200 cl_eam_usage=>insert('BAPI_ALM_ORDER_MAINTAIN'). * BADIs * Vorwärtsdeklaration für exit handler BAdI CLASS cl_exithandler DEFINITION LOAD. * Interfacereferenz für BAdI STATICS sr_modify_input_data TYPE REF TO if_ex_ibapi_alm_ord_modify. STATICS sv_badiactive. * Konstante für BAdI-Referenzierung CONSTANTS lc_badiname TYPE exit_def VALUE 'IBAPI_ALM_ORD_MODIFY'. * start FLE MATNR BAPI Changes DATA: ls_fnames TYPE cl_matnr_chk_mapper=>ts_matnr_bapi_fnames, lt_fnames_hdr TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_hdr_srv TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_comp TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_obj_list TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_oper TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_prt TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_ref_ord_itm TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname, lt_fnames_ref_ord_opr TYPE cl_matnr_chk_mapper=>tt_matnr_bapi_fname. DATA: lt_matnr_data_to_x_key_fnames TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_matnr_dta_2_xkey_fnames_hdr TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_mtnr_dta2xkey_fnames_hdrsrv TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_matnr_dta_2_xkey_fnames_opr TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_matnr_dta_2_xkey_fnames_cmp TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: lt_mtnr_dta2xkey_fnames_rfoitm TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_key_fnames. DATA: ls_matnr_data_to_x_key_fnames LIKE LINE OF lt_matnr_data_to_x_key_fnames. DATA: ls_matnr_data_to_x_line_ass TYPE cl_matnr_chk_mapper=>ts_matnr_data_to_x_line_ass. DATA: lt_matnr_data_to_x_line_ass TYPE cl_matnr_chk_mapper=>tt_matnr_data_to_x_line_ass. DATA: lv_linecount_data TYPE i. DATA: lv_linecount_data_up TYPE i. * MATERIAL CLEAR ls_fnames. ls_fnames-int = 'MATERIAL'. ls_fnames-ext = 'MATERIAL_EXTERNAL'. ls_fnames-vers = 'MATERIAL_VERSION'. ls_fnames-guid = 'MATERIAL_GUID'. ls_fnames-long = 'MATERIAL_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_prt. ls_fnames-int_x = 'MATERIAL'. ls_fnames-ext_x = 'MATERIAL'. "no update flag existing, flag of internal field is used ls_fnames-vers_x = 'MATERIAL'. "no update flag existing, flag of internal field is used * ls_fnames-guid_x = 'MATERIAL_GUID'. ls_fnames-long_x = 'MATERIAL_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_hdr. INSERT ls_fnames INTO TABLE lt_fnames_hdr_srv. INSERT ls_fnames INTO TABLE lt_fnames_comp. * ASSEMBLY CLEAR ls_fnames. ls_fnames-int = 'ASSEMBLY'. ls_fnames-ext = 'ASSEMBLY_EXTERNAL'. ls_fnames-vers = 'ASSEMBLY_VERSION'. ls_fnames-guid = 'ASSEMBLY_GUID'. ls_fnames-long = 'ASSEMBLY_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_ref_ord_opr. INSERT ls_fnames INTO TABLE lt_fnames_obj_list. ls_fnames-int_x = 'ASSEMBLY'. ls_fnames-ext_x = 'ASSEMBLY'. "no update flag existing, flag of internal field is used ls_fnames-vers_x = 'ASSEMBLY'. "no update flag existing, flag of internal field is used * ls_fnames-guid_x = 'ASSEMBLY_GUID'. ls_fnames-long_x = 'ASSEMBLY_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_hdr. INSERT ls_fnames INTO TABLE lt_fnames_oper. * SERMAT CLEAR ls_fnames. ls_fnames-int = 'SERMAT'. ls_fnames-ext = 'SERMAT_EXTERNAL'. ls_fnames-vers = 'SERMAT_VERSION'. ls_fnames-guid = 'SERMAT_GUID'. ls_fnames-long = 'SERMAT_LONG'. * ls_fnames-int_x = 'SERMAT'. * ls_fnames-ext_x = 'SERMAT_EXTERNAL'. * ls_fnames-vers_x = 'SERMAT_VERSION'. * ls_fnames-guid_x = 'SERMAT_GUID'. * ls_fnames-long_x = 'SERMAT_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_obj_list. * MATERIAL_TO CLEAR ls_fnames. ls_fnames-int = 'MATERIAL_TO'. ls_fnames-ext = 'MATERIAL_TO_EXTERNAL'. ls_fnames-vers = 'MATERIAL_TO_VERSION'. ls_fnames-guid = 'MATERIAL_TO_GUID'. ls_fnames-long = 'MATERIAL_TO_LONG'. ls_fnames-int_x = 'MATERIAL_TO'. ls_fnames-ext_x = 'MATERIAL_TO'. "no update flag existing, flag of internal field is used ls_fnames-vers_x = 'MATERIAL_TO'. "no update flag existing, flag of internal field is used * ls_fnames-guid_x = 'MATERIAL_TO_GUID'. ls_fnames-long_x = 'MATERIAL_TO_LONG'. INSERT ls_fnames INTO TABLE lt_fnames_ref_ord_itm. * IT_HEADER CLEAR ls_matnr_data_to_x_key_fnames. ls_matnr_data_to_x_key_fnames-data_key_field = 'ORDERID'. ls_matnr_data_to_x_key_fnames-x_key_field = 'ORDERID'. APPEND ls_matnr_data_to_x_key_fnames TO lt_matnr_dta_2_xkey_fnames_hdr. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_names( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_hdr it_matnr_data_to_x_key_fnames = lt_matnr_dta_2_xkey_fnames_hdr CHANGING ct_matnr = it_header[] ct_matnrx = it_header_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_HEADER_SRV - No key fields DESCRIBE TABLE it_header_srv[] LINES lv_linecount_data. DESCRIBE TABLE it_header_srv_up[] LINES lv_linecount_data_up. CLEAR lt_matnr_data_to_x_line_ass[]. IF lv_linecount_data = lv_linecount_data_up. lv_linecount_data = 0. WHILE lv_linecount_data LT lv_linecount_data_up. ADD 1 TO lv_linecount_data. ls_matnr_data_to_x_line_ass-ass_x_line_idx = lv_linecount_data. ls_matnr_data_to_x_line_ass-data_line_idx = lv_linecount_data. APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. ENDWHILE. ENDIF. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_idx( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_hdr_srv it_matnr_data_to_x_line_ass = lt_matnr_data_to_x_line_ass CHANGING ct_matnr = it_header_srv[] ct_matnrx = it_header_srv_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_OPERATION - No key fields * DESCRIBE TABLE it_operation[] LINES lv_linecount_data. * DESCRIBE TABLE it_operation_up[] LINES lv_linecount_data_up. * CLEAR lt_matnr_data_to_x_line_ass[]. * IF lv_linecount_data = lv_linecount_data_up. * lv_linecount_data = 0. * WHILE lv_linecount_data LT lv_linecount_data_up. * ADD 1 TO lv_linecount_data. * ls_matnr_data_to_x_line_ass-ass_x_line_idx = lv_linecount_data. * ls_matnr_data_to_x_line_ass-data_line_idx = lv_linecount_data. * APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. * ENDWHILE. * ENDIF. CLEAR lt_matnr_data_to_x_line_ass[]. LOOP AT it_operation_up. READ TABLE it_operation INDEX sy-tabix TRANSPORTING NO FIELDS. IF sy-subrc IS INITIAL. ls_matnr_data_to_x_line_ass-ass_x_line_idx = sy-tabix. ls_matnr_data_to_x_line_ass-data_line_idx = sy-tabix. APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. ENDIF. ENDLOOP. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_idx( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_oper it_matnr_data_to_x_line_ass = lt_matnr_data_to_x_line_ass CHANGING ct_matnr = it_operation[] ct_matnrx = it_operation_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_COMPONENT - No key fields * DESCRIBE TABLE it_component[] LINES lv_linecount_data. * DESCRIBE TABLE it_component_up[] LINES lv_linecount_data_up. * CLEAR lt_matnr_data_to_x_line_ass[]. * IF lv_linecount_data = lv_linecount_data_up. * lv_linecount_data = 0. * WHILE lv_linecount_data LT lv_linecount_data_up. * ADD 1 TO lv_linecount_data. * ls_matnr_data_to_x_line_ass-ass_x_line_idx = lv_linecount_data. * ls_matnr_data_to_x_line_ass-data_line_idx = lv_linecount_data. * APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. * ENDWHILE. * ENDIF. CLEAR lt_matnr_data_to_x_line_ass[]. LOOP AT it_component_up. READ TABLE it_component INDEX sy-tabix TRANSPORTING NO FIELDS. IF sy-subrc IS INITIAL. ls_matnr_data_to_x_line_ass-ass_x_line_idx = sy-tabix. ls_matnr_data_to_x_line_ass-data_line_idx = sy-tabix. APPEND ls_matnr_data_to_x_line_ass TO lt_matnr_data_to_x_line_ass. ENDIF. ENDLOOP. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_idx( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_comp it_matnr_data_to_x_line_ass = lt_matnr_data_to_x_line_ass CHANGING ct_matnr = it_component[] ct_matnrx = it_component_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_REFORDER_ITEM CLEAR ls_matnr_data_to_x_key_fnames. ls_matnr_data_to_x_key_fnames-data_key_field = 'ORDERID'. ls_matnr_data_to_x_key_fnames-x_key_field = 'ORDERID'. APPEND ls_matnr_data_to_x_key_fnames TO lt_mtnr_dta2xkey_fnames_rfoitm. cl_matnr_chk_mapper=>bapi_tables_conv_tab_x_names( EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_ref_ord_itm it_matnr_data_to_x_key_fnames = lt_mtnr_dta2xkey_fnames_rfoitm CHANGING ct_matnr = it_reforder_item[] ct_matnrx = it_reforder_item_up[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3 ). IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_OBJECTLIST * No UP-structure with material field CALL METHOD cl_matnr_chk_mapper=>bapi_tables_conv_tab EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_obj_list CHANGING ct_matnr = it_objectlist[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3. IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_PRT * No UP-structure with material field CALL METHOD cl_matnr_chk_mapper=>bapi_tables_conv_tab EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_prt CHANGING ct_matnr = it_prt[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3. IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * IT_REFORDER_OPERATION * No UP-structure CALL METHOD cl_matnr_chk_mapper=>bapi_tables_conv_tab EXPORTING iv_int_to_external = abap_false it_fnames = lt_fnames_ref_ord_opr CHANGING ct_matnr = it_reforder_operation[] EXCEPTIONS excp_matnr_ne = 1 excp_matnr_invalid_input = 2 OTHERS = 3. IF sy-subrc NE 0. CALL METHOD cl_matnr_chk_mapper=>bapi_get_last_error IMPORTING ev_return = ls_return. APPEND ls_return TO return. IF ls_return-type NA 'SIW'. RETURN. ENDIF. ENDIF. * end FLE MATNR BAPI Changes * Initialisierungen *************************************** * setzen BAPI-Flag z.B. für Prüfloserzeugung MOVE 'X' TO gv_bapi_flg. "note 1302002 * Memory refresh CALL FUNCTION 'IBAPI_PROC_INIT_REQUEST'. * Badi initialisieren IF sv_badiactive IS INITIAL. CALL METHOD cl_exithandler=>get_instance EXPORTING exit_name = lc_badiname null_instance_accepted = 'X' CHANGING instance = sr_modify_input_data. sv_badiactive = 'X'. ENDIF. * Retrunparemetertabellen löschen CLEAR return[]. CLEAR et_numbers[]. * globales Bapiflag setzen CALL FUNCTION 'IBAPI_Z_SET_BAPI_FLAG' EXPORTING iv_flag = 'X'. CALL FUNCTION 'DIALOG_GET_STATUS' "Note 1441350 IMPORTING "Note 1441350 dialog_status = gv_dialog. "Note 1441350 CALL FUNCTION 'DIALOG_SET_NO_DIALOG'. "Note 1441350 * Aktionsbuffer für Auftragskopfdaten CALL FUNCTION 'IBAPI_ALM_ORDER_INIT_ACTIONS'. * Application Log initialisieren PERFORM alm_order_msg_log_init. * Tabelle mit Methoden kopieren MOVE it_methods[] TO lt_methods. * start of note 1837200 * usage of method DIALOG together with MMSRV is not supported READ TABLE lt_methods TRANSPORTING NO FIELDS WITH KEY method = 'DIALOG'. IF sy-subrc = 0. LOOP AT lt_methods ASSIGNING <fs_methods> WHERE objecttype CS 'SERVICE'. MESSAGE e137(iwo_bapi2) WITH <fs_methods>-objecttype INTO mess. bapi_message. MESSAGE e113(iwo_bapi2) INTO mess. bapi_message. PERFORM end_bapi CHANGING return[]. PERFORM reset_created_headers USING et_numbers[] lt_method_level. RETURN. ENDLOOP. ENDIF. * end of note 1837200 * Schnittstellendaten in interne Strukturen umwandeln ***** CALL FUNCTION 'IBAPI_PROC_INTERFACE_E2I' EXPORTING it_header = it_header[] it_header_up = it_header_up[] it_header_srv = it_header_srv[] it_header_srv_up = it_header_srv_up[] it_userstatus = it_userstatus[] it_partner = it_partner[] it_partner_up = it_partner_up[] it_operation = it_operation[] it_operation_up = it_operation_up[] it_relation = it_relation[] it_relation_up = it_relation_up[] it_component = it_component[] it_component_up = it_component_up[] it_objectlist = it_objectlist[] it_objectlist_up = it_objectlist_up[] it_olist_relation = it_olist_relation[] it_srule = it_srule[] it_srule_up = it_srule_up[] it_text = it_text[] it_text_lines = it_text_lines[] it_tasklists = it_tasklists[] it_reforder_item = it_reforder_item[] it_reforder_item_up = it_reforder_item_up[] it_reforder_operation = it_reforder_operation[] it_reforder_serno_olist_ins = it_reforder_serno_olist_ins[] it_reforder_serno_olist_del = it_reforder_serno_olist_del[] it_serviceoutline = it_serviceoutline[] it_servicelines = it_servicelines[] it_servicelimit = it_servicelimit[] it_servicecontractlimits = it_servicecontractlimits[] it_serviceoutline_up = it_serviceoutline_up[] it_servicelines_up = it_servicelines_up[] it_servicelimit_up = it_servicelimit_up[] it_servicecontractlimits_up = it_servicecontractlimits_up[] it_permit = it_permit[] it_permit_up = it_permit_up[] it_permit_issue = it_permit_issue[] it_estimated_costs = it_estimated_costs[] " 1672966 EAMCC PM110 it_header_jva = it_header_jva[] it_header_jva_up = it_header_jva_up[] it_text_add = it_additional_text[] "note 2756658 IMPORTING et_caufvd = lt_caufvd et_caufvd_up = lt_caufvd_up et_caufvd_srv = lt_pmsdo et_caufvd_srv_up = lt_pmsdo_up et_userstatus = lt_userstatus et_partner = lt_partner et_partner_up = lt_partner_up et_afvgd = lt_afvgd et_afvgd_up = lt_afvgd_up et_afabd = lt_afabd et_afabd_up = lt_afabd_up et_resbd = lt_resbd et_resbd_up = lt_resbd_up et_riwol = lt_riwol et_riwol_up = lt_riwol_up et_olist_relation = lt_olist_relation et_cobl = lt_cobl et_cobl_up = lt_cobl_up et_thead = lt_text et_tlines = lt_text_lines et_tasklists = lt_tasklists et_afpod = lt_afpod et_afpod_up = lt_afpod_up et_afpod_resbd = lt_afpod_resbd et_afpod_resbd_up = lt_afpod_resbd_up et_reford_afvgd = lt_reford_afvgd et_serno_olist_ins = lt_serno_olist_ins et_serno_olist_del = lt_serno_olist_del et_serviceoutline = lt_serviceoutline et_servicelines = lt_servicelines et_servicelimit = lt_servicelimit et_servicecontractlimits = lt_servicecontractlimits et_serviceoutline_up = lt_serviceoutline_up et_servicelines_up = lt_servicelines_up et_servicelimit_up = lt_servicelimit_up et_servicecontractlimits_up = lt_servicecontractlimits_up et_permit = lt_permit et_permit_up = lt_permit_up et_permit_issue = lt_permit_issue et_estimated_costs = lt_est_cost " 1672966 EAMCC PM110 et_thead_add = lt_text_add "note 2756658 et_settlement_profile = lt_settlmt_profile EXCEPTIONS conversion_error = 1 textline_error = 2 OTHERS = 3. IF sy-subrc NE 0. PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. *--- fill PRT data in int. tables (mapping is performed later) lt_prt = it_prt[]. lt_prt_up = it_prt_up[]. * BADI zum prüfen und ändern der Eingabedaten ************* * aufrufen. Zu diesem Zeitpunkt sind die meisten ********** * Daten im internen Format verfügbar ********************** IF NOT sr_modify_input_data IS INITIAL. * Abwärtskompatibilität: In frühen Versionen wurden nur die externen * Repräsentationen der Auftragskopfdaten angeboten. Dabei können nur * bestimmte Teile der Auftragsköpfe geändert werden. Falls aber Kunden * bereits eine entsprechende BAdI-Implementation erstellt haben, wird * Nacharbeit notwendig, um die alte Logik nach wie vor zu * unterstützen LOOP AT it_header. MOVE-CORRESPONDING it_header TO ls_bapihead. APPEND ls_bapihead TO lt_bapihead. ENDLOOP. LOOP AT it_header_up. MOVE-CORRESPONDING it_header_up TO ls_bapihead_up. APPEND ls_bapihead_up TO lt_bapihead_up. ENDLOOP. LOOP AT it_header_srv. MOVE-CORRESPONDING it_header_srv TO ls_bapisrvcdata. MOVE it_header_srv-material_long TO ls_bapisrvcdata-material. "MFLE APPEND ls_bapisrvcdata TO lt_bapisrvcdata. ENDLOOP. LOOP AT it_header_srv_up. MOVE-CORRESPONDING it_header_srv_up TO ls_bapisrvcdata_up. MOVE it_header_srv_up-material_long TO ls_bapisrvcdata_up-material. "MFLE APPEND ls_bapisrvcdata_up TO lt_bapisrvcdata_up. ENDLOOP. * Before-Image für externe Datenrepräsentation sichern lt_bapihead_old = lt_bapihead. lt_bapihead_old_up = lt_bapihead_up. lt_bapisrvcdata_old = lt_bapisrvcdata. lt_bapisrvcdata_old_up = lt_bapisrvcdata_up. CLEAR lt_extension_up. " Note 1989741 cl_im_eams_ord_cfd_write=>extension_in_tab = extension_in[]. LOOP AT extension_in. CALL METHOD sr_modify_input_data->modify_input_data EXPORTING extension_in = extension_in CHANGING ct_methods = lt_methods ct_header = lt_bapihead ct_header_up = lt_bapihead_up ct_header_srv = lt_bapisrvcdata ct_header_srv_up = lt_bapisrvcdata_up ct_userstatus = lt_userstatus ct_partner = lt_partner ct_partner_up = lt_partner_up ct_operation = lt_afvgd ct_operation_up = lt_afvgd_up ct_relation = lt_afabd ct_relation_up = lt_afabd_up ct_component = lt_resbd ct_component_up = lt_resbd_up ct_objectlist = lt_riwol ct_text = lt_text ct_text_lines = lt_text_lines ct_messages = lt_messages ct_header_int = lt_caufvd ct_header_int_up = lt_caufvd_up ct_pmsdo_srv = lt_pmsdo ct_pmsdo_srv_up = lt_pmsdo_up ct_reforder_item_int = lt_afpod ct_reforder_item_int_up = lt_afpod_up ct_reforder_comp = lt_afpod_resbd ct_reforder_comp_up = lt_afpod_resbd_up ct_reforder_serno_olist_ins = lt_serno_olist_ins ct_reforder_serno_olist_del = lt_serno_olist_del ct_prt = lt_prt ct_prt_up = lt_prt_up ct_serviceoutline = lt_serviceoutline ct_serviceoutline_up = lt_serviceoutline_up ct_servicelines = lt_servicelines ct_servicelines_up = lt_servicelines_up ct_servicelimit = lt_servicelimit ct_servicelimit_up = lt_servicelimit_up ct_servicecontractlimits = lt_servicecontractlimits ct_servicecontractlimits_up = lt_servicecontractlimits_up ct_estimated_costs = lt_est_cost. " 1672966 EAMCC PM110 * Note 1989741 - begin IF extension_in-structure IS NOT INITIAL. ls_extension_up-fieldname = extension_in-structure. ls_extension_up-bapiupdate = 'X'. APPEND ls_extension_up TO lt_extension_up. ENDIF. * Note 1989741 - end ENDLOOP. * Before- und After-Image für alte Logik vergleichen: * Bei Delta nur die externe Repräsentation der Kopfdaten verwenden IF lt_bapihead_old <> lt_bapihead OR lt_bapihead_old_up <> lt_bapihead_up OR lt_bapisrvcdata_old <> lt_bapisrvcdata OR lt_bapisrvcdata_old_up <> lt_bapisrvcdata_up. * Aus im BAdI veränderten Daten Import-Daten wiederherstellen, * Konvertierung für Kopfdaten erneut durchführen LOOP AT lt_bapihead INTO ls_bapihead. MOVE-CORRESPONDING ls_bapihead TO ls_header. APPEND ls_header TO lt_header. ENDLOOP. LOOP AT lt_bapihead_up INTO ls_bapihead_up. MOVE-CORRESPONDING ls_bapihead_up TO ls_header_up. APPEND ls_header_up TO lt_header_up. ENDLOOP. LOOP AT lt_bapisrvcdata INTO ls_bapisrvcdata. MOVE-CORRESPONDING ls_bapisrvcdata TO ls_header_srv. ls_header_srv-material_long = ls_bapisrvcdata-material. "MFLE CLEAR: ls_header_srv-material. "MFLE APPEND ls_header_srv TO lt_header_srv. ENDLOOP. LOOP AT lt_bapisrvcdata_up INTO ls_bapisrvcdata_up. MOVE-CORRESPONDING ls_bapisrvcdata_up TO ls_header_srv_up. ls_header_srv_up-material_long = ls_bapisrvcdata_up-material. "MFLE APPEND ls_header_srv_up TO lt_header_srv_up. ENDLOOP. CALL FUNCTION 'IBAPI_PROC_INTERFACE_E2I' EXPORTING it_header = lt_header[] it_header_up = lt_header_up[] it_header_srv = lt_header_srv[] it_header_srv_up = lt_header_srv_up[] it_userstatus = it_userstatus[] it_partner = it_partner[] it_operation = it_operation[] it_relation = it_relation[] it_component = it_component[] it_text = it_text[] it_text_lines = it_text_lines[] IMPORTING et_caufvd = lt_caufvd et_caufvd_up = lt_caufvd_up et_caufvd_srv = lt_pmsdo et_caufvd_srv_up = lt_pmsdo_up EXCEPTIONS conversion_error = 1 textline_error = 2 OTHERS = 3. IF sy-subrc NE 0. PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. ENDIF. ENDIF. * Messages vom BADI auswerten und ins BAPI-Log scheiben * Fehler in Tabelle RETURN schreiben. * Bei Message E oder A bricht der Bapi ab CLEAR return[]. LOOP AT lt_messages INTO ls_messages. CALL FUNCTION 'BALW_BAPIRETURN_GET2' EXPORTING type = ls_messages-msgty cl = ls_messages-msgid number = ls_messages-msgno par1 = ls_messages-msgv1 par2 = ls_messages-msgv2 par3 = ls_messages-msgv3 par4 = ls_messages-msgv4 IMPORTING return = ls_return. APPEND ls_return TO return[]. IF ls_messages-msgty CA 'AE'. MOVE 4 TO lv_error. ENDIF. ENDLOOP. "Message-Log zurückgeben IF lv_error NE 0. EXIT. ENDIF. * Prüfen, ob der Trace geschrieben werden soll, * und ihn dann auf das Frontend schreiben. Dies * geht natürlich nur, wenn der BAPI vom Frontend * aus aufgerufen wird. * Der Trace kann auch dazu dienen festzustellen, ob die * Daten korrekt kovertiert wurden, und der BADI das * richtige gemacht hat. CALL FUNCTION 'IBAPI_PROC_SAVE_TRACE' EXPORTING it_header = lt_caufvd it_header_up = lt_caufvd_up it_header_srv = lt_pmsdo it_header_srv_up = lt_pmsdo_up it_userstatus = lt_userstatus it_partner = lt_partner it_partner_up = lt_partner_up it_operation = lt_afvgd it_operation_up = lt_afvgd_up it_relation = lt_afabd it_relation_up = lt_afabd_up it_component = lt_resbd it_component_up = lt_resbd_up it_objectlist = lt_riwol it_srule = lt_cobl it_srule_up = lt_cobl_up it_text = lt_text it_text_lines = lt_text_lines it_tasklists = lt_tasklists CHANGING ct_methods = lt_methods. * Methodentabelle auf Konsistenz prüfen und in internes * Format umsetzen. Bestimmen, welche Aufträge in die * Belegtabelle gelesen werden müssen. CALL FUNCTION 'IBAPI_PROC_METHOD_TABLE_E2I' IMPORTING et_orders = lt_orders CHANGING ct_method_table = lt_methods EXCEPTIONS object_unknown = 1 method_unknown = 2 invalid_order_key = 3 required_order_no_created = 4 save_or_dialog_required = 5 OTHERS = 6. IF sy-subrc NE 0. * Fehler werden bereits in FB geloggt * setzen des Fehlerflags und verlassen des Bapis PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. * Reihenfolge der Bearbeitung festlegen. ****************** * dies ist vor allem dann wichtig, wenn ******************* * Anordnungsbeziehungen zwischen neu ********************** * angelegten Vorgängen erzeugt werden sollen. ************* CALL FUNCTION 'IBAPI_SET_METHOD_LEVEL' EXPORTING it_methods = lt_methods IMPORTING et_method_level = lt_method_level. * Lesen der Aufträge in die Belegtabellen und sperren. CALL FUNCTION 'IBAPI_READ_AND_LOCK_ORDERS' EXPORTING it_aufnr = lt_orders it_methods = lt_methods EXCEPTIONS order_not_found = 1 release_no_change = 2 order_locked = 3 OTHERS = 4. IF sy-subrc NE 0. * Fehler beim Lesen der Aufträge in die Belegtabellen PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. * For supporting geospatial data processing,the code related to note 2550268 is disabled **-- check orders is geo enabled note 2550268 * PERFORM eamgef_order_check USING it_header[] * lt_method_level * CHANGING lv_error. * IF lv_error NE 0. * PERFORM end_bapi CHANGING return[]. * EXIT. * ENDIF. "note 2550268 * For supporting geospatial data processing,the code related to note 2550268 is disabled * Linear Asset Management EhP5 IF cl_ops_switch_check=>eam_sfws_lfe( ) IS NOT INITIAL. CALL METHOD cl_eaml_ea_bapi_util=>set_order_data_buf EXPORTING it_header = it_header[] it_header_up = it_header_up[] it_operation = it_operation[] it_operation_up = it_operation_up[]. ENDIF. * >>>>> Begin note 2304265: DFPS specific checks clear lv_method_del. if cl_check_switch=>dfps_is_active( ) = abap_true. perform dfps_auth_check tables it_header return changing lt_method_level lv_method_del. endif. if lv_method_del = abap_true. * At least one method was deleted by the DFPS change protection checks, therefore it will be checked in the following * if only a save method remains in the processing methods. If yes, this save must no longer be processed. if lines( lt_method_level ) = 1. read table lt_method_level transporting no fields with key method = if_eams_bo_const=>gc_bapi_ord_method-save. if sy-subrc = 0. * only a save method exists ==> delete this method too clear lt_method_level. endif. endif. endif. if lt_method_level is not initial. * <<<<< End note 2304265 * Ausführen der in der Methodentabelle hinterlegten ******* * Methoden ************************************************ CALL FUNCTION 'IBAPI_PROC_METHOD_TABLE_EXEC' EXPORTING it_proc_level_tab = lt_method_level it_order_tab = lt_caufvd it_order_up_tab = lt_caufvd_up it_order_srv_tab = lt_pmsdo it_order_srv_up_tab = lt_pmsdo_up it_userstatus_tab = lt_userstatus it_partner_tab = lt_partner it_partner_up_tab = lt_partner_up it_operation_tab = lt_afvgd it_operation_up_tab = lt_afvgd_up it_relation_tab = lt_afabd it_relation_up_tab = lt_afabd_up it_component_tab = lt_resbd it_component_up_tab = lt_resbd_up it_objectlist_tab = lt_riwol it_objectlist_up_tab = lt_riwol_up it_olist_relation_tab = lt_olist_relation it_cobl_tab = lt_cobl it_cobl_up_tab = lt_cobl_up it_text_tab = lt_text it_text_lines_tab = lt_text_lines it_tasklists = lt_tasklists it_extension_up = lt_extension_up " Note 1989741 it_reforder_item = lt_afpod it_reforder_item_up = lt_afpod_up it_reforder_comp = lt_afpod_resbd it_reforder_comp_up = lt_afpod_resbd_up it_reforder_operation = lt_reford_afvgd it_reforder_serno_olist_ins = lt_serno_olist_ins it_reforder_serno_olist_del = lt_serno_olist_del it_prt = lt_prt it_prt_up = lt_prt_up it_serviceoutline = lt_serviceoutline it_serviceoutline_up = lt_serviceoutline_up it_servicelines = lt_servicelines it_servicelines_up = lt_servicelines_up it_servicelimit = lt_servicelimit it_servicelimit_up = lt_servicelimit_up it_servicecontractlimits = lt_servicecontractlimits it_servicecontractlimits_up = lt_servicecontractlimits_up it_permit = lt_permit it_permit_up = lt_permit_up it_permit_issue = lt_permit_issue iv_mmsrv_external_maintenace = iv_mmsrv_external_maintenace it_estimated_costs = lt_est_cost " 1672966 EAMCC PM110 it_text_add_tab = lt_text_add "note 2756658 it_settlmt_profile = lt_settlmt_profile IMPORTING et_numbers = et_numbers[] et_notif_numbers = et_notification_numbers[] EXCEPTIONS data_for_method_not_found = 1 method_not_supported = 2 error_in_processing = 3 OTHERS = 4. IF sy-subrc NE 0. * Fehler &1 beim Bearbeiten der Bapi-Methoden MESSAGE e113(iwo_bapi2) INTO mess. bapi_message. * New with ERP 2005: If order headers are created BUT subsequent objects * led to an error, the order header update flag is now set to 'IGNORE' for * update processes. PERFORM reset_created_headers USING et_numbers[] lt_method_level. PERFORM end_bapi CHANGING return[]. EXIT. ENDIF. endif. "DFPS note 2304265 * Lesen des Application Logs und zurückgeben der ********** * Meldungen in die Exporttabelle ************************** PERFORM end_bapi CHANGING return[]. ENHANCEMENT-POINT bapi_alm_order_maintain_g7 SPOTS es_saplibapi_alm_order. ENDFUNCTION.
09-04
代码开发 1)先调用smartform函数获取OTF格式数据 2)后调用函数CONVERT_OTF转换成PDF格式数据 3)再调用GUI_DOWNLOAD函数下载并邮件发送给采购员 ,涉及表 *&---------------------------------------------------------------------* *& 包含 ZNMMX037FA *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_GET_DATA . *modify by songjiaru 20200519 SQL 性能优化 及 更改收件人邮箱取数逻辑 这里默认的是一个PO 只会存在一个工厂的数据 *不然没办法按照采购部的供应商+采购组织+工厂取ZNMMT037A来取数了 SELECT EKKO~EBELN , EKKO~BEDAT , EKKO~EKGRP , EKKO~LIFNR , EKKO~BUKRS , NAST~SPRAS , EKKO~EKORG , EKPO~WERKS INTO CORRESPONDING FIELDS OF TABLE @GT_DATA FROM EKKO INNER JOIN EKPO ON EKKO~EBELN = EKPO~EBELN JOIN NAST ON NAST~OBJKY = EKKO~EBELN WHERE EKKO~EBELN IN @S_EBELN AND EKKO~LIFNR IN @S_LIFNR AND EKKO~EKORG IN @S_EKORG AND EKKO~EKGRP IN @S_EKGRP AND EKKO~BSART IN @S_BSART AND EKKO~BEDAT IN @S_BEDAT AND EKPO~WERKS IN @S_WERKS1 AND EKKO~FRGKE = '7' AND NAST~SPRAS IN @S_SPRAS. SORT GT_DATA BY EBELN. DELETE ADJACENT DUPLICATES FROM GT_DATA COMPARING EBELN. * LOOP AT GT_DATA INTO GS_DATA . * SELECT SINGLE * FROM ZNMMT037 * WHERE EBELN = GS_DATA-EBELN. * IF SY-SUBRC = 0. * IF CK_WFS = 'X'. * DELETE GT_DATA. * CONTINUE. * ENDIF. * GS_DATA-ICON = '@08@'. * GS_DATA-MESSAGE = '已有发送记录'. * GS_DATA-ERDAT = ZNMMT037-ERDAT. * ENDIF. * * SELECT SINGLE NAME1 MCOD1 ADRNR * INTO (GS_DATA-NAME1,GS_DATA-MCOD1,GS_DATA-ADRNR) * FROM LFA1 * WHERE LIFNR = GS_DATA-LIFNR. * * READ TABLE GT_MAIL INTO GS_MAIL WITH KEY ADRNR = GS_DATA-ADRNR BINARY SEARCH. * IF SY-SUBRC NE 0. * SELECT ADDRNUMBER SMTP_ADDR APPENDING TABLE GT_MAIL * FROM ADR6 * WHERE ADDRNUMBER = GS_DATA-ADRNR. * SORT GT_MAIL BY ADRNR. * ENDIF. * * LOOP AT GT_MAIL INTO GS_MAIL WHERE ADRNR = GS_DATA-ADRNR. * IF GS_DATA-SMTP_ADDR IS INITIAL. * GS_DATA-SMTP_ADDR = GS_MAIL-SMTP_ADDR. * ELSE. * GS_DATA-SMTP_ADDR = GS_DATA-SMTP_ADDR && ';' && GS_MAIL-SMTP_ADDR. * ENDIF. * ENDLOOP. * * MODIFY GT_DATA FROM GS_DATA. * ENDLOOP. DATA : LV_TABIX LIKE SY-TABIX. IF GT_DATA IS INITIAL. MESSAGE S322(ZMM) DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. SELECT * FROM ZNMMT037 FOR ALL ENTRIES IN @GT_DATA WHERE ZNMMT037~EBELN = @GT_DATA-EBELN INTO TABLE @DATA(LT_ZNMMT037). SORT LT_ZNMMT037 BY EBELN. DATA : LS_ZNMMT037 LIKE LINE OF LT_ZNMMT037. SELECT LFA1~LIFNR , LFA1~NAME1 , LFA1~MCOD1 FROM LFA1 WHERE LFA1~LIFNR IN @S_LIFNR INTO TABLE @DATA(LT_LFA1). SORT LT_LFA1 BY LIFNR. DATA : LS_LFA1 LIKE LINE OF LT_LFA1. SELECT ZNMMT037A~LIFNR , ZNMMT037A~EKORG , ZNMMT037A~WERKS ,ZNMMT037A~EKGRP,ZNMMT037A~EMAIL FROM ZNMMT037A FOR ALL ENTRIES IN @GT_DATA WHERE ZNMMT037A~LIFNR = @GT_DATA-LIFNR AND ZNMMT037A~EKORG = @GT_DATA-EKORG INTO TABLE @DATA(LT_ZNMMT037A) . SORT LT_ZNMMT037A BY LIFNR EKORG WERKS EKGRP . DATA : LS_ZNMMT037A LIKE LINE OF LT_ZNMMT037A. LOOP AT GT_DATA ASSIGNING FIELD-SYMBOL(<LFS_DATA>). *------------填充发送记录---------------* CLEAR LS_ZNMMT037. READ TABLE LT_ZNMMT037 INTO LS_ZNMMT037 WITH KEY EBELN = <LFS_DATA>-EBELN BINARY SEARCH. IF SY-SUBRC = 0. IF CK_WFS = 'X'. <LFS_DATA>-FLAG = 'X'. CONTINUE. ENDIF. <LFS_DATA>-ICON = '@08@'. <LFS_DATA>-MESSAGE = TEXT-002. <LFS_DATA>-ERDAT = LS_ZNMMT037-ERDAT. ENDIF. *-----------填充供应商信息名字等等--------* CLEAR LS_LFA1. READ TABLE LT_LFA1 INTO LS_LFA1 WITH KEY LIFNR = <LFS_DATA>-LIFNR BINARY SEARCH. IF SY-SUBRC = 0. <LFS_DATA>-NAME1 = LS_LFA1-NAME1. <LFS_DATA>-MCOD1 = LS_LFA1-MCOD1. ENDIF. *--------填充供应商对应的邮件地址---------* *先根据供应商采购组织工厂采购员找,再根据供应商采购组织工厂找,如果找不到,就根据供应商采购组织找 CLEAR LS_ZNMMT037A. READ TABLE LT_ZNMMT037A INTO LS_ZNMMT037A WITH KEY LIFNR = <LFS_DATA>-LIFNR EKORG = <LFS_DATA>-EKORG WERKS = <LFS_DATA>-WERKS EKGRP = <LFS_DATA>-EKGRP BINARY SEARCH. IF SY-SUBRC = 0. LOOP AT LT_ZNMMT037A INTO LS_ZNMMT037A FROM SY-TABIX. IF LS_ZNMMT037A-LIFNR = <LFS_DATA>-LIFNR AND LS_ZNMMT037A-EKORG = <LFS_DATA>-EKORG AND LS_ZNMMT037A-WERKS = <LFS_DATA>-WERKS AND LS_ZNMMT037A-EKGRP = <LFS_DATA>-EKGRP. IF <LFS_DATA>-SMTP_ADDR IS INITIAL. <LFS_DATA>-SMTP_ADDR = LS_ZNMMT037A-EMAIL && '/'. ELSE. CONCATENATE <LFS_DATA>-SMTP_ADDR LS_ZNMMT037A-EMAIL '/' INTO <LFS_DATA>-SMTP_ADDR. ENDIF. ELSE. EXIT. ENDIF. ENDLOOP. ELSE. READ TABLE LT_ZNMMT037A INTO LS_ZNMMT037A WITH KEY LIFNR = <LFS_DATA>-LIFNR EKORG = <LFS_DATA>-EKORG WERKS = <LFS_DATA>-WERKS BINARY SEARCH. IF SY-SUBRC = 0. LOOP AT LT_ZNMMT037A INTO LS_ZNMMT037A FROM SY-TABIX. IF LS_ZNMMT037A-LIFNR = <LFS_DATA>-LIFNR AND LS_ZNMMT037A-EKORG = <LFS_DATA>-EKORG AND LS_ZNMMT037A-WERKS = <LFS_DATA>-WERKS. IF <LFS_DATA>-SMTP_ADDR IS INITIAL. <LFS_DATA>-SMTP_ADDR = LS_ZNMMT037A-EMAIL && '/'. ELSE. CONCATENATE <LFS_DATA>-SMTP_ADDR LS_ZNMMT037A-EMAIL '/' INTO <LFS_DATA>-SMTP_ADDR. ENDIF. ELSE. EXIT. ENDIF. ENDLOOP. ELSE. CLEAR LS_ZNMMT037A. READ TABLE LT_ZNMMT037A INTO LS_ZNMMT037A WITH KEY LIFNR = <LFS_DATA>-LIFNR EKORG = <LFS_DATA>-EKORG WERKS = '' BINARY SEARCH. IF SY-SUBRC = 0. LOOP AT LT_ZNMMT037A INTO LS_ZNMMT037A FROM SY-TABIX. IF LS_ZNMMT037A-LIFNR = <LFS_DATA>-LIFNR AND LS_ZNMMT037A-EKORG = <LFS_DATA>-EKORG AND LS_ZNMMT037A-WERKS = ''. IF <LFS_DATA>-SMTP_ADDR IS INITIAL. <LFS_DATA>-SMTP_ADDR = LS_ZNMMT037A-EMAIL && '/'. ELSE. CONCATENATE <LFS_DATA>-SMTP_ADDR LS_ZNMMT037A-EMAIL '/' INTO <LFS_DATA>-SMTP_ADDR. ENDIF. ELSE. EXIT. ENDIF. ENDLOOP. ENDIF. ENDIF. ENDIF. ENDLOOP. *end modify ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_OUTPUT_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_OUTPUT_DATA . DEFINE MAC_FCAT. CLEAR gs_fcat. gs_fcat-fieldname = &1. gs_fcat-coltext = &2. gs_fcat-key = &3. gs_fcat-ref_field = &4. gs_fcat-ref_table = &5. gs_fcat-just = &6. * IF &6 = 'R'. * gs_fcat-no_zero = 'X'. * ENDIF. if &1 = 'ICON'. gs_fcat-icon = 'X'. endif. APPEND gs_fcat TO gt_fcat. END-OF-DEFINITION. CLEAR GT_FCAT. IF SY-LANGU EQ '1'. MAC_FCAT 'EBELN' '采购订单号' '' 'EBELN' 'EKKO' ''. MAC_FCAT 'LIFNR' '供应商' '' 'LIFNR' 'LFA1' ''.. MAC_FCAT 'NAME1' '供应商名称' '' '' '' ''.. MAC_FCAT 'BEDAT' '凭证日期' ' ' '' '' ''. MAC_FCAT 'EKGRP' '采购组' ' ' '' '' ''. MAC_FCAT 'MCOD1' '简称' ' ' '' '' ''. MAC_FCAT 'SPRAS' '语言' ' ' 'SPRAS' 'NAST' ''. MAC_FCAT 'SMTP_ADDR' '供应商邮件' ' ' '' '' ''. MAC_FCAT 'ICON' '发送状态' ' ' '' '' ''. MAC_FCAT 'ERDAT' '发送日期' ' ' '' '' ''. MAC_FCAT 'MESSAGE' '消息' ' ' '' '' ''. ELSE. MAC_FCAT 'EBELN' 'PO' '' 'EBELN' 'EKKO' ''. MAC_FCAT 'LIFNR' 'Supplier' '' 'LIFNR' 'LFA1' ''.. MAC_FCAT 'NAME1' 'Supplier Name' '' '' '' ''.. MAC_FCAT 'BEDAT' 'Date' ' ' '' '' ''. MAC_FCAT 'EKGRP' 'Purchase Group' ' ' '' '' ''. MAC_FCAT 'MCOD1' 'Name For Short' ' ' '' '' ''. MAC_FCAT 'SPRAS' 'Language' ' ' 'SPRAS' 'NAST' ''. MAC_FCAT 'SMTP_ADDR' 'Email' ' ' '' '' ''. MAC_FCAT 'ICON' 'Status' ' ' '' '' ''. MAC_FCAT 'ERDAT' 'Send Date' ' ' '' '' ''. MAC_FCAT 'MESSAGE' 'Message' ' ' '' '' ''. ENDIF. GS_LAYOUT-ZEBRA = 'X'. GS_LAYOUT-CWIDTH_OPT = 'X'. GS_LAYOUT-BOX_FNAME = 'BOX'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING I_CALLBACK_PROGRAM = SY-REPID IS_LAYOUT_LVC = GS_LAYOUT IT_FIELDCAT_LVC = GT_FCAT I_SAVE = 'U' I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS' I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' TABLES T_OUTTAB = GT_DATA EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_USER_COMMAND *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. DATA:LV_ANSWER TYPE C. DATA LR_GRID TYPE REF TO CL_GUI_ALV_GRID. DATA : LV_CLSS TYPE C . "X 代表发送给供应商和采购员 ''代表发送给采购员 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' " IMPORTING E_GRID = LR_GRID. CALL METHOD LR_GRID->CHECK_CHANGED_DATA. CASE R_UCOMM. WHEN 'EMAIL'. "保存事件 LV_CLSS = 'X'. LOOP AT GT_DATA INTO GS_DATA WHERE BOX = 'X' AND ICON NE '@08@'. IF GS_DATA-SMTP_ADDR IS NOT INITIAL. PERFORM FRM_SEND_MAIL USING GS_DATA-EBELN GS_DATA-SPRAS GS_DATA-EKGRP GS_DATA-MCOD1 GS_DATA-BUKRS GS_DATA-SMTP_ADDR LV_CLSS CHANGING GS_DATA-ICON GS_DATA-MESSAGE GS_DATA-ERDAT. ELSE. GS_DATA-ICON = '@0A@'. GS_DATA-MESSAGE = TEXT-003 ." ENDIF. MODIFY GT_DATA FROM GS_DATA. ENDLOOP. *ADD BY SONGJIARU 20200519 增加只发送给采购员 WHEN 'EMAIL1'. LV_CLSS = ''. LOOP AT GT_DATA INTO GS_DATA WHERE BOX = 'X' AND ICON NE '@08@'. * IF GS_DATA-SMTP_ADDR IS NOT INITIAL. PERFORM FRM_SEND_MAIL USING GS_DATA-EBELN GS_DATA-SPRAS GS_DATA-EKGRP GS_DATA-MCOD1 * GS_DATA-ADRNR GS_DATA-BUKRS GS_DATA-SMTP_ADDR LV_CLSS CHANGING GS_DATA-ICON GS_DATA-MESSAGE GS_DATA-ERDAT. * ELSE. * GS_DATA-ICON = '@0A@'. * GS_DATA-MESSAGE = '邮件为空,不能发送' ." * ENDIF. MODIFY GT_DATA FROM GS_DATA. ENDLOOP. WHEN 'DOWN'. LOOP AT GT_DATA INTO GS_DATA WHERE BOX = 'X'. PERFORM FRM_DOWN_PDF USING GS_DATA-EBELN GS_DATA-SPRAS. ENDLOOP. WHEN '&IC1'. IF RS_SELFIELD-FIELDNAME = 'EBELN'. READ TABLE GT_DATA INTO GS_DATA INDEX RS_SELFIELD-TABINDEX. IF SY-SUBRC = 0. SET PARAMETER ID 'BES' FIELD GS_DATA-EBELN. CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. ENDIF. ENDIF. WHEN OTHERS. ENDCASE. RS_SELFIELD-REFRESH = 'X'."刷新ALV报表 RS_SELFIELD-COL_STABLE = 'X'. RS_SELFIELD-ROW_STABLE = 'X'. ENDFORM. "FRM_USER_COMMAND *&---------------------------------------------------------------------* *& Form frm_set_pf_status2 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS 'PF_STATUS'. ENDFORM. "FRM_SET_PF_STATUS *&---------------------------------------------------------------------* *& Form FRM_SEND_MAIL *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> GS_DATA_EBELN *& --> GS_DATA_SPRAS *& <-- GS_DATA_ICON *& <-- GS_DATA_MESSAGE *& <-- ELSE *&---------------------------------------------------------------------* FORM FRM_SEND_MAIL USING P_EBELN P_SPRAS P_EKGRP P_MCOD1 P_BUKRS P_EMAIL P_CLSS CHANGING P_ICON P_MESSAGE P_ERDAT. DATA:LS_ZT37 LIKE ZNMMT037. DATA:LV_BUTXT LIKE T001-BUTXT. DATA:LT_CONTENT_BIN TYPE SOLIX_TAB. DATA: CL_SEND_REQUEST TYPE REF TO CL_BCS, CL_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS, CL_BCS_EXCEPTION TYPE REF TO CX_BCS, CL_SENDER TYPE REF TO IF_SENDER_BCS, CL_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS. DATA: LT_MAIN_TEXT TYPE BCSY_TEXT, LS_MAIN_TEXT LIKE LINE OF LT_MAIN_TEXT, LV_TITLE TYPE SO_OBJ_DES, LV_BOOL TYPE OS_BOOLEAN. DATA:LV_PATH TYPE STRING. DATA:LT_BIN TYPE TABLE OF TBL1024. DATA LV_CONTENT TYPE XSTRING. DATA LV_VLINE TYPE I. DATA : BEGIN OF LS_RECIEVE, EMAIL TYPE AD_SMTPADR, END OF LS_RECIEVE. DATA : LT_RECIEVE LIKE TABLE OF LS_RECIEVE. DATA : LV_INDEX1 TYPE I. DATA : LV_INDEX2 TYPE I. DATA : LV_INDEX3 TYPE I. LV_PATH = 'C:\PO\' && P_EBELN && '_' && SY-UZEIT && '.PDF'. PERFORM FRM_GET_PDF USING P_EBELN P_SPRAS LV_PATH CHANGING P_ICON P_MESSAGE. IF P_ICON IS INITIAL. CALL FUNCTION 'GUI_UPLOAD' EXPORTING FILENAME = LV_PATH FILETYPE = 'BIN' IMPORTING FILELENGTH = LV_VLINE TABLES DATA_TAB = LT_BIN[]. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING INPUT_LENGTH = LV_VLINE IMPORTING BUFFER = LV_CONTENT TABLES BINARY_TAB = LT_BIN EXCEPTIONS FAILED = 1 OTHERS = 2. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING BUFFER = LV_CONTENT IMPORTING OUTPUT_LENGTH = LV_VLINE TABLES BINARY_TAB = LT_CONTENT_BIN. TRY. * 创建发送请求 CL_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ). SELECT SINGLE BUTXT INTO LV_BUTXT FROM T001 WHERE BUKRS = P_BUKRS. **处理标题头内容 CONCATENATE LV_BUTXT P_EBELN P_MCOD1 P_EKGRP INTO LV_TITLE SEPARATED BY SPACE. **处理邮件内容 *DG01 要求加上客制化描述 * IF P_BUKRS EQ 'DG01'. * IF SY-LANGU EQ '1'. * LS_MAIN_TEXT = * '附件是东莞长城开发新订单,请收到订单后邮件回复确认给采购员,并于3个工作日内在供应商平台上确认订单交期。供应商平台网址:https://sp.kaifa.cn '. * ELSE. * DATA(LV_STR) = 'The attachment is the new PO of Dongguan Kaifa Technology Co.,Ltd,' * && 'Please reply to the buyer after receiving the PO, and confirm the order delivery date on the supplier portal within 3 working days.' * && 'Supplier portal website(URL): https://sp.kaifa.cn '. * LS_MAIN_TEXT = LV_STR. * ENDIF. * APPEND LS_MAIN_TEXT TO LT_MAIN_TEXT. * ENDIF. * 创建整理发送内容 CL_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT( I_TYPE = 'RAW' I_TEXT = LT_MAIN_TEXT I_SUBJECT = LV_TITLE ). * 添加附件 DATA:L_OBJTP TYPE SOODK-OBJTP. DATA:L_OBJDES TYPE SOOD-OBJDES. L_OBJTP = 'PDF'. * l_objdes = p_ebeln && p_mcod1. CONCATENATE LV_BUTXT P_EBELN P_MCOD1 P_EKGRP INTO L_OBJDES SEPARATED BY SPACE. CALL METHOD CL_DOCUMENT->ADD_ATTACHMENT EXPORTING I_ATTACHMENT_TYPE = L_OBJTP I_ATTACHMENT_SUBJECT = L_OBJDES I_ATT_CONTENT_HEX = LT_CONTENT_BIN. * 添加邮件内容到发送请求 CL_SEND_REQUEST->SET_DOCUMENT( CL_DOCUMENT ). * 指定邮件发件人为采购员邮箱 * data:lv_sendtype type SX_ADDRTYP value '*', * lv_address_string type string value 'yuli@kaifa.cn', * lv_address_name type string value 'Yuli'. * cl_sender->ADDRESS_TYPE( lv_sendtype ). * cl_sender->ADDRESS_STRING( EXPORTING result = lv_address_string ). * cl_sender->ADDRESS_NAME( EXPORTING result = lv_address_name ). * cl_send_request->set_sender( cl_sender ). * data: sender type ref to cl_sapuser_bcs, * lv_uname type sy-uname value 'DTANG.IS'. * sender = cl_sapuser_bcs=>create( lv_uname ). * call method cl_send_request->set_sender * exporting * i_sender = sender. *modify by songjiaru 20200519 *----------------指定发件人----------------------------* CLEAR GS_MAIL-SMTP_ADDR. SELECT SINGLE SMTP_ADDR INTO GS_MAIL-SMTP_ADDR FROM T024 WHERE EKGRP = P_EKGRP. DATA(LO_SENDER) = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( I_ADDRESS_STRING = GS_MAIL-SMTP_ADDR I_ADDRESS_NAME = GS_MAIL-SMTP_ADDR ). CALL METHOD CL_SEND_REQUEST->SET_SENDER EXPORTING I_SENDER = LO_SENDER. * "指定邮件接收人 * LOOP AT GT_MAIL INTO GS_MAIL WHERE ADRNR = P_ADRNR. * CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( GS_MAIL-SMTP_ADDR ). * CL_SEND_REQUEST->ADD_RECIPIENT( CL_RECIPIENT ). * ENDLOOP. IF GS_MAIL-SMTP_ADDR IS NOT INITIAL. CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( GS_MAIL-SMTP_ADDR ). CL_SEND_REQUEST->ADD_RECIPIENT( CL_RECIPIENT ). ENDIF. IF P_CLSS = 'X'. * CLEAR GS_MAIL-SMTP_ADDR. * SELECT SINGLE SMTP_ADDR INTO GS_MAIL-SMTP_ADDR * FROM T024 * WHERE EKGRP = P_EKGRP. LV_INDEX1 = 0. LV_INDEX2 = 0. LV_INDEX3 = 1. CLEAR LT_RECIEVE. WHILE ( LV_INDEX3 <= STRLEN( P_EMAIL ) ). LV_INDEX2 = LV_INDEX2 + 1. LV_INDEX3 = LV_INDEX3 + 1. IF P_EMAIL+LV_INDEX1(LV_INDEX2) CA '/'. LV_INDEX2 = LV_INDEX2 - 1 . LS_RECIEVE-EMAIL = P_EMAIL+LV_INDEX1(LV_INDEX2). APPEND LS_RECIEVE TO LT_RECIEVE. CLEAR LS_RECIEVE. LV_INDEX1 = LV_INDEX3 - 1. LV_INDEX2 = 0. ENDIF. ENDWHILE. LOOP AT LT_RECIEVE INTO LS_RECIEVE. CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LS_RECIEVE-EMAIL ). CL_SEND_REQUEST->ADD_RECIPIENT( CL_RECIPIENT ). ENDLOOP. ENDIF. ** 正式发送并提交作业 CLEAR LV_BOOL. "将邮件置于发件箱,可以在工作台outbox查看邮件的发送状态及内容 CL_SEND_REQUEST->SEND_REQUEST->SET_LINK_TO_OUTBOX( 'X' ). CALL METHOD CL_SEND_REQUEST->SEND_REQUEST->SETU_REQUESTED_STATUS EXPORTING I_REQUESTED_STATUS = 'N'. CALL METHOD CL_SEND_REQUEST->SEND_REQUEST->SETU_STATUS_MAIL EXPORTING I_STATUS_MAIL = 'A'. CL_SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ). LV_BOOL = CL_SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X'). IF LV_BOOL = 'X'. COMMIT WORK. * submit rsconn01 with mode = 'INT' and return. IF LT_CONTENT_BIN IS INITIAL. P_ICON = '@0A@'. P_MESSAGE = TEXT-004. "默认导入成功 ELSE. P_ICON = '@08@'. P_MESSAGE = TEXT-005. "默认导入成功 P_ERDAT = SY-DATUM. CLEAR LS_ZT37. LS_ZT37-EBELN = P_EBELN. LS_ZT37-ERDAT = SY-DATUM. LS_ZT37-ERTIM = SY-UZEIT. LS_ZT37-ERNAM = SY-UNAME. MODIFY ZNMMT037 FROM LS_ZT37. ENDIF. ELSE. P_ICON = '@0A@'. P_MESSAGE = TEXT-006. "默认导入成功 ROLLBACK WORK. ENDIF. CATCH CX_BCS INTO CL_BCS_EXCEPTION. P_ICON = '@0A@'. P_MESSAGE = TEXT-006 && CL_BCS_EXCEPTION->ERROR_TYPE.. "默认导入成功 ENDTRY. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DOWN_PDF *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> GS_DATA_EBELN *& --> GS_DATA_SPRAS *& --> GS_DATA_TDSPOOLID *&---------------------------------------------------------------------* FORM FRM_DOWN_PDF USING P_EBELN P_SPRAS. DATA:LV_ICON TYPE ICON-NAME, LV_MESSAGE TYPE C LENGTH 120. PERFORM FRM_GET_PDF USING P_EBELN P_SPRAS '' CHANGING LV_ICON LV_MESSAGE. IF LV_ICON NE ''. LV_MESSAGE = P_EBELN && LV_MESSAGE. MESSAGE LV_MESSAGE TYPE 'E' . ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_PDF *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> P_EBELN *& --> P_SPRAS *& <-- P_ICON *& <-- P_MESSAGE *&---------------------------------------------------------------------* FORM FRM_GET_PDF USING P_EBELN P_SPRAS P_PATH CHANGING P_ICON P_MESSAGE. DATA:LT_PDF LIKE TLINE OCCURS 0 WITH HEADER LINE, LS_PDF LIKE TLINE. DATA:LS_NAST LIKE NAST, LV_SUBRC TYPE SY-SUBRC, LV_VLINE TYPE I, LV_SMARTFORM_NAME TYPE RS38L_FNAM VALUE 'ZPO_FORM', " 请替换为实际的Smart Form名称 LV_TEMPLATE TYPE STXH-TDNAME VALUE 'ZPO_FORM'. " 请替换为实际的模板名称 FIELD-SYMBOLS <FS_VALUE> TYPE ITCPP. SELECT SINGLE * INTO LS_NAST FROM NAST WHERE OBJKY = P_EBELN AND SPRAS = P_SPRAS. CALL FUNCTION 'WFMC_MESSAGE_SINGLE' EXPORTING PI_NAST = LS_NAST IMPORTING PE_RCODE = LV_SUBRC. IF LV_SUBRC = 0. ASSIGN ('(SAPLMEDRUCK)RESULT') TO <FS_VALUE>. IF <FS_VALUE>-TDSPOOLID IS NOT INITIAL. CLEAR LT_PDF. " 使用Smart Forms函数替代原函数 CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING FORMNAME = ZPO_FORM IMPORTING FM_NAME = LV_FM_NAME EXCEPTIONS NO_FORM = 1 NO_FUNCTION_MODULE = 2 OTHERS = 3. IF SY-SUBRC <> 0. P_ICON = '@0A@'. P_MESSAGE = '获取Smart Forms函数失败'. EXIT. ENDIF. " 动态调用Smart Forms函数 CALL FUNCTION LV_FM_NAME EXPORTING EXPORTING = 'X' TEMPLATE = LV_TEMPLATE OUTPUT_OPTIONS = LS_OUTPUT_OPTIONS IMPORTING JOB_OUTPUT_INFO = LS_JOB_OUTPUT_INFO TABLES LINES = LT_PDF EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 USER_CANCELED = 4 OTHERS = 5. IF SY-SUBRC <> 0. P_ICON = '@0A@'. P_MESSAGE = '执行ZPO_FORM函数失败'. EXIT. ENDIF. " 计算PDF字节数 LV_VLINE = LINES( LT_PDF ). IF LT_PDF[] IS NOT INITIAL. "先下载到本地,再上载做为附件 IF P_PATH IS NOT INITIAL. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING BIN_FILESIZE = LV_VLINE FILENAME = P_PATH FILETYPE = 'BIN' TABLES DATA_TAB = LT_PDF EXCEPTIONS FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKNOWN_ERROR = 6. ELSE. DATA:LV_FILE TYPE STRING. PERFORM FRM_GET_PATH USING LV_FILE. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING BIN_FILESIZE = LV_VLINE FILENAME = LV_FILE FILETYPE = 'BIN' TABLES DATA_TAB = LT_PDF EXCEPTIONS FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKNOWN_ERROR = 6. ENDIF. ELSE. P_ICON = '@0A@'. P_MESSAGE = TEXT-007. "默认导入成功 ENDIF. ELSE. P_ICON = '@0A@'. P_MESSAGE = TEXT-008. "默认导入成功 ENDIF. ELSE. P_ICON = '@0A@'. P_MESSAGE = TEXT-009. "默认导入成功 ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_PATH *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> LV_PATH *&---------------------------------------------------------------------* FORM FRM_GET_PATH USING P_FILE. DATA: L_V_FILE_FILTER TYPE STRING. DATA: L_V_FILETABLE TYPE FILE_TABLE, L_T_FILETABLE TYPE FILETABLE. DATA: L_V_RC TYPE I. DATA: L_V_USER_ACTION TYPE I. * l_v_file_filter = '(*.xlsx;*.xls)|*.xlsx;*.xls|'. L_V_FILE_FILTER = '(*.PDF)|*.PDF|'. CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG( EXPORTING WINDOW_TITLE = '选择文件' FILE_FILTER = L_V_FILE_FILTER CHANGING FILE_TABLE = L_T_FILETABLE RC = L_V_RC USER_ACTION = L_V_USER_ACTION ). CHECK L_V_USER_ACTION EQ 0. CHECK L_T_FILETABLE[] IS NOT INITIAL. READ TABLE L_T_FILETABLE INTO L_V_FILETABLE INDEX 1. P_FILE = L_V_FILETABLE-FILENAME. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_MOD_SCREEN *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_MOD_SCREEN . LOOP AT SCREEN. IF SCREEN-GROUP1 = 'M1'. IF R1 = 'X'. SCREEN-ACTIVE = 1. ELSE. SCREEN-ACTIVE = 0. ENDIF. ENDIF. IF SCREEN-GROUP1 = 'M2'. IF R2 = 'X'. SCREEN-ACTIVE = 1. ELSE. SCREEN-ACTIVE = 0. ENDIF. ENDIF. IF SCREEN-GROUP1 = 'M3'. IF R3 = 'X'. SCREEN-ACTIVE = 1. ELSE. SCREEN-ACTIVE = 0. ENDIF. ENDIF. MODIFY SCREEN. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DOWN_TEMPLATE *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_DOWN_TEMPLATE . CREATE OBJECT V_EXCEL 'EXCEL.APPLICATION'. SET PROPERTY OF V_EXCEL 'VISIBLE' = 1. CALL METHOD OF V_EXCEL 'WORKBOOKS' = V_BOOK . CALL METHOD OF V_BOOK 'ADD'. IF SY-LANGU EQ '1'. PERFORM FRM_FILL_CELL USING: 1 1 '供应商代码(必填)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸" 1 2 '采购组织(必填)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸" 1 3 '工厂(选填)' 40 0 10, 1 4 '采购员(选填)' 40 0 10, 1 5 '订单发送邮箱(必填)' 40 0 10. ELSE. PERFORM FRM_FILL_CELL USING: 1 1 'Vendor Code(Required)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸" 1 2 'Purchase Organization(Required)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸" 1 3 'Plant' 40 0 10, 1 4 'Buyer.Code' 40 0 10, " add buyer code 20210413 wahkenlee 1 5 'Email' 40 0 10. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FILL_CELL *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> P_1 *& --> P_1 *& --> P_ *& --> P_40 *& --> P_0 *& --> P_10 *&---------------------------------------------------------------------* FORM FRM_FILL_CELL USING FU_ROW FU_COLUMN FU_VALUE FU_COLOR FU_BOLD FU_SIZE. DATA: L_CELL TYPE OLE2_OBJECT, L_COLOR TYPE OLE2_OBJECT, L_BOLD TYPE OLE2_OBJECT, L_COLUMN TYPE OLE2_OBJECT. CALL METHOD OF V_EXCEL 'CELLS' = L_CELL EXPORTING #1 = FU_ROW #2 = FU_COLUMN. SET PROPERTY OF L_CELL 'Value' = FU_VALUE. "赋值。" * call method of L_CELL 'INTERIOR' = int. GET PROPERTY OF L_CELL 'Interior' = L_COLOR. SET PROPERTY OF L_COLOR 'ColorIndex' = FU_COLOR. "根据值 显示对应的颜色。 GET PROPERTY OF L_CELL 'Font' = L_BOLD. SET PROPERTY OF L_BOLD 'Bold' = FU_BOLD. "1是加粗,0是不加粗" SET PROPERTY OF L_BOLD 'SIZE' = FU_SIZE. "设置字体大小。" CALL METHOD OF V_EXCEL 'Columns' = L_COLUMN " 选定列 EXPORTING #1 = FU_COLUMN . SET PROPERTY OF L_COLUMN 'ColumnWidth' = 20. " 定义列宽 SET PROPERTY OF L_COLUMN 'rowheight' = 24. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_MAINTAIN_EMAIL *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_MAINTAIN_EMAIL . PERFORM FRM_CHECK_AUTH. PERFORM FRM_UPLOAD_DATA. PERFORM FRM_CHECK_DATA. PERFORM FRM_UPDATE_DATA. PERFORM FRM_ALV. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_UPLOAD_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_UPLOAD_DATA . CLEAR : GS_ITEM ,GT_ITEM. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING FILENAME = GV_FILE I_BEGIN_COL = 1 I_BEGIN_ROW = 2 I_END_COL = 5 I_END_ROW = 65535 TABLES INTERN = GT_ALSM EXCEPTIONS INCONSISTENT_PARAMETERS = 1 UPLOAD_OLE = 2 OTHERS = 3. IF SY-SUBRC <> 0. MESSAGE S000(ZMM) WITH TEXT-010 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. * 转换数据 LOOP AT GT_ALSM. ASSIGN COMPONENT GT_ALSM-COL OF STRUCTURE GS_ITEM TO <GFS_DATA>. TRANSLATE GT_ALSM-VALUE TO UPPER CASE. <GFS_DATA> = GT_ALSM-VALUE. AT END OF ROW. APPEND GS_ITEM TO GT_ITEM. CLEAR GS_ITEM. ENDAT. ENDLOOP. LOOP AT GT_ITEM ASSIGNING FIELD-SYMBOL(<LFS_ITEM>). CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = <LFS_ITEM>-LIFNR IMPORTING OUTPUT = <LFS_ITEM>-LIFNR. ENDLOOP. IF GT_ITEM IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-011 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CHECK_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_CHECK_DATA . DATA LV_NAME TYPE STRING . data:ls_email_stru type SX_ADDRESS, ls_email_stru_out type SX_ADDRESS. *前面已经判断过gt_item 不为空 SELECT LFA1~LIFNR , LFA1~NAME1 INTO TABLE @GT_LFA1 FROM LFA1 FOR ALL ENTRIES IN @GT_ITEM WHERE LFA1~LIFNR = @GT_ITEM-LIFNR. SORT GT_LFA1 BY LIFNR . SELECT T024E~EKORG , T001K~BWKEY FROM T024E INNER JOIN T001K ON T024E~BUKRS = T001K~BUKRS FOR ALL ENTRIES IN @GT_ITEM WHERE T024E~EKORG = @GT_ITEM-EKORG INTO TABLE @DATA(LT_T024E). SELECT T024~EKGRP FROM T024 FOR ALL ENTRIES IN @GT_ITEM WHERE T024~EKGRP = @GT_ITEM-EKGRP INTO TABLE @DATA(LT_T024). SORT LT_T024E BY EKORG BWKEY. SORT LT_T024 BY EKGRP. DATA LS_T024E LIKE LINE OF LT_T024E. DATA LS_T024 LIKE LINE OF LT_T024. LOOP AT GT_ITEM INTO GS_ITEM. MOVE-CORRESPONDING GS_ITEM TO GS_MESSAGE. CLEAR GS_LFA1. READ TABLE GT_LFA1 INTO GS_LFA1 WITH KEY LIFNR = GS_ITEM-LIFNR BINARY SEARCH . IF SY-SUBRC <> 0. GS_MESSAGE-MESSAGE = TEXT-012. GS_MESSAGE-FLAG = 'X'. ELSE. GS_MESSAGE-NAME1 = GS_LFA1-NAME1. ENDIF. IF GS_ITEM-EKORG IS INITIAL. CONCATENATE GS_MESSAGE-MESSAGE TEXT-013 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ENDIF. IF GS_ITEM-WERKS IS NOT INITIAL AND GS_ITEM-EKORG IS NOT INITIAL. CLEAR LS_T024E. READ TABLE LT_T024E INTO LS_T024E WITH KEY EKORG = GS_ITEM-EKORG BWKEY = GS_ITEM-WERKS BINARY SEARCH. IF SY-SUBRC <> 0. CONCATENATE GS_MESSAGE-MESSAGE TEXT-014 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ENDIF. ENDIF. IF GS_ITEM-EMAIL IS INITIAL. CONCATENATE GS_MESSAGE-MESSAGE '' INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ELSE. "校验导入邮箱的格式 ls_email_stru-type = 'INT'. ls_email_stru-address = gs_item-email. CALL FUNCTION 'SX_INTERNET_ADDRESS_TO_NORMAL' EXPORTING ADDRESS_UNSTRUCT = ls_email_stru IMPORTING ADDRESS_NORMAL = ls_email_stru_out EXCEPTIONS ERROR_ADDRESS_TYPE = 1 ERROR_ADDRESS = 2 ERROR_GROUP_ADDRESS = 3 OTHERS = 4. if ls_email_stru is INITIAL. CONCATENATE GS_MESSAGE-MESSAGE TEXT-025 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. endif. ENDIF. CALL FUNCTION 'ZMM_GET_DOMAIN' IMPORTING DOMAIN_NAME = LV_NAME. IF LV_NAME IS INITIAL. CONCATENATE GS_MESSAGE-MESSAGE TEXT-016 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ELSE. GS_MESSAGE-UNAME = LV_NAME. ENDIF. IF GS_ITEM-EKGRP IS NOT INITIAL. CLEAR:LS_T024. READ TABLE LT_T024 INTO LS_T024 WITH KEY EKGRP = GS_ITEM-EKGRP. IF SY-SUBRC <> 0. CONCATENATE GS_MESSAGE-MESSAGE TEXT-024 INTO GS_MESSAGE-MESSAGE. GS_MESSAGE-FLAG = 'X'. ENDIF. ENDIF. IF GS_MESSAGE-FLAG <> 'X'. CONCATENATE TEXT-017 SY-DATUM+0(4) '/' SY-DATUM+4(2) '/' SY-DATUM+6(2) TEXT-018 SYST-UZEIT+0(2) ':' SYST-UZEIT+2(2) ':' SYST-UZEIT+4(2) INTO GS_MESSAGE-MESSAGE. ENDIF. APPEND GS_MESSAGE TO GT_MESSAGE. CLEAR GS_MESSAGE. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_UPDATE_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_UPDATE_DATA . DATA : LT_ZNMMT037A TYPE TABLE OF ZNMMT037A. DATA : LS_ZNMMT037A LIKE LINE OF LT_ZNMMT037A. LOOP AT GT_MESSAGE INTO GS_MESSAGE WHERE FLAG <> 'X'. MOVE-CORRESPONDING GS_MESSAGE TO LS_ZNMMT037A. APPEND LS_ZNMMT037A TO LT_ZNMMT037A. CLEAR LS_ZNMMT037A. ENDLOOP. IF LT_ZNMMT037A IS NOT INITIAL. MODIFY ZNMMT037A FROM TABLE LT_ZNMMT037A. IF SY-DBCNT <> 0. COMMIT WORK. ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_ALV *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_ALV . CLEAR GT_FIELDCAT. CLEAR GS_FIELDCAT. CLEAR GT_EVENTS. CLEAR GS_EVENTS. CLEAR GS_LAYOUT1. MOVE-CORRESPONDING GT_MESSAGE TO GT_EMAIL_ALV. IF SY-LANGU EQ '1'. GMRC_INITIAL_FIELD '供应商代码' 'LIFNR' 'X'. GMRC_INITIAL_FIELD '供应商名称' 'NAME1' 'X'. GMRC_INITIAL_FIELD '采购组织' 'EKORG' 'X'. GMRC_INITIAL_FIELD '工厂' 'WERKS' 'X'. GMRC_INITIAL_FIELD '采购员' 'EKGRP' 'X'. GMRC_INITIAL_FIELD '订单发送邮箱' 'EMAIL' 'X'. GMRC_INITIAL_FIELD '用户域名' 'UNAME' 'X'. GMRC_INITIAL_FIELD '信息' 'MESSAGE' ''. ELSE. GMRC_INITIAL_FIELD 'Supplier Code' 'LIFNR' 'X'. GMRC_INITIAL_FIELD 'Supplier Name' 'NAME1' 'X'. GMRC_INITIAL_FIELD 'Purchase Organization' 'EKORG' 'X'. GMRC_INITIAL_FIELD 'Plant' 'WERKS' 'X'. GMRC_INITIAL_FIELD 'Buyer.Code' 'EKGRP' 'X'. GMRC_INITIAL_FIELD 'Email' 'EMAIL' 'X'. GMRC_INITIAL_FIELD 'Domain' 'UNAME' 'X'. GMRC_INITIAL_FIELD 'Message' 'MESSAGE' ''. ENDIF. GS_LAYOUT1-COLWIDTH_OPTIMIZE = 'X'. GS_LAYOUT1-ZEBRA = 'X'. MOVE 'PF_STATUS_SET' TO GS_EVENTS-NAME. MOVE 'FRM_SET_PF_STATUS1' TO GS_EVENTS-FORM. APPEND GS_EVENTS TO GT_EVENTS. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' I_CALLBACK_PROGRAM = SY-REPID * I_CALLBACK_PF_STATUS_SET = '' I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND2' * I_CALLBACK_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_END_OF_LIST = ' ' * I_STRUCTURE_NAME = * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * I_GRID_SETTINGS = IS_LAYOUT = GS_LAYOUT1 IT_FIELDCAT = GT_FIELDCAT * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = I_DEFAULT = 'X' * I_SAVE = 'A ' * IS_VARIANT = IT_EVENTS = GT_EVENTS * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * O_PREVIOUS_SRAL_HANDLER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES T_OUTTAB = GT_EMAIL_ALV EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. FORM FRM_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS'0100' . ENDFORM. FORM FRM_SET_PF_STATUS1 USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS'0200' . ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_QUERY *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_QUERY . CLEAR : GT_QUERY_ALV. CLEAR : GS_QUERY_ALV. CLEAR GT_FIELDCAT. CLEAR GS_FIELDCAT. CLEAR GT_EVENTS. CLEAR GS_EVENTS. CLEAR GS_LAYOUT1. SELECT ZNMMT037A~LIFNR , ZNMMT037A~NAME1 , ZNMMT037A~EKORG , ZNMMT037A~WERKS , ZNMMT037A~EMAIL , ZNMMT037A~UNAME , ZNMMT037A~MESSAGE , ZNMMT037A~EKGRP FROM ZNMMT037A WHERE ZNMMT037A~LIFNR IN @S_LIFNR1 AND ZNMMT037A~EKORG IN @S_EKORG1 AND ZNMMT037A~WERKS IN @S_WERKS INTO TABLE @DATA(LT_ZNMMT037A) . MOVE-CORRESPONDING LT_ZNMMT037A TO GT_QUERY_ALV. IF SY-LANGU EQ '1'. GMRC_INITIAL_FIELD '供应商代码' 'LIFNR' 'X'. GMRC_INITIAL_FIELD '供应商名称' 'NAME1' 'X'. GMRC_INITIAL_FIELD '采购组织' 'EKORG' 'X'. GMRC_INITIAL_FIELD '工厂' 'WERKS' 'X'. GMRC_INITIAL_FIELD '采购员' 'EKGRP' 'X'. GMRC_INITIAL_FIELD '订单发送邮箱' 'EMAIL' 'X'. GMRC_INITIAL_FIELD '用户域名' 'UNAME' 'X'. GMRC_INITIAL_FIELD '信息' 'MESSAGE' ''. ELSE. GMRC_INITIAL_FIELD 'Supplier Code' 'LIFNR' 'X'. GMRC_INITIAL_FIELD 'Supplier Name' 'NAME1' 'X'. GMRC_INITIAL_FIELD 'Purchase Organization' 'EKORG' 'X'. GMRC_INITIAL_FIELD 'Plant' 'WERKS' 'X'. GMRC_INITIAL_FIELD 'Buyer.Code' 'EKGRP' 'X'. GMRC_INITIAL_FIELD 'Email' 'EMAIL' 'X'. GMRC_INITIAL_FIELD 'DOMAIN_NAME' 'UNAME' 'X'. GMRC_INITIAL_FIELD 'Message' 'MESSAGE' ''. ENDIF. GS_LAYOUT1-COLWIDTH_OPTIMIZE = 'X'. GS_LAYOUT1-ZEBRA = 'X'. GS_LAYOUT1-BOX_FIELDNAME = 'BOX'. MOVE 'PF_STATUS_SET' TO GS_EVENTS-NAME. MOVE 'FRM_SET_PF_STATUS' TO GS_EVENTS-FORM. APPEND GS_EVENTS TO GT_EVENTS. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' I_CALLBACK_PROGRAM = SY-REPID * I_CALLBACK_PF_STATUS_SET = '' I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND1' * I_CALLBACK_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_END_OF_LIST = ' ' * I_STRUCTURE_NAME = * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * I_GRID_SETTINGS = IS_LAYOUT = GS_LAYOUT1 IT_FIELDCAT = GT_FIELDCAT * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = I_DEFAULT = 'X' * I_SAVE = 'A ' * IS_VARIANT = IT_EVENTS = GT_EVENTS * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * O_PREVIOUS_SRAL_HANDLER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES T_OUTTAB = GT_QUERY_ALV EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. FORM FRM_USER_COMMAND1 USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. CASE R_UCOMM. WHEN 'BACK' OR 'CANCEL' OR 'EXIT'. DATA : LV_SELTAB TYPE TABLE OF RSPARAMS. CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS' "获取当前的选择屏幕元素 EXPORTING CURR_REPORT = SY-REPID * IMPORTING * SP = TABLES SELECTION_TABLE = LV_SELTAB * SELECTION_TABLE_255 = EXCEPTIONS NOT_FOUND = 1 NO_REPORT = 2 OTHERS = 3. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. "使用获取到的屏幕元素跳转初始界面 SUBMIT ZNMMR037 WITH SELECTION-TABLE LV_SELTAB VIA SELECTION-SCREEN. WHEN 'DELETE'. IF R2 = 'X'. PERFORM FRM_DELETE_DATA. ENDIF. WHEN OTHERS. ENDCASE. ENDFORM. FORM FRM_USER_COMMAND2 USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. CASE R_UCOMM. WHEN 'BACK' OR 'CANCEL' OR 'EXIT'. LEAVE TO SCREEN 0. WHEN OTHERS. ENDCASE. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DELETE_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_DELETE_DATA . DATA : LS_COUNT TYPE I VALUE 0."删除记录的条数 DATA : LT_ZNMMT037A TYPE TABLE OF ZNMMT037A. DATA : LS_ZNMMT037A TYPE ZNMMT037A. DATA : LT_ALV LIKE GT_QUERY_ALV. DATA : LS_ALV LIKE LINE OF LT_ALV. CLEAR : LT_ZNMMT037A, LS_ZNMMT037A, LT_ALV, LS_ALV. LOOP AT GT_QUERY_ALV INTO GS_QUERY_ALV. IF GS_QUERY_ALV-BOX EQ 'X'. MOVE-CORRESPONDING GS_QUERY_ALV TO LS_ALV. APPEND LS_ALV TO LT_ALV. CLEAR LS_ALV. LS_ZNMMT037A-LIFNR = GS_QUERY_ALV-LIFNR. LS_ZNMMT037A-EKORG = GS_QUERY_ALV-EKORG. LS_ZNMMT037A-WERKS = GS_QUERY_ALV-WERKS. LS_ZNMMT037A-EMAIL = GS_QUERY_ALV-EMAIL. LS_ZNMMT037A-EKGRP = GS_QUERY_ALV-EKGRP. APPEND LS_ZNMMT037A TO LT_ZNMMT037A. CLEAR LS_ZNMMT037A. ENDIF. ENDLOOP. IF LT_ZNMMT037A IS INITIAL. MESSAGE E322(ZMM) DISPLAY LIKE 'W'. ENDIF. DELETE ZNMMT037A FROM TABLE LT_ZNMMT037A. IF SY-SUBRC EQ 0. COMMIT WORK AND WAIT. LOOP AT LT_ALV INTO LS_ALV. DELETE TABLE GT_QUERY_ALV FROM LS_ALV. LS_COUNT = LS_COUNT + 1. ENDLOOP. MESSAGE S104(ZMM) WITH LS_COUNT. DATA: LV_REF_GRID TYPE REF TO CL_GUI_ALV_GRID, LV_VALID TYPE C. IF LV_REF_GRID IS INITIAL. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = LV_REF_GRID. ENDIF. IF NOT LV_REF_GRID IS INITIAL. LV_REF_GRID->CHECK_CHANGED_DATA( IMPORTING E_VALID = LV_VALID ). ENDIF. IF LV_VALID IS NOT INITIAL. LV_REF_GRID->REFRESH_TABLE_DISPLAY( ) . ENDIF. ELSE. ROLLBACK WORK. MESSAGE E105(ZMM). ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CHECK_AUTH *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_CHECK_AUTH . DATA LV_NAME TYPE STRING . CALL FUNCTION 'ZMM_GET_DOMAIN' IMPORTING DOMAIN_NAME = LV_NAME. SELECT SINGLE ZNMMT037B~DOMAIN_USER INTO @DATA(LV_DOMAIN) FROM ZNMMT037B WHERE ZPROGRAM = 'ZNMMR037' AND DOMAIN_USER = @LV_NAME. SELECT SINGLE ZNMMT037B~UNAME INTO @DATA(LV_UNAME) FROM ZNMMT037B WHERE ZPROGRAM = 'ZNMMR037' AND UNAME = @SY-UNAME. IF LV_DOMAIN IS INITIAL AND LV_UNAME IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-019 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CHECK *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_CHECK . DATA: LV_STRING TYPE STRING. DATA : LV_NAME TYPE STRING. FIELD-SYMBOLS : <LFS_WERKS> LIKE GS_WERKS. CLEAR GT_WERKS. CLEAR GS_WERKS. IF S_WERKS1[] IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-023. LEAVE LIST-PROCESSING. ELSE. CALL FUNCTION 'ZMM_GET_DOMAIN' IMPORTING DOMAIN_NAME = LV_NAME. SELECT ZME2M_PLANT~UNAME , ZME2M_PLANT~USER_DOMAIN ,ZME2M_PLANT~WERKS_LIST FROM ZME2M_PLANT WHERE ZME2M_PLANT~USER_DOMAIN = @LV_NAME INTO TABLE @DATA(LT_PLANT). SORT LT_PLANT BY WERKS_LIST. SELECT T001W~WERKS FROM T001W WHERE T001W~WERKS IN @S_WERKS1 INTO CORRESPONDING FIELDS OF TABLE @GT_WERKS. SORT GT_WERKS BY WERKS. IF GT_WERKS IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-022 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING. ENDIF. IF LT_PLANT IS NOT INITIAL."在单点登录权限里面的用户在需要检查,不在里面的不需要检查 LOOP AT LT_PLANT INTO DATA(LS_PLANT). READ TABLE GT_WERKS WITH KEY WERKS = LS_PLANT-WERKS_LIST TRANSPORTING NO FIELDS BINARY SEARCH. IF SY-SUBRC <> 0. DELETE GT_WERKS WHERE WERKS = LS_PLANT-WERKS_LIST. ENDIF. ENDLOOP. ENDIF. IF GT_WERKS IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-021. LEAVE LIST-PROCESSING . ENDIF. LOOP AT GT_WERKS ASSIGNING <LFS_WERKS> . AUTHORITY-CHECK OBJECT 'M_BEST_WRK' ID 'ACTVT' FIELD '03' ID 'WERKS' FIELD <LFS_WERKS>-WERKS. IF SY-SUBRC <> 0. <LFS_WERKS>-FLAG = 'X'. ENDIF. ENDLOOP. DELETE GT_WERKS WHERE FLAG = 'X'. IF GT_WERKS IS INITIAL. MESSAGE S000(ZMM) WITH TEXT-020 DISPLAY LIKE 'W'. LEAVE LIST-PROCESSING . ENDIF. ENDIF. CLEAR S_WERKS1[]. CLEAR S_WERKS1. LOOP AT GT_WERKS INTO GS_WERKS. S_WERKS1-SIGN = 'I'. S_WERKS1-OPTION = 'EQ'. S_WERKS1-LOW = GS_WERKS-WERKS. APPEND S_WERKS1. CLEAR S_WERKS1. ENDLOOP. ENDFORM.
05-16
14:13:40.801 [ForkJoinPool.commonPool-worker-3] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10003, pstmt-20025} execute error. INSERT INTO ai_event_payload(send_time, ability, event_id, src_index, src_type, src_name, event_type, happen_time, stop_time, location_name, handle_status, event_level, remark, first_remind_time, last_remind_time, remind_count, two_remind_time,pic_uri, svr_index_code) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?, ?,?,?) on duplicate key update send_time = VALUES (send_time), ability = VALUES (ability), src_index = VALUES (src_index), src_type = VALUES (src_type), src_name = VALUES (src_name), event_type = VALUES (event_type), happen_time = VALUES (happen_time), stop_time = VALUES (stop_time), location_name = VALUES (location_name), handle_status = VALUES (handle_status), event_level = VALUES (event_level), remark = VALUES (remark), first_remind_time = VALUES (first_remind_time), last_remind_time = VALUES (last_remind_time), remind_count = VALUES (remind_count), two_remind_time = VALUES (two_remind_time), pic_uri = VALUES (pic_uri), svr_index_code = VALUES (svr_index_code) com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:124) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64) at com.sun.proxy.$Proxy255.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) at com.sun.proxy.$Proxy138.insert(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) at com.sun.proxy.$Proxy189.insertEventPayload(Unknown Source) at com.gcvcloud.interfaceservice.service.HaiKangService.processSingleEvent(HaiKangService.java:154) at com.gcvcloud.interfaceservice.service.HaiKangService.processWarnings(HaiKangService.java:62) at com.gcvcloud.interfaceservice.service.HaiKangService$$FastClassBySpringCGLIB$$f94d55fb.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) at com.gcvcloud.interfaceservice.service.HaiKangService$$EnhancerBySpringCGLIB$$cf150d9b.processWarnings(<generated>) at com.gcvcloud.interfaceservice.controller.WarningNotificationController.lambda$handleEvent$0(WarningNotificationController.java:48) at java.util.concurrent.CompletableFuture$AsyncRun.run$$$capture(CompletableFuture.java:1626) at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java) at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1618) at java.util.concurrent.ForkJoinTask.doExec$$$capture(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) 14:13:40.801 [ForkJoinPool.commonPool-worker-1] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10005, pstmt-20041} execute error. INSERT INTO ai_event_payload(send_time, ability, event_id, src_index, src_type, src_name, event_type, happen_time, stop_time, location_name, handle_status, event_level, remark, first_remind_time, last_remind_time, remind_count, two_remind_time,pic_uri, svr_index_code) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?, ?,?,?) on duplicate key update send_time = VALUES (send_time), ability = VALUES (ability), src_index = VALUES (src_index), src_type = VALUES (src_type), src_name = VALUES (src_name), event_type = VALUES (event_type), happen_time = VALUES (happen_time), stop_time = VALUES (stop_time), location_name = VALUES (location_name), handle_status = VALUES (handle_status), event_level = VALUES (event_level), remark = VALUES (remark), first_remind_time = VALUES (first_remind_time), last_remind_time = VALUES (last_remind_time), remind_count = VALUES (remind_count), two_remind_time = VALUES (two_remind_time), pic_uri = VALUES (pic_uri), svr_index_code = VALUES (svr_index_code) com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:124) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64) at com.sun.proxy.$Proxy255.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) at com.sun.proxy.$Proxy138.insert(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) at com.sun.proxy.$Proxy189.insertEventPayload(Unknown Source) at com.gcvcloud.interfaceservice.service.HaiKangService.processSingleEvent(HaiKangService.java:154) at com.gcvcloud.interfaceservice.service.HaiKangService.processWarnings(HaiKangService.java:62) at com.gcvcloud.interfaceservice.service.HaiKangService$$FastClassBySpringCGLIB$$f94d55fb.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) at com.gcvcloud.interfaceservice.service.HaiKangService$$EnhancerBySpringCGLIB$$cf150d9b.processWarnings(<generated>) at com.gcvcloud.interfaceservice.controller.WarningNotificationController.lambda$handleEvent$0(WarningNotificationController.java:48) at java.util.concurrent.CompletableFuture$AsyncRun.run$$$capture(CompletableFuture.java:1626) at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java) at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1618) at java.util.concurrent.ForkJoinTask.doExec$$$capture(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) 14:13:42.766 [ForkJoinPool.commonPool-worker-7] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10007, pstmt-20047} execute error. INSERT INTO ai_event_payload(send_time, ability, event_id, src_index, src_type, src_name, event_type, happen_time, stop_time, location_name, handle_status, event_level, remark, first_remind_time, last_remind_time, remind_count, two_remind_time,pic_uri, svr_index_code) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?, ?,?,?) on duplicate key update send_time = VALUES (send_time), ability = VALUES (ability), src_index = VALUES (src_index), src_type = VALUES (src_type), src_name = VALUES (src_name), event_type = VALUES (event_type), happen_time = VALUES (happen_time), stop_time = VALUES (stop_time), location_name = VALUES (location_name), handle_status = VALUES (handle_status), event_level = VALUES (event_level), remark = VALUES (remark), first_remind_time = VALUES (first_remind_time), last_remind_time = VALUES (last_remind_time), remind_count = VALUES (remind_count), two_remind_time = VALUES (two_remind_time), pic_uri = VALUES (pic_uri), svr_index_code = VALUES (svr_index_code) com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:124) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64) at com.sun.proxy.$Proxy255.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) at com.sun.proxy.$Proxy138.insert(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) at com.sun.proxy.$Proxy189.insertEventPayload(Unknown Source) at com.gcvcloud.interfaceservice.service.HaiKangService.processSingleEvent(HaiKangService.java:154) at com.gcvcloud.interfaceservice.service.HaiKangService.processWarnings(HaiKangService.java:62) at com.gcvcloud.interfaceservice.service.HaiKangService$$FastClassBySpringCGLIB$$f94d55fb.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) at com.gcvcloud.interfaceservice.service.HaiKangService$$EnhancerBySpringCGLIB$$cf150d9b.processWarnings(<generated>) at com.gcvcloud.interfaceservice.controller.WarningNotificationController.lambda$handleEvent$0(WarningNotificationController.java:48) at java.util.concurrent.CompletableFuture$AsyncRun.run$$$capture(CompletableFuture.java:1626) at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java) at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1618) at java.util.concurrent.ForkJoinTask.doExec$$$capture(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) 14:29:56.025 [ForkJoinPool.commonPool-worker-7] ERROR druid.sql.Statement - [statementLogError,148] - {conn-10007, pstmt-20029} execute error. INSERT INTO ai_event_payload(send_time, ability, event_id, src_index, src_type, src_name, event_type, happen_time, stop_time, location_name, handle_status, event_level, remark, first_remind_time, last_remind_time, remind_count, two_remind_time,pic_uri, svr_index_code) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?, ?,?,?) on duplicate key update send_time = VALUES (send_time), ability = VALUES (ability), src_index = VALUES (src_index), src_type = VALUES (src_type), src_name = VALUES (src_name), event_type = VALUES (event_type), happen_time = VALUES (happen_time), stop_time = VALUES (stop_time), location_name = VALUES (location_name), handle_status = VALUES (handle_status), event_level = VALUES (event_level), remark = VALUES (remark), first_remind_time = VALUES (first_remind_time), last_remind_time = VALUES (last_remind_time), remind_count = VALUES (remind_count), two_remind_time = VALUES (two_remind_time), pic_uri = VALUES (pic_uri), svr_index_code = VALUES (svr_index_code) com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:124) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3446) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:434) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3444) at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:152) at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64) at com.sun.proxy.$Proxy255.update(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) at com.sun.proxy.$Proxy138.insert(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) at com.sun.proxy.$Proxy189.insertEventPayload(Unknown Source) at com.gcvcloud.interfaceservice.service.HaiKangService.processSingleEvent(HaiKangService.java:154) at com.gcvcloud.interfaceservice.service.HaiKangService.processWarnings(HaiKangService.java:62) at com.gcvcloud.interfaceservice.service.HaiKangService$$FastClassBySpringCGLIB$$f94d55fb.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) at com.gcvcloud.interfaceservice.service.HaiKangService$$EnhancerBySpringCGLIB$$d0369729.processWarnings(<generated>) at com.gcvcloud.interfaceservice.controller.WarningNotificationController.lambda$handleEvent$0(WarningNotificationController.java:48) at java.util.concurrent.CompletableFuture$AsyncRun.run$$$capture(CompletableFuture.java:1626) at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java) at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1618) at java.util.concurrent.ForkJoinTask.doExec$$$capture(ForkJoinTask.java:289) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)什么错误
10-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值