webapi保存单据报错 (0x80004005): {ctx == null}
金蝶云社区-wendy0828
wendy0828
0人赞赏了该文章 1,492次浏览 未经作者许可,禁止转载编辑于2017年04月11日 15:00:06

我用webservice调用webapi保存单据,代码如下:
JObject jsonRoot = new JObject();
jsonRoot.Add("Creator", userId);// Creator: 创建用户
jsonRoot.Add("NeedUpDateFields", new JArray("")); // NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新
// Model: 单据详细数据参数
JObject model = new JObject();

model.Add("FID", 0);
// model.Add("FCeateDate", System.DateTime.Now);
model.Add("FBillType", "2");// \"FBillType
//单据体
JArray entryRows = new JArray();
string entitKey = "FEntity";//单据体KEY 唯一标示

JObject entryRow = new JObject();
entryRow.Add("FEntryID", 0);
entryRow.Add("F_SourceBillType", "PABR_FA_ASSET");// 源单类型、源单编号 F_SourceBillType
entryRow.Add("F_SourceBillNo", ds.Tables[0].Rows[0]["FBILLNO"].ToString());//源单编码 \"F_SourceBillNo
entryRow.Add("F_ASSET_NUM", ds.Tables[0].Rows[0]["F_SAP_BILLNO"].ToString());//资产编码 F_ASSET_NUM
entryRow.Add("F_SECOND_NO", billno);//次级资产编码 F_SECOND_NO
entryRow.Add("F_ASSET_NAME", ds.Tables[0].Rows[0]["F_ASSET_NAME"].ToString());//资产名称 F_ASSET_NAME
entryRow.Add("F_MODEL", ds.Tables[0].Rows[0]["F_MODEL"].ToString());//型号 \"F_MODEL
entryRow.Add("F_MAC_NO", ds.Tables[0].Rows[0]["F_MAC_NO"].ToString());//机身号码 \"F_MAC_NO
entryRow.Add("F_JianDing_Date", System.DateTime.Now);//检查日期 F_JianDing_Date
entryRow.Add("F_CertNum", "");//证书编码F_CertNum

JObject basedata = new JObject();
basedata.Add("FNumber", ds.Tables[0].Rows[0]["F_COST_CENTER"].ToString());
entryRow.Add("F_COST_CENTER", basedata);//成本中心
//F_Supplier
JObject baseFdata = new JObject();
baseFdata.Add("FNumber", "");
entryRow.Add("F_Supplier", baseFdata);//单位

entryRow.Add("F_CHECK_TYPE", "B");//B 内校 A 外校 :F_CHECK_TYPE

entryRow.Add("F_OK_NG", result);//结果 F_OK_NG
entryRow.Add("F_SendOrLive", "1");//1现场 2 送检 F_SendOrLive
entryRow.Add("F_Remark", "PDA扫描");
entryRows.Add(entryRow);
model.Add(entitKey, entryRows);

jsonRoot.Add("Model", model);
string str1 = client.Execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save", new object[] { "PABR_FA_AssetRegulate", jsonRoot.ToString() });

报错提示如下:
保存失败Kingdee.BOS.WebApi.Client.ServiceException (0x80004005): {ctx == null}
在 Kingdee.BOS.ServiceFacade.KDServiceFx.ServiceExecutor.Execute(KDServiceContext context, ServiceType svcType, String[] paraValues, SerializerProxy serializeProxy, ServiceType beginMethod)
在 Kingdee.BOS.ServiceFacade.KDServiceFx.ExecuteServiceModule.OnProcess(KDServiceContext context)
在 Kingdee.BOS.ServiceFacade.KDServiceFx.ModulePipeline.ExcuteRequest(KDServiceContext context)
在 Kingdee.BOS.ServiceFacade.KDServiceFx.RequestExcuteRuntime.BeginRquest(RequestExtractor requestExtractor, WebContext webCtx)
在 Kingdee.BOS.ServiceFacade.KDServiceFx.RequestExcuteRuntime.StartRequest(RequestExtractor requestExtractor, WebContext context)
在 Kingdee.BOS.ServiceFacade.KDServiceFx.KDSVCHandler.ExecuteRequest(WebContext ctx, RequestExtractor requestExtractor)

K3 对应界面api参数如下:
一、请求参数说明:
1.formid:业务对象表单Id(必录)
2.data:Json格式数据(详情参考Json格式数据)(必录)
2.1.Creator: 创建者名字(非必录)
2.2.NeedUpDateFields: 需要保存的字段,格式["fieldkey1","fieldkey2","entitykey1",...],数组类型(非必录)
2.3.NeedReturnFields:需要返回的结果字段,格式["fieldkey","entitykey.fieldkey",...](非必录):
2.4.IsDeleteEntry:是否删除分录,默认True删除(非必录):
2.5.SubSystemId:菜单所在子系统Id(非必录):
2.6.Model: 表单实体数据(必录)

二、Json格式数据:
{\"Creator\":\"\",\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"IsDeleteEntry\":\"True\",\"SubSystemId\":\"\",\"Model\":{\"FID\":\"0\",\"FBillNo\":\"\",\"FBillType\":\"\",\"FEntity\":[{\"FEntryID\":\"0\",\"F_SourceBillNo\":\"\",\"F_ASSET_NUM\":\"\",\"F_SECOND_NO\":\"\",\"F_ASSET_NAME\":\"\",\"F_MODEL\":\"\",\"F_MAC_NO\":\"\",\"F_JianDing_Date\":\"1900-01-01\",\"F_CertNum\":\"\",\"F_COST_CENTER\":{\"FNumber\":\"\"},\"F_CHECK_TYPE\":\"\",\"F_Supplier\":{\"FNumber\":\"\"},\"F_OK_NG\":\"\",\"F_SendOrLive\":\"\",\"F_Remark\":\"\"}]}}

三、返回参数:
{\"Result\":{\"ResponseStatus\":{\"ErrorCode\":\"\",\"IsSuccess\":\"false\",\"Errors\":[{\"FieldName\":\"\",\"Message\":\"\",\"DIndex\":0}],\"SuccessEntitys\":[{\"Id\":\"\",\"Number\":\"\",\"DIndex\":0}],\"SuccessMessages\":[{\"FieldName\":\"\",\"Message\":\"\",\"DIndex\":0}]},\"Id\":\"\",\"NeedReturnData\":[{}]}}

四、代码示例:
// 使用webapi引用组件Kingdee.BOS.WebApi.Client.dll
K3CloudApiClient client = new K3CloudApiClient("http://10.2.0.23/K3Cloud/");
var ret = client.ValidateUser("5808a896e62651","Administrator","888888",2052);
var result = JObject.Parse(ret)["LoginResultType"].Value();
// 登陆成功
if (result == 1)
{
client.Save("PABR_FA_AssetRegulate","{\"Creator\":\"\",\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"IsDeleteEntry\":\"True\",\"SubSystemId\":\"\",\"Model\":{\"FID\":\"0\",\"FBillNo\":\"\",\"FBillType\":\"\",\"FEntity\":[{\"FEntryID\":\"0\",\"F_SourceBillNo\":\"\",\"F_ASSET_NUM\":\"\",\"F_SECOND_NO\":\"\",\"F_ASSET_NAME\":\"\",\"F_MODEL\":\"\",\"F_MAC_NO\":\"\",\"F_JianDing_Date\":\"1900-01-01\",\"F_CertNum\":\"\",\"F_COST_CENTER\":{\"FNumber\":\"\"},\"F_CHECK_TYPE\":\"\",\"F_Supplier\":{\"FNumber\":\"\"},\"F_OK_NG\":\"\",\"F_SendOrLive\":\"\",\"F_Remark\":\"\"}]}}");
}

五、字段说明:
资产编号:F_ASSET_NUM
成本中心:F_COST_CENTER (必填项)
校准单位:F_Supplier
机身号码:F_MAC_NO
检定日期:F_JianDing_Date
类别:F_CHECK_TYPE
送检/现场:F_SendOrLive (必填项)
次级资产编号:F_SECOND_NO
OK/NG:F_OK_NG
备注:F_Remark
证书编号:F_CertNum
创建日期:FCreateDate
创建人:FCreatorId
修改人:FModifierId
单据编号:FBillNo
数据状态:FDocumentStatus
修改日期:FModifyDate
资产名称:F_ASSET_NAME
资产规格:F_MODEL
源单编号:F_SourceBillNo
检测类型:FBillType (必填项)
源单类型:F_SourceBillType