Sales Order Characterisitc 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.
    DATAlt_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 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_cabnWITH 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 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
*&---------------------------------------------------------------------*

TABLESvbakvbapvbkd.

TYPESBEGIN 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.
TYPESBEGIN 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(200TYPE 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.
DATAg_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.
DATAg_t_char_val TYPE z575tt_sd_so_char,
      g_r_char_val TYPE z575s_sd_so_char,
      g_t_return   TYPE TABLE OF bapiret2.
DATAgo_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-OPTIONSs_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 .
  CLEARgr_fieldcatREFRESHgt_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'.
      DATAgv_valid TYPE abap_bool.
      DATAgv_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.
          CLEARg_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_returnWITH 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.
          CLEARg_r_outputl_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 .
  CLEARgr_fieldcat1REFRESHgt_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

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

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

Concatenation new syntax( 7.4+ ).