webapi接口调用调拨入库单关联调拨出库单问题
金蝶云社区-138xxxx6272_1
138xxxx6272_1
1人赞赏了该文章 1,382次浏览 未经作者许可,禁止转载编辑于2016年09月19日 00:45:50

老师们好,我在做调用系统抛出来的分布式调拨入库单保存接口的时候遇到一个问题就是该单据要求必须由分布式调拨出库单生成。无论我怎么处理,接口都是返回错误,提示需要关联单据生成。 关于调用接口写关联单据的部分代码如下:

//*********************************以下是关联字段
// 创建与源单之间的关联关系,以支持上查与反写源单
// 本示例演示创建与采购申请单之间的关联关系
// 源单类型、源单编号
entryRow.Add("FSrcBillTypeId", "STK_TRANSFEROUT");

SorBillNo = GetSorBillNo(FSORYWID);
entryRow.Add("FSrcBillNo", SorBillNo);

// 创建Link行集合
JArray linkRows = new JArray();

// 添加到单据体行中:Link子单据体标识 = 关联主单据体标识(POOrderEntry) + _Link
string linkEntityKey = "FSTKTRSOUTENTRY_Link";//string.Format("{0}_Link", entityKey);
entryRow.Add(linkEntityKey, linkRows);

// 创建Link行:
// 如有多条源单行,则分别创建Link行记录各条源单行信息
JObject linkRow = new JObject();
linkRows.Add(linkRow);

// 填写Link行上的字段值
// 特别说明:Link子单据体上字段的标识,必须在前面增加子单据体标识

// FFlowId : 业务流程图,可选
string fldFlowIdKey = string.Format("{0}_FFlowId", linkEntityKey);
linkRow.Add(fldFlowIdKey, "");

// FFlowLineId :业务流程图路线,可选
string fldFlowLineIdKey = string.Format("{0}_FFlowLineId", linkEntityKey);
linkRow.Add(fldFlowLineIdKey, "");

// FRuleId :两单之间的转换规则内码,必填
// 可以通过如下SQL语句到数据库获取
// select FID, *
// from T_META_CONVERTRULE
// where FSOURCEFORMID = 'PUR_Requisition'
// and FTARGETFORMID = 'PUR_PurchaseOrder'
// and FDEVTYPE = 0;
string fldRuleIdKey = string.Format("{0}_FRuleId", linkEntityKey);
linkRow.Add(fldRuleIdKey, "STK_TRANSFEROUT-STK_TRANSFERIN");

// FSTableName :必填,源单单据体表格编码,通过如下语句获取:
// SELECT FTableNumber
// FROM t_bf_tabledefine
// WHERE fformid = 'STK_TRANSFEROUT'
// AND fentitykey = 'FSTKTRSOUTENTRY'
// 如果如上语句未返回结果,请到K/3 Cloud中,手工选单一次,后台会自动产生表格编码
string fldSTableNameKey = string.Format("{0}_FSTableName", linkEntityKey);
linkRow.Add(fldSTableNameKey, "T_STK_STKTRANSFEROUTENTRY");

// FSBillId :必填,源单单据内码
string fldSBillIdKey = string.Format("{0}_FSBillId", linkEntityKey);
string SorFID=GetSorFID(SorBillNo);
linkRow.Add(fldSBillIdKey, SorFID);

// FSId : 必填,源单单据体行内码。如果源单主关联实体是单据头,则此属性也填写源单单据内码
string fldSIdKey = string.Format("{0}_FSId", linkEntityKey);
string FSorEntryID = GetSorEntryFID(FSORYWID, FSORYWENTRYID);
linkRow.Add(fldSIdKey, FSorEntryID);

// FEntity_Link_FBaseQtyOld :控制字段原始携带值,从源单带了多少下来
string fldBaseQtyOldKey = string.Format("{0}_FBASETRANSFERQTYOLD", linkEntityKey);
linkRow.Add(fldBaseQtyOldKey, FQty);

// FEntity_Link_FBaseQty :控制字段实际值,本单实际填写了多少
string fldBaseQtyKey = string.Format("{0}_FBASETRANSFERQTY", linkEntityKey);
linkRow.Add(fldBaseQtyKey, FQty);

我想问的问题是:这段代码对于webapi调用来说是不是在执行顺序上需要先保存单据吧? 对于调拨入库单这种强制要求必须要关联生成的单据如何处理?

后来我又根据直插sql的方式,但是关于t_BF_Instance表里的ID我不知道如何生成的,后来的现象就是生成的未提交调拨入库单,没有关联关系,需要在单据界面上再次点击保存才可以上查,但是此时t_BF_Instance表里没有新增的该单数据,然后我就很迷惑的来论坛查找,看到有个帖子说这个关联关系不能靠直接sql完成,那还得请老师指导一下,目前这种情况该如何处理呢?