如何把自动下推结果显示出来
金蝶云社区-天冥异
天冥异
4人赞赏了该文章 534次浏览 未经作者许可,禁止转载编辑于2018年08月02日 20:54:08

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

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

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

特别说明
本帖示例代码,只适用于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
    {
        /// <summary>
        /// 显示下推的目标单编辑界面:调用下推服务的代码略
        /// </summary>
        /// <param name="targetFormId">下游单据FormId</param>
        /// <param name="pushResult">下推服务返回的结果对象</param>
        /// <param name="objs">下推生成的全部下游单据</param>
        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);
        }
    }
}

赞 4