一种向导式提示语应用实现原创
金蝶云社区-limyu
limyu
4人赞赏了该文章 838次浏览 未经作者许可,禁止转载编辑于2020年08月17日 21:07:12

场景需求:

1、根据某种操作正常提示,提示内容需要先后顺序执行某种其他逻辑,如:无法执行该操作,请按下面分步执行,请先执行1、......2、......3、再次执行该操作

2、提示语中含有引导式提示语,如:执行成功,点击下面链接可直接查看执行结果

等其他场景需求,这种简单场景可方便增加用户引导式友好操作,无需实现过多的向导界面,也由于标准产品的提示语中,无法执行在提示语文本中插入链接或者按钮功能,所以需要借助向导式提示语应用功能实现


效果图:

微信图片_20200817205559.png

微信图片_20200817205708.png

微信图片_20200817205752.png

微信图片_20200817205847.png


二开插件样例:

public class TestMsgInnerInfoPlugin : AbstractDynamicFormPlugIn
{
        private List<MsgInnerInfo> lstinnerinfo = null;
        public override void ButtonClick(ButtonClickEventArgs e)
        {
            if (e.Key.EqualsIgnoreCase("FBtTestMsg"))
            {
                this.lstinnerinfo = new List<MsgInnerInfo>();
                this.lstinnerinfo.Add(new MsgInnerInfo("link1", "删除角色001"));
                this.lstinnerinfo.Add(new MsgInnerInfo("link2", "删除角色002"));
                this.lstinnerinfo.Add(new MsgInnerInfo("link3", "重新删除用户"));
                this.View.ShowMessage(new Queue<MsgInnerInfo>(this.lstinnerinfo), "删除[test]用户失败,该用户已被角色001,角色002引用,请先删除角色再选择重新操作", MessageBoxType.Notice);
            }
        }
        public override void MsgInnerControlEvent(MsgInnerControlEventArgs e)
        {
            base.MsgInnerControlEvent(e);
            if (this.lstinnerinfo == null) return;
            if (e.key.EqualsIgnoreCase("link1") || e.key.EqualsIgnoreCase("link2"))
            {
                //这里执行正确逻辑
                //最后的提示
                MsgInnerInfo linkm = this.lstinnerinfo.Where(x => x.key.EqualsIgnoreCase(e.key)).FirstOrDefault();
                this.View.ShowMessage(string.Format("删除{0}成功。", linkm.caption), MessageBoxOptions.OK, new Action<MessageBoxResult>((result) =>
                {
                    if (this.lstinnerinfo != null)
                    {
                        linkm.enabled = true;
                        JSONArray array = new JSONArray();
                        array.Add(KDObjectConverter.SerializeObject(linkm));
                        this.View.AddAction("SetMesTipBarInnerControlState", array);
                        this.View.SendDynamicFormAction(this.View);
                    }
                }), "", MessageBoxType.Advise);
            }
            if (e.key.EqualsIgnoreCase("link3"))
            {
                var alldel = this.lstinnerinfo.Where(x => !x.key.EqualsIgnoreCase("link3") && !x.enabled);
                if (alldel.Count() > 0)
                {
                    this.View.ShowWarnningMessage(string.Format("请先执行{0}操作!", alldel.First().caption));
                }
                else
                {
                    //这里执行正确逻辑
                    //最后的提示
                    MsgInnerInfo linkm = this.lstinnerinfo.Where(x => x.key.EqualsIgnoreCase(e.key)).FirstOrDefault();
                    this.View.ShowMessage("删除[test]用户成功", MessageBoxOptions.OK, new Action<MessageBoxResult>((result) =>
                    {
                        if (this.lstinnerinfo != null)
                        {
                            linkm.enabled = true;
                            JSONArray array = new JSONArray();
                            array.Add(KDObjectConverter.SerializeObject(linkm));
                            this.View.AddAction("SetMesTipBarInnerControlState", array);
                            this.View.SendDynamicFormAction(this.View);
                        }
                    }), "", MessageBoxType.Advise);
                }
            }
        }
    }


附:html5端暂未实现该场景,如需应用场景,内部后续再做支持

赞 4