*&---------------------------------------------------------------------* *& Include ZPTP_VARO1 *&---------------------------------------------------------------------* FIELD-SYMBOLS: TYPE sysubrc. DATA: gv_screen_display TYPE char1, gs_nast TYPE nast, cl_output_po TYPE REF TO cl_purchase_order_output, cl_output_knt TYPE REF TO cl_purchase_contract_output, cl_output_schedagr TYPE REF TO cl_purchase_sched_agr_output, cl_output_rfq TYPE REF TO cl_purchase_rfq_output, " object for rfq cl_output_schedagr_rel TYPE REF TO cl_purchase_sched_rel_output, "object for agree with release gv_ebeln TYPE ebeln, gs_ekko TYPE ekko, gv_vend_cntry TYPE lfa1-land1, gv_add_nr TYPE adr6-addrnumber, fp_outputparams TYPE sfpoutputparams, * Varo declarations gv_pdf TYPE xstring, gv_doc TYPE text40, gv_ccode TYPE /flm/cust_code, gv_ftype TYPE /flm/ftype_code, gv_template TYPE /flm/flang, gv_fver TYPE /flm/fver, gv_fid TYPE /flm/fid, gv_fidvar TYPE /flm/id_var, gs_mess TYPE bapiret2, gt_mess TYPE TABLE OF bapiret2, gs_fpe TYPE /flm/fpe, gv_cms_doc TYPE /flm/cms_doc, gt_variables TYPE /flm/vars_t, gs_variables TYPE /flm/vars_s, gv_reprint TYPE flag. * Floe declarations TYPES: BEGIN OF ty_floe_rec_email_s, email TYPE ad_smtpadr, type TYPE char1, END OF ty_floe_rec_email_s. TYPES: ty_floe_rec_email_t TYPE TABLE OF ty_floe_rec_email_s. TYPES: BEGIN OF ty_floe_var_code_s, var_code TYPE char30, value TYPE string, row_num TYPE numc3, parent_row_num TYPE numc3, END OF ty_floe_var_code_s. TYPES: ty_floe_var_code_t TYPE TABLE OF ty_floe_var_code_s. DATA: gt_rec_emails TYPE ty_floe_rec_email_t, gs_rec_email TYPE ty_floe_rec_email_s, gt_vars TYPE ty_floe_var_code_t, gs_vars TYPE ty_floe_var_code_s, gv_rec_email_addr TYPE ad_smtpadr, gs_attach TYPE /floe/att_s, gt_attach TYPE /floe/att_t, gv_im_doc TYPE /floe/doc_ref, gv_etype TYPE /floe/etype_code, gv_ebody TYPE string, gv_esubject_long TYPE /floe/esubject_long, gv_no_commit TYPE flag, gt_lines TYPE TABLE OF tline, gs_lines TYPE tline, gv_text TYPE string, gv_tdname TYPE tdobname, gv_document TYPE char10. *&--------------------------------------------------------------------* *& Form entry_varo *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -->ENT_RETCO text * -->ENT_SCREEN text *---------------------------------------------------------------------* FORM entry_varo USING ent_retco LIKE sy-subrc ent_screen TYPE c. * * Assign retcode ASSIGN ent_retco TO . * gv_screen_display = ent_screen. gs_nast = nast. * PERFORM processing_varo. * ENDFORM. " entry_varo *&--------------------------------------------------------------------* *& Form entry_floe *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* * -->ENT_RETCO text * -->ENT_SCREEN text *---------------------------------------------------------------------* FORM entry_floe USING ent_retco LIKE sy-subrc ent_screen TYPE c. * * Assign retcode ASSIGN ent_retco TO . * gv_screen_display = ent_screen. gs_nast = nast. * PERFORM processing_floe. * ENDFORM. " entry_varo *&---------------------------------------------------------------------* *& Form processing Varo *&---------------------------------------------------------------------* FORM processing_varo. *--- Retrieve the data PERFORM get_data. CHECK IS INITIAL. *--- Print form PERFORM print_data_varo. CHECK IS INITIAL. ENDFORM. " processing_varo *&---------------------------------------------------------------------* *& Form processing Varo *&---------------------------------------------------------------------* FORM processing_floe. * Check email type gv_etype = tnapr-fonam. CHECK gv_etype IS NOT INITIAL. *--- Retrieve the data PERFORM get_data. CHECK IS INITIAL. *--- Print form PERFORM send_data_floe. CHECK IS INITIAL. ENDFORM. " processing_varo *&--------------------------------------------------------------------* *& Form get_data *&--------------------------------------------------------------------* FORM get_data. * DATA: l_xdruvo TYPE c, l_xfz TYPE c. * IF gs_nast-aende EQ space. l_xdruvo = prntev_new. ELSE. l_xdruvo = prntev_chg. ENDIF. * IF gs_nast-kappl = 'EF'. * Purchase order CREATE OBJECT cl_output_po TYPE cl_purchase_order_output EXPORTING c_mode = l_xdruvo es_nast = gs_nast iv_preview = gv_screen_display. CALL METHOD cl_output_po->read. gv_add_nr = cl_output_po->is_ekko-adrnr. gv_vend_cntry = cl_output_po->is_ekko-land_vend. ELSEIF nast-kappl = 'EL'. *Sceduling Agreement with release CREATE OBJECT cl_output_schedagr_rel TYPE cl_purchase_sched_rel_output EXPORTING c_mode = l_xdruvo xfz = l_xfz es_nast = gs_nast. CALL METHOD cl_output_schedagr_rel->read. gv_add_nr = cl_output_schedagr_rel->is_ekko-adrnr. gv_vend_cntry = cl_output_schedagr_rel->is_ekko-land_vend. ELSE. MOVE nast-objky(10) TO gv_ebeln. SELECT SINGLE * FROM ekko INTO gs_ekko WHERE ebeln EQ gv_ebeln. IF gs_ekko-bstyp = 'K'. * Contract CREATE OBJECT cl_output_knt TYPE cl_purchase_contract_output EXPORTING c_mode = l_xdruvo es_nast = gs_nast. CALL METHOD cl_output_knt->read. gv_add_nr = cl_output_knt->is_ekko-adrnr. gv_vend_cntry = cl_output_knt->is_ekko-land_vend. ELSEIF gs_ekko-bstyp = 'A'. *RFQ CREATE OBJECT cl_output_rfq TYPE cl_purchase_rfq_output EXPORTING c_mode = l_xdruvo es_nast = gs_nast. CALL METHOD cl_output_rfq->read. gv_add_nr = cl_output_rfq->is_ekko-adrnr. gv_vend_cntry = cl_output_rfq->is_ekko-land_vend. ELSE. * Scheduling Agreement CREATE OBJECT cl_output_schedagr TYPE cl_purchase_sched_agr_output EXPORTING c_mode = l_xdruvo es_nast = gs_nast. CALL METHOD cl_output_schedagr->read. gv_add_nr = cl_output_schedagr->is_ekko-adrnr. gv_vend_cntry = cl_output_schedagr->is_ekko-land_vend. ENDIF. ENDIF. * IF nast-kappl = 'EF'. = cl_output_po->ret_code. IF IS NOT INITIAL. " 1468512 syst-msgv1 = gs_ekko-ebeln. syst-msgno = '140'. ENDIF. ELSEIF nast-kappl = 'EL'. = cl_output_schedagr_rel->ret_code. IF IS NOT INITIAL. " 1468512 syst-msgv1 = gs_ekko-ebeln. syst-msgno = '140'. ENDIF. ELSE. IF gs_ekko-bstyp = 'K'. = cl_output_knt->ret_code. IF IS NOT INITIAL. " 1468512 syst-msgv1 = gs_ekko-ebeln. syst-msgno = '140'. ENDIF. ELSEIF gs_ekko-bstyp = 'A'. = cl_output_rfq->ret_code. IF IS NOT INITIAL. " 1468512 syst-msgv1 = gs_ekko-ebeln. syst-msgno = '140'. ENDIF. ELSE . = cl_output_schedagr->ret_code. IF IS NOT INITIAL. " 1468512 syst-msgv1 = gs_ekko-ebeln. syst-msgno = '140'. ENDIF. ENDIF. ENDIF. IF IS NOT INITIAL. CALL FUNCTION 'NAST_PROTOCOL_UPDATE' EXPORTING msg_arbgb = 'ME' msg_nr = syst-msgno msg_ty = 'W' msg_v1 = syst-msgv1 msg_v2 = syst-msgv2 msg_v3 = syst-msgv3 msg_v4 = syst-msgv4 EXCEPTIONS OTHERS = 1. ENDIF. * ENDFORM. " get_data *&--------------------------------------------------------------------* *& Form print_data_varo. *&--------------------------------------------------------------------* FORM print_data_varo. PERFORM fill_control_structure USING gs_nast gv_screen_display CHANGING fp_outputparams. * Set up defaults gv_ftype = tnapr-sform. gv_template = nast-spras. gv_fver = '00'. gv_doc = nast-objky. CLEAR gv_reprint. *----------------------------------------------------------------------* * Check for Re-print *----------------------------------------------------------------------* SELECT * INTO gs_nast FROM nast WHERE kappl = gs_nast-kappl AND objky = gs_nast-objky AND kschl = gs_nast-kschl AND spras = gs_nast-spras AND parnr = gs_nast-parnr AND parvw = gs_nast-parvw AND nacha BETWEEN '1' AND '4' AND vstat = '1'. IF gs_nast-aende IS INITIAL. gv_reprint = 'X'. ENDIF. ENDSELECT. * * Remove reprint logic CLEAR gv_reprint. * Find previous output for reprint. * IF gv_reprint = 'X'. * SELECT * FROM /flm/fpe UP TO 1 ROWS INTO gs_fpe WHERE ftype = gv_ftype AND flang = gv_template AND document = gv_doc ORDER BY id DESCENDING. ENDSELECT. * IF sy-subrc EQ 0. * Previous output found * gv_ftype = gs_fpe-ftype. gv_fver = gs_fpe-fver. gv_template = gs_fpe-template. gv_fid = gs_fpe-id. gv_doc = gs_fpe-document. ELSE. * No form found CLEAR gv_reprint. ENDIF. * ENDIF. *----------------------------------------------------------------------* * Fill variables *----------------------------------------------------------------------* CLEAR gs_variables. gs_variables-var_code = 'REPRINT'. gs_variables-value = gv_reprint. APPEND gs_variables TO gt_variables. CLEAR gs_variables. * gs_variables-var_code = 'KSCHL'. gs_variables-value = gs_nast-kschl. APPEND gs_variables TO gt_variables. CLEAR gs_variables. * gs_variables-var_code = 'SPRAS'. gs_variables-value = gs_nast-spras. APPEND gs_variables TO gt_variables. * * *----------------------------------------------------------------------* * Handle output scenario *----------------------------------------------------------------------* IF gv_screen_display NE 'X'. * CALL FUNCTION '/FLM/PDF_PRINT' EXPORTING im_ftype = gv_ftype im_outputparams = fp_outputparams im_toption = gv_template im_fver = gv_fver im_fid = gv_fid im_document = gv_doc im_variables = gt_variables IMPORTING ex_pdf = gv_pdf ex_subrc = ex_mess = gs_mess. * CALL FUNCTION 'NAST_PROTOCOL_UPDATE' EXPORTING msg_arbgb = gs_mess-id msg_nr = gs_mess-number msg_ty = gs_mess-type msg_v1 = gs_mess-message_v1 msg_v2 = gs_mess-message_v2 msg_v3 = gs_mess-message_v3 msg_v4 = gs_mess-message_v4 EXCEPTIONS OTHERS = 0. IF <> 0. RETURN. ENDIF. * ELSE. *----------------------------------------------------------------------* * Call screen to preview PDF form *----------------------------------------------------------------------* CALL FUNCTION '/FLM/PREVIEW_OUTPUT_PDF' EXPORTING im_ftype = gv_ftype im_fid = gv_fid im_fver = gv_fver im_toption = gv_template im_document = gv_doc im_variables = gt_variables * IM_DNS_SUB = * IM_HTTPS = IMPORTING ex_subrc = ex_mess = gs_mess. * ENDIF. * ENDFORM. " print_data_varo. *&---------------------------------------------------------------------* *& Form send_data_floe *&---------------------------------------------------------------------* FORM send_data_floe. * Prepare comms data PERFORM prepare_comms_data. CHECK IS INITIAL. *---------------------------------------------------------------------* * Fill recipient * Add additional recipients in recipient user-exit *---------------------------------------------------------------------* gs_rec_email-email = gv_rec_email_addr. gs_rec_email-type = '1'. APPEND gs_rec_email TO gt_rec_emails. *----------------------------------------------------------------------* * Add variables * Add additional variables in email data user-exit *----------------------------------------------------------------------* CLEAR gs_variables. gs_variables-var_code = 'REPRINT'. gs_variables-value = gv_reprint. APPEND gs_variables TO gt_variables. "Varo APPEND gs_variables TO gt_vars. "Floe * CLEAR gs_variables. gs_variables-var_code = 'KSCHL'. gs_variables-value = gs_nast-kschl. APPEND gs_variables TO gt_variables. "Varo APPEND gs_variables TO gt_vars. "Floe * CLEAR gs_variables. gs_variables-var_code = 'SPRAS'. gs_variables-value = gs_nast-spras. APPEND gs_variables TO gt_variables. "Varo APPEND gs_variables TO gt_vars. "Floe * CLEAR gs_variables. gs_variables-var_code = 'EBELN'. gs_variables-value = cl_output_po->is_ekko-ebeln. APPEND gs_variables TO gt_vars. "Floe * CLEAR gs_variables. gs_variables-var_code = 'BEDAT'. gs_variables-value = cl_output_po->is_ekko-bedat. APPEND gs_variables TO gt_vars. "Floe * IF gv_screen_display IS INITIAL. CLEAR gs_variables. gs_variables-var_code = 'FLOE_SEND'. gs_variables-value = 'X'. APPEND gs_variables TO gt_vars. "Floe ENDIF. *---------------------------------------------------------------------* * Fill PDF form parameters if one is required. *---------------------------------------------------------------------* gv_ftype = tnapr-sform. IF gv_ftype IS NOT INITIAL. * Generate PDF attachment with Varo, form type ftype. * * Set up defaults gv_ftype = tnapr-sform. gv_template = gs_nast-spras. gv_fver = '00'. gv_doc = gs_nast-objky. gv_document = gs_nast-objky. *----------------------------------------------------------------------* * Check if this is a re-print and set form id *----------------------------------------------------------------------* * SELECT * FROM /flm/fpe UP TO 1 ROWS INTO gs_fpe WHERE ftype = gv_ftype AND flang = gv_template AND document = gv_doc ORDER BY id DESCENDING. ENDSELECT. * IF sy-subrc EQ 0 AND gs_nast-aende IS INITIAL. * Previous output found * gv_ftype = gs_fpe-ftype. gv_fver = gs_fpe-fver. gv_template = gs_fpe-template. gv_fid = gs_fpe-id. gv_doc = gs_fpe-document. * gv_reprint = 'X'. ENDIF. *----------------------------------------------------------------------* * Is this a PDF preview? *----------------------------------------------------------------------* IF NOT gv_screen_display IS INITIAL. CALL FUNCTION '/FLM/PREVIEW_OUTPUT_PDF' EXPORTING im_ftype = gv_ftype im_fid = gv_fid im_fver = gv_fver im_toption = gv_template im_document = gv_doc im_variables = gt_variables * IM_DNS_SUB = * IM_HTTPS = IMPORTING ex_subrc = ex_mess = gs_mess. RETURN. ELSE. * Call Varo to generate the PDF * CALL FUNCTION '/FLM/OUTPUT_PDF_PDL_OUT' EXPORTING im_ftype = gv_ftype im_fid = gv_fid im_fver = gv_fver im_toption = gv_template im_document = gv_doc im_variables = gt_variables im_no_print = 'X' * IM_PDLTYPE = * IM_XDCNAME = IMPORTING ex_pdf = gv_pdf * EX_PDL = * EX_PAGECOUNT = * EX_JOB_ID = ex_subrc = ex_mess = gs_mess. * CALL FUNCTION 'NAST_PROTOCOL_UPDATE' EXPORTING msg_arbgb = gs_mess-id msg_nr = gs_mess-number msg_ty = gs_mess-type msg_v1 = gs_mess-message_v1 msg_v2 = gs_mess-message_v2 msg_v3 = gs_mess-message_v3 msg_v4 = gs_mess-message_v4 EXCEPTIONS OTHERS = 0. IF <> 0. RETURN. ENDIF. * * Get new form id etc. gv_cms_doc = gs_mess-parameter. * CALL METHOD /flm/core=>split_xdp_cms_doc EXPORTING im_cms_doc = gv_cms_doc IMPORTING ex_ccode = gv_ccode ex_ftype = gv_ftype ex_fver = gv_fver ex_flang = gv_template ex_fid = gv_fid ex_fid_var = gv_fidvar. * *---------------------------------------------------------------------* * Add attachment * Add additional attachments in attachment user-exit *---------------------------------------------------------------------* * CONCATENATE 'PO_' gv_document '.pdf' INTO gs_attach-att_filename. gs_attach-att_description = 'Purchase_Order_output'. gs_attach-att_data = gv_pdf. APPEND gs_attach TO gt_attach. ENDIF. ENDIF. *------------------------------------------------------------------- * Determine whether this is run as update task * CLEAR: gv_inupd, gv_no_commit. CALL METHOD cl_system_transaction_state=>get_in_update_task RECEIVING in_update_task = gv_inupd. * IF gv_inupd = 1. gv_no_commit = 'X'. ENDIF. * *----------------------------------------------------------------------* * Call Floe API *----------------------------------------------------------------------* CLEAR gv_ebody. * gv_im_doc = gv_document. * CALL FUNCTION '/FLOE/EMAIL_OUT' EXPORTING im_etype = gv_etype im_elang = gs_nast-spras im_document = gv_im_doc im_rec_emails = gt_rec_emails im_variables = gt_vars im_send_immediately = 'X' im_attachments = gt_attach im_preview = gv_screen_display im_no_commit = gv_no_commit IMPORTING ex_subrc = ex_ebody = gv_ebody ex_mess = gt_mess ex_rec_emails = gt_rec_emails ex_attachments = gt_attach ex_esubject_long = gv_esubject_long. LOOP AT gt_mess INTO gs_mess. CALL FUNCTION 'NAST_PROTOCOL_UPDATE' EXPORTING msg_arbgb = gs_mess-id msg_nr = gs_mess-number msg_ty = gs_mess-type msg_v1 = gs_mess-message_v1 msg_v2 = gs_mess-message_v2 msg_v3 = gs_mess-message_v3 msg_v4 = gs_mess-message_v4 EXCEPTIONS OTHERS = 0. ENDLOOP. * * Drop out if API has thrown an error IF NE 0. RETURN. ENDIF. * *----------------------------------------------------------------------* * Preview Email if required. *----------------------------------------------------------------------* IF NOT gv_screen_display IS INITIAL. * CALL FUNCTION '/FLOE/EMAIL_VIEWER' EXPORTING im_preview = 'X' * IM_ETYPE = * IM_EID = im_esubject = 'FLOE Preview' im_ebody = gv_ebody im_rec_emails = gt_rec_emails im_attachments = gt_attach IMPORTING ex_subrc = . * ENDIF. * ENDFORM. " send_data_floe *&---------------------------------------------------------------------* *& Form prepare comms data *&---------------------------------------------------------------------* FORM prepare_comms_data. * CALL FUNCTION 'ADDR_GET_NEXT_COMM_TYPE' EXPORTING strategy = gs_nast-tcode address_number = gv_add_nr IMPORTING comm_type = gv_comm_type comm_values = gv_comm_values EXCEPTIONS address_not_exist = 1 person_not_exist = 2 no_comm_type_found = 3 internal_error = 4 parameter_error = 5 OTHERS = 6. * gv_rec_email_addr = gv_comm_values-adsmtp-smtp_addr. * CHECK gv_rec_email_addr IS NOT INITIAL. * ENDFORM. " prepare comms data