1. 程式人生 > >BAPI_EQUI_CREATE(IE01/IE02)建立裝置後,建立長文字問題總結

BAPI_EQUI_CREATE(IE01/IE02)建立裝置後,建立長文字問題總結

裝置建立長文字問題總結

  • 問題描述
    在開發實施中,當我們通過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