BAPI_EQUI_CREATE(IE01/IE02)创建设备后,创建长文本问题总结

9 篇文章 2 订阅
2 篇文章 0 订阅

设备创建长文本问题总结

  • 问题描述
    在开发实施中,当我们通过BAPI_EQUI_CREATE创建设备后,我们希望创建“附件数据 1”页签中的长文本;
    其中,创建设备使用:BAPI_EQUI_CREATE,实现代码后面给出简单示例;
    另外,创建长文本我们使用SAVE_TEXT,针对设备中我们创建长文本需要的参数如下:OBJECT:EQUI,ID:LTXT,NAME:设备号(长文本对象的名称就是设备号,注意需要添加前导零)。
    按以上步骤完成设备的创建和对应的长文本创建后,使用IE03查看设备,发现对应的长文本没有值,但是使用READ_TEXT输入对应参数后是可以查看到长文本中有值的,如果点击设备名称后的“显示文本”,也可以看到长文本,且退出后长文本出现,保存后则可以正常显示长文本;
    以上原因对比可以展示长文本和不可以展示长文本的设备发现:不能展示长文本的设备对应的文本表(EQKT)中长文本标识字段KZLTX和TXASP没有打上“X”标记。

  • 解决方法参考

  • 使用EQKT_SAVE_UPD_TASK,更新对应设备的文本表,打上长文本标记

简单代码示例

FORM frm_call_bapi .
  ""创建主设备 BAPI参数
  DATA: ext_number    TYPE bapi_itob_parms-equipment.
  DATA: data_general  TYPE bapi_itob.
  DATA: data_general_exp  TYPE bapi_itob.
  DATA: data_specific TYPE bapi_itob_eq_only.
  DATA: data_install  TYPE bapi_itob_eq_install.
  DATA: return        TYPE bapiret2.
  DATA: t_return      TYPE TABLE OF bapiret2 WITH HEADER LINE.

  ""创建主设备 长文本参数
  DATA: ls_thead TYPE thead,
        lt_ltxts TYPE STANDARD TABLE OF tline,
        ls_ltxts TYPE tline.

  DATA ls_eqkt TYPE eqkt.
  DATA: lt_eqkt_upt TYPE TABLE OF eqkt,
        lt_eqkt_del TYPE TABLE OF eqkt,
        lt_eqkt_ins TYPE TABLE OF eqkt.

  DATA: objectkey     TYPE bapi1003_key-object.
  DATA: classnum      TYPE bapi1003_key-classnum.
  DATA: valueschar    TYPE TABLE OF bapi1003_alloc_values_char WITH HEADER LINE.
  FIELD-SYMBOLS: <fs_data> TYPE ty_data.

  READ TABLE it_data TRANSPORTING NO FIELDS WITH KEY flag_ch = 'X'.
  IF sy-subrc = 0.
    RETURN.
  ENDIF.

  LOOP AT it_data ASSIGNING <fs_data>.

****数据准备
*    ext_number = <fs_data>-equnr.                      "设备编码
    CLEAR data_general.
    data_general-descript   = <fs_data>-eqktx.         "设备描述
    data_general-read_crdat = <fs_data>-erdat.         "有效起始日期
    data_general-objecttype = <fs_data>-eqart.         "技术对象类型
*    DATA_GENERAL-AUTHGRP    = <FS_DATA>-BEGRU.         "授权组
*    data_general-obj_weight = <fs_data>-brgew.         "重量
*    data_general-unit_of_wt = <fs_data>-gewei.         "重量单位
    data_general-obj_size   = <fs_data>-groes.         "大小、尺寸
    data_general-inventory  = <fs_data>-invnr.         "库存号
    data_general-start_from = <fs_data>-inbdt.         "开始日期
    data_general-acquisval  = <fs_data>-answt.         "购置价值
    data_general-currency   = <fs_data>-waers.         "货币码
    data_general-acqdate    = <fs_data>-ansdt.         "购置日期
    data_general-manfacture = <fs_data>-herst.         "制造商
    data_general-mancountry = <fs_data>-herld.         "制造商国家
    data_general-manmodel   = <fs_data>-typbz.         "型号
    data_general-manparno   = <fs_data>-mapar.         "零件号
*    data_general-manserno   = <fs_data>-serge.         "系列号
    data_general-constyear  = <fs_data>-baujj.         "制造年份
    data_general-constmonth = <fs_data>-baumm.         "月份
    data_general-maintplant = <fs_data>-swerk.         "维护工厂
*    DATA_GENERAL-PP_WKCTR   = <FS_DATA>-OBJID.         "工作中心
    data_general-abcindic   = <fs_data>-abckz.         "ABC标识
    data_general-comp_code  = <fs_data>-swerk.         "公司代码
    data_general-asset_no   = <fs_data>-anlnr.         "主资产号
    data_general-costcenter = <fs_data>-kostl.         "成本中心
    data_general-planplant  = <fs_data>-swerk.         "计划工厂
    data_general-plangroup  = <fs_data>-ingrp.         "计划员组
*    data_general-plsectn    = <fs_data>-beber.         "工厂区域
*    data_general-maintroom  = <fs_data>-msgrp.         "房间
    data_general-work_ctr   = <fs_data>-objid1.        "主工作中心
*    DATA_GENERAL-CATPROFILE = <FS_DATA>-RBNR.          "类别参数文件



    CLEAR data_specific.
    data_specific-equicatgry = <fs_data>-eqtyp.        "设备类型
    data_specific-techid =     <fs_data>-tidnr.        "设备位号
*    data_specific-read_valid_from =     <fs_data>-ansdt.        "开始生效日期
*    "判断上级设备
*    IF <fs_data>-hequi IS NOT INITIAL.
*      data_specific-read_supeq = <fs_data>-hequi.        "上级设备
*    ELSE.
*      data_specific-read_floc =  <fs_data>-tplnr.        "功能位置标签
*    ENDIF.


    "设备位置信息
    CLEAR data_install.
    "判断上级设备
    IF <fs_data>-hequi IS NOT INITIAL.
      data_install-supequi = <fs_data>-hequi.        "上级设备
    ELSE.
      data_install-funcloc = <fs_data>-tplnr.        "功能位置标签
    ENDIF.

****调用BAPI创建设备主数据
    CALL FUNCTION 'BAPI_EQUI_CREATE'
      EXPORTING
        external_number  = ext_number
        data_general     = data_general
        data_specific    = data_specific
        data_install     = data_install
      IMPORTING
        equipment        = ext_number
        data_general_exp = data_general_exp
*       DATA_SPECIFIC_EXP       =
*       DATA_FLEET_EXP   =
        return           = return.
    IF return-type = 'E' OR return-type = 'A'.
      "创建设备失败
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

      <fs_data>-icon = 1."ICON_LED_RED.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = return-id
          msgnr               = return-number
          msgv1               = return-message_v1
          msgv2               = return-message_v2
          msgv3               = return-message_v3
          msgv4               = return-message_v4
        IMPORTING
          message_text_output = <fs_data>-msg_ch.
    ELSE.
      "创建设备成功
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.

      ext_number = |{ ext_number ALPHA = OUT }|.
      <fs_data>-icon = 3."ICON_LED_GREEN.
      IF data_general-objecttype = '1111' AND
        data_general-asset_no IS INITIAL.

        <fs_data>-msg_ch  = '设备' && ext_number
          && '和资产' && data_general_exp-asset_no &&'创建成功'.
*      ELSEIF data_general-objecttype = '2222'
*        OR ( data_general-objecttype = '1111' AND
*        data_general-asset_no IS NOT INITIAL ).
      ELSE.
        <fs_data>-msg_ch  = '设备' && ext_number && '创建成功'.      .
      ENDIF.

      <fs_data>-equnr = ext_number.

      ext_number = |{ ext_number ALPHA = IN }|.
      DO 50 TIMES.
        SELECT SINGLE equnr
          INTO @DATA(lv_equnr)
          FROM equi
          WHERE equnr = @ext_number.
        IF sy-subrc = 0.
          EXIT.
        ELSE.
          WAIT UP TO '0.1' SECONDS.
        ENDIF.
      ENDDO.

      "设备号已更新至数据库
      IF lv_equnr IS NOT INITIAL.
        CLEAR ls_eqkt.
        ls_eqkt-mandt = sy-mandt.
        ls_eqkt-equnr = lv_equnr.
        ls_eqkt-spras = sy-langu.
        ls_eqkt-eqktx = data_general_exp-descript.
        ls_eqkt-kzltx = 'X'.
*        ls_eqkt-txasp = 'X'.
        ls_eqkt-eqktu = data_general_exp-descript.
        APPEND ls_eqkt TO lt_eqkt_upt.
      ENDIF.
      IF <fs_data>-long_text IS ASSIGNED.
        DATA(lv_string) = <fs_data>-long_text.
        "设备主数据长文本
        CLEAR ls_thead.
        ls_thead-tdobject ='EQUI' .
        ls_thead-tdname = lv_equnr.
        ls_thead-tdid = 'LTXT'.
        ls_thead-tdspras = '1'.
        DATA(lv_len) = strlen( lv_string ).
        DATA(lv_div) = lv_len DIV 130. "整除
        DATA(lv_mod) = lv_len MOD 130.
        IF lv_div > 0.
          "如果整除大于0 直接做循环将前130个字符赋值给长文本内表
          DO lv_div TIMES.
            CLEAR ls_ltxts.
            ls_ltxts-tdformat = '*'.
            ls_ltxts-tdline = lv_string(130).
            APPEND ls_ltxts TO lt_ltxts.
            SHIFT lv_string BY 130 PLACES LEFT.
          ENDDO.
          "如果余数不为0 则将剩余的字符再赋值给长文本内表
          IF lv_mod <> 0.
            CLEAR ls_ltxts.
            ls_ltxts-tdformat = '*'.
            ls_ltxts-tdline = lv_string.
            APPEND ls_ltxts TO lt_ltxts.
          ENDIF.
        ELSEIF lv_div = 0.
          CLEAR ls_ltxts.
          ls_ltxts-tdformat = '*'.
          ls_ltxts-tdline = lv_string.
          APPEND ls_ltxts TO lt_ltxts.
        ENDIF.

        CALL FUNCTION 'SAVE_TEXT'
          EXPORTING
            client          = sy-mandt
            header          = ls_thead
            insert          = ''
            savemode_direct = 'X'
          TABLES
            lines           = lt_ltxts
          EXCEPTIONS
            id              = 1
            language        = 2
            name            = 3
            object          = 4
            OTHERS          = 5.
        IF sy-subrc = 0.
          CALL FUNCTION 'COMMIT_TEXT'
            EXPORTING
              object          = ls_thead-tdobject
              name            = ls_thead-tdname
              savemode_direct = 'X'.
        ENDIF.
      ENDIF.

    ENDIF.
    CLEAR return.
    CLEAR ext_number.
  ENDLOOP.
  **"更新长文本标识
  IF lt_eqkt_upt IS NOT INITIAL.
    CALL FUNCTION 'EQKT_SAVE_UPD_TASK'
      TABLES
        it_eqkt_upd    = lt_eqkt_upt
        it_eqkt_del    = lt_eqkt_del
        it_eqkt_ins    = lt_eqkt_ins
      EXCEPTIONS
        error_eqkt_upd = 1
        error_eqkt_ins = 2
        error_eqkt_del = 3
        OTHERS         = 4.
  ENDIF.**
ENDFORM.                    " FRM_CALL_BAPI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值