0

ユーザーが BAdI 実装を介して購買依頼を保存できないようにし、明細行とアカウントを確認しようとしています。私がスローしたエラーメッセージは保存プロセスを停止しません.POの場合のように、行を無効にする方法を見つけることができません. そのため、不完全なデータを含む PR を保存できます。

購買依頼 BAdI を拡張し、 に実装IF_EX_ME_PROCESS_REQ_CUSTしましたZCL_IM_EI_PROCESS_REQ_CUST。メソッド PROCESS_ITEMPROCESS_ACCOUNTは、アカウントとアイテムのいくつかのインポートにアクセスできます。PO とは異なり、アイテムを無効にする方法が見つかりません。使用されているクラスは、その機能を提供していません。

私が BAPI でアクセスできる PR 項目オブジェクトは、インターフェイスIF_PURCHASE_REQUISITION_ITEMであり、関数プールのローカル クラスとして実装されていますMEREQ。このインターフェイスにはメソッドIS_VALIDがありますが、メソッドを持つ PO アイテム インターフェイスとは対照的に、無効にするものは何も提供しませんINVALIDATE

編集

MY_STATE-BROKEN_RULESさらにデバッグした後、ローカル クラスのメンバーを介して無効化が行われたようMEREQ/LCL_REQ_ITEMです。どうすればこれにアクセスできますか?

4

2 に答える 2

1

@vwegertが示唆したように、トリックはCHECKメソッドを使用していました。PR の検証メソッドで呼び出されます。

FAILED私の解決策は、 typeの member 属性を追加することでしたMMPUR_BOOL。他のすべての方法で、失敗時にこのフラグを設定できます。

IF your condition fails
  me->failed = mmpur_yes.
ENDIF.

最後に、私のCHECKメソッドには

ch_failed = me->failed.

ch_failedPRクラスMEREQBADI_CHECKのメソッドで使用される汎用モジュールに戻されます。is_validこれにより、PR が無効になり、標準エラーで表示されるメッセージ ボックスがトリガーされます。下の画像の保存時のカスタム エラー メッセージ。

ここに画像の説明を入力

于 2014-06-13T23:08:28.463 に答える
0

MESSAGE 'My message' TYPE 'E'「PROCESS_HEADER」メソッドで使用しました。

METHOD IF_EX_ME_PROCESS_REQ_CUST~PROCESS_HEADER.
DATA : it_items        TYPE mmpur_requisition_items,
       wa_item         TYPE mmpur_requisition_item,
       wa_item_data    TYPE mereq_item,
       wa_header_data  type mereq_header.

    it_items = im_header->GET_ITEMS( ).      " Purchase requisition positions
    wa_header_data = im_header->GET_DATA( ). " Header info

    LOOP AT it_items INTO wa_item.                      
      CLEAR wa_item_data.  
      wa_item_data = wa_item-item->GET_DATA( ).

      IF wa_item_data-loekz IS NOT INITIAL.
        MESSAGE 'Raise error' TYPE 'E'.
      ENDIF.
    ENDLOOP.
ENDMETHOD.

それが役に立てば幸い。

于 2014-06-13T02:34:10.120 に答える