Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Table Maintenance

Former Member
0 Likes
1,185

How to validate the fields of 'Z'table in table maintenance generator. Whenever we create a table, how to validate the user entries for the given table in table maintenance generator. Pls list out the steps.

Regards

Chandralekha

8 REPLIES 8
Read only

Former Member
0 Likes
944

Hi Chandralekha,

If you have created a check table in the table then automatically validated.

But if you want to validate explicity then what you need to do is open the main program and put the validation in PAI of the screen.

&****************<removed_by_moderator>************&

Edited by: Julius Bussche on Jun 24, 2008 7:01 PM

Read only

Former Member
0 Likes
944

Hi Susheela,

Check this thraed on forums:

Thanks,

Keerthi.

Read only

Former Member
0 Likes
944

Hello Susheela,

There are something called as events for a table maintenance.

go to SE11, table name>table maintenance generator>Environment>Modifications>Events(SE56).

There are lot of events avlbl, you'll hv to choose the appropriate event for ex. you want to validate user entries before saving it to database choose event 01 and write a FORM(any z name) and click on the editor beside to it.(button)

You can write ur logic to check entries etc..

I hope this helps.

<removed_by_moderator>

Rgds,

Raghu.

Edited by: Julius Bussche on Jun 24, 2008 7:01 PM

Read only

0 Likes
944

Hi,

Thanks Much. Can I have sample code for alteast one event.

When ever im opening the table in table maintenance then its asking for Authoization group, Function group becasue of them the EVENTS in modifications is in disabled state. can u pls help me out in this.

Regards

Chandralekha

Read only

0 Likes
944

Create TMG for your Custom table.

Give the Authorization group as &NC& and table name as Function group and maintenance in One screen and give the screen no as 100.

Then click on Environment --> Modifications --> Maintenance screen.

It will drive you to the Module Pool program and in PAI create a module validation and write the code for the fields you want to have the validation.

Regards

Kannaiah

Read only

Former Member
Read only

Former Member
0 Likes
944

Hello Chandralekha,

Here is a good sample of how to create dynamic table maintenance by utilized SAP function module "STC1_FULLSCREEN_TABLE_CONTROL".

You can use it to replace funtion of SM31 with additional benefit.

1. Because it is written in as customer program we can add additional feature, for example change history.

2. There is no need to create screen maintenance for all table because screen will automatically generated.

But, remember, this is only a demonstration of how to use STC1_FULLSCREEN_TABLE_CONTROL. Use it carefully and only for customer table (Z*).

REPORT zmodtab NO STANDARD PAGE HEADING.

TYPE-POOLS: rsds.

DATA: is_x030l  TYPE x030l,
      it_dfies  TYPE TABLE OF dfies,
      is_dfies  TYPE dfies,
      it_fdiff  TYPE TABLE OF field_dif,
      is_fdiff  TYPE field_dif.

DATA: w_selid   TYPE rsdynsel-selid,
      it_tables TYPE TABLE OF rsdstabs,
      is_tables TYPE rsdstabs,
      it_fields TYPE TABLE OF rsdsfields,
      it_expr   TYPE rsds_texpr,
      it_ranges TYPE rsds_trange,
      it_where  TYPE rsds_twhere,
      is_where  TYPE rsds_where,
      w_active  TYPE i.

DATA: it_content TYPE REF TO data,
      it_modif   TYPE REF TO data,
      it_fcat    TYPE lvc_t_fcat.

DATA: w_okcode   TYPE sy-ucomm.


FIELD-SYMBOLS: <itab> TYPE STANDARD TABLE,
               <ntab> TYPE STANDARD TABLE.


* Macros
DEFINE table_error.
  message e398(00) with 'Table' p_table &1.
END-OF-DEFINITION.

DEFINE fixed_val.
  is_fdiff-fieldname = is_dfies-fieldname.
  is_fdiff-fixed_val = &1.
  is_fdiff-no_input  = 'X'.
  append is_fdiff to it_fdiff.
END-OF-DEFINITION.


* Selection screen
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME.
PARAMETERS: p_table TYPE tabname OBLIGATORY                    "table
                                 MEMORY ID dtb
                                 MATCHCODE OBJECT dd_dbtb_16.
SELECTION-SCREEN: BEGIN OF LINE,
                  PUSHBUTTON 33(20) selopt USER-COMMAND sel,
                  COMMENT    55(15) selcnt,
                  END OF LINE.
SELECTION-SCREEN: SKIP.
PARAMETERS: p_rows  TYPE i.                                    "rows
SELECTION-SCREEN: END OF BLOCK b01,
                  SKIP,
                  BEGIN OF BLOCK b02 WITH FRAME.
PARAMETERS: p_displ TYPE c AS CHECKBOX.                        "display
SELECTION-SCREEN: END OF BLOCK b02.

* Initialization
INITIALIZATION.
  MOVE '@4G@ Filter records' TO selopt.

* PBO
AT SELECTION-SCREEN OUTPUT.
  IF w_active IS INITIAL.
    CLEAR: selcnt.
  ELSE.
    WRITE w_active TO selcnt LEFT-JUSTIFIED.
  ENDIF.

* PAI
AT SELECTION-SCREEN.
  IF p_table NE is_x030l-tabname.
    CALL FUNCTION 'DDIF_NAMETAB_GET'
         EXPORTING
              tabname   = p_table
         IMPORTING
              x030l_wa  = is_x030l
         TABLES
              dfies_tab = it_dfies
         EXCEPTIONS
              OTHERS    = 1.
    IF is_x030l IS INITIAL.
      table_error 'does not exist or is not active'.
    ELSEIF is_x030l-tabtype NE 'T'.
      table_error 'is not selectable'.
    ELSEIF is_x030l-align NE 0.
      table_error 'has alignment - cannot continue'.
    ENDIF.

*   Default values for system fields
    REFRESH: it_fdiff.
    is_fdiff-tabname = p_table.
    LOOP AT it_dfies INTO is_dfies.
      IF is_dfies-datatype = 'CLNT'.
        fixed_val sy-mandt.
      ELSEIF is_dfies-rollname = 'ERDAT'
          OR is_dfies-rollname = 'ERSDA'
          OR is_dfies-rollname = 'AEDAT'
          OR is_dfies-rollname = 'LAEDA'.
        fixed_val sy-datum.
      ELSEIF is_dfies-rollname = 'ERTIM'
          OR is_dfies-rollname = 'AETIM'.
        fixed_val sy-uzeit.
      ELSEIF is_dfies-rollname = 'ERNAM'
          OR is_dfies-rollname = 'AENAM'.
        fixed_val sy-uname.
      ENDIF.
    ENDLOOP.

*   Prepare free selection on table
    REFRESH it_tables.
    is_tables-prim_tab = p_table.
    APPEND is_tables TO it_tables.

    CLEAR: w_selid.
  ENDIF.

  IF sy-ucomm = 'SEL'.
    IF w_selid IS INITIAL.
*     Init free selection dialog
      CALL FUNCTION 'FREE_SELECTIONS_INIT'
           EXPORTING
                expressions  = it_expr
           IMPORTING
                selection_id = w_selid
                expressions  = it_expr
           TABLES
                tables_tab   = it_tables
           EXCEPTIONS
                OTHERS       = 1.
    ENDIF.

*   Display free selection dialog
    CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
         EXPORTING
              selection_id            = w_selid
              title                   = 'Selection'
              status                  = 1
              as_window               = 'X'
         IMPORTING
              expressions             = it_expr
              field_ranges            = it_ranges
              number_of_active_fields = w_active
         TABLES
              fields_tab              = it_fields
         EXCEPTIONS
              OTHERS                  = 1.
  ENDIF.


* Start of processing
START-OF-SELECTION.

  PERFORM f_create_table USING p_table.

  PERFORM f_select_table.

  PERFORM f_display_table.


*---------------------------------------------------------------------*
*       FORM f_create_table                                           *
*---------------------------------------------------------------------*
FORM f_create_table USING in_tabname.

  FIELD-SYMBOLS: <fcat> TYPE lvc_s_fcat.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
       EXPORTING
            i_structure_name = in_tabname
       CHANGING
            ct_fieldcat      = it_fcat
       EXCEPTIONS
            OTHERS           = 1.
  IF sy-subrc = 0.
*   Complete field catalog
    LOOP AT it_fcat ASSIGNING <fcat>.
      <fcat>-tabname = in_tabname.
    ENDLOOP.
    CALL FUNCTION 'LVC_FIELDCAT_COMPLETE'
         CHANGING
              ct_fieldcat = it_fcat
         EXCEPTIONS
              OTHERS      = 1.
  ELSE.
    WRITE: 'Error building field catalog'.
    STOP.
  ENDIF.

* Create dynamic table for data
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = it_fcat
    IMPORTING
      ep_table        = it_content.
  IF sy-subrc = 0.
    ASSIGN it_content->* TO <itab>.
  ELSE.
    WRITE: 'Error creating internal table'.
    STOP.
  ENDIF.

* Create dynamic table for modif
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = it_fcat
    IMPORTING
      ep_table        = it_modif.
  IF sy-subrc = 0.
    ASSIGN it_modif->* TO <ntab>.
  ELSE.
    WRITE: 'Error creating internal table'.
    STOP.
  ENDIF.

ENDFORM.


*---------------------------------------------------------------------*
*       FORM f_select_table                                           *
*---------------------------------------------------------------------*
FORM f_select_table.

  IF w_active = 0.
    SELECT * FROM (p_table)
             INTO CORRESPONDING FIELDS OF TABLE <itab>
            UP TO p_rows ROWS.
  ELSE.
*   Selection with parameters
    CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_WHERE'
         EXPORTING
              field_ranges  = it_ranges
         IMPORTING
              where_clauses = it_where.
    READ TABLE it_where INTO is_where WITH KEY tablename = p_table.

    SELECT * FROM (p_table)
             INTO CORRESPONDING FIELDS OF TABLE <itab>
            UP TO p_rows ROWS
            WHERE (is_where-where_tab).
  ENDIF.

  IF sy-dbcnt = 0.
    WRITE: 'No record selected'.
    STOP.
  ENDIF.
ENDFORM.


*---------------------------------------------------------------------*
*       FORM f_display_table                                          *
*---------------------------------------------------------------------*
FORM f_display_table.
  DATA: l_answer TYPE c,
        l_eflag  TYPE c.

  CLEAR: w_okcode.
  REFRESH: <ntab>.
* Display table contents
  CALL FUNCTION 'STC1_FULLSCREEN_TABLE_CONTROL'
       EXPORTING
            header       = p_table
            tabname      = p_table
            display_only = p_displ
            endless      = 'X'
            no_button    = space
       IMPORTING
            okcode       = w_okcode
       TABLES
            nametab      = it_dfies
            table        = <itab>
            fielddif     = it_fdiff
            modif_table  = <ntab>
       EXCEPTIONS
            OTHERS       = 1.
  IF sy-subrc = 0.
    IF p_displ IS INITIAL AND w_okcode = 'SAVE'.
*     Confirm update
      CALL FUNCTION 'POPUP_TO_CONFIRM'
           EXPORTING
                titlebar              = p_table
                text_question         = 'Do you want to update table ?'
                default_button        = '2'
                display_cancel_button = ' '
           IMPORTING
                answer                = l_answer
           EXCEPTIONS
                OTHERS                = 1.
      IF l_answer = '1'.
*       Apply modifications
        IF NOT <ntab>[] IS INITIAL.
          PERFORM f_add_system USING space.
          MODIFY (p_table) FROM TABLE <ntab>.
          IF sy-subrc NE 0.
            l_eflag = 'X'.
          ENDIF.
        ENDIF.
*       Apply deletions
        IF l_eflag IS INITIAL.
          REFRESH: <ntab>.
          CALL FUNCTION 'STC1_GET_DATA'
               TABLES
                    deleted_data = <ntab>
               EXCEPTIONS
                    OTHERS       = 1.
          IF NOT <ntab>[] IS INITIAL.
            DELETE (p_table) FROM TABLE <ntab>.
            IF sy-subrc NE 0.
              ROLLBACK WORK.
              l_eflag = 'X'.
            ENDIF.
          ENDIF.
        ENDIF.
*       Apply creations
        IF l_eflag IS INITIAL.
          REFRESH: <ntab>.
          CALL FUNCTION 'STC1_GET_DATA'
               TABLES
                    new_data = <ntab>
               EXCEPTIONS
                    OTHERS   = 1.
          IF NOT <ntab>[] IS INITIAL.
            PERFORM f_add_system USING 'X'.
            INSERT (p_table) FROM TABLE <ntab>.
            IF sy-subrc NE 0.
              ROLLBACK WORK.
              l_eflag = 'X'.
            ENDIF.
          ENDIF.
        ENDIF.
        IF l_eflag IS INITIAL.
          COMMIT WORK.
          MESSAGE s261(53).
        ELSE.
          MESSAGE s075(3i).
          PERFORM f_select_table.
        ENDIF.
      ENDIF.
*     Display table again
      PERFORM f_display_table.
    ENDIF.
  ENDIF.

ENDFORM.


*---------------------------------------------------------------------*
*       FORM f_add_system                                             *
*---------------------------------------------------------------------*
FORM f_add_system USING new TYPE c.

  FIELD-SYMBOLS: <irec> TYPE ANY,
                 <upd>  TYPE ANY.

  LOOP AT it_fdiff INTO is_fdiff.
    READ TABLE it_dfies INTO is_dfies
                    WITH KEY fieldname = is_fdiff-fieldname.
    LOOP AT <ntab> ASSIGNING <irec>.
      ASSIGN COMPONENT is_fdiff-fieldname OF STRUCTURE <irec> TO <upd>.
      IF is_dfies-datatype = 'CLNT'.
        <upd> = sy-mandt.
      ELSE.
        CASE is_dfies-rollname.
          WHEN 'AENAM'.
            <upd> = sy-uname.
          WHEN 'AEDAT' OR 'LAEDA'.
            <upd> = sy-datum.
          WHEN 'AETIM'.
            <upd> = sy-uzeit.
          WHEN OTHERS.
        ENDCASE.
      ENDIF.
    ENDLOOP.
  ENDLOOP.

ENDFORM.

Hope you find it helpful

Regards

Indu.

Read only

Former Member
0 Likes
944

Answered