t100集成泛微demo

一、获取泛微OA的Webservices地址。
在对应的文件下面生成 T100目录/aws/4gl下以下命令:

fglwsdl [-command] 
fglwsdl -o  aws_work_test http://192.168.X.X/services/NibWorkflowService?wsdl

只在对应目录下生成两个4gl/inc文件



直接调用里面的function即可。

二、编写发送端代码

PRIVATE FUNCTION aint311_OAinsert()
  DEFINE l_n,l_i,l_i1   LIKE type_t.num5
  DEFINE l_sql          STRING 
  DEFINE l_request      STRING 
  DEFINE l_cnt1,l_cnt2,l_cnt3,l_cnt4,l_msglength,l_msglength2 LIKE type_t.num5
  DEFINE l_msg          LIKE type_t.chr1000
  DEFINE l_msg1         LIKE type_t.chr1000    
  DEFINE li_result      STRING              
  DEFINE li_msg         STRING
  #单头数据
  DEFINE l_inbi RECORD 
  
    DJBH LIKE inbi_t.inbidocno,    #单据编号
    SQRY LIKE inbi_t.inbi001,      #申请人
    SQBM LIKE inbi_t.inbi002,      #申请部门
    SQRQ LIKE inbi_t.inbidocdt,    #申请日期
    BFYY LIKE inbi_t.inbi003,      #报废原因
    BZ   LIKE inbi_t.inbi021       #备注
    
  END RECORD 
  #单身数据
  DEFINE  l_inbj DYNAMIC ARRAY OF RECORD
        
        WLBH LIKE inbj_t.inbj001,     #料件编号
        PMGG LIKE imaal_t.imaal003,   #品名
        GG   LIKE imaal_t.imaal004,   #规格
        DW   LIKE inbj_t.inbj008,     #单位         
        BFSL LIKE inbj_t.inbj009,     #报废数量
        ZL   LIKE inbj_t.inbjud001,   #重量
        KW   LIKE inbj_t.inbj005,     #库位
        PH   LIKE inbj_t.inbj007,     #批号(inbj007)
        BZ   LIKE inbj_t.inbj031,     #备注(inbj031)
        GSBM LIKE inbj_t.inbj017      #归属部门
        
  END RECORD  
  DEFINE g_logtime   string   
  DEFINE tmpXmlFile  string
  DEFINE r_success   LIKE type_t.num5
  
  LET r_success = TRUE 
   #日志相关记录
  LET g_logtime = YEAR(CURRENT) USING "####", MONTH(CURRENT) USING "&&",DAY(CURRENT) USING "&&","-", TIME(CURRENT)
  LET g_time = TIME
  
#抓单头数据 
  LET l_sql = " SELECT INBIDOCNO,INBI001,INBI002,INBIDOCDT,INBI003,INBI021 FROM INBI_T ",
              "  WHERE INBIDOCNO = '",g_inbi_m.inbidocno,"' ",
              "    AND INBIENT = '",g_enterprise,"' AND INBISITE = '",g_site,"' "
             
    PREPARE l_pre1 FROM l_sql
    DECLARE l_cur1 CURSOR FOR l_pre1
    FOREACH l_cur1 INTO l_inbi.DJBH,l_inbi.SQRY,l_inbi.SQBM,
                        l_inbi.SQRQ,l_inbi.BFYY,l_inbi.BZ

            IF SQLCA.SQLCODE THEN
               INITIALIZE g_errparam TO NULL 
               LET g_errparam.extend = "Foreach:",SQLERRMESSAGE 
               LET g_errparam.code = SQLCA.SQLCODE 
               LET g_errparam.popup = TRUE 
               CALL cl_err()
               EXIT FOREACH
            END IF  

#抓取单身数据            
    LET l_sql = " SELECT INBJ001,IMAAL003, IMAAL004,INBJ008,INBJ009,INBJUD001,INBJ005,INBJ007,INBJ031,INBJ017 ",
              "   FROM INBJ_T LEFT JOIN IMAAL_T ON INBJ001 = IMAAL001 AND IMAALENT = '",g_enterprise,"' ",
              "  WHERE INBJDOCNO = '",g_inbi_m.inbidocno,"' AND inbjent = '",g_enterprise,"' AND inbjsite = '",g_site,"' ",     
              " ORDER BY inbjseq "                
        PREPARE l_pre2 FROM l_sql
        DECLARE l_cur2 CURSOR FOR l_pre2
        LET l_n = 1
        FOREACH l_cur2 INTO l_inbj[l_n].WLBH,l_inbj[l_n].PMGG,l_inbj[l_n].GG,l_inbj[l_n].DW,
                            l_inbj[l_n].BFSL,l_inbj[l_n].ZL,l_inbj[l_n].KW,
                            l_inbj[l_n].PH,l_inbj[l_n].BZ,l_inbj[l_n].GSBM
                IF SQLCA.SQLCODE THEN
                   INITIALIZE g_errparam TO NULL 
                   LET g_errparam.extend = "Foreach:",SQLERRMESSAGE 
                   LET g_errparam.code = SQLCA.SQLCODE 
                   LET g_errparam.popup = TRUE 
                   CALL cl_err()
                   EXIT FOREACH
                END IF            
                           
                IF cl_null(l_inbj[l_n].ZL) THEN 
                   LET l_inbj[l_n].ZL = 0
                END IF
                LET l_n = l_n + 1
        END FOREACH 
    END FOREACH
   
    #组xml  
  LET l_request = "  ",
                  "  ",
                  "  ",
                  "  1aa8c155-dcfe-4472-9bfd-55c38c6c47fa ",
                  "      40CE39723A270D4EB9F0D98A234C10A3",
                  "  ",
                  "  ",
                  "      58",                          #流程代码
                  "      3",         
                  "      ",g_inbi_m.inbidocno,"",                    #流程名称
                  "      ",g_inbi_m.inbi001,"",   #流程发起人
                  "      0",       
                  "  ",     
                  "  ",
                  "      ",l_inbi.DJBH CLIPPED,"",           #单据编号
                  "      ",l_inbi.SQRY CLIPPED,"",           #申请人                  
                  "      ",l_inbi.SQRY CLIPPED,"",           #申请部门                  
                  "      ",l_inbi.SQRQ CLIPPED,"",           #申请日期                  
                  "      ",l_inbi.BFYY CLIPPED,"",           #报废原因
                  "      ",l_inbi.BZ,"",                         #备注
                  "   ",
                  "   ",
                  "   "
    FOR l_i = 1 TO l_n-1
        LET l_request = l_request,
                  "          ",
                  "             ",l_inbj[l_i].WLBH CLIPPED,"",    #料件编号
                  "             ",l_inbj[l_i].PMGG CLIPPED,"",    #品名
                  "             ",l_inbj[l_i].GG CLIPPED,"",          #规格
                  "             ",l_inbj[l_i].DW CLIPPED,"",          #单位
                  "             ",l_inbj[l_i].BFSL CLIPPED,"",    #报废数量
                  "             ",l_inbj[l_i].ZL CLIPPED,"",          #重量
                  "             ",l_inbj[l_i].KW CLIPPED,"",          #库位
                  "             ",l_inbj[l_i].PH CLIPPED,"",          #批号
                  "             ",l_inbj[l_i].BZ CLIPPED,"",          #备注
                  "             ",l_inbj[l_i].GSBM CLIPPED,"",    #归属部门
                  "          "
    END FOR 
    LET l_request = l_request,
                  "     ",
                  "   ",
                  ""
                  
     #记录接收集成日志
    LET tmpXmlFile = "/ut/toptst/log/INTO_WMS_",g_inbi_m.inbidocno,"_",g_logtime,".log"
    RUN "echo '"||l_request||"' > "||tmpXmlFile
    
    #往OA传数据              
    CALL createWorkflowByXml(l_request) RETURNING li_result,li_msg
    LET l_msg = li_msg
    IF li_result !='0' THEN
        LET r_success = FALSE 
        LET g_errparam.extend = "送签失败"
        LET g_errparam.popup = TRUE
        CALL cl_err() #送签失败  
            
    ELSE 
        IF NOT cl_null(l_msg) THEN 
            SELECT instr(l_msg, '>',1,2) INTO l_cnt1 FROM DUAL #找第2个>的位置 
            SELECT instr(l_msg, '<',1,3) INTO l_cnt2 FROM DUAL #找第3个<的位置 
            IF l_cnt2 - l_cnt1 =1 THEN                         #无OA流程号,送签失败
                #定位errmsg的位置
                SELECT SUBSTR(l_msg,instr(l_msg, '>',1,6)+1,instr(l_msg, '<',1,7)-instr(l_msg, '>',1,6)-1) into l_msg1 FROM DUAL
                INITIALIZE g_errparam TO NULL
                LET g_errparam.code = '!'
                LET g_errparam.extend = l_msg1
                LET g_errparam.popup = TRUE  
                CALL cl_err()
                LET r_success = FALSE
            END IF 
        END IF 
    #记录返回日志
    LET tmpXmlFile = "/ut/toptst/log/RETURN_WMS_",g_inbi_m.inbidocno,"_",g_logtime,".log"
    RUN "echo '"||li_msg||"' > "||tmpXmlFile
    END  IF
    
    RETURN r_success
END FUNCTION

三、改写报废单上的单据状态

#核心逻辑
IF lc_state = 'O' AND l_status = "confirm" THEN
      IF cl_ask_confirm("aim-00108") THEN
         CALL s_aint311_cnf_chk(g_inbi_m.inbidocno) RETURNING g_success
         IF g_success THEN
            CALL s_transaction_begin()
            CALL s_aint311_cnf_upd(g_inbi_m.inbidocno) RETURNING g_success
            IF g_success THEN
               #CALL s_transaction_end('Y','0')   
               #审核完毕提交事务,然后送去OA
               CALL aint311_OAinsert() RETURNING g_success               
               #OA送签  
               IF g_success THEN             #判断OA是否送签成功  
                  CALL s_transaction_end('Y','0')
                  LET lc_state = 'W'      
               ELSE 
                  CALL s_transaction_end('N','0') 
                  LET g_action_choice = "statechange"            
                  RETURN 
               END IF
            ELSE          
               CALL s_transaction_end('N','1') 
               LET g_action_choice = "statechange"            
               RETURN 
            END IF
         ELSE
            CALL s_transaction_end('N','0')   
            RETURN 
         END IF
      ELSE
         CALL s_transaction_end('N','0')  
         RETURN 
      END IF
   END IF

四、OA送签流程结束后,反写ERP的单据状态
Demo中没有调用系统标准的审核逻辑。开发时请注意这个细节。

PRIVATE FUNCTION cwssp310_process()
   #add-point: 服務邏輯主要處理段的ADP name="cwssp310.process"
      DEFINE l_inbidocno     LIKE inbi_t.inbidocno,  #单据编号
             l_stus          LIKE type_t.chr1        #状态 
   
      LET l_inbidocno = awsp900_01_getParameter("inbidocno")
      LET l_stus = awsp900_01_getParameter("stus")
         #1 审核 2 提醒 3 归档
      IF l_stus = '3' THEN     #审核
         LET l_stus = 'O'
         UPDATE inbi_t SET inbistus = l_stus
          WHERE inbient = g_enterprise
            AND inbidocno = l_inbidocno
        
         IF SQLCA.sqlcode THEN
            INITIALIZE g_errparam TO NULL
            LET g_errparam.code = SQLCA.sqlcode
            LET g_errparam.extend = 'upd_stus'
            LET g_errparam.popup = FALSE
            CALL cl_err()   
         END IF
      END IF
      IF l_stus = '0' THEN 
         LET l_stus = 'N'         #退回
         UPDATE inbi_t SET inbistus = l_stus
          WHERE inbient = g_enterprise
            AND inbidocno = l_inbidocno
        
         IF SQLCA.sqlcode THEN
            INITIALIZE g_errparam TO NULL
            LET g_errparam.code = SQLCA.sqlcode
            LET g_errparam.extend = 'upd_stus'
            LET g_errparam.popup = FALSE
            CALL cl_err()   
         END IF
      END IF
   #end add-point
END FUNCTION

你可能感兴趣的:(t100集成泛微demo)