二开案例.表单插件.动态创建菜单

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.表单插件.动态创建菜单

【应用场景】

运行时,动态创建菜单。



【注意事项】

<1>此案例仅简单演示如何通过修改元数据的方式动态创建菜单,因为涉及到运行时修改元数据,具有一定的风险性(元数据缓存问题),非必要不推荐。

<2>界面有本地缓存,需清空本地缓存后,动态创建的元素才会显示。



【案例演示】

采购订单,新增界面,运行时动态创建菜单项。

上传图片



【实现步骤】

<1>编写表单插件,代码如下。

using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.BarElement;
using Kingdee.BOS.Util;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【表单插件】动态创建菜单
    /// </summary>
    [Description("【表单插件】动态创建菜单"), HotUpdate]
    public class CreateMenuItemFormPlugIn : AbstractDynamicFormPlugIn
    {
        /// <summary>
        /// 菜单标识
        /// </summary>
        const string MenuItemKey = "Jac_MenuItem";
        public override void OnSetLayoutInfo(SetLayoutInfoArgs e)
        {
            base.OnSetLayoutInfo(e);
            var layoutInfo = this.View.LayoutInfo;
            var menu = layoutInfo.GetFormAppearance().Menu;
            // BarButtonItem
            var button = new BarButtonItem();
            button.Key = MenuItemKey;
            if (menu.GetBarItem(button.Key) == null)
            {
                menu.AddBarItem(button);
                button.Seq = 1007;
                button.IsShowTitle = true;
                button.Description = new LocaleValue("动态菜单测试", this.Context.UserLocale.LCID);
                button.Caption = new LocaleValue("动态菜单测试", this.Context.UserLocale.LCID);
                button.Id = "c3e85ee35aeb490488e38bae531eeb62";
                // BarItemLink
                var barItemLink = new BarItemLink();
                barItemLink.Id = "85ae0846-0c02-430e-8525-b0092a8fdab6";
                barItemLink.BarItemKey = button.Key;
                menu.AddBarItemLink(barItemLink);
                e.BillLayoutInfo = e.LayoutInfo = layoutInfo;
            }
        }
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            if (e.BarItemKey.EqualsIgnoreCase(MenuItemKey))
            {
                this.View.ShowMessage("动态创建的菜单被点击啦!");
            }
        }
    }
}
/*
菜单元数据
<LayoutInfos>
<LayoutInfo action="edit" oid="bc952920-057d-4790-9c27-1134091eb298">
  <Appearances>
<FormAppearance action="edit" oid="ecbac0e9-50b5-436c-9dce-241b5b7682b9" ElementType="100" ElementStyle="1">
  <Menu>
<BarDataManager>
  <BarItems>
<BarButtonItem ElementType="2005" ElementStyle="1">
  <ImageKey />
  <Shortcut />
  <Seq>1007</Seq>
  <Description>动态菜单测试</Description>
  <IsShowTitle>True</IsShowTitle>
  <Caption>动态菜单测试</Caption>
  <Id>c3e85ee35aeb490488e38bae531eeb62</Id>
  <Key>Jac_MenuItem</Key>
</BarButtonItem>
  </BarItems>
  <BarItemLinks>
<BarItemLink>
  <Id>85ae0846-0c02-430e-8525-b0092a8fdab6</Id>
  <BarItemKey>Jac_MenuItem</BarItemKey>
</BarItemLink>
  </BarItemLinks>
</BarDataManager>
  </Menu>
</FormAppearance>
  </Appearances>
</LayoutInfo>
</LayoutInfos>
 */


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。

上传图片


<3>BOSIDE扩展采购订单,注册表单插件,保存元数据,开发完毕。

上传图片



【功能验证】

<1>登录业务站点,打开采购订单新增界面,主菜单上,会动态创建菜单项,点击菜单,效果如下图。

上传图片

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.表单插件.动态创建菜单

【应用场景】运行时,动态创建菜单。【注意事项】<1>此案例仅简单演示如何通过修改元数据的方式动态创建菜单,因为涉及到运行时修改元数据...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息