插件二开:如何在移动端 动态创建控件及字段

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

插件二开:如何在移动端 动态创建控件及字段

一、概述:

     本篇将介绍如何在移动端动态创建控件/字段。


二、应用场景:

    用于表单上的字段或控件不固定,需要动态创建的情况。


三、详细介绍:

以下是一个简单示例:

3.1  创建一个移动表单,增加一些固定字段和控件,然后拖一个流式布局控件作为动态控件及字段的容器,标识为“FFlowCustomControl”,大概设计如下:

  

3. 2. 动态字段:创建一个 折叠控件,里面有一个文本字段,效果如下:


参考代码如:

using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.ControlElement;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Mobile.Metadata.ControlElement;
using Kingdee.BOS.Mobile.PlugIn;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using System;

namespace BOS.Demo.MobilePlugIn
{
    /// <summary>
    /// 移动表单继承:AbstractMobilePlugin, 移动单据继承:AbstractMobileBillPlugin, 移动单据列表继承:AbstractMobileListPlugin
    /// </summary>
    [System.ComponentModel.Description("移动表单插件 - 动态创建控件/字段")]
    public class MForm_CreateControls : AbstractMobilePlugin
    { 
        private BusinessInfo _myBusinessInfo; 
        private LayoutInfo _myLayoutInfo; 

        /// <summary>
        /// 设置元数据
        /// </summary>
        /// <param name="e"></param>
        public override void OnSetBusinessInfo(SetBusinessInfoArgs e)
        {
           //创建当前业务元数据副本,避免并发时修改当前元数据导致共享的原始元数据发生改变导致错误
           _myBusinessInfo = (BusinessInfo)ObjectUtils.CreateCopy(this.View.OpenParameter.FormMetaData.BusinessInfo);
           _myLayoutInfo = (LayoutInfo)ObjectUtils.CreateCopy(this.View.OpenParameter.FormMetaData.GetLayoutInfo());

           //1.创建 字段1
           TextField field1 = new TextField();
           field1.Key = "FField1";
           field1.PropertyName = "FField1";
           field1.FieldName = "FField1";
           field1.Name = new LocaleValue("字段1");
           field1.EntityKey = "FBillHead";
           //2.添加字段到 BusinessInfo,多个字段,重复1和2
           _myBusinessInfo.Add(field1);
          //强制重构动态实体定义
           _myBusinessInfo.GetDynamicObjectType(true);
           
           e.BusinessInfo = _myBusinessInfo;
           e.BillBusinessInfo = _myBusinessInfo;
        }

        /// <summary>
        /// 设计布局
        /// </summary>
        /// <param name="e"></param>
        public override void OnSetLayoutInfo(SetLayoutInfoArgs e)
        {
            //动态控件/字段所在的布局,用于前端指令的布局数据
            LayoutInfo controlLayout = new LayoutInfo();
            //折叠控件
            AccordionPanelAppearance accordionPanel = new AccordionPanelAppearance();
            accordionPanel.Container = "";
            accordionPanel.Key = "MyCollapse";
            accordionPanel.Caption = new LocaleValue("动态折叠控件");
            accordionPanel.Height = new LocaleValue("120");
            accordionPanel.Width = new LocaleValue("320");
            accordionPanel.Tabindex = 0;
            //添加折叠控件到布局
            controlLayout.Add(accordionPanel);
            _myLayoutInfo.Add(accordionPanel);
            
            //字段1 外观
            var field1 = _myBusinessInfo.GetField("FField1");
            TextFieldAppearance field1App = new TextFieldAppearance();
            field1App.Key = field1.Key;
            field1App.Caption = new LocaleValue("动态字段");
            field1App.Height = new LocaleValue("21");
            field1App.Width = new LocaleValue("300");
            field1App.LabelWidth = new LocaleValue("100");
            field1App.Margin = "10,5,10,5";//外边距
            field1App.Container = accordionPanel.Key;//容器为 折叠控件
            field1App.Field = field1;
            field1App.Style = 4;//下划线;
            field1App.Tabindex = 1;
            field1App.EmptyText = new LocaleValue("请输入");//为空提示
            //添加字段1到布局
            controlLayout.Add(field1App);
            _myLayoutInfo.Add(field1App);
            //重新赋值布局元数据
            e.LayoutInfo = _myLayoutInfo;

            //发送前端指令, 
            //FFlowCustomControl 为表单中已有的流式布局,动态控件/字段的容器
            Container container=this.View.GetControl<Container>("FFlowCustomControl");
            container.AddControls(controlLayout); 
        }

        public override void AfterBindData(EventArgs e)
        {
            //折叠控件展开
            this.View.GetControl("MyCollapse").SetCustomPropertyValue("showStyle", 1);
        }
    }
}


3. 3. 编译组件,放入站点的bin目录,然后注册到移动表单中:

注:PC单据 动态创建字段和控件/移动端类似,只是字段或控件不同

插件二开:如何在移动端 动态创建控件及字段

一、概述: 本篇将介绍如何在移动端动态创建控件/字段。二、应用场景: 用于表单上的字段或控件不固定,需要动态创建的情况。三...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息