【已解决】表单插件中如何调用单据转换规则?
金蝶云社区-yangyong_yy
yangyong_yy
1人赞赏了该文章 3,321次浏览 未经作者许可,禁止转载编辑于2015年11月02日 11:54:28

有A,B,C 3张单据,如何在A的表单插件中调用B到C的单据转换规则,下游单据不需要自动保存,打开状态就可以。

上次写过插件想自动生成下游单据的,但是由于字段配置的问题,导致下游单据不能保存,只能暂存。如果如下代码能够在暂存后打开单据的话也可以

[code]// 获取源单与目标单直接的转换规则,如果规则未启用,则返回为空,注意容错
List rules = ConvertServiceHelper.GetConvertRules(this.View.Context, "TP_FZC_ShipDetail", "SAL_OUTSTOCK");
ConvertRuleElement rule = rules[0];// rules.FirstOrDefault((ConvertRuleElement t) => t.IsDefault);
//出运明细单内码
string primaryKeyValue = Convert.ToString(shipIdCol[i]["FSOURCEBILLID"]);
ListSelectedRow row = new ListSelectedRow(primaryKeyValue, string.Empty, 0, "TP_FZC_ShipDetail");
ListSelectedRow[] selectedRows = new ListSelectedRow[] { row };
// 调用下推服务,生成下游单据数据包
ConvertOperationResult operationResult = null;
Dictionary custParams = new Dictionary();
try
{
PushArgs pushArgs = new PushArgs(rule, selectedRows)
{
TargetBillTypeId = "ad0779a4685a43a08f08d2e42d7bf3e9", //单据类型 = 标准销售出库单
TargetOrgId = 1, // 请设定目标单据主业务组织。如无主业务组织,可以为0
CustomParams = custParams, // 可以传递额外附加的参数给单据转换插件,如无此需求,可以忽略
};
//执行下推操作,并获取下推结果
operationResult = ConvertServiceHelper.Push(this.View.Context, pushArgs, OperateOption.Create());
}
catch (KDExceptionValidate ex)
{
this.View.ShowErrMessage(ex.Message, ex.ValidateString);
return;
}
catch (KDException ex)
{
this.View.ShowErrMessage(ex.Message);
return;
}
catch
{
throw;
}
// 获取生成的目标单据数据包
DynamicObject[] objs = (from p in operationResult.TargetDataEntities
select p.DataEntity).ToArray();
// 读取目标单据元数据
var targetBillMeta = MetaDataServiceHelper.Load(this.View.Context, "SAL_OUTSTOCK") as FormMetadata;
OperateOption saveOption = OperateOption.Create();
// 忽略全部需要交互性质的提示,直接保存;
saveOption.SetIgnoreWarning(true); // 提交数据库保存,并获取暂存结果
var saveResult = BusinessDataServiceHelper.Draft(this.View.Context, targetBillMeta.BusinessInfo, objs, saveOption);
[/code]