找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 11828|回复: 6

[经验] U890调用产成品入库单API生成单据成功案例(VB版)

[复制链接]
发表于 2014-4-8 09:25:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
不详细说明了,直接看代码,不能上传压缩文件真是坑爹。。。


'添加对U8API框架类库引用(在U8SOFT\UFMOM\U8APIFramework目录):
'UFIDA.U8.MomServiceCommon.tlb
'UFIDA.U8.U8MOMAPIFramework.tlb
'UFIDA.U8.U8APIFramework.tlb
'添加Microsoft XML v3.0引用

Option Explicit

Public Sub CallU8Api()
On Error GoTo ErrHandler

    '第一步:构造u8login对象并登陆
    '如果当前环境中有login对象则可以省去第一步

    '第二步:构造环境上下文对象,传入login,并按需设置其它上下文参数
    Dim u8EnvCtx As New U8EnvContext
    Set u8EnvCtx.U8Login = g_objLogin 'ologin

    '第三步:构造ApiBroker对象,调用Connect,传入Api的地址标识(Url),传入上下文
    Dim u8apiBroker As New U8ApiComBroker
    u8apiBroker.Connect "U8API/ProductIn/Add", u8EnvCtx

    '第四步:API参数赋值

    '给普通参数sVouchType赋值。此参数的数据类型为String,此参数按值传递,表示单据类型:10
    u8apiBroker.AssignNormalValue "sVouchType", "10"  '参数类型:String

    '给BO表头参数DomHead赋值,此BO参数的业务类型为产成品入库单,属表头参数。BO参数均按引用传递

    '方法二是构造BusinessObject对象,具体方法如下:
    Dim DomHead As New BusinessObject
    Set DomHead = u8apiBroker.GetBoParam("DomHead")
    DomHead.RowCount = 1 '设置BO对象(表头)行数,只能为一行
    '给BO对象(表头)的字段赋值,值可以是真实类型,也可以是无类型字符串

    '****************************** 以下是必输字段 *****************************
    DomHead(0).setValue "id", "8888"  '主关键字段,Integer类型
    DomHead(0).setValue "ccode", "8888"  '入库单号,String类型

'    Dim ddate As Date
'    ddate = CDate("2010-02-01")
    DomHead(0).setValue "ddate", "2010-02-01"  '入库日期,Date类型
    DomHead(0).setValue "cwhname", "成品库"  '仓库,String类型

    '***************************** 以下是非必输字段 ****************************
    DomHead(0).setValue "iproorderid", "0"  '生产订单ID,String类型
    DomHead(0).setValue "cmaker", "demo"  '制单人,String类型
    DomHead(0).setValue "csource", "1"  '单据来源,Integer类型  库存
    DomHead(0).setValue "cvouchtype", "10"  '单据类型,String类型
    DomHead(0).setValue "cwhcode", "04"  '仓库编码,String类型
    DomHead(0).setValue "crdcode", "12"  '入库类别编码,String类型
    DomHead(0).setValue "cdepcode", "0501"  '部门编码,String类型
    DomHead(0).setValue "vt_id", 63  '模版号,Integer类型

    '给BO表体参数domBody赋值,此BO参数的业务类型为产成品入库单,属表体参数。BO参数均按引用传递
    '提示:给BO表体参数domBody赋值有两种方法

    '方法二是构造BusinessObject对象,具体方法如下:
    Dim domBody As New BusinessObject
    Set domBody = u8apiBroker.GetBoParam("domBody")
    domBody.RowCount = 1 '设置BO对象(表体)行数为多行
    '可以自由设置BO对象(表体)行数为任意大于零的整数,也可以不设置而自动增加
    '给BO对象(表体)的字段赋值,值可以是真实类型,也可以是无类型字符串
    '以下代码示例只设置第一行值。各字段定义详见API服务接口定义

    '****************************** 以下是必输字段 *****************************
    domBody(0).setValue "autoid", "8888" '主关键字段,Integer类型
    domBody(0).setValue "cinvcode", "0301"  '产品编码,String类型
    domBody(0).setValue "editprop", "A"  '编辑属性:A表新增,M表修改,D表删除,String类型

    '***************************** 以下是非必输字段 ****************************
    domBody(0).setValue "id", "8888"  '与主表关联项,Integer类型
    domBody(0).setValue "iquantity", "33"  '数量,Double类型
    domBody(0).setValue "brelated", "0"  '是否联副产品,Integer类型
    domBody(0).setValue "bvmiused", "0"  '代管消耗标识,Integer类型
    domBody(0).setValue "iexpiratdatecalcu", "0"  '有效期推算方式,Integer类型

    '给普通参数domPosition赋值。此参数的数据类型为Object,此参数按引用传递,表示货位:传空

    u8apiBroker.AssignNormalValue "domPosition", Nothing  '参数类型:Object

    '该参数errMsg为OUT型参数,由于其数据类型为String,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult("errMsg")获取其值

    '给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection,此参数按引用传递,表示连接对象,如果由调用方控制事务,则需要设置此连接对象,否则传空
    u8apiBroker.AssignNormalValue "cnnFrom", Nothing  '参数类型:ADODB.Connection

    '该参数VouchId为INOUT型普通参数。此参数的数据类型为String,此参数按值传递。在API调用返回时,可以通过GetResult("VouchId")获取其值
    u8apiBroker.AssignNormalValue "VouchId", Nothing  '参数类型:String

    '该参数domMsg为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数
    Dim domMsg As New MSXML2.DOMDocument

    u8apiBroker.AssignNormalValue "domMsg", domMsg '参数类型:MSXML2.IXMLDOMDocument2

    '给普通参数bCheck赋值。此参数的数据类型为Boolean,此参数按值传递,表示是否控制可用量。
    u8apiBroker.AssignNormalValue "bCheck", False  '参数类型:Boolean

    '给普通参数bBeforCheckStock赋值。此参数的数据类型为Boolean,此参数按值传递,表示检查可用量
    u8apiBroker.AssignNormalValue "bBeforCheckStock", False  '参数类型:Boolean

    '给普通参数bIsRedVouch赋值。此参数的数据类型为Boolean,此参数按值传递,表示是否红字单据
    u8apiBroker.AssignNormalValue "bIsRedVouch", False  '参数类型:Boolean

    '给普通参数sAddedState赋值。此参数的数据类型为String,此参数按值传递,表示传空字符串
    u8apiBroker.AssignNormalValue "sAddedState", ""  '参数类型:String

    '给普通参数bReMote赋值。此参数的数据类型为Boolean,此参数按值传递,表示是否远程:转入false
    u8apiBroker.AssignNormalValue "bReMote", False  '参数类型:Boolean

    '第五步:调用API
    If u8apiBroker.InvokeApi() = False Then
        '第六步:错误处理
        MsgBox u8apiBroker.GetLastError()
        If u8apiBroker.ErrorType = ExceptionType_Business Then
            '处理API业务错误
        ElseIf u8apiBroker.ErrorType = ExceptionType_System Then
            '处理系统错误
        End If
    Else
        '第七步:获取返回结果

        '获取返回值
        '获取普通返回值。此返回值数据类型为Boolean,此参数按值传递,表示返回值:true:成功,false:失败
        Dim result As Boolean
        result = CBool(u8apiBroker.GetReturnValue())

        '获取out/inout参数值

        '获取普通OUT参数errMsg。此返回值数据类型为String,在使用该参数之前,请判断是否为空
        Dim errMsgRet As String
        errMsgRet = CStr(u8apiBroker.GetResult("errMsg"))

        '获取普通INOUT参数VouchId。此返回值数据类型为String,在使用该参数之前,请判断是否为空
        Dim VouchIdRet As String
        VouchIdRet = CStr(u8apiBroker.GetResult("VouchId"))

        '获取普通OUT参数domMsg。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用
    End If

    '结束本次调用,释放API资源
    u8apiBroker.Disconnect

    Set u8apiBroker = Nothing

    If result Then
        ' 更新主表cbustype和csource
        Dim conn As New ADODB.Connection
        Dim sql As String

        conn.Open g_objLogin.UfDbName()
        sql = "update rdrecord set cbustype = '成品入库', csource = '库存' where id = " + VouchIdRet
        conn.Execute sql

        ' 更新表体行号
        sql = "update rdrecords set irowno = 1 where autoid = " + VouchIdRet
        conn.Execute sql

        conn.Close

        MsgBox VouchIdRet
    Else
        MsgBox errMsgRet
    End If

    Exit Sub
ErrHandler:
    MsgBox Err.Description
End Sub



发表于 2024-6-4 14:01:20 | 显示全部楼层
十年之前,我不认识你~
十年之后,我们相缘到此处,只是不知道,大佬你还在不在这里?
回复 点赞 1 拍砖 0

使用道具 举报

发表于 2014-4-8 10:09:21 | 显示全部楼层
给楼主赞一个,最近接触u8,要做个C#版,更新存货档案的接口,希望在论坛有所发现。
回复 点赞 拍砖

使用道具 举报

发表于 2014-4-8 10:48:01 | 显示全部楼层
本人过去、现在以及将来都不认识楼主,且自古以来与楼主无利益关系。楼主表述之事与本人无关
回复 点赞 拍砖

使用道具 举报

发表于 2015-6-2 16:46:32 | 显示全部楼层
好东西,正在学习。。。
回复 点赞 拍砖

使用道具 举报

发表于 2015-11-5 20:56:59 | 显示全部楼层
正在学习。。。
回复 点赞 拍砖

使用道具 举报

发表于 2019-5-5 11:31:45 | 显示全部楼层
谢谢楼主,困扰了好几天了,参照你的产成品入库,调好了我的材料出库单
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-11-22 21:47 , Processed in 0.058364 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表