BAPI_EQUI_CREATE(IE01/IE02)建立裝置後,建立長文字問題總結
阿新 • • 發佈:2019-01-02
裝置建立長文字問題總結
問題描述
在開發實施中,當我們通過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