1 . 新建服务器插件,集成AbstractOperationServicePlugIn,重写AfterExecuteOperationTransaction事件
```
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
{
base.AfterExecuteOperationTransaction(e);
if (this.OperationResult.IsSuccess && this.OperationResult.OperateResult != null && this.OperationResult.OperateResult.Count > 0)
{
//自动下推处理
}
}
```
2 . 自动下推
```
// 获取源单与目标单直接的转换规则,如果规则未启用,则返回为空,注意容错
// 假设:上游单据FormId为sourceFormId,下游单据FormId为targetFormId
var rules = ConvertServiceHelper.GetConvertRules(this.Context, sourceFormId, targetFormId);
if (rules == null || rules.Count == 0)
{
//throw new KDBusinessException("", string.Format("未找到{0}到{1}之间,启用的转换规则,无法自动下推!", sourceFormId, targetFormId));
}
// 取勾选了默认选项的规则
var rule = rules.FirstOrDefault(t => t.IsDefault);
// 如果无默认规则,则取第一个
if (rule == null)
{
rule = rules[0];
}
// 开始构建下推参数:
// 待下推的源单数据行
var sourceBillMeta = MetaDataServiceHelper.Load(this.Context, sourceFormId) as FormMetadata;
// 获取单据提的属性名称
var entityPropertyName = ResearchFundCommonFunc.GetEntryName(sourceBillMeta.BusinessInfo, KEY_FENTITY);
List<ListSelectedRow> srcSelectedRows = new List<ListSelectedRow>();
// 把待下推的源单内码,逐个创建ListSelectedRow对象,添加到集合中
//srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), string.Empty, 0, sourceFormId));
// 特别说明:上述代码,是整单下推;
// 如果需要指定待下推的单据体行,请参照下句代码,在ListSelectedRow中,指定EntryEntityKey以及EntryId
//查询构造下推数据
var entryEntityData = sourceBillData[entityPropertyName] as DynamicObjectCollection;
foreach (var row in entryEntityData)
{
string entityId = Convert.ToString(row[0]);
if (entityId == "0") continue;
srcSelectedRows.Add(new ListSelectedRow(Convert.ToString(sourceBillData["Id"]), entityId, 0, sourceFormId) { EntryEntityKey = KEY_FENTITY });
}
DrawArgs dArg = new DrawArgs(rule, null, srcSelectedRows.ToArray());
ConvertOperationResult operationResult = null;
// 自定义参数字典:把一些自定义参数,传递到转换插件中;转换插件再根据这些参数,进行特定处理
Dictionary<string, object> custParams = new Dictionary<string, object>();
try
{
// 组装下推参数对象
var pushArgs = new PushArgs(rule, srcSelectedRows.ToArray())
{
TargetBillTypeId = "", // 请设定目标单据单据类型。如无单据类型,可以空字符
TargetOrgId = 0, // 请设定目标单据主业务组织。如无主业务组织,可以为0
CustomParams = custParams // 可以传递额外附加的参数给单据转换插件,如无此需求,可以忽略
};
// 调用下推服务,生成下游单据数据包
operationResult = ConvertServiceHelper.Push(this.Context, pushArgs, OperateOption.Create());
}
catch (KDExceptionValidate ex)
{
if (ex.ValidateString == "不符合下推条件")
{
//**捕捉因为不符合自动下推条件而报的错误,后续捕捉判断并忽略**
throw new KDBusinessException("", "不符合下推条件");
}
else
{
throw new KDBusinessException("", ex.Message + "\r\n" + ex.ValidateString);
}
}
catch (KDException ex)
{
throw new KDBusinessException("", ex.Message + "\r\n" + ex.StackTrace);
}
catch
{
throw;
}
// 开始处理下推结果:
// 获取下推生成的下游单据数据包
DynamicObject[] targetBillObjs = (from p in operationResult.TargetDataEntities select p.DataEntity).ToArray();
if (targetBillObjs.Length == 0)
{
// 未下推成功目标单,抛出错误,中断审核
//throw new KDBusinessException("", string.Format("由{0}自动下推{1},没有成功生成数据包,自动下推失败!", sourceFormId, targetFormId));
}
// 对下游单据数据包,进行适当的修订,以避免关键字段为空,自动保存失败
// 示例代码略
// 读取目标单据元数据
var targetBillMeta = MetaDataServiceHelper.Load(this.Context, targetFormId) as FormMetadata;
// 构建保存操作参数:设置操作选项值,忽略交互提示
OperateOption saveOption = OperateOption.Create();
// 忽略全部需要交互性质的提示,直接保存;
//saveOption.SetIgnoreWarning(true); // 忽略交互提示
//saveOption.SetInteractionFlag(this.Option.GetInteractionFlag()); // 如果有交互,传入用户选择的交互结果
// using Kingdee.BOS.Core.Interaction;
//saveOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag());
// 调用保存服务,自动保存
var saveResult = BusinessDataServiceHelper.Save(this.Context, targetBillMeta.BusinessInfo, targetBillObjs, saveOption, "Save");
```
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 CS0103 当前上下文中不存在名称“KEY_FENTITY” QZH.ghy.BOS.Business.PlugIn E:\code\QZH.ghy.BOS.Business.PlugIn\QZH.ghy.BOS.Business.PlugIn\QydSh.cs 61 活动
错误 CS0103 当前上下文中不存在名称“ResearchFundCommonFunc” QZH.ghy.BOS.Business.PlugIn E:\code\QZH.ghy.BOS.Business.PlugIn\QZH.ghy.BOS.Business.PlugIn\QydSh.cs 48 活动
错误 CS0103 当前上下文中不存在名称“KEY_FENTITY” QZH.ghy.BOS.Business.PlugIn E:\code\QZH.ghy.BOS.Business.PlugIn\QZH.ghy.BOS.Business.PlugIn\QydSh.cs 48 活动
错误 CS0103 当前上下文中不存在名称“sourceBillData” QZH.ghy.BOS.Business.PlugIn E:\code\QZH.ghy.BOS.Business.PlugIn\QZH.ghy.BOS.Business.PlugIn\QydSh.cs 56 活动
错误 CS0103 当前上下文中不存在名称“sourceBillData” QZH.ghy.BOS.Business.PlugIn E:\code\QZH.ghy.BOS.Business.PlugIn\QZH.ghy.BOS.Business.PlugIn\QydSh.cs 61 活动
跑不了
能贴一下引用dll出来吗?