图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[0][\] = \; //现存量,string类型 DomHead[0][\] = \; //制单时间,DateTime类型 DomHead[0][\] = \; //修改时间,DateTime类型 ??
/****************************** 以下是必输字段****************************/ DomHead[0][\] = \; //主关键字段,int类型 DomHead[0][\] = \; //日期,DateTime类型 DomHead[0][\] = \; //订单编号,string类型 ??
DomHead.RowCount = 10; //设置行数,不设置也可
//给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义
在此种情况下U8 API框架会对BO对象各字段进行参数校验。对字段进行赋值时,值可以是真实类型,也可以是无类型字符串。
(2) 传DOM对象
给BO表头参数或表体参数赋值,也支持直接传入DOM对象(DOMDocument)。 例如:
MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass(); domHead.load(\);
broker.AssignNormalValue(\, 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 = \;
String sAccID = \; String sYear = \; String sUserID = \; String sPassword = \; String sDate = \; String sServer = \;
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) { }
//结束本次调用,释放API资源 broker.Release(); return;
if (apiEx is MomSysException) { }
else if (apiEx is MomBizException) { }
MomBizException bizEx = apiEx as MomBizException; Console.WriteLine(\异常:\ + bizEx.Message); //todo:异常处理
MomSysException sysEx = apiEx as MomSysException; Console.WriteLine(\系统异常:\ + sysEx.Message); //todo:异常处理
}
//获取表头或表体的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();