在插件中实现自定义下推

说明:
自定义下推就是在插件中调用下推接口,得到转换结果,并对转换结果进行处理的过程,主要包括:
1.下推接口参数的构建,包括转换规则,下推数据,是否整单下推,目标单据权限,源单内码,目标单据类型,目标主组织等。
2. 得到转换结果,怎样去处理转换结果,是弹出下游单据页面还是直接保存等
代码:
1. 在表单插件中通过菜单点击事件实现单据下推示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Core.Const;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs;
using Kingdee.BOS.Core.Metadata.ConvertElement;
using Kingdee.BOS.Core.DynamicForm.Operation;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.Interaction;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
namespace Kingdee.BOS.TestPlugIn.Demo
{
[HotUpdate]
[Description("自定义下推单据")]
public class CustomPushPlugIn : AbstractDynamicFormPlugIn
{
//菜单点击事件
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey.EqualsIgnoreCase("FBtnCustomPush"))
{
OperateOption pushOption = OperateOption.Create();//操作选项
var pushArgs = this.CreatePushArgs(pushOption); //构建下推参数
var convertResult = ConvertServiceHelper.Push(this.Context, pushArgs, pushOption);//调用下推接口
var targetObjs = (from p in convertResult.TargetDataEntities select p.DataEntity).ToArray();//得到目标单据数据包
var targetBInfo = this.GetBusinessInfo(pushArgs.ConvertRule.TargetFormId, pushArgs.ConvertRule.TargetFormMetadata);
//对转换结果进行处理
//1. 直接调用保存接口,对数据进行保存
this.SaveTargetBill(targetBInfo, targetObjs);
//2. 或者展示目标单据
this.ShowTargetForm(targetBInfo, targetObjs);
}
}
/// <summary>
/// 保存目标单据
/// </summary>
private void SaveTargetBill(BusinessInfo targetBusinessInfo, DynamicObject[] targetBillObjs)
{
OperateOption saveOption = OperateOption.Create();
saveOption.SetIgnoreWarning(true);
saveOption.SetIgnoreInteractionFlag(true);
var saveResult = BusinessDataServiceHelper.Save(this.Model.Context, targetBusinessInfo, targetBillObjs, saveOption);
if (!saveResult.IsSuccess)
{
var errorInfo = string.Join(";", saveResult.ValidationErrors.Select(x => x.Message));
this.View.ShowErrMessage(errorInfo);
return;
}
else
{
this.View.ShowMessage("生成成功");
}
}
/// <summary>
/// 创建下推参数
/// </summary>
/// <returns></returns>
private PushArgs CreatePushArgs(OperateOption pushOption)
{
//得到转换规则
var convertRule = this.GetConvertRule();
//源单数据
var selectedRow = this.GetSelectedRow(pushOption);
//单据下推参数
PushArgs pushArgs = new PushArgs(convertRule, selectedRow);
//目标单据主组织,可选参数,基础资料隔离,给没有住组织的目标数据包赋值,取当前登录组织即可
pushArgs.TargetOrgId = this.Context.CurrentOrganizationInfo.ID;
//目标单据类型,必填参数,除非下游单据类型不是必填的,对源单数据进行过滤,给目标单赋值
pushArgs.TargetBillTypeId = "目标单据类型内码";
return pushArgs;
}
/// <summary>
/// 展示目标单据
/// </summary>
private void ShowTargetForm(BusinessInfo targetBusinessInfo, DynamicObject[] targetBillObjs)
{
BillShowParameter param = new BillShowParameter();
param.ParentPageId = this.View.PageId;
if (targetBillObjs.Length == 1)
{
param.Status = OperationStatus.ADDNEW;
param.CreateFrom = CreateFrom.Push;
param.AllowNavigation = false;
string sessionKey = FormConst.ConvParamKey_OneResultSessionKey;// "_ConvertSessionKey";
string sessionName = FormConst.ConvParamKey_OneResultSessionName;// "ConverOneResult";
param.CustomParams.Add(sessionKey, sessionName);
this.View.Session[sessionName] = targetBillObjs[0]; // 把结果放在交换区,供子页面取用
param.FormId = targetBusinessInfo.GetForm().Id; //formID
在插件中实现自定义下推
说明:自定义下推就是在插件中调用下推接口,得到转换结果,并对转换结果进行处理的过程,主要包括: 1.下推接口参数的构建,包括转换规则...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



