Saturday, May 5, 2018

Site Bin Seq Load

*&---------------------------------------------------------------------*
* Identification
*   Technical Object(s)   : ORTEC
*   Title                 : Site Bin Seq Load
*
*   Description: Load DC bin sequence for ORTEC
*
*   Technical Consultant  : Angie Benedicto
*   Solutions Architect   :
*   Functional Consultant :
*   Creation Date         : 2018.04.12
*   Project/Ticket        : BREWS / Moved from Legacy ORTEC
*---------------------------------------------------------------------*
REPORT zsite_bin_seq_load.

DATA:    exception       TYPE REF TO cx_root,
         msg             TYPE string,
         ortec_logon     TYPE REF TO zdslogonrequestco_connection_o,
         logon_input     TYPE zdslogonrequestlogon_input,
         logon_output    TYPE zdslogonrequestlogon_output,
         ortec_batch_job TYPE REF TO zbinseq_loadco_batch_job_admin,
         batchjobinput   TYPE zbinseq_loadrun_batch_job_inp2,
         batchjoboutput  TYPE zbinseq_loadrun_batch_job_outp,
         jobparam        TYPE zbinseq_loadjob_param_type,
         globalvar       TYPE zbinseq_loadrun_batch_job_inp1,
         it_globalvar    TYPE zbinseq_loadrun_batch_job__tab,
         variable        TYPE TABLE OF zbinseq_loadrun_batch_job_inpu,
         variableinput   TYPE zbinseq_loadrun_batch_job_inpu,
         wa_variable     TYPE zbinseq_loadrun_batch_job_inpu,
         lt_return       TYPE ztech_t_table_value,
         lv_tablekey     TYPE char100,
         lv_lpn          TYPE prx_logical_port_name,
         lv_password     TYPE char30,
         lv_cmsauth      TYPE char13.

CONSTANTS:
  lc_table                TYPE tabname          VALUE 'ZLEO_SETTINGS',
  lc_ortec_username       TYPE ztech__table_key VALUE 'ORTEC_DS_USERNAME',
  lc_ortec_password       TYPE ztech__table_key VALUE 'ORTEC_DS_PASSWORD',
  lc_ortec_cms_system     TYPE ztech__table_key VALUE 'ORTEC_DS_CMS_SYSTEM',
  lc_ortec_cms_auth       TYPE ztech__table_key VALUE 'ORTEC_DS_CMS_AUTHENTICATION',
  lc_ortec_lpn_dsjob      TYPE ztech__table_key VALUE 'ORTEC_LOGICAL_PORTNAME_DS_JOB',
  lc_ortec_lpn_dslogon    TYPE ztech__table_key VALUE 'ORTEC_LOGICAL_PORTNAME_DS_LOGON',
  lc_ortec_job_name       TYPE ztech__table_key VALUE 'ORTEC_DS_JOB_NAME_BINSEQ_LOAD',
  lc_ortec_repo_name      TYPE ztech__table_key VALUE 'ORTEC_REPO_NAME',
  lc_ortec_repo_name_case TYPE ztech__table_key VALUE 'ORTEC_REPO_LOWERCASE',
  lc_ortec_sys_prof       TYPE ztech__table_key VALUE 'ORTEC_SYSTEM_PROFILE',
  lc_param_store          TYPE ztech__table_key VALUE 'ORTEC_DS_BIN_SEQ_PARAM1',
  lc_param_webservice     TYPE ztech__table_key VALUE 'ORTEC_DS_BIN_SEQ_PARAM2',
  lc_param_export         TYPE ztech__table_key VALUE 'ORTEC_DS_BIN_SEQ_INPUT_EXP',
  lc_param_import         TYPE ztech__table_key VALUE 'ORTEC_DS_BIN_SEQ_INPUT_IMP'.

TABLES            sscrfields.
DATA: BEGIN OF i_excl_tab OCCURS 0,
        pfkey LIKE sy-pfkey.
DATA: END OF i_excl_tab.
DATA: wa_site TYPE t001w-werks.


SELECTION-SCREEN BEGIN OF BLOCK prompt WITH FRAME TITLE text-001.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(8) text.
PARAMETERS: site TYPE t001w-werks OBLIGATORY.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK prompt.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 5(10) exp USER-COMMAND loadtypeexp.
SELECTION-SCREEN PUSHBUTTON 20(10) imp USER-COMMAND loadtypeimp.
SELECTION-SCREEN END OF LINE.

AT SELECTION-SCREEN OUTPUT.
  text = 'SITE: '.
  PERFORM set_sel_screen_pf_status.

START-OF-SELECTION.
FORM set_sel_screen_pf_status.
  DATA: l_pf_status LIKE sy-pfkey,
        l_program   LIKE sy-repid.
  REFRESH i_excl_tab.
  MOVE 'ONLI' TO i_excl_tab-pfkey.
  APPEND i_excl_tab.
  CLEAR i_excl_tab.
  l_pf_status = '%_00'.
  l_program = 'RSSYSTDB'.

  CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
    EXPORTING
      p_status  = l_pf_status
      p_program = l_program
    TABLES
      p_exclude = i_excl_tab.

ENDFORM.

INITIALIZATION.
  exp = 'Export'.
  imp = 'Import'.

AT SELECTION-SCREEN.

  CLEAR wa_site.

  SELECT werks INTO  wa_site FROM t001w WHERE werks NOT IN ( SELECT dep_id FROM /lot/xd_dt_kun )
    AND werks = site.
  ENDSELECT.
  IF wa_site IS INITIAL.
    MESSAGE 'Site is not valid.' TYPE 'E'.
  ENDIF.

  CASE sscrfields.
    WHEN 'LOADTYPEEXP'.

      CALL METHOD zcl_tech_util=>read_by_partial_key
        EXPORTING
          iv_table  = lc_table
          iv_key    = lc_param_export
        RECEIVING
          rt_values = lt_return.

      " Read the return table from method
      IF lt_return IS NOT INITIAL.
        READ TABLE lt_return INTO variableinput-name INDEX 1.
      ENDIF.

      variableinput-content = 'Y'.
      APPEND variableinput TO variable .
      msg = 'Export '.
    WHEN 'LOADTYPEIMP'.

      DATA: answer.
      CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
          titlebar              = 'Importing file into the site bin maintenance table'
          text_question         = 'Please make sure that the spreadsheet is closed. Click OK to import now.'
          text_button_1         = 'OK'(002)
          text_button_2         = 'Cancel'(003)
          default_button        = '2'
          display_cancel_button = ''
*         USERDEFINED_F1_HELP   = ' '
          start_column          = 30
          start_row             = 6
*         POPUP_TYPE            =
        IMPORTING
          answer                = answer
* TABLES
*         PARAMETER             =
        EXCEPTIONS
          text_not_found        = 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.

      CALL METHOD zcl_tech_util=>read_by_partial_key
        EXPORTING
          iv_table  = lc_table
          iv_key    = lc_param_import
        RECEIVING
          rt_values = lt_return.

      " Read the return table from method
      IF lt_return IS NOT INITIAL.
        READ TABLE lt_return INTO variableinput-name INDEX 1.
      ENDIF.

      IF answer = '1'.
        variableinput-content = 'Y'.
        APPEND variableinput TO variable .
        msg = 'Import '.
      ELSE.
        sy-ucomm = ''.
      ENDIF.

  ENDCASE.
  IF sy-ucomm  EQ ''.
*   disable enter button
  ELSE.
    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_ortec_lpn_dslogon
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO lv_lpn INDEX 1.
    ENDIF.

    TRY.
        CREATE OBJECT ortec_logon
          EXPORTING
            logical_port_name = lv_lpn.
      CATCH cx_ai_system_fault INTO exception.
        msg = exception->get_text( ).
    ENDTRY.

    TRY.
*     instantiate the object reference
        IF ortec_logon IS NOT BOUND.
          CREATE OBJECT ortec_logon TYPE zdslogonrequestco_connection_o.
        ENDIF.
      CATCH cx_ai_system_fault INTO exception.
        msg = exception->get_text( ).
    ENDTRY.

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_ortec_username
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO logon_input-username INDEX 1.
    ENDIF.

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_ortec_password
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO lv_password  INDEX 1.
      TRANSLATE  lv_password TO LOWER CASE.
      TRANSLATE  lv_password+0(1) TO UPPER CASE.
      logon_input-password = lv_password.
    ENDIF.

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_ortec_cms_system
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO logon_input-cms_system INDEX 1.
    ENDIF.

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_ortec_cms_auth
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO lv_cmsauth INDEX 1.
      TRANSLATE lv_cmsauth TO LOWER CASE.
      TRANSLATE lv_cmsauth+3(1) TO UPPER CASE.
      logon_input-cms_authentication = lv_cmsauth.
    ENDIF.

    TRY.
        CALL METHOD ortec_logon->logon
          EXPORTING
            input  = logon_input
          IMPORTING
            output = logon_output.
      CATCH cx_ai_system_fault INTO exception.
        msg = exception->get_text( ).
    ENDTRY.

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_ortec_lpn_dsjob
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO lv_lpn INDEX 1.
    ENDIF.

    TRY.
        CREATE OBJECT ortec_batch_job
          EXPORTING
            logical_port_name = lv_lpn.
      CATCH cx_ai_system_fault INTO exception.
        msg = exception->get_text( ).
    ENDTRY.

    DATA: ws_header    TYPE REF TO if_wsprotocol_ws_header,
          l_xstring    TYPE xstring,
          l_string     TYPE string,
          name         TYPE string,
          namespace    TYPE string,
          xml_document TYPE REF TO if_ixml_document,
          xml_root     TYPE REF TO if_ixml_element,
          xml_element  TYPE REF TO if_ixml_element,
          xml_node     TYPE REF TO if_ixml_node.

    TRY.
        CONCATENATE
        '<soap:Header>'
        '<localtypes:session xmlns:localtypes="http://www.businessobjects.com/DataServices/ServerX.xsd">'
        '<SessionID>'logon_output-session_id'</SessionID>'
        '</localtypes:session >'
        '</soap:Header>' INTO l_string.

        l_xstring = cl_proxy_service=>cstring2xstring( l_string ).

        CREATE OBJECT ortec_batch_job.
        ws_header ?= ortec_batch_job->get_protocol('IF_WSPROTOCOL_WS_HEADER').
        IF NOT l_string IS INITIAL.
          CALL FUNCTION 'SDIXML_XML_TO_DOM'
            EXPORTING
              xml           = l_xstring
            IMPORTING
              document      = xml_document
            EXCEPTIONS
              invalid_input = 1
              OTHERS        = 2.
          IF sy-subrc = 0 AND NOT xml_document IS INITIAL.
            xml_root = xml_document->get_root_element( ).
            xml_element ?= xml_root->get_first_child( ).
            WHILE NOT xml_element IS INITIAL.
              name = xml_element->get_name( ).
              namespace = xml_element->get_namespace_uri( ).
              ws_header->set_request_header(
              name = name
              namespace = namespace
              dom = xml_element ).
              xml_element ?= xml_element->get_next( ).
            ENDWHILE.
          ENDIF.
        ENDIF.
      CATCH cx_ai_system_fault .
    ENDTRY.

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_ortec_job_name
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO  batchjobinput-job_name INDEX 1.
    ENDIF.

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_ortec_repo_name
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO  batchjobinput-repo_name INDEX 1.
    ENDIF.

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_ortec_sys_prof
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO  jobparam-job_system_profile  INDEX 1.
    ENDIF.

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_param_store
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO variableinput-name INDEX 1.
    ENDIF.

    variableinput-content = site.
    APPEND variableinput TO variable .

    CALL METHOD zcl_tech_util=>read_by_partial_key
      EXPORTING
        iv_table  = lc_table
        iv_key    = lc_param_webservice
      RECEIVING
        rt_values = lt_return.

    " Read the return table from method
    IF lt_return IS NOT INITIAL.
      READ TABLE lt_return INTO variableinput-name INDEX 1.
    ENDIF.

    variableinput-content = 'Y'.
    APPEND variableinput TO variable .

    LOOP AT variable INTO wa_variable.
      APPEND  wa_variable TO globalvar-variable.
    ENDLOOP.

    batchjobinput-job_parameters = jobparam.
    batchjobinput-global_variables =  globalvar.

    TRY.
        CALL METHOD ortec_batch_job->run_batch_job
          EXPORTING
            input  = batchjobinput
          IMPORTING
            output = batchjoboutput.
      CATCH cx_ai_system_fault INTO exception.
        msg = exception->get_text( ).
    ENDTRY.

    IF batchjoboutput IS NOT INITIAL.
      IF batchjoboutput-error_message NE ''.
        CONCATENATE 'Problem occured while loading data. ' batchjoboutput-error_message INTO msg.
        MESSAGE msg TYPE 'E'.
      ELSE.
        CONCATENATE msg ' Successful' INTO msg.
        MESSAGE msg TYPE 'S'.
      ENDIF.
    ENDIF.
    CLEAR site.
  ENDIF.

No comments:

Post a Comment