如何更新 BUT050 和 BUT051 表?

How can I update BUT050 & BUT051 tables?

我有以下场景: 我正在使用 BAPI BAPI_BUPR_RELATIONSHIP_CHANGE 来更改 validuntildate。 (BUT050-DATE_TO / BUT051-DATE_TO)。 但我还需要更新字段 BUT051-PAFKTBUT050 中的自定义字段(我们称之为 ZZFIELD)。 我通过从内部表更新 BUT050 / BUT051 来做到这一点。

最后,如果我写 COMMIT WORK 或调用 FM BAPI_TRANSACTION_COMMIT,只有来自 BAPI_BUPR_RELATIONSHIP_CHANGE 的字段会被更新。如果我最后什么都不写,只会更新 UPDATE FROM TABLE 中的字段。

如何更新我的所有字段? 是否有任何 BAPI 可以让我修改 BUT051-PAFKT 和来自 BUT050 的自定义字段?

用于测试的示例代码:

DATA: lt_return   TYPE bapiret2_t,
      lv_kunnr    TYPE kunnr VALUE '111',
      lv_partner  TYPE bu_partner VALUE '222',
      lv_rel_cat  TYPE bu_reltyp VALUE 'BUR001',
      lv_new_date TYPE sy-datum VALUE '20300101',
      lt_but051   TYPE TABLE OF but051.

CALL FUNCTION 'BAPI_BUPR_RELATIONSHIP_CHANGE'
      EXPORTING
        businesspartner1               = lv_kunnr
        businesspartner2               = lv_partner
        relationshipcategory           = lv_rel_cat
        validfromdate                  = sy-datum
        validuntildate                 = sy-datum
        validuntildatenew              = lv_new_date
        datetox                        = abap_true
     TABLES
       RETURN                         = lt_return.

SELECT *
  FROM but051
  INTO TABLE lt_but051
    WHERE partner1 = lv_kunnr
      AND partner2 = lv_partner
      AND reltyp   = lv_rel_cat.

LOOP AT lt_but051 ASSIGNING FIELD-SYMBOL(<ls_but051>).
  <ls_but051>-pafkt = '0003'.
ENDLOOP.

UPDATE but051 FROM TABLE lt_but051.

COMMIT WORK.

试试这个(或其包装器 BAPI_BUPR_CONTP_CHANGE):

DATA: ls_person                    TYPE bapibus1006_central_person.
DATA: ls_person_x                  TYPE bapibus1006_central_person_x.
DATA: ls_central                   TYPE bapibus1006_central.
DATA: ls_central_x                 TYPE bapibus1006_central_x.
DATA: lt_return                    TYPE bapiret2_t.

is_data-function = '0001'. "<-- your PAFKT
is_data_x-function = abap_true.

* changes of the central data
CALL FUNCTION 'BUPR_CONTP_CHANGE'
  EXPORTING
    iv_partner                     = is_data-partner1
*   IV_PARTNER_GUID                =
    iv_contactperson               = is_data-partner2
*   IV_CONTACTPERSON_GUID          =
*   IV_DATE_FROM                   =
*   IV_DATE_TO                     =
*   IV_DEFAULTRELATIONSHIP         =
*   IV_DEFAULTRELATIONSHIP_X       =
    is_data                        = is_data-data
    is_data_x                      = is_data_x-central
*   IV_TESTRUN                     = ' '
  TABLES
    et_return                      = lt_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING
    WAIT = abap_true.

同时检查关于更新关系和相应的注释。

关于 BUT050 中的自定义字段,you can't just add a new field and update it, you need to change the BOL model