Sales Order Characteristic update

Step 1: Create a Class.

            * Run the T-code SE24.

            * Give the class name and click on create. Give description and click on save.

Step 2: Create a Structure with following fields .

            * Run the T-code SE11.

            * Select data type and give structure name.

            * Click on create and select structure.

            * Give the description and fields.


Step 3: Create a table type.            

             * Run the T-code SE11.

            * Select data type and give table type name.

            * Click on create and select table type.

            * Give short text and line type as structure. 


 Step 4: Create a class.
                * Run the T-Code SE24.
                * Give class name and click on create.
                * Give description and click on save.
                * Create a method with following import and export parameters.

                * Write the code in method.

 METHOD update_characteristics.
    DATA: lt_config      TYPE ibco2_instance_tab2,
          ls_config_rec  TYPE ibco2_instance_rec2,
          ls_root_object TYPE cuib_business_object,
          lt_char_val    TYPE z575tt_sd_so_char,
          lv_vbeln       TYPE vbeln_va,
          lv_posnr       TYPE posnr_va,
          lw_return      TYPE bapiret2,
          lt_value       TYPE STANDARD TABLE OF ibvalue0,
          lw_value       TYPE ibvalue0.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = i_vbeln
      IMPORTING
        output = lv_vbeln.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = i_posnr
      IMPORTING
        output = lv_posnr.

    SELECT SINGLE vbeln,
                  posnr,
                  cuobj
                  FROM vbap
                  INTO @DATA(ls_vbap)
                  WHERE vbeln EQ @lv_vbeln AND
                        posnr EQ @lv_posnr.
    IF sy-subrc EQ 0 AND ls_vbap-cuobj IS NOT INITIAL.

      IF it_char_val IS NOT INITIAL.

*     Get Internal characteristic numbers for characteristics
        SELECT atinn,
               atnam
               FROM cabn
               INTO TABLE @DATA(lt_cabn)
               FOR ALL ENTRIES IN @it_char_val
               WHERE atnam EQ @it_char_val-atnam.
        IF sy-subrc EQ 0.

          SORT lt_cabn BY atnam.
          LOOP AT it_char_val INTO DATA(lw_char_val).
            READ TABLE lt_cabn INTO DATA(lw_cabn) WITH KEY atnam = lw_char_val-atnam
            BINARY SEARCH.
            IF sy-subrc EQ 0.
              lw_char_val-atinn = lw_cabn-atinn.
            ENDIF.
            APPEND lw_char_val TO lt_char_val.
          ENDLOOP.

*       Get current configuration for the order item
          CALL FUNCTION 'CUCB_GET_CONFIGURATION'
            EXPORTING
              instance      = ls_vbap-cuobj
            IMPORTING
              configuration = lt_config
            EXCEPTIONS
              OTHERS        = 1.
          IF sy-subrc = 0.
            READ TABLE lt_config ASSIGNING FIELD-SYMBOL(<fs_config_rec>) INDEX 1.
            IF <fs_config_rec> IS ASSIGNED.
*           Get object key and type
              ls_root_object-object_key = <fs_config_rec>-owner-object_key.
              ls_root_object-object_type = <fs_config_rec>-owner-object_type.
              UNASSIGN <fs_config_rec>.
            ENDIF.
          ENDIF.

          READ TABLE lt_config ASSIGNING <fs_config_rec> INDEX 1.
          LOOP AT lt_char_val INTO lw_char_val.
            IF <fs_config_rec> IS ASSIGNED.
              READ TABLE <fs_config_rec>-values ASSIGNING FIELD-SYMBOL(<fs_value>)
              WITH KEY atinn = lw_char_val-atinn.
              IF sy-subrc EQ 0 AND <fs_value> IS ASSIGNED.
                <fs_value>-atwrt = lw_char_val-atwrt.
              ELSE.
                lw_value-atinn  = lw_char_val-atinn.
                lw_value-atwrt  = lw_char_val-atwrt.
                lw_value-atcod  = 1.
                APPEND lw_value TO lt_value."<fs_config_rec>-values.
              ENDIF.
            ENDIF.
          ENDLOOP.

          IF lt_value IS NOT INITIAL.
            APPEND LINES OF lt_value TO <fs_config_rec>-values.
          ENDIF.

          IF <fs_config_rec> IS ASSIGNED.
            <fs_config_rec>-ind-indcha = 'X'.
          ENDIF.

          " 4. Update configuration in memory
          CALL FUNCTION 'CUCB_SET_CONFIGURATION'
            EXPORTING
              root_instance                = ls_vbap-cuobj
*             IS_CBASE_HEADER              =
            CHANGING
              configuration                = lt_config
            EXCEPTIONS
              invalid_input                = 1
              invalid_instance             = 2
              instance_is_a_classification = 3
              OTHERS                       = 4.
          IF sy-subrc = 0.
            CALL FUNCTION 'CUCB_CONFIGURATION_TO_DB'
              EXPORTING
                root_instance                 = ls_vbap-cuobj
                root_object                   = ls_root_object " 'VBAP'
*               FORCE_NEW_INSTANCE            =
*               IV_WITHOUT_COMMIT_UPDATE      = ' '
*               IV_MATERIAL                   =
*               IV_LOCATION                   =
*               IV_TECHS                      =
*           IMPORTING
*               NEW_INSTANCE                  =
*           TABLES
*               EXP_NEW_NESTED_CUOBJS         =
              EXCEPTIONS
                invalid_instance              = 1
                invalid_root_instance         = 2
                no_changes                    = 3
                already_registered_for_update = 4
                instance_is_a_classification  = 5
                OTHERS                        = 6.
            IF sy-subrc = 0.
              COMMIT WORK. " 6. Commit changes
              lw_return-type    = 'S'.
              lw_return-message = 'Characteristics Update Completed'.
              APPEND lw_return TO et_return.
            ELSE.
              lw_return-type    = 'E'.
              lw_return-message = 'Characteristics Update Failed'.
              APPEND lw_return TO et_return.
            ENDIF.
          ENDIF.
        ELSE.
          lw_return-type    = 'E'.
          lw_return-message = 'No Valid charateristics in Input'.
          APPEND lw_return TO et_return.
        ENDIF.
      ELSE.
        lw_return-type    = 'E'.
        lw_return-message = 'No charateristics in Input'.
        APPEND lw_return TO et_return.
      ENDIF.
    ELSE.
      lw_return-type    = 'E'.
      lw_return-message = 'Sales Order not found'.
      APPEND lw_return TO et_return.
    ENDIF.

  ENDMETHOD.

Step 5: Create an executable program.

                * Run the T-code SE38.

                * Give program name and click on create .

                * Give description and select type as executable program.

                * Write the Code.

REPORT z575r_sd_is_giso_mass_upd.

** Global Declarations
INCLUDE z575n_sd_is_giso_mass_upd_top.

** Selection screen
INCLUDE z575n_sd_is_giso_mass_upd_sel.


** subroutines
INCLUDE z575n_sd_is_giso_mass_upd_form.

START-OF-SELECTION.
  PERFORM fetch_data.
  IF g_t_final IS NOT INITIAL.
    PERFORM field_catlog.
    PERFORM display_data.
  ELSE.
    MESSAGE TEXT-009 TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.

*&---------------------------------------------------------------------*
*&  Include           Z575N_SD_IS_GISO_MASS_UPD_TOP
*&---------------------------------------------------------------------*

TABLES: vbak, vbap, vbkd.

TYPES: BEGIN OF g_s_final,
         auart TYPE auart,    " Order Type
         kunnr TYPE kunnr,    " Sold to Party
         vbeln TYPE vbeln_va, " Sale Order Number
         bstkd TYPE bstkd,    " MD Order Number
         matnr TYPE matnr,    " Product
         posnr TYPE posnr,    " Item
         atwrt TYPE atwrt,    " GISO Code
       END OF g_s_final.
TYPES: BEGIN OF g_s_output,
         vbeln        TYPE vbeln_va,      " Sale Order Number
         bstkd        TYPE bstkd,         " MD Order Number
         posnr        TYPE posnr,         " Item
         atwrt        TYPE atwrt,         " GISO Code
         status       TYPE char4,         "Status
         remarks(200) TYPE c,             "Remarks
         uname        TYPE sy-uname,      "Updated By
         udate        TYPE sy-datum,      "Updated On
         utime        TYPE sy-uzeit,      "Updated At
       END OF g_s_output.
DATA: g_t_final  TYPE TABLE OF g_s_final,
      g_r_final  TYPE g_s_final,
      g_t_output TYPE TABLE OF g_s_output,
      g_r_output TYPE g_s_output.
DATA: g_t_char_val TYPE z575tt_sd_so_char,
      g_r_char_val TYPE z575s_sd_so_char,
      g_t_return   TYPE TABLE OF bapiret2.
DATA: go_container  TYPE REF TO cl_gui_custom_container,
      go_container1 TYPE REF TO cl_gui_custom_container,
      go_grid       TYPE REF TO cl_gui_alv_grid,
      go_grid1      TYPE REF TO cl_gui_alv_grid,
      gt_fieldcat   TYPE lvc_t_fcat,
      gt_fieldcat1  TYPE lvc_t_fcat,
      gr_fieldcat   TYPE lvc_s_fcat,
      gr_fieldcat1  TYPE lvc_s_fcat,
      gr_layout     TYPE lvc_s_layo,
      gr_layout1    TYPE lvc_s_layo.


*&---------------------------------------------------------------------*
*&  Include           Z575N_SD_IS_GISO_MASS_UPD_SEL
*&---------------------------------------------------------------------*


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS: s_auart FOR vbak-auart DEFAULT 'ZMBU',
                s_bstkd FOR vbkd-bstkd,
                s_erdat FOR vbak-erdat,
                s_vbeln FOR vbak-vbeln.

SELECTION-SCREEN END OF BLOCK b1.


*&---------------------------------------------------------------------*
*&  Include           Z575N_SD_IS_GISO_MASS_UPD_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FETCH_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fetch_data .
  IF s_auart IS NOT INITIAL OR s_bstkd IS NOT INITIAL
    OR s_erdat IS NOT INITIAL OR s_vbeln IS NOT INITIAL.

    SELECT a~auart,
           a~kunnr,
           a~vbeln,
           b~bstkd,
           c~matnr,
           c~posnr,
           c~cuobj
      FROM vbak AS a
      LEFT OUTER JOIN vbap AS c
      ON a~vbeln = c~vbeln
      INNER JOIN vbkd AS b
      ON a~vbeln EQ b~vbeln
      AND c~posnr EQ b~posnr
      INTO TABLE @DATA(l_t_data)
      WHERE a~vbeln IN @s_vbeln AND
            a~auart IN @s_auart AND
            a~erdat IN @s_erdat AND
            b~bstkd IN @s_bstkd AND
            b~bzirk EQ 'A'.

    IF sy-subrc = 0.
      MOVE-CORRESPONDING l_t_data TO g_t_final.
    ENDIF.

  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FIELD_CATLOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM field_catlog .
  CLEAR: gr_fieldcat. REFRESH: gt_fieldcat.
  gr_fieldcat-fieldname = 'AUART'.
  gr_fieldcat-coltext   = TEXT-002.
  APPEND gr_fieldcat TO gt_fieldcat.
  CLEAR gr_fieldcat.

  gr_fieldcat-fieldname = 'KUNNR'.
  gr_fieldcat-coltext   = TEXT-003.
  APPEND gr_fieldcat TO gt_fieldcat.
  CLEAR gr_fieldcat.

  gr_fieldcat-fieldname = 'VBELN'.
  gr_fieldcat-coltext   = TEXT-004.
  APPEND gr_fieldcat TO gt_fieldcat.
  CLEAR gr_fieldcat.

  gr_fieldcat-fieldname = 'BSTKD'.
  gr_fieldcat-coltext   = TEXT-005.
  APPEND gr_fieldcat TO gt_fieldcat.
  CLEAR gr_fieldcat.

  gr_fieldcat-fieldname = 'MATNR'.
  gr_fieldcat-coltext   = TEXT-006.
  APPEND gr_fieldcat TO gt_fieldcat.
  CLEAR gr_fieldcat.

  gr_fieldcat-fieldname = 'POSNR'.
  gr_fieldcat-coltext   = TEXT-007.
  APPEND gr_fieldcat TO gt_fieldcat.
  CLEAR gr_fieldcat.

  gr_fieldcat-fieldname = 'ATWRT'.
  gr_fieldcat-coltext   = TEXT-008.
  gr_fieldcat-edit      = abap_true.
  APPEND gr_fieldcat TO gt_fieldcat.
  CLEAR gr_fieldcat.
  gr_layout-zebra = abap_true.
  gr_layout-col_opt = abap_true.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_data .
  CREATE OBJECT go_container
    EXPORTING
      container_name = 'ZCONT'.
  CREATE OBJECT go_grid
    EXPORTING
      i_parent = go_container.

  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
*     i_structure_name              = 'G_S_FINAL'  " Internal Output Table Structure Name
      is_layout                     = gr_layout
    CHANGING
      it_outtab                     = g_t_final    " Output Table
      it_fieldcatalog               = gt_fieldcat   " Field Catalog
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
  CALL SCREEN '1234'.


ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  STATUS_1234  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_1234 OUTPUT.
  SET PF-STATUS 'ZPF_STATUS'.
  SET TITLEBAR 'ZTITLE'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1234  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_1234 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'SAVE'.
      DATA: gv_valid TYPE abap_bool.
      DATA: gv_valid1 TYPE abap_bool.
      IF go_grid IS BOUND.
        CALL METHOD go_grid->check_changed_data
          IMPORTING
            e_valid = gv_valid.
      ENDIF.

      IF gv_valid IS NOT INITIAL.
        LOOP AT g_t_final INTO g_r_final.
          CLEAR: g_r_char_val.
          REFRESH : g_t_char_val,g_t_return.
          g_r_char_val-atnam = 'ZSD_OPT'.
          g_r_char_val-atwrt = g_r_final-atwrt.
          APPEND g_r_char_val TO g_t_char_val.
          CALL METHOD zcl_575_sd_so_char_update=>update_characteristics
            EXPORTING
              i_vbeln     = g_r_final-vbeln   " Sales order no
              i_posnr     = g_r_final-posnr   " Sales Document Item
              it_char_val = g_t_char_val      " Sales Order Characteristics
*             overwrite   =                   " Checkbox
            IMPORTING
              et_return   = g_t_return.       " Return Parameter

          " Preparing final internal table.
          g_r_output-vbeln = g_r_final-vbeln.
          g_r_output-bstkd = g_r_final-bstkd.
          g_r_output-posnr = g_r_final-posnr.
          g_r_output-atwrt = g_r_final-atwrt.
          g_r_output-uname = sy-uname.
          g_r_output-udate = sy-datum.
          g_r_output-utime = sy-uzeit.
          READ TABLE g_t_return INTO DATA(l_r_return) WITH KEY type = 'E'.
          IF sy-subrc = 0.
            g_r_output-status  = icon_red_light.
            g_r_output-remarks = l_r_return-message."TEXT-011.
          ELSE.
            g_r_output-status   = icon_green_light.
            g_r_output-remarks  = TEXT-010.
          ENDIF.
          APPEND g_r_output TO g_t_output.
          CLEAR: g_r_output, l_r_return.
        ENDLOOP.
        IF g_t_output IS NOT INITIAL.
          PERFORM output_fieldcat1.
        ENDIF.
        CREATE OBJECT go_container1
          EXPORTING
            container_name = 'ZCONT1'.
        CREATE OBJECT go_grid1
          EXPORTING
            i_parent = go_container1.

        CALL METHOD go_grid1->set_table_for_first_display
          EXPORTING
            is_layout                     = gr_layout
          CHANGING
            it_outtab                     = g_t_output    " Output Table
            it_fieldcatalog               = gt_fieldcat1   " Field Catalog
          EXCEPTIONS
            invalid_parameter_combination = 1
            program_error                 = 2
            too_many_lines                = 3
            OTHERS                        = 4.
        CALL SCREEN '1235'.

      ENDIF.

  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  STATUS_1235  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_1235 OUTPUT.
  SET PF-STATUS 'ZPF1_STATUS'.
  SET TITLEBAR 'ZTITLE1'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1235  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_1235 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK1'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT1'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  OUTPUT_FIELDCAT1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM output_fieldcat1 .
  CLEAR: gr_fieldcat1. REFRESH: gt_fieldcat1.
  gr_fieldcat1-fieldname = 'VBELN'.
  gr_fieldcat1-coltext   = TEXT-004.
  APPEND gr_fieldcat1 TO gt_fieldcat1.
  CLEAR gr_fieldcat1.

  gr_fieldcat1-fieldname = 'BSTKD'.
  gr_fieldcat1-coltext   = TEXT-005.
  APPEND gr_fieldcat1 TO gt_fieldcat1.
  CLEAR gr_fieldcat1.

  gr_fieldcat1-fieldname = 'POSNR'.
  gr_fieldcat1-coltext   = TEXT-007.
  APPEND gr_fieldcat1 TO gt_fieldcat.
  CLEAR gr_fieldcat1.

  gr_fieldcat1-fieldname = 'ATWRT'.
  gr_fieldcat1-coltext   = TEXT-008.
  APPEND gr_fieldcat1 TO gt_fieldcat1.
  CLEAR gr_fieldcat1.

  gr_fieldcat1-fieldname = 'STATUS'.
  gr_fieldcat1-coltext   = TEXT-012.
  APPEND gr_fieldcat1 TO gt_fieldcat1.
  CLEAR gr_fieldcat1.

  gr_fieldcat1-fieldname = 'REMARKS'.
  gr_fieldcat1-coltext   = TEXT-013.
  gr_fieldcat1-outputlen = 30.
  APPEND gr_fieldcat1 TO gt_fieldcat1.
  CLEAR gr_fieldcat1.

  gr_fieldcat1-fieldname = 'UNAME'.
  gr_fieldcat1-coltext   = TEXT-018.
  APPEND gr_fieldcat1 TO gt_fieldcat1.
  CLEAR gr_fieldcat1.

  gr_fieldcat1-fieldname = 'UDATE'.
  gr_fieldcat1-coltext   = TEXT-019.
  APPEND gr_fieldcat1 TO gt_fieldcat1.
  CLEAR gr_fieldcat1.

  gr_fieldcat1-fieldname = 'UTIME'.
  gr_fieldcat1-coltext   = TEXT-020.
  APPEND gr_fieldcat1 TO gt_fieldcat1.
  CLEAR gr_fieldcat1.
  gr_layout-zebra = abap_true.
  gr_layout-col_opt = abap_true.
ENDFORM.

* Double click on screen number and click on layout.

* Select container and give name as ZCONT.

* Check and activate. Same like Second screen also containere name as ZCONT1.

001 Selection Screen

002 Order Type

003 Sold To Party

004 Sale Order Number

005 MD Order Number

006 Model

007 Item No

008 New GISO

009 No data found for given selection

010 GISO code is updated

011 GISO Code is not updated

012 Status

013 Remarks

018 Changed By

019 Changed On

020 Changed At


Testing: 

        * Execute the report.

        * Give sale order number.



        * Check in VA03(Item configuration).




            * Execute the report after giving input. Given Input as B20 for that SO.


            * Click on Save.


            * Check in VA03.




******************************Thank you*******************************

Comments

Popular posts from this blog

Custom entity/Action dialog in RAP using Unmanaged scenario

New syntax for append- VALUE (new syntax 7.4+) in ABAP

Read statement new syntax in ABAP. (7.4+).