SAP 长文本批量修改

        用户要求长文本每次编辑需要记录时间,编辑人

        CALL FUNCTION 'LANGTEXT_ONLY'
            EXPORTING
              object        = gc_tdobject
              object_nr     = lv_object
              spras         = '1'
              txtid         = gc_tdid
              x_xaktyp      = 'V'
              text_history  = abap_true
              text_property = abap_true
            IMPORTING
              result        = ls_result.

        使用该函数如下图:      

 如果选择多个行项目,要求只弹一次文本编辑框,同时更改多行

        "获取第一行的数据
        READ TABLE gt_alv INTO gw_alv WITH KEY sel = 'X'.
          lv_object = sy-repid && gw_alv-aufnr && gw_alv-kdauf.
          lv_tdname = lv_object.
          CALL FUNCTION 'READ_TEXT'
            EXPORTING
              client                  = sy-mandt
              id                      = gc_tdid
              language                = '1'
              name                    = lv_tdname
              object                  = gc_tdobject
            TABLES
              lines                   = it_line2
            EXCEPTIONS
              id                      = 1
              language                = 2
              name                    = 3
              not_found               = 4
              object                  = 5
              reference_check         = 6
              wrong_access_to_archive = 7
              OTHERS                  = 8.

        使用该函数弹框编辑文本

        CALL FUNCTION 'LANGTEXT_ONLY'
            EXPORTING
              object        = gc_tdobject
              object_nr     = lv_object
              spras         = '1'
              txtid         = gc_tdid
              x_xaktyp      = 'V'
              text_history  = abap_true
              text_property = abap_true
            IMPORTING
              result        = ls_result.
      IF ls_result-function EQ 'U' OR ls_result-function EQ 'I'.
        CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
          EXPORTING
            titel          = 'Save Confirm'
            textline1      = 'Save?'
            textline2      = ''
            cancel_display = space
          IMPORTING
            answer         = lv_answer.
        IF lv_answer EQ 'J'.
          COMMIT WORK.
*--长文本获取
          lv_tdname = lv_object.
          CALL FUNCTION 'READ_TEXT'
            EXPORTING
              client                  = sy-mandt
              id                      = gc_tdid
              language                = '1'
              name                    = lv_tdname
              object                  = gc_tdobject
            TABLES
              lines                   = it_line
            EXCEPTIONS
              id                      = 1
              language                = 2
              name                    = 3
              not_found               = 4
              object                  = 5
              reference_check         = 6
              wrong_access_to_archive = 7
              OTHERS                  = 8.
          IF sy-subrc EQ 0.
            "跟第一行的长文本比较,只保存本次编辑的内容
            DESCRIBE TABLE it_line2 LINES i_line.
            LOOP AT it_line INTO DATA(is_line).
              i_line2 = i_line2 + 1.
              IF i_line2 <= i_line.
                DELETE it_line.
              ENDIF.
            ENDLOOP.
        "如果有多次修改的情况,获取本次修改的内容复制给其它W/O数据
            LOOP AT gt_alv INTO gw_alv WHERE sel = 'X'.
              lv_tdname = sy-repid && gw_alv-aufnr && gw_alv-kdauf.
              IF lv_tdname = lv_object.
                CONTINUE."跳过上面保存的那一条
              ENDIF.
*--长文本保存
              header-tdobject  = gc_tdobject.
              header-tdname    = lv_tdname.
              header-tdid      = gc_tdid.
              header-tdspras   = '1'.
              CALL FUNCTION 'SAVE_TEXT'
                EXPORTING
                  client          = sy-mandt
                  header          = header
                  savemode_direct = 'X'
                TABLES
                  lines           = it_line
                EXCEPTIONS
                  id              = 1
                  language        = 2
                  name            = 3
                  object          = 4
                  OTHERS          = 5.
              IF sy-subrc EQ 0.
                CLEAR:header,lv_tdname.
              ENDIF.
            ENDLOOP.
          ELSE.
            CALL FUNCTION 'FREE_TEXT_MEMORY'
              EXCEPTIONS
                not_found = 1
                OTHERS    = 2.
          ENDIF.
        ENDIF.
      ENDIF.

### 如何在SAP中编辑或修改长文本字段 在SAP系统中,长文本(Long Texts)通常用于存储详细的描述信息或其他扩展数据。要编辑或修改这些长文本字段,可以遵循以下方式实现: #### 使用SE51事务码 通过事务码 `SE51` 可以访问并维护对象的长文本内容。此事务允许用户查看、创建以及更新各种类型的长文本。具体操作如下: - 输入目标对象的关键字(如物料编号、文档号等),进入对应的界面。 - 找到需要调整的具体记录项,并点击“显示”按钮打开当前已有的长文本视图。 - 如果权限允许,则可以直接切换至编辑模式进行更改。 另外,在某些特定业务场景下也可能存在其他专用路径来处理这类需求[^1]。 #### 编程接口(SE16N, LSMW etc.) 对于批量或者自动化的需求来说,还可以利用ABAP编程技术调用标准函数模块完成对多个实例下的long texts同步更新工作。例如可以通过BAPI_TEXT_CONVERT_TO_SAP_FORMAT 和 BAPI_TEXT_MAINTAIN 这两个功能模块来进行外部导入后的文字格式化保存操作;或者是借助于LSMW工具加载CSV文件形式的数据源映射关系后执行上传流程等等[^2]。 ```abap DATA: lv_object TYPE string, lt_texts TYPE TABLE OF bapi_text_line. lv_object = 'YOUR_OBJECT_ID'. " Replace with actual object ID CALL FUNCTION 'BAPI_TEXT_GET' EXPORTING id = lv_object IMPORTING text = lt_texts[]. MODIFY lt_texts FROM VALUE #( line = 'New Line Added' ). CALL FUNCTION 'BAPI_TEXT_MAINTAIN' EXPORTING id = lv_object deleteflag = space TABLES texttab = lt_texts[]. ``` 以上代码片段展示了如何读取现有对象上的所有行作为内部表变量lt_texts的内容结构,接着向其中追加新一行之后再重新写回到同一个实体关联处去覆盖原始版本的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值