金蝶云星空打开子界面后,子界面操作保存成功后关闭父窗体刷新父页面

文章目录

金蝶云星空打开子界面后,子界面操作保存成功后关闭父窗体刷新父页面

业务需求

售后单界面点击按钮打开其他入界面,关闭其他入库单时是否刷新售后单,分两种情况:

第一种:刷新:

保存成功才刷新父窗体;

第一次保存成功再次保存失败,刷新。

第二种:以下情况不刷新:

不操作保存直接关闭其他入库单;

操作保存但是报错无法保存而关闭其他入库单。

开发实现

父窗体的表单插件,在打开子窗体时,传递回调函数

csharp 复制代码
                    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);//BackFuncIn是回调函数

关键代码:

csharp 复制代码
this.View.ShowForm(OtherInAdd, BackFuncIn);

子窗体的表单插件

定义一个变量,默认保存失败
csharp 复制代码
        /// <summary>
        /// 下推其他入库成功标志
        /// </summary>

        bool pushInStatus = false;
在保存成功事件判断如果是第一次保存就更改标记为保存成功
csharp 复制代码
        public override void AfterSave(AfterSaveEventArgs e)
        {
            base.AfterSave(e);
            if (e.OperationResult.IsSuccess)
            {
                if (!this.entryList.IsNullOrEmptyOrWhiteSpace() && !pushInStatus)//如果是售后单打开的界面,且这是第一次保存成功
                {
                    pushInStatus = true;//设置保存成功标记为true
                }
            }
        }
在关闭事件,判断是父窗体打开的子窗体,传递参数给父窗体
csharp 复制代码
        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);//从被调用的动态表单界面返回数据
            }
            
        }

父窗体的表单插件回调函数根据参数的返回值进行窗口刷新

csharp 复制代码
        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();//返回的成功状态进行当前界面的刷新操作
                }
            }

        }
相关推荐
小珑也要变强40 分钟前
队列基础概念
c语言·开发语言·数据结构·物联网
开MINI的工科男3 小时前
【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划
人工智能·笔记·自动驾驶·预测与决策
吃饭只吃七分饱3 小时前
arm开发板通信
arm开发·c#
AI原吾3 小时前
掌握Python-uinput:打造你的输入设备控制大师
开发语言·python·apython-uinput
机器视觉知识推荐、就业指导3 小时前
Qt/C++事件过滤器与控件响应重写的使用、场景的不同
开发语言·数据库·c++·qt
毕设木哥3 小时前
25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】
开发语言·python·计算机·django·毕业设计·课程设计·毕设
珞瑜·3 小时前
Matlab R2024B软件安装教程
开发语言·matlab
weixin_455446173 小时前
Python学习的主要知识框架
开发语言·python·学习
孤寂大仙v3 小时前
【C++】STL----list常见用法
开发语言·c++·list
她似晚风般温柔7894 小时前
Uniapp + Vue3 + Vite +Uview + Pinia 分商家实现购物车功能(最新附源码保姆级)
开发语言·javascript·uni-app