t100集成泛微demo

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

fglwsdl [-command] <filename | url | regex value>
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 = "  <?xml version='1.0' encoding='UTF-8'?>",
                  "  <root>",
                  "  <systoken>",
                  "  <syskey>1aa8c155-dcfe-4472-9bfd-55c38c6c47fa </syskey>",
                  "      <syscode>40CE39723A270D4EB9F0D98A234C10A3</syscode>",
                  "  </systoken>",
                  "  <description>",
                  "      <workflowid>58</workflowid>",                          #流程代码
                  "      <workflowhrmtransrule>3</workflowhrmtransrule>",         
                  "      <workflowname>",g_inbi_m.inbidocno,"</workflowname>",                    #流程名称
                  "      <workflowcreater>",g_inbi_m.inbi001,"</workflowcreater>",   #流程发起人
                  "      <workflowlevel>0</workflowlevel>",       
                  "  </description>",     
                  "  <maintable>",
                  "      <DJBH>",l_inbi.DJBH CLIPPED,"</DJBH>",           #单据编号
                  "      <SQRY type='hrm'>",l_inbi.SQRY CLIPPED,"</SQRY>",           #申请人                  
                  "      <SQBM  type='department'>",l_inbi.SQRY CLIPPED,"</SQBM>",           #申请部门                  
                  "      <SQRQ>",l_inbi.SQRQ CLIPPED,"</SQRQ>",           #申请日期                  
                  "      <BFYY>",l_inbi.BFYY CLIPPED,"</BFYY>",           #报废原因
                  "      <BZ>",l_inbi.BZ,"</BZ>",                         #备注
                  "   </maintable>",
                  "   <detailtables>",
                  "   <detailtable>"
    FOR l_i = 1 TO l_n-1
        LET l_request = l_request,
                  "          <row>",
                  "             <WLBH>",l_inbj[l_i].WLBH CLIPPED,"</WLBH>",    #料件编号
                  "             <PMGG>",l_inbj[l_i].PMGG CLIPPED,"</PMGG>",    #品名
                  "             <GG>",l_inbj[l_i].GG CLIPPED,"</GG>",          #规格
                  "             <DW>",l_inbj[l_i].DW CLIPPED,"</DW>",          #单位
                  "             <BFSL>",l_inbj[l_i].BFSL CLIPPED,"</BFSL>",    #报废数量
                  "             <ZL>",l_inbj[l_i].ZL CLIPPED,"</ZL>",          #重量
                  "             <KW>",l_inbj[l_i].KW CLIPPED,"</KW>",          #库位
                  "             <PH>",l_inbj[l_i].PH CLIPPED,"</PH>",          #批号
                  "             <BZ>",l_inbj[l_i].BZ CLIPPED,"</BZ>",          #备注
                  "             <GSBM>",l_inbj[l_i].GSBM CLIPPED,"</GSBM>",    #归属部门
                  "          </row>"
    END FOR 
    LET l_request = l_request,
                  "     </detailtable>",
                  "   </detailtables>",
                  "</root>"
                  
     #记录接收集成日志
    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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,072评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,590评论 18 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,894评论 2 89
  • 文/言西早 11月4日,号称“年度武林大戏”的一龙王者挑战赛以武僧一龙的惨败落下帷幕。西提猜以绝对的优势在1粉10...
    弥道天雨粟阅读 242评论 2 1
  • 1.第一项任务完成2.有轻微拖延,本来想了解下vue的,但是还是没看。打算以后提早去办公室3.没有锻炼,但是帮波波搬家了
    Marco_Deng阅读 119评论 0 0