金蝶云星空打开子界面后,子界面操作保存成功后关闭父窗体刷新父页面
一、业务需求
售后单界面点击按钮打开其他入界面,关闭其他入库单时是否刷新售后单,分两种情况:
第一种:刷新:
保存成功才刷新父窗体;
第一次保存成功再次保存失败,刷新
第二种:以下情况不刷新:
不操作保存直接关闭其他入库单
操作保存但是报错无法保存而关闭其他入库单
二、开发实现
2.1、父窗体的表单插件,在打开子窗体时,传递回调函数
BillShowParameter OtherInAdd = new BillShowParameter() { FormId = FormIdConst.STK_MISCELLANEOUS,//子窗体 ParentPageId = base.View.PageId,//父窗体 Status = OperationStatus.ADDNEW,//打开新增界面 AllowNavigation = false, //OpenStyle.ShowType = ShowType.NewTabPage }; ncList = ncList.GroupBy(x => x.InterID).Select(y => y.First()).ToList(); idList = ncList.Select(s => Convert.ToString(s.InterID)).Distinct().ToList(); #region 携带参数 //售后类型 OtherInAdd.CustomParams.Add("FAfterType", afterType); //更换序列号 IsSerial OtherInAdd.CustomParams.Add("FIsSerial", IsSerial.ToString()); //售后单 FIDList OtherInAdd.CustomParams.Add("FIDList", string.Join(",", idList)); //明细 FEntity OtherInAdd.CustomParams.Add("FEntryList", entryList); #endregion OtherInAdd.OpenStyle.ShowType = ShowType.MainNewTabPage;//NewTabPage会导致在客户端无法打开新页签 OtherInAdd.OpenStyle.TagetKey = "FMainTab";//这个不能少 OtherInAdd.CreateWebParams(); this.View.ShowForm(OtherInAdd, BackFuncIn);
2.2、子窗体的表单插件
2.2.1、定义一个变量,默认保存失败
/// <summary> /// 下推其他入库成功标志 /// </summary> bool pushInStatus = false;
2.2.2、在保存成功事件判断如果是第一次保存就更改标记为保存成功
public override void AfterSave(AfterSaveEventArgs e) { base.AfterSave(e); if (e.OperationResult.IsSuccess) { if (!this.entryList.IsNullOrEmptyOrWhiteSpace() && !pushInStatus)//如果是售后单打开的界面,且这是第一次保存成功 { pushInStatus = true;//设置保存成功标记为true } } }
2.2.3、在关闭事件,判断是父窗体打开的子窗体,传递参数给父窗体
public override void BeforeClosed(BeforeClosedEventArgs e) { base.BeforeClosed(e); if (!this.entryList.IsNullOrEmptyOrWhiteSpace()) { Dictionary<string, object> returnData = new Dictionary<string, object>(); returnData["FPushInStatus"] = pushInStatus; this.View.ReturnToParentWindow(returnData);//从被调用的动态表单界面返回数据 } }
2.3、父窗体的表单插件回调函数根据参数的返回值进行窗口刷新
private void BackFuncIn(FormResult result) { object data = result.ReturnData; //子窗体返回的数据 if (data != null) { Dictionary<string, object> docContacts = data as Dictionary<string, object>; if (Convert.ToBoolean(docContacts["FPushInStatus"]))//返回的数据项 { this.View.Refresh();//返回的成功状态进行当前界面的刷新操作 } } }