///
///销售订单(业务类型报错)
///
///
///
public static void AddSO_SOMain(U8Login.clsLogin u8Login,String id, ref string vNewIDRet)
{
//第二步:构造环境上下文对象,传入login,并按需设置其它上下文参数
U8EnvContext envContext = new U8EnvContext();
envContext.U8Login = u8Login;
//销售所有接口均支持内部独立事务和外部事务,默认内部事务
//如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction属性设置为false
//envContext.BizDbConnection
= new ADO.Connection();
//envContext.IsIndependenceTransaction
= false;
//设置上下文参数
envContext.SetApiContext("VoucherType", 12); //上下文数据类型:int,含义:单据类型:12
//第三步:设置API地址标识(Url)
//当前API:新增或修改的地址标识为:U8API/SaleOrder/Save
U8ApiAddress myApiAddress = new U8ApiAddress("U8API/SaleOrder/Save");
//第四步:构造APIBroker
U8ApiBroker broker = new U8ApiBroker(myApiAddress,
envContext);
//第五步:API参数赋值
//给BO表头参数domHead赋值,此BO参数的业务类型为销售订单,属表头参数。BO参数均按引用传递
//提示:给BO表头参数domHead赋值有两种方法
//方法一是直接传入MSXML2.DOMDocumentClass对象
//broker.AssignNormalValue("domHead",
new MSXML2.DOMDocumentClass())
ADODB.Connection conn = new ADODB.ConnectionClass();
ADODB.Recordset rs = new ADODB.RecordsetClass();
MSXML2.DOMDocument domhead = new MSXML2.DOMDocumentClass();
string strConn = string.Format("Provider=SQLOLEDB;Initial Catalog={0};Data
Source={1};", "UFData_" + u8Login.get_cAcc_Id() + "_" +
u8Login.cIYear, u8Login.dbServerName);
conn.Open(strConn, "sa", u8Login.SysPassword, 0);
string sql = "select top 1 * from SaleOrderQ
whereid='" + id + "'";
rs.Open(sql, conn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockOptimistic, -1);
rs.Save(domhead, ADODB.PersistFormatEnum.adPersistXML);
U8APIHelper.FormatDom(ref domhead, "A");
broker.AssignNormalValue("DomHead", domhead);
domhead.selectSingleNode("//rs:data/z:row").attributes.getNamedItem("id").nodeValue = "";
MSXML2.DOMDocument domBody = new MSXML2.DOMDocumentClass();
//domBody.RowCount
= 1;
ADODB.Connection conn1 = new ADODB.ConnectionClass();
ADODB.Recordset rs1 = new ADODB.RecordsetClass();
string strConn1 = string.Format("Provider=SQLOLEDB;Initial Catalog={0};Data
Source={1};", "UFData_" + u8Login.get_cAcc_Id() + "_" +
u8Login.cIYear, u8Login.dbServerName);
conn1.Open(strConn, "sa", u8Login.SysPassword, 0);
sql = "select
top 1 * from SaleOrderSQ whereid='" + id + "'";
rs1.Open(sql, conn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockOptimistic, -1);
rs1.Save(domBody, ADODB.PersistFormatEnum.adPersistXML);
U8APIHelper.FormatDom(ref domBody, "A");
broker.AssignNormalValue("domBody", domBody);
domBody.selectSingleNode("//rs:data/z:row").attributes.getNamedItem("id").nodeValue = "";
domBody.selectSingleNode("//rs:data/z:row").attributes.getNamedItem("autoid").nodeValue = "";
//给普通参数VoucherState赋值。此参数的数据类型为int,此参数按值传递,表示状态:0增加;1修改
broker.AssignNormalValue("VoucherState", 0);
//该参数vNewID为INOUT型普通参数。此参数的数据类型为string,此参数按值传递。在API调用返回时,可以通过GetResult("vNewID")获取其值
broker.AssignNormalValue("vNewID", "");
//给普通参数DomConfig赋值。此参数的数据类型为MSXML2.IXMLDOMDocument2,此参数按引用传递,表示ATO,PTO选配
MSXML2.IXMLDOMDocument2 DomConfig = new MSXML2.DOMDocumentClass();
broker.AssignNormalValue("DomConfig", DomConfig);
//第六步:调用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:异常处理
}
//异常原因
String exReason = broker.GetExceptionString();
if (exReason.Length != 0)
{
Console.WriteLine("异常原因:"+ exReason);
}
}
//结束本次调用,释放API资源
broker.Release();
return;
}
//第七步:获取返回结果
//获取返回值
//获取普通返回值。此返回值数据类型为System.String,此参数按值传递,表示成功为空串
stringresult = broker.GetReturnValue() as System.String;
//获取out/inout参数值
//获取普通INOUT参数vNewID。此返回值数据类型为string,在使用该参数之前,请判断是否为空
vNewIDRet = broker.GetResult("vNewID") as string;
//结束本次调用,释放API资源
broker.Release();
return;
}