|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
×
我想通过API生成一张产成品入库单,在调用完API以后,返回的结果说“类型不匹配”,实在不明白指的是什么。
我在产成品入库单中成功录入了一张数据,然后我把这条数据参数固定到我的方法里面,然后再删除了这条数据。
然后调用API执行不成功,不知道代码哪里写不正确了。
public void DoAPI(UFIDA.U8.UAP.Common.LoginInfo _loginInfo, Business _BusHead, Business _BusBody)
{
//第一步:构造u8login对象并登陆(引用U8API类库中的Interop.U8Login.dll)
//如果当前环境中有login对象则可以省去第一步
U8Login.clsLogin u8Login = (clsLogin)_loginInfo.U8Login;
//第二步:构造环境上下文对象,传入login,并按需设置其它上下文参数
U8EnvContext envContext = new U8EnvContext();
envContext.U8Login = u8Login;
//第三步:设置API地址标识(Url)
//当前API:添加新单据的地址标识为:U8API/ProductIn/Add
U8ApiAddress myApiAddress = new U8ApiAddress("U8API/ProductIn/Add");
//第四步:构造APIBroker
U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
//第五步:API参数赋值
//给普通参数sVouchType赋值。此参数的数据类型为System.String,此参数按值传递,表示单据类型:10
System.String sVouchType = "10";
broker.AssignNormalValue("sVouchType", sVouchType);
// //给BO表头参数DomHead赋值,此BO参数的业务类型为产成品入库单,属表头参数。BO参数均按引用传递
// //提示:给BO表头参数DomHead赋值有两种方法
// //方法一是直接传入MSXML2.DOMDocumentClass对象
// //broker.AssignNormalValue("DomHead", new MSXML2.DOMDocumentClass())
//方法二是构造BusinessObject对象,具体方法如下:
BusinessObject DomHead = broker.GetBoParam("DomHead");
DomHead.RowCount = 1; //设置BO对象(表头)行数,只能为一行
//给BO对象(表头)的字段赋值,值可以是真实类型,也可以是无类型字符串
//以下代码示例只设置第一行值。各字段定义详见API服务接口定义
int maxid = ConvertTo.ToInt(DAL.DALRdrecord.GetHeadMaxID(), 0);// 取表头最大ID
maxid += 1;
/****************************** 以下是必输字段 ****************************/
DomHead[0]["id"] = maxid; //主关键字段,int类型
DomHead[0]["ccode"] = "TEST3"; //入库单号,string类型
DomHead[0]["ddate"] = "2011-03-18"; //入库日期,DateTime类型
DomHead[0]["cwhname"] = "电池B品和未包装C品仓"; //仓库,string类型
// /***************************** 以下是非必输字段 ****************************/
DomHead[0]["cwhcode"] = "A4"; //仓库编码,string类型
DomHead[0]["crdcode"] = "103"; //入库类别编码,string类型
//DomHead[0]["cdepcode"] = _BusHead.Cells["primy001_cWhCode"].Value; //部门编码,string类型
//DomHead[0]["cprobatch"] = _BusHead.Cells["primy001_cProBatch"].Value; //生产批号,string类型
//DomHead[0]["cmemo"] = _BusHead.Cells["primy001_Meno"].Value; //备注,string类型
//DomHead[0]["brdflag"] = "1"; //收发标志,string类型
//DomHead[0]["csource"] = ""; //单据来源,int类型
#region Head 未使用字段
#endregion
broker.SetBoParam("DomHead", DomHead);
//方法二是构造BusinessObject对象,具体方法如下:
BusinessObject domBody = broker.GetBoParam("domBody");
DataTable _dtBody = _BusBody.DataTable;
domBody.RowCount = 1; //设置BO对象行数
//可以自由设置BO对象行数为大于零的整数,也可以不设置而自动增加行数
//给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串
//以下代码示例只设置第一行值。各字段定义详见API服务接口定义
/****************************** 以下是必输字段 ****************************/
int autoid = ConvertTo.ToInt(DAL.DALRdrecord.GetMaxBodyAutoID(), 0);//取表体最大ID
autoid += 1;
domBody[0]["autoid"] = autoid; //主关键字段,int类型
domBody[0]["cinvcode"] = "8"; //产品编码,string类型
domBody[0]["editprop"] = "A"; //编辑属性:A表新增,M表修改,D表删除,string类型
// /***************************** 以下是非必输字段 ****************************/
domBody[0]["iquantity"] = "1000"; //数量,double类型
domBody[0]["iunitcost"] = "1"; //单价,double类型
domBody[0]["iprice"] = "1000"; //金额,double类型
domBody[0]["id"] = maxid; //与主表关联项,int类型
#region Body 未使用字段
#endregion
broker.SetBoParam("domBody", domBody);
//给普通参数domPosition赋值。此参数的数据类型为System.Object,此参数按引用传递,表示货位:传空
System.Object domPosition = new System.Object();
broker.AssignNormalValue("domPosition", domPosition);
//该参数errMsg为OUT型参数,由于其数据类型为System.String,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult("errMsg")获取其值
//给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection,此参数按引用传递,表示连接对象,如果由调用方控制事务,则需要设置此连接对象,否则传空
ADODB.Connection cnnFrom = new ADODB.Connection();
broker.AssignNormalValue("cnnFrom", cnnFrom);
//该参数VouchId为INOUT型普通参数。此参数的数据类型为System.String,此参数按值传递。在API调用返回时,可以通过GetResult("VouchId")获取其值
System.String VouchId = "";
broker.AssignNormalValue("VouchId", VouchId);
//该参数domMsg为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数
MSXML2.IXMLDOMDocument2 domMsg = new DOMDocument();
broker.AssignNormalValue("domMsg", domMsg);
//给普通参数bCheck赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否控制可用量。
System.Boolean bCheck = true;
broker.AssignNormalValue("bCheck", bCheck);
//给普通参数bBeforCheckStock赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示检查可用量
System.Boolean bBeforCheckStock = true;
broker.AssignNormalValue("bBeforCheckStock", bBeforCheckStock);
//给普通参数bIsRedVouch赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否红字单据
System.Boolean bIsRedVouch = false;
broker.AssignNormalValue("bIsRedVouch", bIsRedVouch);
//给普通参数sAddedState赋值。此参数的数据类型为System.String,此参数按值传递,表示传空字符串
System.String sAddedState = "";
broker.AssignNormalValue("sAddedState", sAddedState);
//给普通参数bReMote赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否远程:转入false
System.Boolean bReMote = false;
broker.AssignNormalValue("bReMote", bReMote);
//第六步:调用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.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;
//获取普通OUT参数domMsg。此返回值数据类型为MSXML2.IXMLDOMDocument2,在使用该参数之前,请判断是否为空
MSXML2.IXMLDOMDocument2 domMsgRet = (MSXML2.IXMLDOMDocument2)(broker.GetResult("domMsg"));
//结束本次调用,释放API资源
broker.Release();
return;
} |
|