//第二步:构造环境上下文对象,传入login,并按需设置其它上下文参数
U8EnvContext envContext = new U8EnvContext();
envContext.U8Login = u8Login;
//第三步:设置API地址标识(Url)
//当前API:添加新单据的地址标识为:U8API/MaterialOut/Add
U8ApiAddress myApiAddress = new U8ApiAddress("U8API/saleout/Add");
//第四步:构造APIBroker
U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
//第五步:API参数赋值
//给普通参数sVouchType赋值。此参数的数据类型为System.String,此参数按值传递,表示单据类型:01
broker.AssignNormalValue("sVouchType", "32");
MSXML2.IXMLDOMDocument2 docHead = new DOMDocument();
MSXML2.IXMLDOMDocument2 docBody = new DOMDocument();
docHead.load(Server.MapPath("./") + @"XML\dmrdrecord32.xml");
docBody.load(Server.MapPath("./") + @"XML\dmrdrecords32.xml");
MSXML2.IXMLDOMNode nodeHead = docHead.selectSingleNode("//z:row");
//sumTable.Rows[0]["dtvdate"] = u8Login.CurDate;
IXMLDOMElement xeHead = (IXMLDOMElement)nodeHead;
xeHead.setAttribute("id", "");
xeHead.setAttribute("cmaker", cUser);// DomHead[0]["cmaker"] = ""; //制单人,string类型
System.Data.DataTable ccoddt = DbHelperSQL.Query("SELECT MAX(cCode) as cCode FROM rdrecord32 ").Tables[0];
string ccode = "0000000001";
if (ccoddt != null && ccoddt.Rows.Count > 0)
{
ccode = ClsSystem.gnvl(ccoddt.Rows[0]["cCode"], "0000000001");
}
xeHead.setAttribute("ccode", ccode);// DomHead[0]["cmaker"] = ""; //制单人,string类型
xeHead.setAttribute("ddate", u8Login.CurDate);// DomHead[0]["cmaker"] = ""; //制单人,string类型
xeHead.setAttribute("ccuscode", sumTable.Rows[0]["CUST_ID"].ToString()); //客户编码,string类型
xeHead.setAttribute("cdepcode", sumTable.Rows[0]["DEPT_ID"].ToString()); //部门编码,string类型
xeHead.setAttribute("cwhcode", sumTable.Rows[0]["cWhcode"].ToString()); //仓库编码,string类型
// xeHead.setAttribute("imquantity", sumTable.Rows[0]["iquantity"].ToString());
//xeHead.setAttribute("cpspcode", sumTable.Rows[0]["cpspcode"].ToString()); //产品编码,string类型
//xeHead.setAttribute("cmpocode", sumTable.Rows[0]["cmpocode"].ToString());//订单号,string类型
//xeHead.setAttribute("iproorderid", sumTable.Rows[0]["iproorderid"].ToString());//生产订单ID,string类型
xeHead.setAttribute("cmemo", "MES自动生成单据!");//备注,string类型
MSXML2.IXMLDOMNode nodeBody = docBody.selectSingleNode("//z:row");
IXMLDOMElement xeBody = (IXMLDOMElement)nodeBody;
int irowno = 1;
xeHead.setAttribute("cSTCode", arridts.Rows[0]["cSTCode"].ToString()); //销售类型
xeBody1.setAttribute("isodid", arridts.Rows[0]["iorderdid"].ToString()); //销售订单子表ID,string类型
xeBody1.setAttribute("cbdlcode", arridts.Rows[0]["cDLCode"].ToString()); //发货单号,string类型
xeBody1.setAttribute("iorderdid", arridts.Rows[0]["iorderdid"].ToString()); //iorderdid,int类型
xeBody1.setAttribute("iordercode", arridts.Rows[0]["iordercode"].ToString());//销售订单号,string类型
xeBody1.setAttribute("iorderseq", arridts.Rows[0]["iorderseq"].ToString()); //销售订单行号,string类型
xeBody1.setAttribute("isoseq", arridts.Rows[0]["iorderseq"].ToString()); //需求跟踪行号,string类型
xeBody1.setAttribute("idlsid", arridts.Rows[0]["iDLsID"].ToString());//发货单子表ID,int类型
//传入表头的MSXML2.DOMDocumentClass对象
broker.AssignNormalValue("DomHead", docHead);
//传入表体的MSXML2.DOMDocumentClass对象
broker.AssignNormalValue("domBody", docBody);
//给普通参数domPosition赋值。此参数的数据类型为System.Object,此参数按引用传递,表示货位:传空
broker.AssignNormalValue("domPosition", null);
//该参数errMsg为OUT型参数,由于其数据类型为System.String,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult("errMsg")获取其值
//给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection,此参数按引用传递,表示连接对象,如果由调用方控制事务,则需要设置此连接对象,否则传空
broker.AssignNormalValue("cnnFrom", null);
//该参数VouchId为INOUT型普通参数。此参数的数据类型为System.String,此参数按值传递。在API调用返回时,可以通过GetResult("VouchId")获取其值
string reVouchId = "";
broker.AssignNormalValue("VouchId", reVouchId);
//该参数domMsg为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数
MSXML2.IXMLDOMDocument2 domMsg = new DOMDocument();
broker.AssignNormalValue("domMsg", domMsg);
bool bCheck = Convert.ToBoolean(DbHelperSQL.GetSingle("select cValue from AccInformation where cName='ballowzero'"));
//给普通参数bCheck赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否控制可用量。
broker.AssignNormalValue("bCheck", true);
//给普通参数bBeforCheckStock赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示检查可用量
broker.AssignNormalValue("bBeforCheckStock", true);
//给普通参数bIsRedVouch赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否红字单据
broker.AssignNormalValue("bIsRedVouch", false);
//给普通参数sAddedState赋值。此参数的数据类型为System.String,此参数按值传递,表示传空字符串
broker.AssignNormalValue("sAddedState", "");
//给普通参数bReMote赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否远程:转入false
broker.AssignNormalValue("bReMote", false);
//第六步:调用API
if (!broker.Invoke())
{
//错误处理
Exception apiEx = broker.GetException();
if (apiEx != null)
{
if (apiEx is MomSysException)
{
MomSysException sysEx = apiEx as MomSysException;
//Console.WriteLine("系统异常:" + sysEx.Message);
re[0] = "NG";
re[1] = "系统异常:" + sysEx.Message;
}
else if (apiEx is MomBizException)
{
MomBizException bizEx = apiEx as MomBizException;
//Console.WriteLine("API异常:" + bizEx.Message);
re[0] = "NG";
re[1] = "API异常:" + bizEx.Message;
//todo:异常处理
}
//异常原因
String exReason = broker.GetExceptionString();
if (exReason.Length != 0)
{
re[0] = "NG";
re[1] = "异常原因:" + exReason;
//Console.WriteLine("异常原因:" + exReason);
}
}
//结束本次调用,释放API资源
broker.Release();
return re;
}
//第七步:获取返回结果
//获取返回值
//获取普通返回值。此返回值数据类型为System.Boolean,此参数按值传递,表示返回值:true:成功,false:失败
System.Boolean result = Convert.ToBoolean(broker.GetReturnValue());
//获取out/inout参数值
//获取普通OUT参数errMsg。此返回值数据类型为System.String,在使用该参数之前,请判断是否为空
System.String errMsgRet = broker.GetResult("errMsg") as System.String;
//获取普通INOUT参数VouchId。此返回值数据类型为System.String,在使用该参数之前,请判断是否为空
System.String VouchIdRet = broker.GetResult("VouchId") as System.String;
//System.String cCodeRet = broker.GetResult("cCode") as System.String;
//获取普通OUT参数domMsg。此返回值数据类型为MSXML2.IXMLDOMDocument2,在使用该参数之前,请判断是否为空
MSXML2.IXMLDOMDocument2 domMsgRet = (MSXML2.IXMLDOMDocument2)broker.GetResult("domMsg");
//结束本次调用,释放API资源
broker.Release();
if (!result)
{
if (errMsgRet != null)
{
re[0] = "NG";
re[1] = errMsgRet;
}
}