本帖最后由 JohnnyDing 于 2016-5-26 11:20 编辑
弹出子界面,是异步进行的,也就是说,子界面还没有显示出来,外面的代码就跑完了。如果需要部分功能,在子界面关闭后,才进行处理,必须通过回调函数实现。
楼主的需求,建议按下面的步骤实现:
1. 重载 BarItemClick 事件,直接设置 e.Cancel,取消掉后续系统调用打印的处理;
2. 显示子页面,同时定义ShowForm函数的回调函数;
3. 在ShowForm回调函数中,接收返回的密码,进行用户校验
4. 用户校验通过,则通过this.View.InvokeFormOperation方法,调用打印操作;
如下示例代码,演示了如何打开一个子界面,并接收子界面返回值,如何直接调用打印操作;
//*****************************************************
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;
namespace JDSample.FormPlugIn.DynamicForm
{
///
/// 演示如何从子界面返回数据
///
///
/// 案例说明:
/// 1. 需要有两个界面,父界面通过按钮弹出子界面;
/// 2. 用户在子界面上编辑数据,确定后返回父界面;
///
[Description("演示如何从子界面返回数据 - 父界面插件")]
public class S150804ReturnInfoParentEdit : AbstractDynamicFormPlugIn
{
///
/// 菜单点击:
/// 如果调用的是打印菜单,则弹出子页面,供用户输入密码;
/// 只有密码正确,才继续调用打印操作
///
///
public override void BarItemClick(BarItemClickEventArgs e)
{
if (e.BarItemKey.EqualsIgnoreCase("tbPrint")
|| e.BarItemKey.EqualsIgnoreCase("tbPreview"))
{
// 禁止系统自动调用打印、预览操作:必须由插件在通过校验后,自行调用这两个操作
e.Cancel = true;
// 显示密码录入界面
DynamicFormShowParameter showParam = new DynamicFormShowParameter();
showParam.FormId = "1606a9d2-fd34-4616-8582-6e4f732664a9";
this.View.ShowForm(showParam,
new Action((formResult) =>
{// 回调函数:只有子界面关闭后,代码才会走到这里
if (formResult != null)
{
string password = ((S150804ReturnInfo)formResult.ReturnData).JD_Text;
// 校验密码:示例代码略
bool pass = true;
if (pass == false)
{
this.View.ShowMessage("密码错误!");
}
else
{
// 通过校验,主动调用打印、预览操作
if (e.BarItemKey.EqualsIgnoreCase("tbPrint"))
{
this.View.InvokeFormOperation("Print");
}
else if (e.BarItemKey.EqualsIgnoreCase("tbPreview"))
{
this.View.InvokeFormOperation("PrintPreview");
}
}
}
}));
}
}
}
[Description("演示如何从子界面返回数据 - 子界面插件")]
public class S150804ReturnInfoChildEdit : AbstractDynamicFormPlugIn
{
public override void ButtonClick(ButtonClickEventArgs e)
{
// 用户点击确定按钮
if (e.Key.EqualsIgnoreCase("F_JD_OK"))
{
// 构建返回数据对象
S150804ReturnInfo returnInfo = new S150804ReturnInfo();
returnInfo.JD_Text = Convert.ToString(this.Model.GetValue("F_JD_Text"));
// 把数据对象,返回给父界面
this.View.ReturnToParentWindow(new FormResult(returnInfo));
this.View.Close();
}
}
}
///
/// 由子窗体返回给父窗体的数据对象
///
class S150804ReturnInfo
{
public string JD_Text { get; set; }
}
}