知识分享 - 如何把自动下推结果显示出来
金蝶云社区-JohnnyDing
JohnnyDing
11人赞赏了该文章 4,797次浏览 未经作者许可,禁止转载编辑于2016年10月09日 15:05:23
summary-icon摘要由AI智能服务提供

本文介绍了在金蝶软件系统中,如何在插件中实现自动下推并保存下游单据的功能,同时提供了小技巧,即如何将下推结果不自动保存,而是显示出来供用户修改后自行保存。示例代码展示了在Web层插件中,如何封装函数以显示下推生成的下游单据编辑界面,包括处理单张和多张单据的情况,并说明了App服务层插件无法与用户交互的限制。

背景说明
之前,我共享过一个帖子,介绍如何调用下推引擎,自动生成下游单据数据包,然后调用保存服务,保存下游单据。全程自动处理,无需用户干预。

https://vip.kingdee.com/article/17499
小技巧:如何在插件中实现自动下推并保存

现有伙伴咨询,如何把下推结果,不自动保存,而是显示出来,供用户修改,由用户自行保存。

本帖示例代码,封装了一个函数,演示在表单插件中,如何把下推生成的下游单据显示出来。(调用下推服务的代码,见我之前共享的帖子,本帖略过)

特别说明
本帖示例代码,只适用于Web层插件(包含单据插件、列表插件)。
App服务层的插件(如操作插件),无法与用户进行交互,不能显示出下游单据维护界面。

示例代码

//***************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.Operation;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.Metadata;

namespace JDSample.FormPlugIn.Bill
{
[Description("显示下推的目标单编辑界面")]
public class S151106ShowPushResultEdit : AbstractBillPlugIn
{
///


/// 显示下推的目标单编辑界面:调用下推服务的代码略
///

/// 下游单据FormId
/// 下推服务返回的结果对象
/// 下推生成的全部下游单据
public void ShowPushResult(
string targetFormId,
ConvertOperationResult pushResult,
DynamicObject[] objs )
{
// 构建界面显示参数
BillShowParameter param = new BillShowParameter
{
ParentPageId = this.View.PageId
};
if (objs.Length == 1)
{
// 如果下推生成的目标单仅仅只有一张,则直接打开下游单据的编辑界面
param.FormId = targetFormId; // formId
param.Status = OperationStatus.ADDNEW; // 新建状态
param.CreateFrom = CreateFrom.Push; // 标志:下推创建的单据
param.AllowNavigation = false; // 不显示导航菜单

// 把下推结果放在缓存交换区
string customParamKey = "_ConvertSessionKey";
string sessionKey_Result = "ConverOneResult";
string sessionKey_ErrorInfo = "ConvertValidationInfo";
param.CustomParams.Add(customParamKey, sessionKey_Result);
this.View.Session[sessionKey_ErrorInfo] = pushResult.ValidationErrors;
this.View.Session[sessionKey_Result] = objs[0];

}
else if (objs.Length > 1)
{
// 如果下推生成的目标单有多行,则打开批量编辑界面
param.FormId = "BOS_ConvertResultForm";

// 把下推结果放在缓存交换区
string sessionKey_Result = "ConvertResults";
string sessionKey_ErrorInfo = "ConvertValidationInfo";
this.View.Session[sessionKey_Result] = objs;
this.View.Session[sessionKey_ErrorInfo] = pushResult.ValidationErrors;
param.CustomParams.Add("_ConvertResultFormId", targetFormId);
}
else
{
return;
}

// 显示界面
param.OpenStyle.ShowType = ShowType.MainNewTabPage;
this.View.ShowForm(param);
}
}

}