Erp- T100 接口的实现
这个接口是在根据杂发单 anti301 而写的生发单。(可以查看对应的原生程序,在 azzi910 里面查看作业号对应的程序如 anti301 对应的是 anti302 作业)
1.首先在 azzi700 创建程序 cwssp069
编写程序
1.首先确定和报文的里面数据一致。
报文 { "key": "f5458f5c0f9022db743a7c0710145903", "type": "sync", "host": { "prod": "wms", "ip": "192.168.8.203", "lang": "zh_CN", "acct": "tiptop", "timestamp": "20151211123204361" }, "service": { "prod": "T100", "name": "Create_cxmt010", "ip": "192.168.8.203", "id": "topprd" }, "datakey": { "EntId": "66", "CompanyId": "SITE-01" }, "payload": { "std_data": { "parameter": { "inbadocno": "IN01", "detail": [ { "inbb001": "010300003", "inbb004": "A016801408002", "inbb007": "A0001", "inbb008": "C0001", "inbb011": "1.000", "inbb014": "0", "inbb016": "302" } ] } } } }
程序:
第1部分 #該程式未解開Section, #該程式未解開Section, 採用最新樣板產出! #該程式為freestyle程式! { } #應用 a00 樣板自動產生(Version:3) #+ Standard Version.....: SD版次:0001(1900-01-01 00:00:00), PR版次: #+ Customerized Version.: SD版次:0001(1900-01-01 00:00:00), PR版次: #+ Build......: 000000 #+ Filename...: cwssp069 #+ Description: Test-dtu #+ Creator....: 00000(2023-11-27 14:52:08) #+ Modifier...: 00000 -SD/PR- { } { } #應用 m00 樣板自動產生(Version:12) #add-point:填寫註解說明 name="global.memo" #Memos #end add-point #add-point:填寫註解說明(客製用) name="global.memo_customerization" #end add-point IMPORT os IMPORT xml #add-point:增加匯入項目 name="global.import" IMPORT util #首先需要导入这个东西,默认的 IMPORT FGL lib_cl_dlg IMPORT JAVA com.fourjs.fgl.lang.FglRecord #end add-point SCHEMA ds GLOBALS "../../cfg/top_global.inc" #每个程序均有 GLOBALS "../../cfg/top_ws.inc" #TIPTOP Service Gateway 使用的全域變數檔 #add-point:自定義模組變數(Module Variable) name="global.variable" #异动申请明细,明细表1 TYPE type_detail RECORD #单身表 字段要和报文对应 inbb001 LIKE inbb_t.inbb001, #料件编号 inbb004 LIKE inbb_t.inbb004, #规格 inbb007 LIKE inbb_t.inbb007, #库位 inbb008 LIKE inbb_t.inbb008, #限定储位 inbb011 LIKE inbb_t.inbb011, #申请数量 inbb014 LIKE inbb_t.inbb014, #参考单位申请数量 inbb016 LIKE inbb_t.inbb016 #理由码 END RECORD TYPE type_master RECORD #单头表 字段和报文一一对应 同时这里包含单身 使用动态数组 inbadocno LIKE inba_t.inbadocno, #订单单别 detail DYNAMIC ARRAY OF type_detail #异动申请明细,明细表1 END RECORD TYPE type_return RECORD #返回的数据 doc_no STRING #返回的数据 END RECORD DEFINE g_master type_master #定义全局变量 DEFINE g_return type_return DEFINE g_inba RECORD LIKE inba_t.* DEFINE g_inbb RECORD LIKE inbb_t.* DEFINE g_inbc RECORD LIKE inbb_t.* #end add-point #add-point:自定義客戶專用模組變數(Module Variable) name="global.variable_customerization" #end add-point { } { } #+ 作業開始 MAIN DEFINE l_request_str STRING DEFINE l_output_str STRING #add-point:main段define name="main.define" #end add-point #add-point:main段define name="main.define_customerization" #end add-point #定義在其他link的程式則無效 WHENEVER ERROR CALL cl_err_msg_log #add-point:初始化前定義 name="main.before_ap_init" #end add-point #wss進行初始化設定(web services) CALL cl_wss_init() #呼叫服務前置處理程序 CALL awsp900_01_preprocess() #呼叫服務函式,中介程式主要處理段 IF g_status.code = "0" THEN CALL cwssp069_process() END IF #呼叫服務後置處理程序 CALL awsp900_01_postprocess() #離開作業 CALL cl_wss_exit() END MAIN { } { } #+ 實際處理服務程式邏輯的FUNCTION內容 PRIVATE FUNCTION cwssp069_process() #add-point: 服務邏輯主要處理段的ADP name="cwssp069.process" DEFINE l_n LIKE type_t.num5 DEFINE l_success LIKE type_t.num5 DEFINE r_success LIKE type_t.num5 DEFINE l_json_obj util.JSONObject DEFINE l_lang LIKE ooefl_t.ooefl002 DEFINE l_enterprise LIKE ooef_t.ooefent DEFINE l_companyid LIKE ooef_t.ooef001 DEFINE l_detail_cnt LIKE type_t.num10 DEFINE i,j INTEGER INITIALIZE g_master.* TO NULL #初始化 LET g_dlang = cl_aws_json_getValue("host","lang") #接收语言别 # LET g_user = cl_aws_json_getValue("host","acct") #接收操作者 LET g_enterprise = cl_aws_json_getValue("datakey","EntId") #接收ent LET g_site = cl_aws_json_getValue("datakey","CompanyId") #接收site IF cl_null(g_enterprise) THEN LET g_status.code = '-1' #讀入json 發生問題 LET g_status.description ="request中EntId为空!" RETURN END IF IF cl_null(g_site) THEN LET g_status.code = '-1' #讀入json 發生問題 LET g_status.description ="request中CompanyId为空!" RETURN END IF # IF cl_null(g_user) THEN # LET g_status.code = '-1' #讀入json 發生問題 # LET g_status.description ="request中acct为空!" # RETURN # END IF IF cl_null(g_dlang) THEN LET g_status.code = '-1' #讀入json 發生問題 LET g_status.description ="request中lang为空!" RETURN END IF LET l_success = TRUE LET r_success = TRUE #將parameter 參數資料取至JSONObject LET l_json_obj = cl_aws_json_getParam() #??? IF l_json_obj IS NULL THEN INITIALIZE g_errparam TO NULL LET g_errparam.code = "wss-00216" #讀入json 發生問題 CALL cl_err() RETURN END IF #由JSONObject 轉入Record CALL l_json_obj.toFGL(g_master) #接收数据 #开始产生aint310单据 CALL cl_err_collect_init() #报错收集 CALL s_transaction_begin() #开启事务 #循环接收到的杂收或者杂发单---s FOR i=1 TO 1 #因为这里只是循环一次单头,所以我直接默认为1 CALL cwssp069_accept_aint069(i) RETURNING l_success,g_inba.inbadocno IF NOT l_success THEN LET r_success=FALSE ELSE LET g_return.doc_no = g_inba.inbadocno END IF END FOR #回传单号 IF r_success THEN CALL s_transaction_end('Y',0) INITIALIZE g_errparam TO NULL CALL g_errlog_arr.clear() #??? CALL cl_aws_json_addParam(util.JSONObject.fromFGL(g_return)) #返回数据 ELSE CALL s_transaction_end('N',0) LET l_n=g_errlog_arr.getLength() IF cl_null(l_n) OR l_n=0 THEN LET g_status.code = '-1' ELSE IF NOT cl_null(g_errlog_arr[l_n].code) THEN LET g_status.code = g_errlog_arr[l_n].code LET g_status.description = g_errlog_arr[l_n].message END IF END IF END IF #end add-point END FUNCTION {} { } #add-point:自定義元件(Function) name="other.function" ################################################################################ # Descriptions...: 描述说明 # Memo...........: # Usage..........: CALL s_aooi150_ins (传入参数) # RETURNING 回传参数 # Input parameter: 传入参数变量1 传入参数变量说明1 # : 传入参数变量2 传入参数变量说明2 # Return code....: 回传参数变量1 回传参数变量说明1 # : 回传参数变量2 回传参数变量说明2 # Date & Author..: 日期 By 作者 # Modify.........: ################################################################################ PRIVATE FUNCTION cwssp069_accept_aint069(i) DEFINE l_prog STRING DEFINE l_success,r_success BOOLEAN DEFINE l_seq INTEGER DEFINE l_imaa004 LIKE imaa_t.imaa004 DEFINE l_flag LIKE type_t.num5 DEFINE l_ooac002 LIKE ooac_t.ooac002 DEFINE j,i LIKE type_t.num5 LET l_success = TRUE LET r_success = TRUE LET l_seq = 1 LET j = 1 CALL s_transaction_begin() #开启事务 LET g_inbb.inbb011 = g_master.detail[j].inbb011 #数量 #生成aint301单号 LET l_prog = 'aint301' LET g_inba.inbadocno = 'IN01' LET g_inba.inba001 = '1' LET g_inba.inbadocdt = g_today #默认日期 -------------- CALL s_transaction_begin() #生成杂收单号 CALL s_aooi200_gen_docno(g_site,g_inba.inbadocno,g_inba.inbadocdt,l_prog) RETURNING l_success,g_inba.inbadocno ------------ #申请人员检验 IF cl_null(g_master.inbadocno) THEN LET g_status.code = '-1' #讀入json 發生問題 LET g_status.description ="第",i,"笔数据中申请人员inbadocno为空!" LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF LET g_inba.inba003 = '00000' #申请部门检验带值 SELECT ooag003 INTO g_inba.inba004 FROM ooag_t WHERE ooagent = g_enterprise AND ooag001 = g_inba.inba003 IF cl_null(g_inba.inba004) THEN LET g_status.code = '-1' #讀入json 發生問題 LET g_status.description ="第",i,"笔数据中申请部门为空!" LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF INITIALIZE g_chkparam.* TO NULL #設定g_chkparam.*的參數 LET g_chkparam.arg1 = g_inba.inba004 LET g_chkparam.arg2 = g_inba.inbadocdt IF NOT cl_chk_exist("v_ooeg001") THEN LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF #异动资讯 LET g_inba.inbaownid = g_inba.inba003 LET g_inba.inbaowndp = g_inba.inba004 LET g_inba.inbacrtid = g_inba.inba003 LET g_inba.inbacrtdp = g_inba.inba004 LET g_inba.inbacrtdt = cl_get_current() LET g_inba.inbamodid = g_inba.inba003 LET g_inba.inbamoddt = cl_get_current() LET g_inbb.inbbdocno = g_inba.inbadocno #默认据点和状态码 LET g_inba.inbasite = g_site LET g_inba.inbaent = g_enterprise LET g_inba.inbastus = "N" #单据类别 #LET g_inba_m.inba001 #??? #扣账日期 LET g_inba.inba002 = g_inba.inbadocdt #默认数据源(差异转入) LET g_inba.inba005 = "1" #插入杂发单头 INSERT INTO inba_t (inbaent,inbasite,inbadocno,inbadocdt,inba001,inba002,inba003,inba004,inba005, inbaownid,inbaowndp,inbacrtid,inbacrtdp,inbacrtdt, inbamodid,inbamoddt,inbastus) VALUES(g_enterprise,g_site,g_inba.inbadocno,g_inba.inbadocdt,g_inba.inba001,g_inba.inba002, g_inba.inba003,g_inba.inba004,g_inba.inba005, g_inba.inbaownid, g_inba.inbaowndp,g_inba.inbacrtid,g_inba.inbacrtdp,g_inba.inbacrtdt, g_inba.inbamodid,g_inba.inbamoddt,g_inba.inbastus) IF SQLCA.SQLCODE THEN INITIALIZE g_errparam TO NULL LET g_errparam.extend = '' LET g_errparam.code = SQLCA.SQLCODE LET g_errparam.popup = TRUE CALL cl_err() LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF #循环单身数据,j作为项次 FOR j=1 TO g_master.detail.getLength() LET g_inbb.inbb001 = g_master.detail[j].inbb001 #料件编号 LET g_inbb.inbb004 = g_master.detail[j].inbb004 #规格 LET g_inbb.inbb008 = g_master.detail[j].inbb008 #限定储位 LET g_inbb.inbb007 = g_master.detail[j].inbb007 #库位 LET g_inbb.inbb011 = g_master.detail[j].inbb011 #申请数量 LET g_inbb.inbb014 = g_master.detail[j].inbb014 #参考单位申请数量 LET g_inbb.inbb016 = g_master.detail[j].inbb016 #理由码 #检验否------s CALL s_aooi200_get_slip(g_inba.inbadocno) RETURNING l_flag,l_ooac002 IF cl_get_doc_para(g_enterprise,g_site,l_ooac002,'D-BAS-0076') = 'Y' THEN #品質檢驗否 LET g_inbb.inbb018 = 'Y' #檢驗否 ELSE LET g_inbb.inbb018 = 'N' END IF #检验否------e LET g_inbb.inbb012 = g_inbb.inbb011 #实际数量 LET g_inbb.inbbseq = l_seq # 项次 #料件编号校验 IF NOT cl_null(g_inbb.inbb001) THEN #校验料件编号是否为空 IF NOT cwssp069_inbb001_chk(g_inbb.inbb001) THEN LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF ELSE LET g_status.code = '-1' #讀入json 發生問題 LET g_status.description ="第",i,"笔数据中,单身第",j,"条料件编号为空值!" LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF #理由码检验 IF NOT cwssp069_inbb016_chk(g_inbb.inbb016) THEN LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF #数量检验 IF cl_null(g_inbb.inbb011) THEN LET g_status.code = '-1' #讀入json 發生問題 LET g_status.description ="第",i,"笔数据中,单身第",j,"条数量为空值!" LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF IF g_inbb.inbb011 < 0 THEN LET g_status.code = '-1' #讀入json 發生問題 LET g_status.description ="第",i,"笔数据中单身数量正负有误!" LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF #库位检验 #库位有值才做检核 IF cl_null(g_inbb.inbb007) THEN LET g_status.code = '-1' #讀入json 發生問題 LET g_status.description ="第",i,"笔数据中单身第",j,"条库位为空值!" LET r_success = FALSE RETURN r_success,'' END IF #储位检验 IF cl_null(g_inbb.inbb008) THEN LET g_inbb.inbb008 = '' ELSE #呼叫s_control_doc_chk('6',inbbdocno,inbb007,inbb008,'','','')應用元件, #檢核輸入的庫位是否在單據別限制範圍內,若不在限制內則不允許使用此庫位 CALL s_control_chk_doc('6',g_inba.inbadocno,g_inbb.inbb007,g_inbb.inbb008,'','','') RETURNING l_success,l_flag IF NOT l_success THEN LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' ELSE IF NOT l_flag THEN LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF END IF END IF #料件编号带出值 --------------------------s LET g_inbb.inbb004 = '' #包装容器 LET g_inbb.inbb010 = '' #单位 LET g_inbb.inbb013 = '' #参考单位 LET g_inbb.inbb014 = 0 #参考单位申请数量 LET g_inbb.inbb015 = 0 #参考单位实际数量 #單位 SELECT imaa006,imaa004 INTO g_inbb.inbb010,l_imaa004 FROM imaa_t WHERE imaaent = g_enterprise AND imaa001 = g_inbb.inbb001 #參考單位、庫位、儲位、包裝容器 SELECT imaf015,imaf123 INTO g_inbb.inbb013,g_inbb.inbb004 FROM imaf_t WHERE imafent = g_enterprise AND imafsite = g_site AND imaf001 = g_inbb.inbb001 #180918-00016#1 add-S IF l_imaa004 = 'E' OR cl_null(l_imaa004) THEN LET g_inbb.inbb007 = NULL END IF #参考单位申请数量,#参考单位实际数量 IF (NOT cl_null(g_inbb.inbb001)) AND (NOT cl_null(g_inbb.inbb011)) AND (NOT cl_null(g_inbb.inbb013)) THEN CALL s_aooi250_convert_qty(g_inbb.inbb001,g_inbb.inbb010,g_inbb.inbb013,g_inbb.inbb011) RETURNING l_success,g_inbb.inbb014 IF l_success THEN LET g_inbb.inbb015 = g_inbb.inbb014 END IF END IF #检验合格量 IF g_inbb.inbb018 = 'N' THEN LET g_inbb.inbb019 = g_inbb.inbb011 ELSE LET g_inbb.inbb019 = 0 END IF #料件编号带出值 --------------------------e #插入单身------------------ s IF r_success THEN #插入单身 inbb007 INSERT INTO inbb_t(inbbseq,inbbdocno,inbbsite,inbbent,inbb001,inbb004,inbb007,inbb008,inbb010,inbb013, inbb011,inbb012,inbb014,inbb015,inbb016,inbb018,inbb019) VALUES(l_seq,g_inbb.inbbdocno,g_inba.inbasite,g_inba.inbaent,g_inbb.inbb001,g_inbb.inbb004,g_inbb.inbb007, g_inbb.inbb008,g_inbb.inbb010,g_inbb.inbb013,g_inbb.inbb011,g_inbb.inbb012,g_inbb.inbb014, g_inbb.inbb015,g_inbb.inbb016,g_inbb.inbb018,g_inbb.inbb019) IF SQLCA.SQLCODE THEN INITIALIZE g_errparam TO NULL LET g_errparam.extend = '' LET g_errparam.code = SQLCA.SQLCODE LET g_errparam.popup = TRUE CALL cl_err() LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF #插入单身2 INSERT INTO inbc_t(inbcent,inbcsite,inbcdocno,inbcseq,inbcseq1,inbc001,inbc005,inbc006,inbc009,inbc010) VALUES(g_enterprise,g_site,g_inba.inbadocno,g_inbb.inbbseq,1,g_inbb.inbb001, g_inbb.inbb007, g_inbb.inbb008,g_inbb.inbb010,g_inbb.inbb011) IF SQLCA.SQLCODE THEN INITIALIZE g_errparam TO NULL LET g_errparam.extend = '' LET g_errparam.code = SQLCA.SQLCODE LET g_errparam.popup = TRUE CALL cl_err() LET r_success = FALSE CALL s_transaction_end('N',0) RETURN r_success,'' END IF LET l_seq = l_seq + 1 END IF #插入单身------------------ E END FOR #---------------------------------------审核逻辑------START----------------------------------# LET g_prog = l_prog CALL cl_err_collect_init() IF NOT s_aint302_conf_chk(g_inba.inbadocno) THEN #add by CALL s_transaction_end('N','0') CALL cl_err_collect_show() LET r_success = FALSE RETURN r_success,'' END IF IF NOT s_aint302_conf(g_inba.inbadocno) THEN #add by CALL s_transaction_end('N','0') CALL cl_err_collect_show() LET r_success = FALSE RETURN r_success,'' END IF LET g_inba.inbacnfid = g_inba.inba003 UPDATE inba_t SET inbacnfid = g_inba.inbacnfid WHERE inbaent = g_enterprise AND inbadocno = g_inba.inbadocno #---------------------------------------过账逻辑------START----------------------------------# # LET g_coll_title[1] = "項次" IF NOT s_aint302_posted(g_inba.inbadocno) THEN #检查单身是否重复,并过账 CALL s_transaction_end('N','0') CALL cl_err_collect_show() LET r_success = FALSE RETURN r_success,'' END IF UPDATE inba_t SET inbapstid = g_inba.inba003 WHERE inbaent = g_enterprise AND inbadocno = g_inba.inbadocno CALL cl_err_collect_show() LET g_prog = 'cwssp069' CALL s_transaction_end('Y','0') RETURN r_success,g_inba.inbadocno END FUNCTION ################################################################################ # Descriptions...: 描述说明 # Memo...........: # Usage..........: CALL s_aooi150_ins (传入参数) # RETURNING 回传参数 # Input parameter: 传入参数变量1 传入参数变量说明1 # : 传入参数变量2 传入参数变量说明2 # Return code....: 回传参数变量1 回传参数变量说明1 # : 回传参数变量2 回传参数变量说明2 # Date & Author..: 日期 By 作者 # Modify.........: ################################################################################ PRIVATE FUNCTION cwssp069_inbb001_chk(p_inbb001) DEFINE p_inbb001 LIKE inbb_t.inbb001 DEFINE r_success LIKE type_t.num5 DEFINE l_success LIKE type_t.num5 DEFINE l_flag LIKE type_t.num5 LET r_success = TRUE #設定g_chkparam.*的參數前,先將其初始化,避免之前設定遺留的參數值造成影響。 INITIALIZE g_chkparam.* TO NULL #設定g_chkparam.*的參數 LET g_chkparam.arg1 = p_inbb001 #呼叫檢查存在並帶值的library IF NOT cl_chk_exist("v_imaf001_14") THEN LET r_success = FALSE RETURN r_success END IF #呼叫s_control_doc_chk('4',inbbdocno,inbb001,'','','','')應用元件, #檢核輸入的料件的生命週期是否在單據別限制範圍內,若不在限制內則不允許雜收此料 CALL s_control_chk_doc('4',g_inba.inbadocno,p_inbb001,'','','','') RETURNING l_success,l_flag IF NOT l_success THEN LET r_success = FALSE RETURN r_success ELSE IF NOT l_flag THEN #CALL cl_err(p_inbb001,'ain-00015',1) LET r_success = FALSE RETURN r_success END IF END IF #呼叫s_control_doc_chk('5',inbbdocno,inbb004,'','','','')應用元件, #檢核輸入的料件的產品分類是否在單據別限制範圍內,若不在限制內則不允許雜收此料 CALL s_control_chk_doc('5',g_inba.inbadocno,p_inbb001,'','','','') RETURNING l_success,l_flag IF NOT l_success THEN LET r_success = FALSE RETURN r_success ELSE IF NOT l_flag THEN #CALL cl_err(p_inbb001,'apm-00238',1) LET r_success = FALSE RETURN r_success END IF END IF RETURN r_success END FUNCTION ################################################################################ # Descriptions...: 描述说明 # Memo...........: # Usage..........: CALL s_aooi150_ins (传入参数) # RETURNING 回传参数 # Input parameter: 传入参数变量1 传入参数变量说明1 # : 传入参数变量2 传入参数变量说明2 # Return code....: 回传参数变量1 回传参数变量说明1 # : 回传参数变量2 回传参数变量说明2 # Date & Author..: 日期 By 作者 # Modify.........: ################################################################################ PRIVATE FUNCTION cwssp069_inbb016_chk(p_inbb016) DEFINE p_inbb016 LIKE inbb_t.inbb016 DEFINE l_success LIKE type_t.num5 DEFINE r_success LIKE type_t.num5 DEFINE l_flag LIKE type_t.num5 LET r_success = TRUE #1.抓取[T:系統分類值檔].[C:系統分類碼]=24且[T:系統分類值檔].[C:系統分類碼]=g_prog 的[T:系統分類值檔].[C:參考欄位二]的欄位值 # IF NOT s_azzi650_chk_exist(g_acc,p_inbb016) THEN #??? # LET r_success = FALSE # RETURN r_success # END IF CALL s_control_chk_doc('8',g_inba.inbadocno,p_inbb016,'','','','') RETURNING l_success,l_flag IF NOT l_success THEN LET r_success = FALSE RETURN r_success ELSE IF NOT l_flag THEN LET r_success = FALSE RETURN r_success END IF END IF RETURN r_success END FUNCTION #end add-point {/section}
2 编写好程序后进行上传,发送报文。
若遇到问题,可以打开 awsq990 查看发送的信息。进行 debug(这里需要开发前进行测试接口的链接就在这里)
3.注意事项
生发单的时候需要,需要看插入几个表是否有附属表。比如这个程序就是俩个表,inbb_t、inbc_t。需要在原作业号进行查看 anti301,并且看如何校验判断值。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于