Technology Blog Posts by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
padchalingam
Explorer
2,055

This Cross-Application Fiori APP allows to download any Output of Print forms in PDF format based on FDP (Form data provider interface). Just by choosing the application/document type (e.g. MM-Purchase Order, SD-Billing Document,..etc) and selecting the document criteria, it produces the list of documents with the downloadable PDF links. padchalingam_0-1752520997136.png

Note- I am very grateful to the author(Prabhjot Bhatia )  of the blog ABAP Programming Model for SAP Fiori – 13 – How to Preview and Download PDF in Fiori Apps |   , which provided me the tips on creating the downloadable PDF links.

Note- I have created 2 custom config tables to store some key name-value pairs(such as "sender country",..etc for Master and Content ADOBE Templates), which will be used in this APP.  I must confess that this is a limitation in this APP development as the better approach is to derive these keys value dynamically.

You can create this APP in your environment with the following steps.

Step 1 -  Create the following ABAP dictionary objects. Table 1 and 2 will be used as the configuration tables to retrieve key Name-Value pairs for Master and Content Adobe templates. 

Table 1 - ZDCP_FP_IT_M_KEY

padchalingam_0-1752522028077.png

Table 2 - ZDCP_FP_PDF_FORM

padchalingam_1-1752522109907.png

Assign the Table 1 in the foreign key relationship to the field IV_OBJECT_TYPE in Table 1.

Maintenance view ZDCP_FP_FORMS_MV, which combines the Table 1 and 2.

padchalingam_0-1752523718789.png

Sample data for table 1 and 2

padchalingam_0-1752524069313.png

padchalingam_1-1752524118773.png

Note - By debugging CL_APOC_OR_H_UTILITY->_RENDER_DOCUMENT_MULTI  in tcode mE22n, you can retrieve the standard name-value pairs such as RecieverpartnerNumber, sender countries,..etc. If you dig deeper, you could be able to retrieve these value dynamically based on document number(e.g. PO number) during runtime, instead of reading from configuration table.

 

Note- It is possible to add multiple ADOBE templates (both master and content) in the table ZDCP_FP_PDF_FORM. This allows to test multiple ADOBE layouts. In this sample data, Version 1 represent standard SAP ADOBE templates and Version 2 represent custom made templates.

 

 

 

 

Structure ZDCP_OBJECT_PDF_V2

padchalingam_1-1752523718791.png

 

 

Step 2 – Create the following FM ZGENERATE_PDF_XSTRING and the subroutine

FUNCTION ZGENERATE_PDF_XSTRING.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_OBJECT_TYPE) TYPE  STRING
*"     REFERENCE(IV_OBJECT_NR) TYPE  STRING
*"     REFERENCE(IV_VERSION_NR) TYPE  VERSNR_KK
*"     REFERENCE(IV_FYEAR) TYPE  /ACCGO/E_FISCAL_YEAR
*"     REFERENCE(IV_CC) TYPE  /ACCGO/E_COMPANYCODE_VH
*"  EXPORTING
*"     REFERENCE(EV_DOCUMENT_DATA) TYPE  XSTRING
*"     REFERENCE(EV_PAGES) TYPE  FPPAGECOUNT
*"     REFERENCE(EV_TRACE_STRING) TYPE  STRING
*"     REFERENCE(EV_STOP_PROCESSING) TYPE  ABAP_BOOL
*"     REFERENCE(EV_PDL_TYPE) TYPE  APOC_PDL_TYPE
*"     REFERENCE(ET_MESSAGE) TYPE  CL_SOMU_FORM_SERVICES=>TY_GT_MESSAGE
*"----------------------------------------------------------------------
  TYPES:
    BEGIN OF ty_gs_fdp_key,
      name  TYPE string,
      value TYPE string,
    END OF ty_gs_fdp_key .
  TYPES:
    ty_gt_fdp_key TYPE STANDARD TABLE OF ty_gs_fdp_key WITH EMPTY KEY .
  DATA wa_message TYPE LINE OF cl_somu_form_services=>ty_gt_message.
  DATA: it_master_keys    TYPE ty_gt_fdp_key .
  DATA: ls_master_keys    TYPE name2stringvalue_table, wa_ls_master_keys TYPE name2stringvalue.
*NAME2STRINGVALUE
  DATA lv_pq_name      TYPE pq_qname.
  DATA lv_xml_in       TYPE xstring.
  DATA lv_stop         TYPE boole_d.
  DATA: it_key          TYPE ty_gt_fdp_key, ls_appl_keys    TYPE name2stringvalue_table, wa_ls_appl_keys TYPE ty_gs_fdp_key.
  DATA lo_hlp          TYPE REF TO if_apoc_or_h_factory_internal.
  DATA lo_fp_srv       TYPE REF TO if_apoc_somu_form_services.
  DATA render_options TYPE cl_somu_form_services=>ty_gs_render_options.
  DATA ls_merge_doc    TYPE if_apoc_document_merge=>document_object.
  DATA lt_msg          TYPE cl_somu_form_services=>ty_gt_message.
  DATA lt_msg_all      TYPE cl_somu_form_services=>ty_gt_message.
  DATA lv_xml_out      TYPE xstring.
  DATA lv_pdl_type     TYPE apoc_pdl_type.
  DATA: pdf_form TYPE  fpwbformname VALUE 'ZZ1_DCP_MM_PUR_PURCHASE_ORDER', pdf_mfor TYPE apoc_form_master_template_id VALUE 'ZZ1_DCP_MM_PUR_ORDER_MASTER'  .
  DATA wa_zdcp_fp_forms_mv TYPE zdcp_fp_forms_mv.
  PERFORM set_default_keys  USING iv_object_type iv_object_nr iv_version_nr CHANGING ls_master_keys ls_appl_keys pdf_form pdf_mfor.


* Object Type specific
  CASE iv_object_type.
    WHEN 'PURCHASE_ORDER'.
      wa_ls_appl_keys-name = 'PurchaseOrder'.
      wa_ls_appl_keys-value =  iv_object_nr.
      APPEND wa_ls_appl_keys TO ls_appl_keys.

      wa_ls_appl_keys-name = 'PurchaseOrderChangeFlag'.
      wa_ls_appl_keys-value = ''.
    WHEN 'BILLING_DOCUMENT'.
      wa_ls_appl_keys-name = 'BillingDocument'.
      wa_ls_appl_keys-value =  iv_object_nr.
  ENDCASE.

  APPEND wa_ls_appl_keys TO ls_appl_keys.
*Validate the Document
  CASE iv_object_type.
    WHEN 'PURCHASE_ORDER'.
      SELECT SINGLE ebeln FROM ekko INTO (lv_ebeln) WHERE ebeln = _object_nr.
      IF sy-subrc NE 0.
        wa_message-type = 'E'.
        CONCATENATE 'PO ' iv_object_nr ' does not exist.' INTO wa_message-text.
        APPEND wa_message TO et_message.
*        MESSAGE i899(/cdbasis/msg) WITH 'PO ' iv_object_nr ' does not exist.'.
*        LEAVE TO TRANSACTION 'Z_PO_ADOBE'.
      ENDIF.

    WHEN 'BILLING_DOCUMENT'.
      SELECT SINGLE vbeln FROM vbrk INTO (lv_vbeln) WHERE vbeln = _object_nr.
      IF sy-subrc NE 0.
        wa_message-type = 'E'.
        CONCATENATE 'Billing Document ' iv_object_nr ' does not exist.' INTO wa_message-text.
        APPEND wa_message TO et_message.
*        MESSAGE i899(/cdbasis/msg) WITH 'Billing Document ' iv_object_nr ' does not exist.'.
*        LEAVE TO TRANSACTION 'Z_PO_ADOBE'.

      ENDIF.

  ENDCASE.


  lo_hlp = cl_apoc_or_h_factory_internal=>get_helper_factory( ).


  TRY.
      " Get form provide services
      lo_fp_srv = lo_hlp->get_somu_form_services( ).

      TRY.
          it_master_keys = ls_master_keys.
          it_key = ls_appl_keys.
          lo_fp_srv->get_document(
            EXPORTING
*        iv_master_form_name     = 'ZZ1_DCP_MM_PUR_ORDER_MASTER'
              iv_master_form_name            = pdf_mfor
*        iv_form_name            = 'ZZ1_DCP_MM_PUR_PURCHASE_ORDER'
              iv_form_name            = pdf_form
              it_key                  = it_key
*        it_filter_select_option = ls_appl-filter_options
              it_master_key           = it_master_keys
              iv_form_language        = 'E'
              iv_form_country         = 'CA'
              is_render_options       = render_options
              iv_print_queue_name     = lv_pq_name
              iv_xml                  = lv_xml_in
              iv_disable_cache        = 'X'
            IMPORTING
              ev_content              = ev_document_data
              ev_pages                = ev_pages
              ev_stop_processing      = lv_stop
              et_message              = lt_msg
              ev_xml                  = lv_xml_out
              ev_pdl_type             = lv_pdl_type ).
          INSERT LINES OF lt_msg INTO TABLE lt_msg_all.

        CATCH cx_somu_error INTO DATA(error_somu).
          DATA(text_somu) = error_somu->get_text( ).
          wa_message-type = 'E'.
          wa_message-text = text_somu.
          APPEND wa_message TO et_message.
*          MESSAGE i899(/cdbasis/msg) WITH text_somu.
          sy-subrc = 98.
      ENDTRY.
    CATCH cx_apoc_extern_services INTO DATA(error_apoc_services).
      DATA(text_apoc) = error_apoc_services->get_text( ).
      wa_message-type = 'E'.
      wa_message-text = text_apoc.
      APPEND wa_message TO et_message.
*      MESSAGE i899(/cdbasis/msg) WITH text_apoc.
  ENDTRY.

ENDFUNCTION.
FORM set_default_keys USING iv_object_type iv_object_nr iv_version_nr  CHANGING ls_master_keys TYPE name2stringvalue_table ls_appl_keys TYPE name2stringvalue_table pdf_form pdf_mfor.
  DATA: wa_ls_master_keys   TYPE name2stringvalue, wa_ls_appl_keys TYPE name2stringvalue,
        wa_zdcp_fp_forms_mv TYPE zdcp_fp_forms_mv.
  SELECT SINGLE * FROM zdcp_fp_pdf_form INTO CORRESPONDING FIELDS OF wa_zdcp_fp_forms_mv
    WHERE iv_object_type = iv_object_type
      AND iv_version_nr  = iv_version_nr.
  SELECT SINGLE * FROM zdcp_fp_it_m_key INTO  CORRESPONDING FIELDS OF wa_zdcp_fp_forms_mv
WHERE iv_object_type = iv_object_type.


  wa_ls_master_keys-name = 'Recipient'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_04.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_master_keys-name = 'OutputRequestItem'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_05.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_master_keys-name = 'OutputControlApplicationObject'.
*wa_ls_master_keys-value = '4500000369'.
  wa_ls_master_keys-value = iv_object_nr.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_master_keys-name = 'WatermarkText'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_07.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_master_keys-name = 'LocaleCountry'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_08.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_master_keys-name = 'LocaleLanguage'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_09.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_appl_keys-name = 'ReceiverPartnerNumber'.
  wa_ls_appl_keys-value = wa_zdcp_fp_forms_mv-name_par_01.
  APPEND wa_ls_appl_keys TO ls_appl_keys.
  wa_ls_appl_keys-name = 'SenderCountry'.
  wa_ls_appl_keys-value = wa_zdcp_fp_forms_mv-name_par_02.
  APPEND wa_ls_appl_keys TO ls_appl_keys.
  wa_ls_master_keys-name = 'SenderCountry'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_02.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_master_keys-name = 'RecipientRole'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_10.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_appl_keys-name = 'Language'.
  wa_ls_appl_keys-value = wa_zdcp_fp_forms_mv-name_par_03.
  APPEND wa_ls_appl_keys TO ls_appl_keys.

  wa_ls_master_keys-name = 'PrintFormDerivationRule'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_11.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_master_keys-name = 'OutputControlApplicationObjectType'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_12.
  APPEND wa_ls_master_keys TO ls_master_keys.
  wa_ls_master_keys-name = 'OutputDocumentType'.
  wa_ls_master_keys-value = wa_zdcp_fp_forms_mv-name_par_13.
  APPEND wa_ls_master_keys TO ls_master_keys.

*Document specific
  wa_ls_master_keys-name = 'OutputControlApplicationObject'.
  wa_ls_master_keys-value = iv_object_nr.
  APPEND wa_ls_master_keys TO ls_master_keys.

  pdf_form = wa_zdcp_fp_forms_mv-content_form.
  pdf_mfor = wa_zdcp_fp_forms_mv-master_form .
ENDFORM.

Note - In this FM, only the Application types PURCHASE_ORDER and BILLING_DOCUMENT are included. If you want to add additional Application types then add those type is the config tables 1 and 2 with appropriate values. Also add some additional code in the FM in the section "* Object Type specific".

Step 3 - Create a project in the tcode SEGW

padchalingam_0-1752524674477.png

Create the following entity get_pdf in this project using the structure ZDCP_OBJECT_PDF_V2.

Note- check on the field "Media author"

padchalingam_1-1752524821286.png

padchalingam_0-1752526695090.png

 

Generate the project and it will create the following classes.

padchalingam_0-1752524997241.png

Add the following code in the method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM

of the class ZCL_ZDCP_PDF_CROSS__01_DPC_EXT.

  METHOD /iwbep/if_mgw_appl_srv_runtime~get_stream.
**TRY.
*CALL METHOD SUPER->/IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM
**  EXPORTING
**    iv_entity_name          =
**    iv_entity_set_name      =
**    iv_source_name          =
**    it_key_tab              =
**    it_navigation_path      =
**    io_tech_request_context =
**  IMPORTING
**    er_stream               =
**    es_response_context     =
*    .
**  CATCH /iwbep/cx_mgw_busi_exception.
**  CATCH /iwbep/cx_mgw_tech_exception.
**ENDTRY.
    DATA: ls_stream          TYPE ty_s_media_resource, wa_zdcp_object_pdf TYPE zdcp_object_pdf_v2,
          lw_key             TYPE  /iwbep/s_mgw_name_value_pair.
    DATA ls_merge_doc    TYPE if_apoc_document_merge=>document_object.
    READ TABLE it_key_tab INTO lw_key INDEX 1.
    wa_zdcp_object_pdf-iv_object_type = lw_key-value.
    READ TABLE it_key_tab INTO lw_key INDEX 2.
    wa_zdcp_object_pdf-iv_version_nr = lw_key-value.
    READ TABLE it_key_tab INTO lw_key INDEX 3.
    wa_zdcp_object_pdf-iv_object_nr = lw_key-value.
    READ TABLE it_key_tab INTO lw_key INDEX 4.
    wa_zdcp_object_pdf-iv_fyear = lw_key-value.
    READ TABLE it_key_tab INTO lw_key INDEX 5.
    wa_zdcp_object_pdf-iv_cc = lw_key-value.
    CALL FUNCTION 'ZGENERATE_PDF_XSTRING'
      EXPORTING
        iv_object_type   = wa_zdcp_object_pdf-iv_object_type
        iv_object_nr     = wa_zdcp_object_pdf-iv_object_nr
        iv_version_nr    = wa_zdcp_object_pdf-iv_version_nr
        iv_fyear         = wa_zdcp_object_pdf-iv_fyear
        iv_cc            = wa_zdcp_object_pdf-iv_cc
      IMPORTING
        ev_document_data = ls_merge_doc-document_data
*       EV_PAGES         =
*       EV_TRACE_STRING  =
*       EV_STOP_PROCESSING       =
*       EV_PDL_TYPE      =
*       ET_MESSAGE       =
      .

    ls_stream-value = ls_merge_doc-document_data.
    ls_stream-mime_type = TEXT-001. "application/pdf"
    copy_data_to_ref( EXPORTING is_data = ls_stream CHANGING cr_data = er_stream ).
  ENDMETHOD.

Step 4 - Create the following CDS View entity ZCDS_OBJECT_PDF_V3

@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Object information for ADOBE PDF'
@Metadata.ignorePropagatedAnnotations: true
@OData.publish: true
   
define view entity ZCDS_OBJECT_PDF_V3

  with parameters
    @Consumption.defaultValue : 'PURCHASE_ORDER'
    @EndUserText.label: 'Appllication Type'
    @Consumption.valueHelpDefinition:                    // Annotation to link parameter with CDS view which will help to generate Text
    [ {
        entity: { name: 'ZCDS_ZDCP_FP_PDF_FORM',
    // entity: { name: 'I_OutputControlApplObjectType',
                  element: 'OutputControlApplObjectType'}
      }]
    p1_iv_object_type : apoc_appl_object_type,
    @Consumption.defaultValue : '001'

    @EndUserText.label: 'PDF Version(001(SAP),002(Custom)..etc'
    p2_iv_version_nr  : /accgo/e_ovd_version,
    //@Environment.systemField: #SYSTEM_DATE
    @Consumption.defaultValue : '2025'    
    @EndUserText.label: 'Fiscal year'
    
    p3_iv_fyear       : /accgo/e_fiscal_year,
    @Consumption.defaultValue : '1730'
    @EndUserText.label: 'Company Code'
    
    p4_iv_cc          : /accgo/e_companycode_vh


  as select from    I_OutputControlApplObjectType as objtype
  //association [0..1] to I_OutputControlApplObjectType as _ObjType on $projection.iv_object_type = _ObjType.OutputControlApplObjectType
    left outer join zdcp_fp_pdf_form              as pdfform on objtype.OutputControlApplObjectType = pdfform.iv_object_type
  //    left outer join ZCDS_ZDCP_FP_PDF_FORM              as pdfform on objtype.OutputControlApplObjectType = pdfform.iv_object_type
    left outer join ekko                          as po      on objtype.OutputControlApplObjectType = 'PURCHASE_ORDER'
    left outer join vbrk                          as bill    on objtype.OutputControlApplObjectType = 'BILLING_DOCUMENT'
  // association [0..1] to I_OutputControlApplObjectType as _ObjType on $projection.iv_object_type = _ObjType.OutputControlApplObjectType
{
      .lineItem: [ {
      position: 10
      } ]
      // .selectionField: [{position: 10 }]
      // @Consumption.filter.defaultValue: 'PURCHASE_ORDER'
      @EndUserText.label: 'Appllication Type'

      //   @ObjectModel.foreignKey.association: '_ObjType'
  key objtype.OutputControlApplObjectType as iv_object_type,
      .lineItem: [ {
      position: 20
      } ]
      .selectionField: [{position: 20 }]
      @EndUserText.label: 'Document Number'
  key
      case
      when objtype.OutputControlApplObjectType = 'PURCHASE_ORDER' then po.ebeln
      when objtype.OutputControlApplObjectType = 'BILLING_DOCUMENT' then bill.vbeln
      else 'Under Construction'
      end                                 as iv_object_nr,
      .lineItem: [{ type: #WITH_URL , url: 'valueLink', position: 30}]
      @EndUserText.label: 'PDF'
      @ObjectModel.readOnly: true
      'Download PDF->|'                   as showPdf,
      case
           when objtype.OutputControlApplObjectType = 'PURCHASE_ORDER' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.OutputControlApplObjectType), concat(concat(''',IvVersionNr=''',pdfform.iv_version_nr),concat(concat(''',IvObjectNr=''',po.ebeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''', po.bukrs),''')/$value'))))))
            when objtype.OutputControlApplObjectType = 'BILLING_DOCUMENT' then
      // concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.OutputControlApplObjectType), concat(concat('IvVersionNr=','000'),concat(concat('IvObjectNr=',bill.vbeln), concat(concat('IV_FYEAR=','0000'),concat('IV_CC=', bill.bukrs))))))
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.OutputControlApplObjectType), concat(concat(''',IvVersionNr=''',pdfform.iv_version_nr),concat(concat(''',IvObjectNr=''',bill.vbeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''', bill.bukrs),''')/$value'))))))
           else ''
          end                             as valueLink
      //Associations
      // _ObjType
}
where
      objtype.OutputControlApplObjectType = $parameters.p1_iv_object_type
  and pdfform.iv_version_nr               = $parameters.p2_iv_version_nr

Step 5 - Create a Fiori APP based on the CDS View entity ZCDS_OBJECT_PDF_V3 by choosing the option "SAP Fiori generator" in the "New Project From Template"

padchalingam_0-1752525624410.png

Then Choose the following option

padchalingam_1-1752525719484.png

Then choose the appropriate system with the service ZCDS_OBJECT_PDF_V3_CDS, which was generated from the CDS View ZCDS_OBJECT_PDF_V3.

padchalingam_2-1752525866701.png

Then choose the following Main entity

padchalingam_3-1752526036718.png

Then enter the appropriate Project attributes

padchalingam_4-1752526238008.png

Clicking the FINISH button will create the FIORI Application, which you can test.

 

 

 

 

 

 

5 Comments
padchalingam
Explorer
0 Kudos
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Version'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
    serviceQuality: #X,
    sizeCategory: #S,
    dataClass: #MIXED
}
define view entity ZCDS_ZDCP_FP_PDF_FORM
  as select distinct from zdcp_fp_it_m_key as objtype
  // as select distinct from I_OutputControlApplObjectType as objtype
  //   inner join            zdcp_fp_pdf_form              as pdfform on objtype.OutputControlApplObjectType = pdfform.iv_object_type
  inner join            zdcp_fp_pdf_form              as pdfform on objtype.iv_object_type = pdfform.iv_object_type

{
      @ui.lineItem: [ {
      position: 10
      } ]
      @ui.selectionField: [{position: 10 }]
      // @Consumption.filter.defaultValue: 'PURCHASE_ORDER'

  key objtype.iv_object_type

}
padchalingam
Explorer
0 Kudos

Added  CDS View entity ZCDS_ZDCP_FP_PDF_FORM as it is used by the Main CDW View entity ZCDS_OBJECT_PDF_V3.

I have also modified the following objects, which are different than the original

  1. CDS View entity ZCDS_OBJECT_PDF_V3
  2. FM ZGENERATE_PDF_XSTRING.

See the attachments

FUNCTION zgenerate_pdf_xstring.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_OBJECT_TYPE) TYPE  STRING
*"     REFERENCE(IV_OBJECT_NR) TYPE  STRING
*"     REFERENCE(IV_VERSION_NR) TYPE  VERSNR_KK
*"     REFERENCE(IV_FYEAR) TYPE  /ACCGO/E_FISCAL_YEAR
*"     REFERENCE(IV_CC) TYPE  /ACCGO/E_COMPANYCODE_VH
*"  EXPORTING
*"     REFERENCE(EV_DOCUMENT_DATA) TYPE  XSTRING
*"     REFERENCE(EV_PAGES) TYPE  FPPAGECOUNT
*"     REFERENCE(EV_TRACE_STRING) TYPE  STRING
*"     REFERENCE(EV_STOP_PROCESSING) TYPE  ABAP_BOOL
*"     REFERENCE(EV_PDL_TYPE) TYPE  APOC_PDL_TYPE
*"     REFERENCE(ET_MESSAGE) TYPE  CL_SOMU_FORM_SERVICES=>TY_GT_MESSAGE
*"----------------------------------------------------------------------
  TYPES:
    BEGIN OF ty_gs_fdp_key,
      name  TYPE string,
      value TYPE string,
    END OF ty_gs_fdp_key .
  TYPES:
    ty_gt_fdp_key TYPE STANDARD TABLE OF ty_gs_fdp_key WITH EMPTY KEY .
  DATA wa_message TYPE LINE OF cl_somu_form_services=>ty_gt_message.
  DATA: it_master_keys    TYPE ty_gt_fdp_key .
  DATA: ls_master_keys    TYPE name2stringvalue_table, wa_ls_master_keys TYPE name2stringvalue.
*NAME2STRINGVALUE
  DATA lv_pq_name      TYPE pq_qname.
  DATA lv_xml_in       TYPE xstring.
  DATA lv_stop         TYPE boole_d.
  DATA: it_key          TYPE ty_gt_fdp_key, ls_appl_keys    TYPE name2stringvalue_table, wa_ls_appl_keys TYPE ty_gs_fdp_key.
  DATA lo_hlp          TYPE REF TO if_apoc_or_h_factory_internal.
  DATA lo_fp_srv       TYPE REF TO if_apoc_somu_form_services.
  DATA render_options TYPE cl_somu_form_services=>ty_gs_render_options.
  DATA ls_merge_doc    TYPE if_apoc_document_merge=>document_object.
  DATA lt_msg          TYPE cl_somu_form_services=>ty_gt_message.
  DATA lt_msg_all      TYPE cl_somu_form_services=>ty_gt_message.
  DATA lv_xml_out      TYPE xstring.
  DATA lv_pdl_type     TYPE apoc_pdl_type.
  DATA: pdf_form TYPE  fpwbformname VALUE 'ZZ1_DCP_MM_PUR_PURCHASE_ORDER', pdf_mfor TYPE apoc_form_master_template_id VALUE 'ZZ1_DCP_MM_PUR_ORDER_MASTER'  .
  DATA wa_zdcp_fp_forms_mv TYPE zdcp_fp_forms_mv.
  PERFORM set_default_keys  USING iv_object_type iv_object_nr iv_version_nr CHANGING ls_master_keys ls_appl_keys pdf_form pdf_mfor.


* Object Type specific
  CASE iv_object_type.
    WHEN 'PURCHASE_ORDER'.
      wa_ls_appl_keys-name = 'PurchaseOrder'.
      wa_ls_appl_keys-value =  iv_object_nr.
      APPEND wa_ls_appl_keys TO ls_appl_keys.

      wa_ls_appl_keys-name = 'PurchaseOrderChangeFlag'.
      wa_ls_appl_keys-value = ''.
    WHEN 'PURCHASE_CONTRACT'.
      wa_ls_appl_keys-name = 'PurchaseContract'.
      wa_ls_appl_keys-value =  iv_object_nr.
      APPEND wa_ls_appl_keys TO ls_appl_keys.

      wa_ls_appl_keys-name = 'PurchaseContractChangeFlag'.
      wa_ls_appl_keys-value = ''.
    WHEN 'SALES_CONTRACT'.
      wa_ls_appl_keys-name = 'SalesContract'.
      wa_ls_appl_keys-value =  iv_object_nr.
      APPEND wa_ls_appl_keys TO ls_appl_keys.

      wa_ls_appl_keys-name = 'SalesContractChangeFlag'.
      wa_ls_appl_keys-value = ''.
    WHEN 'ORDER_CONFIRMATION'.
      wa_ls_appl_keys-name = 'SalesOrder'.
      wa_ls_appl_keys-value =  iv_object_nr.
      APPEND wa_ls_appl_keys TO ls_appl_keys.

      wa_ls_appl_keys-name = 'SalesOrderChangeFlag'.
      wa_ls_appl_keys-value = ''.
    WHEN 'SALES_QUOTATION'.
      wa_ls_appl_keys-name = 'SalesQuotation'.
      wa_ls_appl_keys-value =  iv_object_nr.
      APPEND wa_ls_appl_keys TO ls_appl_keys.

      wa_ls_appl_keys-name = 'SalesQuotationChangeFlag'.
      wa_ls_appl_keys-value = ''.
    WHEN 'CREDIT_MEMO_REQUEST'.
      wa_ls_appl_keys-name = 'SalesDocument'.
      wa_ls_appl_keys-value =  iv_object_nr.
      APPEND wa_ls_appl_keys TO ls_appl_keys.

      wa_ls_appl_keys-name = 'ReceiverID'.
      wa_ls_appl_keys-value = ''.
      APPEND wa_ls_appl_keys TO ls_appl_keys.
      wa_ls_appl_keys-name = 'ReceiverRole'.
      wa_ls_appl_keys-value = ''.
    WHEN 'DEBIT_MEMO_REQUEST'.
      wa_ls_appl_keys-name = 'SalesDocument'.
      wa_ls_appl_keys-value =  iv_object_nr.
      APPEND wa_ls_appl_keys TO ls_appl_keys.
      wa_ls_appl_keys-name = 'ReceiverID'.
      wa_ls_appl_keys-value = ''.
      APPEND wa_ls_appl_keys TO ls_appl_keys.
      wa_ls_appl_keys-name = 'ReceiverRole'.
      wa_ls_appl_keys-value = ''.
    WHEN 'BILLING_DOCUMENT'.
      wa_ls_appl_keys-name = 'BillingDocument'.
      wa_ls_appl_keys-value =  iv_object_nr.
  ENDCASE.

  APPEND wa_ls_appl_keys TO ls_appl_keys.
*Validate the Document
  CASE iv_object_type.
    WHEN 'PURCHASE_ORDER'.
      SELECT SINGLE ebeln FROM ekko INTO @DATA(lv_ebeln) WHERE ebeln = @iv_object_nr.
      IF sy-subrc NE 0.
        wa_message-type = 'E'.
        CONCATENATE 'PO ' iv_object_nr ' does not exist.' INTO wa_message-text.
        APPEND wa_message TO et_message.
*        MESSAGE i899(/cdbasis/msg) WITH 'PO ' iv_object_nr ' does not exist.'.
*        LEAVE TO TRANSACTION 'Z_PO_ADOBE'.
      ENDIF.

    WHEN 'BILLING_DOCUMENT'.
      SELECT SINGLE vbeln FROM vbrk INTO @DATA(lv_vbeln) WHERE vbeln = @iv_object_nr AND gjahr = @iv_fyear.
      IF sy-subrc NE 0.
        wa_message-type = 'E'.
        CONCATENATE 'Billing Document ' iv_object_nr ' does not exist.' INTO wa_message-text.
        APPEND wa_message TO et_message.
*        MESSAGE i899(/cdbasis/msg) WITH 'Billing Document ' iv_object_nr ' does not exist.'.
*        LEAVE TO TRANSACTION 'Z_PO_ADOBE'.

      ENDIF.

  ENDCASE.


  lo_hlp = cl_apoc_or_h_factory_internal=>get_helper_factory( ).


  TRY.
      " Get form provide services
      lo_fp_srv = lo_hlp->get_somu_form_services( ).

      TRY.
          it_master_keys = ls_master_keys.
          it_key = ls_appl_keys.
          lo_fp_srv->get_document(
            EXPORTING
*        iv_master_form_name     = 'ZZ1_DCP_MM_PUR_ORDER_MASTER'
              iv_master_form_name            = pdf_mfor
*        iv_form_name            = 'ZZ1_DCP_MM_PUR_PURCHASE_ORDER'
              iv_form_name            = pdf_form
              it_key                  = it_key
*        it_filter_select_option = ls_appl-filter_options
              it_master_key           = it_master_keys
              iv_form_language        = 'E'
              iv_form_country         = 'CA'
              is_render_options       = render_options
              iv_print_queue_name     = lv_pq_name
              iv_xml                  = lv_xml_in
              iv_disable_cache        = 'X'
            IMPORTING
              ev_content              = ev_document_data
              ev_pages                = ev_pages
              ev_stop_processing      = lv_stop
              et_message              = lt_msg
              ev_xml                  = lv_xml_out
              ev_pdl_type             = lv_pdl_type ).
          INSERT LINES OF lt_msg INTO TABLE lt_msg_all.

        CATCH cx_somu_error INTO DATA(error_somu).
          DATA(text_somu) = error_somu->get_text( ).
          wa_message-type = 'E'.
          wa_message-text = text_somu.
          APPEND wa_message TO et_message.
*          MESSAGE i899(/cdbasis/msg) WITH text_somu.
          sy-subrc = 98.
      ENDTRY.
    CATCH cx_apoc_extern_services INTO DATA(error_apoc_services).
      DATA(text_apoc) = error_apoc_services->get_text( ).
      wa_message-type = 'E'.
      wa_message-text = text_apoc.
      APPEND wa_message TO et_message.
*      MESSAGE i899(/cdbasis/msg) WITH text_apoc.
  ENDTRY.

ENDFUNCTION.
padchalingam
Explorer
0 Kudos
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Object information for ADOBE PDF'
@Metadata.ignorePropagatedAnnotations: true
@OData.publish: true

define view entity ZCDS_OBJECT_PDF_V3

  with parameters
    @Consumption.defaultValue : 'PURCHASE_ORDER'
    @EndUserText.label: 'Appllication Type'
    @Consumption.valueHelpDefinition:                    // Annotation to link parameter with CDS view which will help to generate Text
    [ {
        entity: { name: 'ZCDS_ZDCP_FP_PDF_FORM',
    // entity: { name: 'I_OutputControlApplObjectType',
                  element: 'iv_object_type'}
      }]
    p1_iv_object_type : apoc_appl_object_type,
    @Consumption.defaultValue : '001'

    @EndUserText.label: 'PDF Version(1(SAP), 2(Custom)..etc'
    p2_iv_version_nr  : /accgo/e_ovd_version,
    //@Environment.systemField: #SYSTEM_DATE
    @Consumption.defaultValue : '2025'
    @EndUserText.label: 'Fiscal year'

    p3_iv_fyear       : /accgo/e_fiscal_year,
    @Consumption.defaultValue : 'xxxx'
    @EndUserText.label: 'Company Code'

    p4_iv_cc          : /accgo/e_companycode_vh

  as select from    zdcp_fp_pdf_form as objtype

  //as select from    ZCDS_ZDCP_FP_PDF_FORM as objtype
  //as select from    I_OutputControlApplObjectType as objtype
  //association [0..1] to I_OutputControlApplObjectType as _ObjType on $projection.iv_object_type = _ObjType.OutputControlApplObjectType
  //  left outer join zdcp_fp_pdf_form      as pdfform   on objtype.iv_object_type = pdfform.iv_object_type
  //    left outer join ZCDS_ZDCP_FP_PDF_FORM              as pdfform on objtype.OutputControlApplObjectType = pdfform.iv_object_type
    left outer join ekko             as po         on  objtype.iv_object_type =  'PURCHASE_ORDER'
                                                   and po.bstyp               <> 'K'
    left outer join ekko             as pc         on  objtype.iv_object_type = 'PURCHASE_CONTRACT'
                                                   and pc.bstyp               = 'K'
    left outer join vbrk             as bill       on objtype.iv_object_type = 'BILLING_DOCUMENT'
    left outer join vbak             as sales_con  on  objtype.iv_object_type = 'SALES_CONTRACT'
                                                   and sales_con.vbtyp        = 'G'
    left outer join vbak             as ord_conf   on  objtype.iv_object_type = 'ORDER_CONFIRMATION'
                                                   and ord_conf.vbtyp         = 'C'
  //SALES_QUOTATION
    left outer join vbak             as sales_quot on  objtype.iv_object_type = 'SALES_QUOTATION'
                                                   and sales_quot.vbtyp       = 'B'
  //CREDIT_MEMO_REQUEST
    left outer join vbak             as cred_memo  on  objtype.iv_object_type = 'CREDIT_MEMO_REQUEST'
                                                   and cred_memo.vbtyp       = 'K'
  //DEBIT_MEMO_REQUEST
    left outer join vbak             as debit_memo on  objtype.iv_object_type = 'DEBIT_MEMO_REQUEST'
                                                   and debit_memo.vbtyp       = 'L'
  // association [0..1] to I_OutputControlApplObjectType as _ObjType on $projection.iv_object_type = _ObjType.OutputControlApplObjectType
{
      @ui.lineItem: [ {
      position: 10
      } ]
      // @ui.selectionField: [{position: 10 }]
      // @Consumption.filter.defaultValue: 'PURCHASE_ORDER'
      @EndUserText.label: 'Appllication Type'

      //   @ObjectModel.foreignKey.association: '_ObjType'
  key objtype.iv_object_type as iv_object_type,
      @ui.lineItem: [ {
      position: 20
      } ]
      @ui.selectionField: [{position: 20 }]
      @EndUserText.label: 'Document Number'
  key
      case
      when objtype.iv_object_type = 'PURCHASE_ORDER' then po.ebeln
      when objtype.iv_object_type = 'PURCHASE_CONTRACT' then pc.ebeln
      when objtype.iv_object_type = 'BILLING_DOCUMENT' then bill.vbeln
      when objtype.iv_object_type = 'SALES_CONTRACT' then sales_con.vbeln
      when objtype.iv_object_type = 'ORDER_CONFIRMATION' then ord_conf.vbeln
      when objtype.iv_object_type = 'SALES_QUOTATION' then sales_quot.vbeln
      when objtype.iv_object_type = 'CREDIT_MEMO_REQUEST' then cred_memo.vbeln
      when objtype.iv_object_type = 'DEBIT_MEMO_REQUEST' then debit_memo.vbeln
      else 'Under Construction'
      end                    as iv_object_nr,
      @ui.lineItem: [{ type: #WITH_URL , url: 'valueLink', position: 30}]
      @EndUserText.label: 'PDF'
      @ObjectModel.readOnly: true
      'Download PDF->|'      as showPdf,
      case
           when objtype.iv_object_type = 'PURCHASE_ORDER' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',po.ebeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''', po.bukrs),''')/$value'))))))
           when objtype.iv_object_type = 'PURCHASE_CONTRACT' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',pc.ebeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''', pc.bukrs),''')/$value'))))))
            when objtype.iv_object_type = 'BILLING_DOCUMENT' then
      // concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.OutputControlApplObjectType), concat(concat('IvVersionNr=','000'),concat(concat('IvObjectNr=',bill.vbeln), concat(concat('IV_FYEAR=','0000'),concat('IV_CC=', bill.bukrs))))))
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',bill.vbeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''', bill.bukrs),''')/$value'))))))
            when objtype.iv_object_type = 'SALES_CONTRACT' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',sales_con.vbeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))
            when objtype.iv_object_type = 'ORDER_CONFIRMATION' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',ord_conf.vbeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))
            when objtype.iv_object_type = 'SALES_QUOTATION' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',sales_quot.vbeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))
            when objtype.iv_object_type = 'CREDIT_MEMO_REQUEST' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',cred_memo.vbeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))
            when objtype.iv_object_type = 'DEBIT_MEMO_REQUEST' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',debit_memo.vbeln), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))

           else ''
          end                as valueLink
      //Associations
      // _ObjType
}
where
      objtype.iv_object_type = $parameters.p1_iv_object_type
  and objtype.iv_version_nr  = $parameters.p2_iv_version_nr
padchalingam
Explorer
0 Kudos

Enhanced the filter for PDF Version to show only versions relevant to the chosen Application Type (or Transaction). It also shows the Content ADOBE form and Master ADOBE form associated with the versions. Please see the attached CDS View (ZCDS_OBJECT_PDF_V4) for this changes.

padchalingam_0-1758738227737.png

 

padchalingam
Explorer
0 Kudos
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Object information for ADOBE PDF'
@Metadata.ignorePropagatedAnnotations: true
@Metadata.allowExtensions: true
@OData.publish: true

define view entity ZCDS_OBJECT_PDF_V4

  with parameters
    @Consumption.defaultValue : 'BILLING_DOCUMENT'
    @EndUserText.label: 'Appllication Type'
    @Consumption.valueHelpDefinition:                    // Annotation to link parameter with CDS view which will help to generate Text
    [ {
        entity: { name: 'ZCDS_ZDCP_FP_PDF_FORM',
                  element: 'iv_object_type'}
      }]
    p1_iv_object_type : apoc_appl_object_type,
    @Consumption.defaultValue : '001'

    @EndUserText.label: 'PDF Version(1(CUSTOM), 2(SAP)..etc'
    @Consumption.valueHelpDefinition:                    // Annotation to link parameter with CDS view which will help to generate Text
    [ {
        entity: { name: 'ZPDF_VERSION_VH',
                  element: 'iv_version_nr'},
                  additionalBinding: [{ localParameter: 'p1_iv_object_type', element: 'iv_object_type' }]
      }]
    p2_iv_version_nr  : /accgo/e_ovd_version,
    //@Environment.systemField: #SYSTEM_DATE
    @Consumption.defaultValue : '2025'
    @EndUserText.label: 'Fiscal year'

    p3_iv_fyear       : /accgo/e_fiscal_year,
    @Consumption.defaultValue : '1730'
    @EndUserText.label: 'Company Code'
    //I_CompanyCodeStdVH
    @Consumption.valueHelpDefinition:                    // Annotation to link parameter with CDS view which will help to generate Text
    [ {
        entity: { name: 'I_CompanyCodeStdVH',
                  element: 'CompanyCode'}
      }]
    p4_iv_cc          : /accgo/e_companycode_vh

  as select from    zfp_pdf_form           as objtype


    left outer join I_PurchaseOrder        as po                 on  objtype.iv_object_type = 'PURCHASE_ORDER'
                                                                 and po.CompanyCode         = $parameters.p4_iv_cc
  // and po.mandt = $session.client

    left outer join I_PurchaseContract     as pc                 on  objtype.iv_object_type = 'PURCHASE_CONTRACT'
                                                                 and pc.CompanyCode         = $parameters.p4_iv_cc

    left outer join I_BillingDocument      as bill               on  objtype.iv_object_type   = 'BILLING_DOCUMENT'
                                                                 and bill.BillingDocumentType = 'F2'
                                                                 and bill.CompanyCode         = $parameters.p4_iv_cc
                                                                 and (
                                                                    (
                                                                      bill.FiscalYear         = $parameters.p3_iv_fyear
                                                                    )
                                                                    or(
                                                                      bill.FiscalYear         = '0000'
                                                                    )
                                                                  )
    left outer join I_BillingDocument      as bill_cm            on  objtype.iv_object_type      = 'BILLING_DOCUMENT_CM'
                                                                 and bill_cm.BillingDocumentType = 'G2'
                                                                 and bill_cm.CompanyCode         = $parameters.p4_iv_cc
                                                                 and (
                                                                    (
                                                                      bill_cm.FiscalYear         = $parameters.p3_iv_fyear
                                                                    )
                                                                    or(
                                                                      bill_cm.FiscalYear         = '0000'
                                                                    )
                                                                  )
    left outer join I_SupplierInvoiceAPI01 as supp_inv_complaint on  objtype.iv_object_type        = 'COMPLAINT'
                                                                 and not(
      supp_inv_complaint.SuplrInvcAutomReducedAmount                                               = 0
      and supp_inv_complaint.SuplrInvcManuallyReducedAmount                                        = 0
    )
                                                                 and supp_inv_complaint.FiscalYear = $parameters.p3_iv_fyear

    left outer join I_SalesContract        as sales_con          on  objtype.iv_object_type       = 'SALES_CONTRACT'
                                                                 and sales_con.BillingCompanyCode = $parameters.p4_iv_cc

    left outer join I_SalesOrder           as ord_conf           on  objtype.iv_object_type      = 'ORDER_CONFIRMATION'
                                                                 and ord_conf.BillingCompanyCode = $parameters.p4_iv_cc


    left outer join I_SalesQuotation       as sales_quot         on  objtype.iv_object_type        = 'SALES_QUOTATION'
                                                                 and sales_quot.BillingCompanyCode = $parameters.p4_iv_cc
  //CREDIT_MEMO_REQUEST
    left outer join I_CreditMemoRequest    as cred_memo          on  objtype.iv_object_type       = 'CREDIT_MEMO_REQUEST'
                                                                 and cred_memo.BillingCompanyCode = $parameters.p4_iv_cc

  //DEBIT_MEMO_REQUEST
    left outer join I_DebitMemoRequest     as debit_memo         on  objtype.iv_object_type        = 'DEBIT_MEMO_REQUEST'
                                                                 and debit_memo.BillingCompanyCode = $parameters.p4_iv_cc

  // association [0..1] to I_OutputControlApplObjectType as _ObjType on $projection.iv_object_type = _ObjType.OutputControlApplObjectType
{

      //I_PurchaseOrder
      @ui.lineItem: [ {
      position: 10
      } ]
      // @ui.selectionField: [{position: 10 }]
      // @Consumption.filter.defaultValue: 'PURCHASE_ORDER'
      @EndUserText.label: 'Appllication Type'

      //   @ObjectModel.foreignKey.association: '_ObjType'
  key objtype.iv_object_type as iv_object_type,
      @ui.lineItem: [ {
      position: 20
      } ]
      @ui.selectionField: [{position: 20 }]

      @EndUserText.label: 'Document Number'
  key
      case
      when objtype.iv_object_type = 'PURCHASE_ORDER' then po.PurchaseOrder
      when objtype.iv_object_type = 'PURCHASE_CONTRACT' then pc.PurchaseContract
      when objtype.iv_object_type = 'BILLING_DOCUMENT' then bill.BillingDocument
      when objtype.iv_object_type = 'BILLING_DOCUMENT_CM' then bill_cm.BillingDocument
      when objtype.iv_object_type = 'SALES_CONTRACT' then sales_con.SalesContract
      when objtype.iv_object_type = 'ORDER_CONFIRMATION' then ord_conf.SalesOrder
      when objtype.iv_object_type = 'SALES_QUOTATION' then sales_quot.SalesQuotation
      when objtype.iv_object_type = 'CREDIT_MEMO_REQUEST' then cred_memo.CreditMemoRequest
      when objtype.iv_object_type = 'DEBIT_MEMO_REQUEST' then debit_memo.DebitMemoRequest
      //supp_inv_complaint.SupplierInvoiceWthnFiscalYear for 'COMPLAINT'
      when objtype.iv_object_type = 'COMPLAINT' then supp_inv_complaint.SupplierInvoiceWthnFiscalYear
      else 'Under Construction'
      end                    as iv_object_nr,
      @ui.lineItem: [{ type: #WITH_URL , url: 'valueLink',  position: 30}]
      @EndUserText.label: 'PDF'
      // @ui.statusInfo: [{criticality: ''}]
      'Download PDF->|'      as showPdf,

      case
           when objtype.iv_object_type = 'PURCHASE_ORDER' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',po.PurchaseOrder), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''', po.CompanyCode),''')/$value'))))))
           when objtype.iv_object_type = 'PURCHASE_CONTRACT' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',pc.PurchaseContract), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''', pc.CompanyCode),''')/$value'))))))
            when objtype.iv_object_type = 'BILLING_DOCUMENT'  then
      // concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.OutputControlApplObjectType), concat(concat('IvVersionNr=','000'),concat(concat('IvObjectNr=',bill.vbeln), concat(concat('IV_FYEAR=','0000'),concat('IV_CC=', bill.bukrs))))))
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',bill.BillingDocument), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''', bill.CompanyCode),''')/$value'))))))
                        when objtype.iv_object_type = 'BILLING_DOCUMENT_CM'  then
      // concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.OutputControlApplObjectType), concat(concat('IvVersionNr=','000'),concat(concat('IvObjectNr=',bill.vbeln), concat(concat('IV_FYEAR=','0000'),concat('IV_CC=', bill.bukrs))))))
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',bill_cm.BillingDocument), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''', bill_cm.CompanyCode),''')/$value'))))))

            when objtype.iv_object_type = 'SALES_CONTRACT' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',sales_con.SalesContract), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))
            when objtype.iv_object_type = 'ORDER_CONFIRMATION' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',ord_conf.SalesOrder), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))
            when objtype.iv_object_type = 'SALES_QUOTATION' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',sales_quot.SalesQuotation), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))
            when objtype.iv_object_type = 'CREDIT_MEMO_REQUEST' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',cred_memo.CreditMemoRequest), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))
            when objtype.iv_object_type = 'DEBIT_MEMO_REQUEST' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',debit_memo.DebitMemoRequest), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))
            when objtype.iv_object_type = 'COMPLAINT' then
           concat('/sap/opu/odata/sap/ZDCP_PDF_CROSS_APP2_SRV/get_pdfSet(',concat(concat('IvObjectType=''', objtype.iv_object_type), concat(concat(''',IvVersionNr=''',objtype.iv_version_nr),concat(concat(''',IvObjectNr=''',supp_inv_complaint.SupplierInvoiceWthnFiscalYear), concat(concat(''',IvFyear=''',$parameters.p3_iv_fyear),concat(concat(''',IvCc=''',''),''')/$value'))))))

           else ''
          end                as valueLink
      //Associations
      // _ObjType
}
where
      objtype.iv_object_type = $parameters.p1_iv_object_type
  and objtype.iv_version_nr  = $parameters.p2_iv_version_nr