首页 [用友资料]U8API开发手册

[用友资料]U8API开发手册

举报
开通vip

[用友资料]U8API开发手册[用友资料]U8API开发手册 “U8API资源管理器”是一个为U8客户化应用开发提供统一的U8API资源查询、访问、调用规范等服务的平台化工具产品。本产品向外提供一套完整统一的标准U8 API调用接口,以便基于U8标准API资源,采用统一编程模型和开发规范,为企业提供应用集成和个性化 功能扩展增值服务,打造量体合身的信息系统。 在分类体系上,本产品向外提供的U8 API资源主要按照功能模块以及各个单据进行划分, 如库存管理下的盘点单,提供“添加新单据”、“审核单据”、“弃审单据”、“删除单据”、“装 载单据”...

[用友资料]U8API开发手册
[用友资料]U8API开发手册 “U8API资源管理器”是一个为U8客户化应用开发提供统一的U8API资源查询、访问、调用规范等服务的平台化工具产品。本产品向外提供一套完整统一的标准U8 API调用接口,以便基于U8标准API资源,采用统一编程模型和开发规范,为企业提供应用集成和个性化 功能扩展增值服务,打造量体合身的信息系统。 在分类体系上,本产品向外提供的U8 API资源主要按照功能模块以及各个单据进行划分, 如库存管理下的盘点单,提供“添加新单据”、“审核单据”、“弃审单据”、“删除单据”、“装 载单据”和“修改单据”这样六个标准的API接口,以供客户调用。客户可以在“U8API资源管理器”中查看要调用的API接口描述,同时可以获取调用该API的代码示例(目前支持两种语言C#和VB),客户只需要结合API接口描述并按照代码注释中给出的提示步骤进行操 作就可以方便的使用U8 API资源。 下面主要介绍如何使用U8API进行个性化开发,如何对U8API进行调用,同时给出使用过程中需要注意的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 。 2.1. API 2.1.1 API 在U8产品中“UAP”目录下找到“U8API资源管理器”,单击,登录,进入“U8API资源管理器”。在左侧 “U8API” 树形节点下,找到某某模块,如“库存管理”模块(可以看到 下面列有很多个单据,如盘点单、采购入库单等),展开要操作的单据,分两个子节点:“事 件”和“服务接口”,在“服务接口”下可以看到该单据提供的API接口,如“添加新单据”、“审核单据”等。双击这些节点出现该API的详细描述,如下图2.1所示。在节点上右键单击弹出“上下文菜单”,在“代码示例”菜单项上弹出下一级子菜单,单击它们,如单击“C#代码示例”则可以看到调用该API的C#示例代码,如下图2.2所示。直接拷贝这些代码, 然后在集成开发环境(IDE)中编辑和编译这些代码,即能实现调用U8标准API。利用这些代码示例时,请按照其中每一步骤的提示说明正确操作,如添加必要的引用、按照自动生成 的代码填入正确的参数等。正确使用则可以调用成功,否则会返回详细的错误信息。 以下代码中均以C#为例,VB语言请具体查看对应的VB代码示例部分。 图2.1 接口描述 图 2.2 代码示例 2.1.2 API , 组件引用 针对两种语言,需要引用不同的组件。 (1) C#: %U8SOFT%\Interop\Interop.U8Login.dll、 %U8SOFT%\Interop\Interop.MSXML2.dll、%U8SOFT%\UFMOM\U8APIFramew ork\UFIDA.U8.U8APIFramework.dll、%U8SOFT%\UFMOM\U8APIFramework\ UFIDA.U8.MomServiceCommon.dll、%U8SOFT%\UFMOM\U8APIFramework\UF IDA.U8.U8MOMAPIFramework.dll 如下图2.3、2.4、2.5所示。 (2)VB: %U8SOFT%\UFMOM\U8APIFramework\UFIDA.U8.U8APIFramework. tlb、%U8SOFT%\UFMOM\U8APIFramework\UFIDA.U8.MomServiceCommon. tlb、%U8SOFT%\UFMOM\U8APIFramework\UFIDA.U8.U8MOMAPIFramework. tlb、 添加Microsoft XML v3.0引用 如下图2.6、2.7所示。 其中,%U8SOFT%表示U8-872的安装目录。 图 2.3 添加对U8Login.dll引用 图 2.4 添加对Interop.MSXML2.dll引用 图 2.5 添加对U8API框架类库引用(.dll) 图2.6 添加对U8API框架类库引用(.tlb) 图2.7 添加Microsoft XML v3.0引用 , API调用 添加必要的引用后,可以直接利用自动生成的代码示例(支持C#和VB两种语言),结合API接口详细描述,填入必要的参数值,就可以调用U8 API。 总体上,对U8 API的调用分成七个步骤: 1) 构造u8login对象并登陆; 2) 构造环境上下文对象,传入login,并按需设置其它上下文参数; 3) 设置API地址标识(Url)参数; 4) 构造APIBroker; 5) API参数赋值; 6) 调用API; 7) 获取返回结果。 详细的API调用过程请看下文“API内容”中各个模块中介绍的“开发步骤”。 , BO参数赋值 API参数分两种类型:BO参数和普通参数。BO参数即单据表头或表体类型的参数,普通参数则是非表头表头类型的参数。对BO参数,支持两种方式传入,一种传BO对象,另一 种传DOM对象。以下分别介绍: (1) 传BO对象 给BO表头参数或表体参数赋值,推荐使用BO对象(BussinessObject)。 例如: BusinessObject DomHead = broker.GetBoParam("DomHead"); DomHead.RowCount = 10; //设置行数,不设置也可 //给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义 /****************************** 以下是必输字段****************************/ DomHead[0]["poid"] = ""; //主关键字段,int类型 DomHead[0]["dpodate"] = ""; //日期,DateTime类型 DomHead[0]["cpoid"] = ""; //订单编号,string类型 „„ /***************************** 以下是非必输字段****************************/ DomHead[0]["ipresent"] = ""; //现存量,string类型 DomHead[0]["cmaketime"] = ""; //制单时间,DateTime类型 DomHead[0]["cmodifytime"] = ""; //修改时间,DateTime类型 „„ 在此种情况下U8 API框架会对BO对象各字段进行参数校验。对字段进行赋值时,值可以 是真实类型,也可以是无类型字符串。 (2) 传DOM对象 给BO表头参数或表体参数赋值,也支持直接传入DOM对象(DOMDocument)。 例如: MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass(); domHead.load("domHead.xml"); broker.AssignNormalValue("domHead", domHead); 但是,在此种情况下U8 API框架不会对DOM对象进行参数验证。请在使用该方法之前,确 保DOM对象的正确性。 2.1.3 API , 执行单一操作 单一操作指一项任务只需要一个API完成,比如:单据新增、审核/弃审、删除等单一操作。这是API调用最常见的场景,只需按照API的接口规范构造参数直接调用即可。 , 执行复合操作 复合操作,即一项任务由多个API的协作来完成。比如,自定义的单据维护界面的主要 逻辑,一般由以下四个步骤构成: 1) 加载单据; 2) 在编辑界面上显示; 3) 用户修改单据字段; 4) 提交保存。 以上步骤需要进行两次API调用: 1) 加载单据时候调用“加载API”,以获取单据BO对象(或原始DOM对象)并在界面 上展现; 2) 用户在修改单据时其实就是在修改BO对象,用户保存单据时调用“保存API”,此 时要将此BO对象传给“保存API”(而不用构造新的BO对象)。 代码示例: 首先,登陆; //构造u8login对象并登陆 U8Login.clsLogin u8Login = new U8Login.clsLogin(); String sSubId = "AS"; String sAccID = "(default)@001"; String sYear = "2008"; String sUserID = "demo"; String sPassword = ""; String sDate = "2008-09-30"; String sServer = "localhost"; String sSerial = ""; if (!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)) { Console.WriteLine("登陆失败,原因:" + u8Login.ShareString); Marshal.FinalReleaseComObject(u8Login); return; } 然后,通过LOAD接口获取BO对象; //构造环境上下文对象,传入login,并按需设置其它上下文参数 U8EnvContext envContext = new U8EnvContext(); envContext.U8Login = u8Login; //设置上下文参数 „„ //设置API地址标识(Url) U8ApiAddress myApiAddress = new U8ApiAddress(“装载单据的地址标识”); //构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext); //API参数赋值 broker.AssignNormalValue("参数名", "参数值"); „„ //调用LOAD接口API if (!broker.Invoke()) { //错误处理 Exception apiEx = broker.GetException(); if (apiEx != null) { if (apiEx is MomSysException) { MomSysException sysEx = apiEx as MomSysException; Console.WriteLine("系统异常:" + sysEx.Message); //todo:异常处理 } else if (apiEx is MomBizException) { MomBizException bizEx = apiEx as MomBizException; Console.WriteLine("API异常:" + bizEx.Message); //todo:异常处理 } } //结束本次调用,释放API资源 broker.Release(); return; } //获取表头或表体的BO对象,如果要取原始的XMLDOM对象结果,请使用GetResult(参数名) BusinessObject DomRet = broker.GetBoParam("表头或表体参数名"); 接着,BO对象经用户修改重新赋值,并传递给UPDATE接口提交保存; //修改获取的BO对象,对需要更改的字段重新赋值 DomRet[0]["字段名"] = 新的字段值; „„ //重新构造“新增或修改”API的地址标识 myApiAddress = new U8ApiAddress("新增或修改”API的地址标识"); //重新构造APIBroker broker = new U8ApiBroker(myApiAddress, envContext); //表头或表体参数赋值 broker.SetBoParam("表头或表体参数名", DomRet); //API参数赋值 broker.AssignNormalValue("参数名", "参数值"); „„ //调用UPDATE接口API if (!broker.Invoke()) { „„ } 最后,获取返回结果。 //获取普通返回值 System.String result = broker.GetReturnValue() as System.String; //获取out/inout参数值 „„ //结束本次调用,释放API资源 broker.Release(); 2.2. API , 功能介绍 为了支持U8二次开发对业务单据的开发,本功能提供了实现采购业务单据各种操作功 能的编程接口。使用采购管理的API开发接口,可以对库存管理中的采购到货单、采购普通 发票、采购专用发票、采购订单、请购单、采购运费发票等单据进行审核、弃审、获取(或 装载)、新增、修改、删除。 , 使用环境 必须安装.NET FrameWork 2.0; 必须安装U8-872版本的采购管理产品; 必须安装API适配器组件PUAPIConcrete.dll , 接口说明 采购管理二次开发接口说明: , 审核单据-ConfirmPO方法 参数: domHead —— 单据表头,DOM对象,必输 API上下文: VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串 sBusType —— 业务类型:普通采购,直运采购,受托代销 , 弃审单据- CancelconfirmPO方法 参数: domHead —— 单据表头,DOM对象,必输 API上下文: VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串 sBusType —— 业务类型:普通采购,直运采购,受托代销 , 装载单据-Load方法 参数: DomHead —— 表头DOM对象 domBody —— 表体DOM对象 strWhere —— 过滤条件串 varVoucherID —— 单据主表ID strLocateWhere —— 定位条件串 API上下文: VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串 sBusType —— 业务类型:普通采购,直运采购,受托代销 , 删除单据-Delete方法 参数: DomHead —— 表头DOM对象 domBody —— 表体DOM对象 CurDom —— 返回DOM格式错误信息 API上下文: VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串 sBusType —— 业务类型:普通采购,直运采购,受托代销 , 新增或修改新单据- VoucherSave方法 参数: DomHead —— 单据表头,DOM对象,必输 domBody —— 单据表体,DOM对象,必输 VoucherState —— 保存状态,必输。2增加;1修改 ;0非编辑 curID —— 返回单据头ID CurDom —— 返回DOM格式错误信息 UserMode —— 使用模式,0:CS;1:BS API上下文: VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串 sBusType —— 业务类型:普通采购,直运采购,受托代销 , 开发步骤 实现采购单据某一功能,主要有以下七个步骤: 1. 构造u8login对象并登陆 声明和创建u8login类对象前应该先引用U8API类库中的Interop.U8Login.dll,代码 U8Login.clsLogin u8Login = new U8Login.clsLogin(); //声明u8login对象 示例如下: String sSubId = "AS"; //登陆 String sAccID = "(default)@001"; String sYear = "2008"; String sUserID = "demo"; String sPassword = ""; String sDate = "2008-09-30"; String sServer = "localhost"; String sSerial = ""; if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)) { Console.WriteLine("登陆失败,原因:" + u8Login.ShareString); Marshal.FinalReleaseComObject(u8Login); return; } 如果当前环境中有login对象则可以省去第一步。 2. 构造环境上下文对象,传入login,并按需设置其它上下文参数 U8EnvContext envContext = new U8EnvContext(); //构造环境上下文对象 envContext.U8Login = u8Login; //传入login //设置上下文参数 envContext.SetApiContext("VoucherType", new int()); //上下文数据类型:int,含义:单据类型 envContext.SetApiContext("bPositive", new bool()); //上下文数据类型:bool,含义:红蓝标 识:True,蓝字 envContext.SetApiContext("sBillType", new string()); //上下文数据类型:string,含义:为空 串 envContext.SetApiContext("sBusType", new string()); //上下文数据类型:string,含义:业务 类型:普通采购,直运采购,受托代销 如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction设置为true: envContext.BizDbConnection = new ADO.Connection(); envContext.IsIndependenceTransaction = true; 3. 设置API地址标识(Url)参数 //如当前API“新增或修改”的地址标识为:U8API/PurchaseOrder/VoucherSave U8ApiAddress myApiAddress = new U8ApiAddress("U8API/PurchaseOrder/VoucherSave"); 4. 构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext); 5. API对象参数赋值 1) 给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下 MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass(); domHead.load("domHead.xml"); broker.AssignNormalValue("domHead", domHead); 方法二是构造BusinessObject对象,具体方法如下: //首先通过GetBoParam方法获取表头表体参数 BusinessObject DomHead = broker.GetBoParam("DomHead"); DomHead.RowCount = 10; //设置行数 //其中,给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义 注意:设置行数为某个值,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则: 例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。 /****************************** 以下是必输字段 ****************************/ DomHead[0]["poid"] = ""; //主关键字段,int类型 DomHead[0]["dpodate"] = ""; //日期,DateTime类型 DomHead[0]["cpoid"] = ""; //订单编号,string类型 DomHead[0]["cvenabbname"] = ""; //供货单位,string类型 DomHead[0]["cexch_name"] = ""; //币种,string类型 DomHead[0]["nflat"] = ""; //汇率,double类型 „„ /***************************** 以下是非必输字段 ****************************/ DomHead[0]["ipresent"] = ""; //现存量,string类型 DomHead[0]["cmaketime"] = ""; //制单时间,DateTime类型 DomHead[0]["cmodifytime"] = ""; //修改时间,DateTime类型 DomHead[0]["caudittime"] = ""; //审核时间,DateTime类型 DomHead[0]["cauditdate"] = ""; //审核日期,DateTime类型 DomHead[0]["cmodifydate"] = ""; //修改日期,DateTime类型 „„ 2) 给普通参数赋值 例如, //给普通参数VoucherState(参数名)赋值。此参数的数据类型为int,此参数按值传递,具体请参 考服务接口定义 broker.AssignNormalValue("VoucherState", new int()); 注意:所有参数名不限大小写。 3) 给“OUT型”参数赋值 为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、 Single、Double、Boolean、Date,则不必传入一个参数变量(传入也可);否则,则必须一 个参数变量。 如: „„ //该参数curID为OUT型参数,由于其数据类型为string,为一般值类型,因此不必传入一个参数变量。 在API调用返回时,可以通过GetResult("curID")获取其值 //该参数CurDom为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必 须传入一个参数变量。在API调用返回时,可以直接使用该参数 MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.IXMLDOMDocument2(); broker.AssignNormalValue("CurDom", CurDom); „„ 当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值; 当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。 4) 给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT 型”参数一样。 6. 调用API //示例调用如下: if (!broker.Invoke()) { //错误处理 Exception apiEx = broker.GetException(); if (apiEx != null) { if (apiEx is MomSysException) { MomSysException sysEx = apiEx as MomSysException; Console.WriteLine("系统异常:" + sysEx.Message); //todo:异常处理 } else if (apiEx is MomBizException) { MomBizException bizEx = apiEx as MomBizException; Console.WriteLine("API异常:" + bizEx.Message); //todo:异常处理 } } //结束本次调用,释放API资源 broker.Release(); return; } 注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。 7. 获取返回结果 1) 获取BO对象 在“装载单据”时,通过GetBoParam方法获取表头或表体参数 BusinessObject DomHeadRet = broker.GetBoParam("DomHead"); Console.WriteLine("BO对象行数为:" + DomHeadRet.RowCount); //获取BO对象的行数 注意: 如果要取原始的XMLDOM对象结果,请使用GetResult("DomHead") as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker. GetResult("DomHead") as MSXML2.DOMDocument; 以上获取的行数是BO对象的实际行数。 //获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义 /****************************** 以下是必输字段 ****************************/ int poid = Convert.ToInt32(DomHeadRet[0]["poid"]); //主关键字段,int类型 DateTime dpodate = Convert.ToDateTime(DomHeadRet[0]["dpodate"]); //日期,DateTime类型 string cpoid = Convert.ToString(DomHeadRet[0]["cpoid"]); //订单编号,string类型 „„ /***************************** 以下是非必输字段 ****************************/ string ipresent = Convert.ToString(DomHeadRet[0]["ipresent"]); //现存量,string类型 DateTime cmaketime = Convert.ToDateTime(DomHeadRet[0]["cmaketime"]); //制单时间,DateTime类型 „„ 2) 获取普通返回值 代码如下: //获取普通返回值。此返回值数据类型为System.String,此参数按值传递,具体请参考服务接口定义 System.String result = broker.GetReturnValue() as System.String; 3) 获取普通“OUT型”或“INOUT型”返回值 如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。 如, //获取普通OUT参数curID。此返回值数据类型为string,在使用该参数之前,请判断是否为空 string curIDRet = broker.GetResult("curID") as string; //获取普通OUT参数CurDom。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请 直接使用 „„ , 功能介绍 为了支持U8二次开发对业务单据的开发,本功能提供了实现销售业务单据各种操作功 能的编程接口。使用销售管理API开发接口,可以完成销售管理的销售报价单、销售订单、 销售发货单、销售退货单、销售普通发票、销售专用发票、委托代销发货单、委托代销结算 单、销售调拨单等单据的审核、弃审、获取、新增、修改、删除。 , 使用环境 必须安装.NET FrameWork 2.0; 必须安装U8-872版本的销售管理产品; 必须安装API适配器组件SAAPIConcrete.dll; , 接口说明 销售管理二次开发接口及参数说明: , 审核或弃审单据-Audit方法 参数: domHead —— 单据表头,DOM对象,必输 bVerify —— 审核/弃审标志,必输。true表审核;false表弃审 API上下文: VoucherType —— 单据类型,必输。具体类型参看API上下文描述 , 删除单据-Delete方法 参数: domHead —— 单据表头,DOM对象,必输 API上下文: VoucherType —— 单据类型,必输。具体类型参看API上下文描述 , 装载单据-Load方法 参数: domHead —— 单据表头,DOM对象,必输 domBody —— 单据表体,DOM对象,必输 VouchID —— 需要装载的单据号,可选 blnAuth —— 是否控制权限:true API上下文: VoucherType —— 单据类型,必输。具体类型参看API上下文描述 , 新增或修改单据-Save方法 参数: domHead —— 单据表头,DOM对象,必输 domBody —— 单据表体,DOM对象,必输 VoucherState —— 保存状态,必输。0增加;1修改 VNewID —— 单据的id,可选 DomConfig —— ATO,PTO选配配置,必输,可设置为nothing API上下文: VoucherType —— 单据类型,必输。具体类型参看API上下文描述 , 开发步骤 实现销售单据某一功能,主要有以下七个步骤: 1. 构造u8login对象并登陆 声明和创建u8login类对象前应该先引用U8API类库中的Interop.U8Login.dll,代码示例如下: U8Login.clsLogin u8Login = new U8Login.clsLogin(); //声明u8login对象 String sSubId = "AS"; //登陆 String sAccID = "(default)@001"; String sYear = "2008"; String sUserID = "demo"; String sPassword = ""; String sDate = "2008-09-30"; String sServer = "localhost"; String sSerial = ""; if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)) { Console.WriteLine("登陆失败,原因:" + u8Login.ShareString); Marshal.FinalReleaseComObject(u8Login); return; } 如果当前环境中有login对象则可以省去第一步。 2. 构造环境上下文对象,传入login,并按需设置其它上下文参数 U8EnvContext envContext = new U8EnvContext(); //构造环境上下文对象 envContext.U8Login = u8Login; //传入login //设置上下文参数 envContext.SetApiContext("VoucherType", new int()); //上下文数据类型:int,含义:单据类型 如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction设置为true: envContext.BizDbConnection = new ADO.Connection(); envContext.IsIndependenceTransaction = true; 3. 设置API地址标识(Url)参数 //如当前API“新增或修改”的地址标识为:U8API/SaleOrder/Save U8ApiAddress myApiAddress = new U8ApiAddress("U8API/SaleOrder/Save"); 4. 构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext); 5. API对象参数赋值 1) 给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下 MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass(); domHead.load("domHead.xml"); broker.AssignNormalValue("domHead", domHead); 方法二是构造BusinessObject对象,具体方法如下: //首先通过GetBoParam方法获取表头表体参数 BusinessObject DomHead = broker.GetBoParam("DomHead"); DomHead.RowCount = 10; //设置行数 //其中,给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义 注意:设置行数为某个值,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则: 例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。 /****************************** 以下是必输字段 ****************************/ domHead[0]["id"] = ""; //主关键字段,int类型 domHead[0]["csocode"] = ""; //订 单 号,string类型 domHead[0]["ddate"] = ""; //订单日期,DateTime类型 domHead[0]["cbustype"] = ""; //业务类型,string类型 „„ /***************************** 以下是非必输字段 ****************************/ domHead[0]["fstockquanO"] = ""; //现存件数,double类型 domHead[0]["fcanusequanO"] = ""; //可用件数,double类型 domHead[0]["dpredatebt"] = ""; //预发货日期,DateTime类型 domHead[0]["dpremodatebt"] = ""; //预完工日期,DateTime类型 domHead[0]["dpredatebt"] = ""; //预发货日期,DateTime类型 „„ 2) 给普通参数赋值 例如, //给普通参数VoucherState(参数名)赋值。此参数的数据类型为int,此参数按值传递,具体请参 考服务接口定义 broker.AssignNormalValue("VoucherState", new int()); 注意:所有参数名不限大小写。 3) 给“OUT型”参数赋值 为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、 Single、Double、Boolean、Date,则不必传入一个参数变量(传入也可);否则,则必须一 个参数变量。 如: „„ //该参数curID为OUT型参数,由于其数据类型为string,为一般值类型,因此不必传入一个参数变量。 在API调用返回时,可以通过GetResult("curID")获取其值 //该参数CurDom为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必 须传入一个参数变量。在API调用返回时,可以直接使用该参数 MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.IXMLDOMDocument2(); broker.AssignNormalValue("CurDom", CurDom); „„ 当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值; 当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。 4) 给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT 型”参数一样。 6. 调用API //示例调用如下: if (!broker.Invoke()) { //错误处理 Exception apiEx = broker.GetException(); if (apiEx != null) { if (apiEx is MomSysException) { MomSysException sysEx = apiEx as MomSysException; Console.WriteLine("系统异常:" + sysEx.Message); //todo:异常处理 } else if (apiEx is MomBizException) { MomBizException bizEx = apiEx as MomBizException; Console.WriteLine("API异常:" + bizEx.Message); //todo:异常处理 } } //结束本次调用,释放API资源 broker.Release(); return; } 注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。 7. 获取返回结果 1) 获取BO对象 在“装载单据”时,通过GetBoParam方法获取表头或表体参数 BusinessObject DomHeadRet = broker.GetBoParam("DomHead"); Console.WriteLine("BO对象行数为:" + DomHeadRet.RowCount); //获取BO对象的行数 注意: 如果要取原始的XMLDOM对象结果,请使用GetResult("DomHead") as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker. GetResult("DomHead") as MSXML2.DOMDocument; 以上获取的行数是BO对象的实际行数。 //获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义 /****************************** 以下是必输字段 ****************************/ int id = Convert.ToInt32(domHeadRet[0]["id"]); //主关键字段,int类型 string ccode = Convert.ToString(domHeadRet[0]["ccode"]); //单据号,string类型 DateTime ddate = Convert.ToDateTime(domHeadRet[0]["ddate"]); //日期,DateTime类型 string cbustype = Convert.ToString(domHeadRet[0]["cbustype"]); //业务类型,string类型 „„ /***************************** 以下是非必输字段 ****************************/ string cpayname = Convert.ToString(domHeadRet[0]["cpayname"]); //付款条件,string类型 string cpersonname = Convert.ToString(domHeadRet[0]["cpersonname"]); //业 务 员,string类型 double itaxrate = Convert.ToDouble(domHeadRet[0]["itaxrate"]); //税率,double类型 string cexch_name = Convert.ToString(domHeadRet[0]["cexch_name"]); //币种,string类型 „„ 2) 获取普通返回值 代码如下: //获取普通返回值。此返回值数据类型为System.String,此参数按值传递,具体请参考服务接口定义 System.String result = broker.GetReturnValue() as System.String; 3) 获取普通“OUT型”或“INOUT型”返回值 如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。 如, //获取普通OUT参数curID。此返回值数据类型为string,在使用该参数之前,请判断是否为空 string curIDRet = broker.GetResult("curID") as string; //获取普通OUT参数CurDom。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用 „„ , 功能介绍 为了支持U8二次开发对业务单据的开发,本功能提供了实现库存业务单据各种操作功 能的编程接口。使用库存管理的API开发接口,可以对库存管理中的采购入库单、其他入库 单、其他出库单、产成品入库单、材料出库单、调拨单、组装单、拆卸单、形态转换单、盘 点单、货位调整单、销售出库单、期初结存、不合格品记录单、不合格品处理单、期初不合 格品、调拨申请单等单据进行审核、弃审、获取(或装载)、新增、修改、删除。 , 使用环境 必须安装.NET FrameWork 2.0; 必须安装U8-872版本的库存管理产品; 必须安装API适配器组件STAPIConcrete.dll , 接口说明 库存管理二次开发接口说明: , 审核单据-Audit方法 参数: sVoucherType —— 单据类型:01 VoucherId —— 单据ID errMsg —— 错误信息 cnnFrom —— 连接对象(调用方控制事务时需要传入连接对象) TimeStamp —— 单据时间戳(用于检查单据是否修改,空串时不检查) domMsg —— 返回DOM格式的信息:主要是可用量信息 bCheck —— 是否进行业务检查(是否控制可用量) bBeforCheckStock —— 是否检查可用量 bList —— 传入false MakeWheres —— 传空 sWebXml —— 传入空串 oGenVouchIds —— 获取单据ID列表(返回审核时自动生成的单据的id 列表,传空) , 弃审单据-CancelAudit方法 参数: sVoucherType —— 单据类型:01 VoucherId —— 单据ID errMsg —— 错误信息 cnnFrom —— 连接对象(由调用方控制事务时必须传入) TimeStamp —— 单据时间戳(用于检查单据是否修改,空串时不检查) domMsg —— 超可用量提示信息DOM对象(返回DOM格式的信息) bCheck —— 是否进行业务检查 bBeforCheckStock —— 是否检查可用量 bList —— 传入false , 装载单据-Load方法 参数: sVoucherType —— 单据类型:01 sWhere —— 条件串 DomHead —— 表头DOM对象 domBody —— 表体DOM对象 domPos —— 货位DOM对象 errMsg —— 错误信息 bGetBlank —— 是否获取空白单据 sBodyWhere_Order —— 表体排序方式字段 注意:其中sWhere设计为: 如果按单据号加载,则语法为ccode=N'要加载的单据号',例如broker.AssignNormalValue("sWhere", "ccode = N'0000000001'"); 如果按单据ID加载,则语法为id=XXX,例如broker.AssignNormalValue("sWhere", "id = 1")。 , 删除单据-Delete方法 参数: sVoucherType —— 单据类型:01 VoucherId —— 单据ID errMsg —— 错误信息 cnnFrom —— 连接对象(由调用方控制事务时需要传入连接对象) TimeStamp —— 单据时间戳 domMsg —— 返回DOM格式的信息:主要是检查可用量和控制可 用量信息 bCheck —— 是否进行业务检查 BeforCheckStock —— 是否检查可用量 bList —— 传入false , 添加新单据- Add方法 参数: sVoucherType —— 单据类型:01 DomHead —— 表头DOM对象 domBody —— 表体DOM对象 domPosition —— 货位DOM对象:传空 errMsg —— 返回错误信息 cnnFrom —— 连接对象,如果由调用方控制事务,则需要设置 此连接对象,否则传空 VoucherId —— 返回单据ID domMsg —— 返回DOM格式的信息:主要返回可用量和现存量 的错误信息 bCheck —— 是否进行业务检查(是否控制可用量) bBeforCheckStock —— 是否检查可用量(检查可用量) bIsRedVouch —— 是否红字单据 sAddedState —— 传空字符串 bReMote —— 是否远程 , 修改单据-Update方法 参数: sVoucherType —— 单据类型:01 DomHead —— 表头DOM对象 domBody —— 表体DOM对象 domPosition —— 货位DOM对象 errMsg —— 错误信息 cnnFrom —— 连接对象 domMsg —— 超可用量提示信息DOM对象(返回DOM格式的信息) bCheck —— 是否进行业务检查 bBeforCheckStock —— 是否检查可用量 bIsRedVouch —— 是否红字单据 sAddedState —— 修改状态 bUpdateNeedEas —— 传true , 开发步骤 实现库存单据某一功能,主要有以下七个步骤: 1. 构造u8login对象并登陆 声明和创建u8login类对象前应该先引用U8API类库中的Interop.U8Login.dll,代码 示例如下: U8Login.clsLogin u8Login = new U8Login.clsLogin(); //声明u8login对象 String sSubId = "AS"; //登陆 String sAccID = "(default)@001"; String sYear = "2008"; String sUserID = "demo"; String sPassword = ""; String sDate = "2008-09-30"; String sServer = "localhost"; String sSerial = ""; if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)) { Console.WriteLine("登陆失败,原因:" + u8Login.ShareString); Marshal.FinalReleaseComObject(u8Login); return; } 如果当前环境中有login对象则可以省去第一步。 2. 构造环境上下文对象,传入login U8EnvContext envContext = new U8EnvContext(); //构造环境上下文对象 envContext.U8Login = u8Login; //传入login 3. 设置API地址标识(Url)参数 //如当前API“新增或修改”的地址标识为:U8API/SaleOrder/Save U8ApiAddress myApiAddress = new U8ApiAddress("U8API/SaleOrder/Save"); 4. 构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext); 5. API对象参数赋值 1) 给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下 MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass(); domHead.load("domHead.xml"); broker.AssignNormalValue("domHead", domHead); 方法二是构造BusinessObject对象,具体方法如下: //首先通过GetBoParam方法获取表头表体参数 BusinessObject DomHead = broker.GetBoParam("DomHead"); DomHead.RowCount = 10; //设置行数 //其中,给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义 注意:设置行数为某个值,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则: 例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。 /****************************** 以下是必输字段 ****************************/ DomHead[0]["id"] = ""; //主关键字段,int类型 DomHead[0]["ccvcode"] = ""; //盘点单号,string类型 DomHead[0]["dcvdate"] = ""; //盘点日期,DateTime类型 DomHead[0]["dacdate"] = ""; //账面日期,DateTime类型 DomHead[0]["cwhname"] = ""; //盘点仓库,string类型 „„ /***************************** 以下是非必输字段 ****************************/ DomHead[0]["cmodifyperson"] = ""; //修改人,string类型 DomHead[0]["dmodifydate"] = ""; //修改日期,DateTime类型 DomHead[0]["dnmaketime"] = ""; //制单时间,DateTime类型 DomHead[0]["dnmodifytime"] = ""; //修改时间,DateTime类型 DomHead[0]["dnverifytime"] = ""; //审核时间,DateTime类型 „„ 2) 给普通参数赋值 例如,给普通参数sVouchType(参数名)赋值: broker.AssignNormalValue("sVouchType", new System.String()); 注意:所有参数名不限大小写。 3) 给“OUT型”参数赋值 为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、 Single、Double、Boolean、Date,则不必传入一个参数变量(传入也可);否则,则必须一 个参数变量。 如: „„ // 该参数errMsg为OUT型参数,由于其数据类型为System.String,为一般值类型,因此不必传入一个 参数变量。在API调用返回时,可以通过GetResult("errMsg")获取其值 //该参数domMsg为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必 须传入一个参数变量。在API调用返回时,可以直接使用该参数 MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.IXMLDOMDocument2(); broker.AssignNormalValue("domMsg", domMsg); „„ 注意:当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必 传入一个参数变量时,在API调用返回时,可以直接引用该参数。 4) 给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT 型”参数一样。 6. 调用API //示例调用如下: if (!broker.Invoke()) { //错误处理 Exception apiEx = broker.GetException(); if (apiEx != null) { if (apiEx is MomSysException) { MomSysException sysEx = apiEx as MomSysException; Console.WriteLine("系统异常:" + sysEx.Message); //todo:异常处理 } else if (apiEx is MomBizException) { MomBizException bizEx = apiEx as MomBizException; Console.WriteLine("API异常:" + bizEx.Message); //todo:异常处理 } } //结束本次调用,释放API资源 broker.Release(); return; } 注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。 7. 获取返回结果 1) 获取BO对象 在“装载单据”时,通过GetBoParam方法获取表头或表体参数 BusinessObject DomHeadRet = broker.GetBoParam("DomHead"); Console.WriteLine("BO对象行数为:" + DomHeadRet.RowCount); //获取BO对象的行数 注意: 如果要取原始的XMLDOM对象结果,请使用GetResult("DomHead") as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker. GetResult("DomHead") as MSXML2.DOMDocument; 以上获取的行数是BO对象的实际行数。 //获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义 /****************************** 以下是必输字段 ****************************/ int id = Convert.ToInt32(DomHeadRet[0]["id"]); //主关键字段,int类型 string ccvcode = Convert.ToString(DomHeadRet[0]["ccvcode"]); //盘点单号,string类型 DateTime dcvdate = Convert.ToDateTime(DomHeadRet[0]["dcvdate"]); //盘点日期,DateTime类型 DateTime dacdate = Convert.ToDateTime(DomHeadRet[0]["dacdate"]); //账面日期,DateTime类型 string cwhname = Convert.ToString(DomHeadRet[0]["cwhname"]); //盘点仓库,string类型 „„ /***************************** 以下是非必输字段 ****************************/ string cmodifyperson = Convert.ToString(DomHeadRet[0]["cmodifyperson"]); //修改人,string类型 DateTime dmodifydate = Convert.ToDateTime(DomHeadRet[0]["dmodifydate"]); //修改日期,DateTime类型 DateTime dnmaketime = Convert.ToDateTime(DomHeadRet[0]["dnmaketime"]); //制单时间,DateTime类型 DateTime dnmodifytime = Convert.ToDateTime(DomHeadRet[0]["dnmodifytime"]); //修改时间,DateTime类型 DateTime dnverifytime = Convert.ToDateTime(DomHeadRet[0]["dnverifytime"]); //审核时间,DateTime类型 „„ 2) 获取普通返回值 代码如下: //获取普通返回值。此返回值数据类型为System.String,此参数按值传递,具体请参考服务接口定义 System.String result = broker.GetReturnValue() as System.String; 3) 获取普通“OUT型”或“INOUT型”返回值 如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。 如, //获取普通OUT参数domPos。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用 //获取普通OUT参数errMsg。此返回值数据类型为System.String,在使用该参数之前,请判断是否为空 System.String errMsgRet = broker.GetResult("errMsg") as System.String;„„
本文档为【[用友资料]U8API开发手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_266065
暂无简介~
格式:doc
大小:264KB
软件:Word
页数:43
分类:
上传时间:2017-10-28
浏览量:608