急:调用WebAPI保存盘盈单时出现问题,求总部的开发人员帮忙
金蝶云社区-云社区用户z3xD9270
云社区用户z3xD9270
0人赞赏了该文章 1,657次浏览 未经作者许可,禁止转载编辑于2015年10月16日 14:22:16

我在调用WebAPI时遇到一个问题,无论我怎么试,都无法成功调用。
由于K3 Cloud的WebApi接口描述功能生成的说明中,格式不完整,大部分只有单据头字段的,而没有单据体字段的,因此应用起来相当不方便。
根据总结我用如下代码去保存盘盈单
///


/// 盘盈单
///

public void TestStockProfit()
{
// 使用webapi引用组件Kingdee.BOS.WebApi.Client.dll
ApiClient client = new ApiClient("win-0vs5fckt8od/K3Cloud/");
object[] loginInfo = new object [] {
"000c29be5fc2930011e46f3f1d2e719a",//帐套
"Administrator",//用户名
"888888",//密码
2052};//语言
var ret = client.Execute("Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser",loginInfo);
var result = JObject.Parse(ret)["LoginResultType"].Value();
// 登陆成功
if (result == 1)
{
JObject tmp = null;
JObject js = new JObject();
js.Add("Creator", "String");
js.Add("NeedUpDateFields", new JArray("String"));

JObject model = new JObject();
js.Add("Model", model);

model.Add("FID", 0);
model.Add("FBillNo", "ABC");
model.Add("FDocumentStatus", "Z");

tmp = new JObject();
tmp.Add("FNumber", "PY01_SYS");
model.Add("FBillTypeID", tmp);

model.Add("FStockCountInputNo", "");

//库存组织
tmp = new JObject();
tmp.Add("FNumber", "100");
model.Add("FStockOrgId", tmp);
//单据日期
model.Add ( "FDate", DateTime.Today );

//货主类型¨ª
tmp = new JObject();
tmp.Add("FName", "业务组织");
model.Add("FOwnerTypeIdHead", tmp);

tmp = new JObject();
tmp.Add("FNumber", "100");
model.Add("FOwnerIdHead", tmp);

model.Add("FSourceType", 0);

JArray entrys = new JArray();
JObject entry = new JObject();
//物料
tmp = new JObject();
tmp.Add("FNumber", "0001");
entry.Add("FMaterialId", tmp);

tmp = new JObject();
tmp.Add ("FNumber" , "PCS" );
entry.Add ( "FUnitID", tmp );

entry.Add("FAcctQty", 50);
entry.Add("FCountQty", 100);
entry.Add("FGainQty", 50);

tmp = new JObject();
tmp.Add("FNumber", "d");
entry.Add("FStockId", tmp);
entry.Add("FStockStatusId", "KCZT01_SYS");

entrys.Add(entry);
//在这里,我用单据标识加两个下划线再加单据体标识作Json属性名,不知道是不是这种方式有问题,但我看样例中都是这种方式
model.Add("STK_StockCountGain__FBillEntry", entrys);

ret = client.Execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save",new object [] {"STK_StockCountGain",
js.ToString () });

JObject j = JObject.Parse(ret);
MessageBox.Show(j["Message"].ToString() );
}
结果提示如下:
{
"Result": {
"ResponseStatus": {
"ErrorCode": 500,
"IsSuccess": false,
"Errors": [
{
"FieldName": "FStockStatusId",
"Message": "单据体“明细信息”第1行字段“库存状态”是必填项"
},
{
"FieldName": "FStockId",
"Message": "单据体“明细信息”第1行字段“仓库”是必填项"
},
{
"FieldName": "FMaterialId",
"Message": "单据体“明细信息”第1行字段“物料编码”是必填项"
},
{
"FieldName": "FUnitID",
"Message": "单据体“明细信息”第1行字段“单位”是必填项"
},
{
"FieldName": "FBillTypeID",
"Message": "字段“单据类型”是必填项"
},
{
"FieldName": "",
"Message": "第1行分录,盘盈数量和盘盈数量(辅助)必须大于等于0且不能同时为0!"
},
{
"FieldName": "AbstractInteractionResult",
"Message": "AbstractInteractionResult.InteractionContext is null"
}
]
},
"Id": ""
}
}
看意思是指表体没给出值,但我给出了啊,只有可能说是不是表体给出的属性名STK_StockCountGain__FBillEntry是不是有点问题?
这个问题很急,下周一就要给客户相关的文档并讨论相应的接口细节。