cancel
Showing results for 
Search instead for 
Did you mean: 

Validation of custom fields in ASN

Former Member
0 Kudos

Hi,

There is a requirement to validate custom fields in ASN web UI. These fields are already been added to ASN web UI.

I have created custom validation checks for the fields and assigned them to the respective messages of the message class.

Also I have assigned the custom validation checks with standard validation profiles P001 and P003 with the following settings -

P001 ZASN_BILLOFLADINGNO_MISSING Active E Do Not Save Message Continue Checks

P001 ZASN_LOADDATE_MISSING Active E Do Not Save Message Continue Checks

P001 ZASN_PORTOFDISCHARGE_MISSING Active E Do Not Save Message Continue Checks

P001 ZASN_PORTOFLOADING_MISSING Active E Do Not Save Message Continue Checks

P001 ZASN_SEALNO_MISSING Active E Do Not Save Message Continue Checks

P001 ZASN_TRAILER_ID_MISSING Active E Do Not Save Message Continue Checks

P001 ZASN_VENDORINVOICENO_MISSING Active E Do Not Save Message Continue Checks

P001 ZASN_VESSEL_ID_MISSING Active E Do Not Save Message Continue Checks

P001 ZDLV_ITEM_MANUFACTURING_DATE_MIS Active E Do Not Save Message Continue Checks

Also implemented the BADI /SCMB/BOL_VALFRMWRK with the following code in the method /SCMB/IF_EX_BOL_VALFRMWRK~VALIDATE -

Edited by: rkb_1984 on Feb 3, 2012 5:42 PM

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos
method /SCMB/IF_EX_BOL_VALFRMWRK~VALIDATE.

  DATA: lo_svdelivery TYPE REF TO /sca/cl_svdelivery,
        ls_delivery TYPE /SCMB/DM_DELVRY_STR,
        lt_delivery TYPE /scmb/dm_delvry_tab,
        lw_item LIKE LINE OF ls_delivery-item,
        lo_log_prot TYPE REF TO /scmb/cl_bol_prot,
        lv_msgv1 TYPE symsgv,
        lv_ztest_date TYPE dats.


*  Check that we have called for the check(s) we want to implement.
  CHECK ip_val_chk-val_profile EQ 'P003' OR
        ip_val_chk-val_profile EQ 'P001'.
  CHECK ip_val_chk-val_check EQ 'ZASN_VESSEL_ID_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_LOADDATE_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_PORTOFLOADING_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_PORTOFDISCHARGE_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_SEALNO_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_VENDORINVOICENO_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_TRAILER_ID_MISSING' OR
        ip_val_chk-val_check EQ 'ZDLV_ITEM_MANUFACTURING_DATE_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_BILLOFLADINGNO_MISSING'.

*  Initialize the local log
  CREATE OBJECT lo_log_prot.
  CALL METHOD lo_log_prot->init( ).

*  get service class
  lo_svdelivery ?= ip_object.

*  get the order to be checked
  CALL METHOD lo_svdelivery->GET
    IMPORTING
*     ES_DLV =
      ET_DLV = lt_delivery.

  READ TABLE lt_delivery INTO ls_delivery INDEX 1.
  IF sy-subrc EQ 0.

    CASE ip_val_chk-val_check.
      WHEN 'ZASN_VESSEL_ID_MISSING'.
        IF ls_delivery-vessel IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_LOADDATE_MISSING'.
        IF ls_delivery-loaded_date IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_PORTOFLOADING_MISSING'.
        IF ls_delivery-port_of_loading IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_PORTOFDISCHARGE_MISSING'.
        IF ls_delivery-port_of_dischar IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_SEALNO_MISSING'.
        IF ls_delivery-seat_no IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_VENDORINVOICENO_MISSING'.
        IF ls_delivery-vendor_inv_no IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_TRAILER_ID_MISSING'.
        IF ls_delivery-transport_means-id IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZDLV_ITEM_MANUFACTURING_DATE_MISSING'.
        LOOP AT ls_delivery-item INTO lw_item.
          IF lw_item-product-manufacturing_date IS INITIAL.
            CALL METHOD lo_log_prot->add_message
              EXPORTING
                ip_msgty = 'E'
                ip_msgid = ip_chkcmp-msg_id
                ip_msgno = ip_chkcmp-msg_no
                ip_msgv1 = 'DUMMY'.
            et_prot = lo_log_prot->get_prot( ).
          ENDIF.
        ENDLOOP.
      WHEN 'ZASN_BILLOFLADINGNO_MISSING'.
        IF ls_delivery-waybill_id IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
    ENDCASE.
  ENDIF.

endmethod.
Former Member
0 Kudos

Hi,

Am I missing any additional settings to get the process

to stop publishing ASN if any of the custom field is left empty?

Thanks

Rohit

Former Member
0 Kudos

I tried by coding an implicit enhancement in the method SAVE_HDR_DATA of classes /SCF/CL_FRMBOX_ASNM_HDR1 and /SCF/CL_FRMBOX_ASNM_HDR2 -

IF ls_dlvdetails_enh-loaded_date IS INITIAL.
    MESSAGE e713 INTO lv_trash_enh.
    p_msglog->add_message(
      iv_msgty = sy-msgty
      iv_msgno = sy-msgno
      iv_msgid = sy-msgid
      iv_probclass = '4'
                  ).
    RAISE EXCEPTION TYPE /scf/cx_uifrm_stop_evtprop.

ENDIF.

However it interferes with the standard Validation messages and prevents many warnings to be displayed.

Is there any way out?

Thanks,

Rohit

Former Member
0 Kudos

The code in the BADI implementation is as follows -

method /SCMB/IF_EX_BOL_VALFRMWRK~VALIDATE.

DATA: lo_svdelivery TYPE REF TO /sca/cl_svdelivery,
        ls_delivery TYPE /SCMB/DM_DELVRY_STR,
        lt_delivery TYPE /scmb/dm_delvry_tab,
        lw_item LIKE LINE OF ls_delivery-item,
        lo_log_prot TYPE REF TO /scmb/cl_bol_prot,
        lv_msgv1 TYPE symsgv,
        lv_ztest_date TYPE dats.


*  Check that we have called for the check(s) we want to implement.
  CHECK ip_val_chk-val_profile EQ 'P003' OR
        ip_val_chk-val_profile EQ 'P001'.
  CHECK ip_val_chk-val_check EQ 'ZASN_VESSEL_ID_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_LOADDATE_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_PORTOFLOADING_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_PORTOFDISCHARGE_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_SEALNO_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_VENDORINVOICENO_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_TRAILER_ID_MISSING' OR
        ip_val_chk-val_check EQ 'ZDLV_ITEM_MANUFACTURING_DATE_MISSING' OR
        ip_val_chk-val_check EQ 'ZASN_BILLOFLADINGNO_MISSING'.
*  Initialize the local log
  CREATE OBJECT lo_log_prot.
  CALL METHOD lo_log_prot->init( ).

*  get service class
  lo_svdelivery ?= ip_object.

*  get the order to be checked
  CALL METHOD lo_svdelivery->GET
    IMPORTING
*     ES_DLV =
      ET_DLV = lt_delivery.

  READ TABLE lt_delivery INTO ls_delivery INDEX 1.
  IF sy-subrc EQ 0.

    CASE ip_val_chk-val_check.
      WHEN 'ZASN_VESSEL_ID_MISSING'.
        IF ls_delivery-vessel IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_LOADDATE_MISSING'.
        IF ls_delivery-loaded_date IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_PORTOFLOADING_MISSING'.
        IF ls_delivery-port_of_loading IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_PORTOFDISCHARGE_MISSING'.
        IF ls_delivery-port_of_dischar IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_SEALNO_MISSING'.
        IF ls_delivery-seat_no IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_VENDORINVOICENO_MISSING'.
        IF ls_delivery-vendor_inv_no IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZASN_TRAILER_ID_MISSING'.
        IF ls_delivery-transport_means-id IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
      WHEN 'ZDLV_ITEM_MANUFACTURING_DATE_MISSING'.
        LOOP AT ls_delivery-item INTO lw_item.
          IF lw_item-product-manufacturing_date IS INITIAL.
            CALL METHOD lo_log_prot->add_message
              EXPORTING
                ip_msgty = 'E'
                ip_msgid = ip_chkcmp-msg_id
                ip_msgno = ip_chkcmp-msg_no
                ip_msgv1 = 'DUMMY'.
            et_prot = lo_log_prot->get_prot( ).
          ENDIF.
        ENDLOOP.
      WHEN 'ZASN_BILLOFLADINGNO_MISSING'.
        IF ls_delivery-waybill_id IS INITIAL.
          CALL METHOD lo_log_prot->add_message
            EXPORTING
              ip_msgty = 'E'
              ip_msgid = ip_chkcmp-msg_id
              ip_msgno = ip_chkcmp-msg_no
              ip_msgv1 = 'DUMMY'.
          et_prot = lo_log_prot->get_prot( ).
        ENDIF.
    ENDCASE.
  ENDIF.

endmethod.