插件开发-UI插件开发

1.新建类库解决方案,引入命名空间,同时引入要添加UI Form的WebPart(在Portal\UILib目录下)

2.继续UFSoft.UBF.UI.Custom.ExtendedPartBase,重写AfterInit()方法,代码如下,便于添加下拉列表按钮,在原单据中UI先新增一下拉按钮;添加按钮绑定的父控件,如本例中的下拉列表控件,可以UBF设计工具中的控件名属性ID来查找,本例中绑定的下拉列表按钮:DropDownButton2,若是系统标准的单据,建议查看系统的源码生成的ID相匹配

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UFSoft.UBF.UI.ControlModel;
using UFSoft.UBF.UI.Engine.Builder;
using UFSoft.UBF.UI.MD.Runtime.Common;
using UFSoft.UBF.UI.WebControlAdapter;
using UFSoft.UBF.UI.WebControls;

namespace GiftDocUIPlug
{
    class GiftDocUIPlugExtend : UFSoft.UBF.UI.Custom.ExtendedPartBase
    {
        private Homa.test.ch01.GifDocUIModel.GiftDocUIFormWebPart webPart;

        public override void AfterInit(UFSoft.UBF.UI.IView.IPart Part, EventArgs args)
        {
            base.AfterInit(Part, args);

            if (Part == null || Part.Model == null)
            {
                return;
            }

            webPart = Part as Homa.test.ch01.GifDocUIModel.GiftDocUIFormWebPart;
            if (webPart == null)
            {
                return;
            }

            //功能区添加按钮
            //(1)实例化按钮
            IUFButton btnExportXLS = new UFWebButtonAdapter();
            btnExportXLS.Text = "导出XLS";
            btnExportXLS.ID = "btnExportXLS";
            btnExportXLS.AutoPostBack = true;
            //(2)加入功能栏Card中
            IUFCard card = (IUFCard)Part.GetUFControlByName(Part.TopLevelContainer, "Card0");
            card.Controls.Add(btnExportXLS);
            //(3)设置按钮在容器中的位置
            CommonHelper.Layout(card, btnExportXLS, 0, 0);//一般为从左往右按钮个数乘以2
            //(4)绑定按钮事件
            btnExportXLS.Click += new EventHandler(btnExportXLS_Click);

            //功能区下拉列表添加按钮
            //(1)实例化下拉按钮
            IUFMenu MenuPrintBatch = new UFWebMenuAdapter();
            MenuPrintBatch.ID = "btnDdlExportXLS";
            MenuPrintBatch.Text = "导出XLS";
            MenuPrintBatch.AutoPostBack = true;
            //(2)找到功能区对应的下拉列表按钮组
            IUFDropDownButton BtnOpreator = (IUFDropDownButton)webPart.GetUFControlByName(Part.TopLevelContainer, "DropDownButton2");
            //(3)将下拉按钮添加到对应的组
            MenuPrintBatch.ItemClick += new MenuItemHandle(btnExportXLS_Click);
            //(4)绑定按钮事件
            BtnOpreator.MenuItems.Add(MenuPrintBatch);

            //在工具栏上添加按钮
            //(1)实例化按钮
            IUFButton btnBatchMO = new UFWebButtonAdapter();
            btnBatchMO.ID = "btnBatchMO";
            btnBatchMO.AutoPostBack = true;
            //(2)找到工具栏控件
            IUFToolbar _Toolbar = (IUFToolbar)webPart.FindControl("Toolbar2");
            //(3)将按钮添加到工具栏
            btnBatchMO = UIControlBuilder.BuilderToolbarButton(_Toolbar, "True", "btnBatchMO", "True", "True", 45, 28, "19", "", true, false, "36BA88E0-FC28-402e-B9BA-3745A6771687", "36BA88E0-FC28-402e-B9BA-3745A6771687", "9307E981-85AA-4f19-ADB7-340D159F4A01");
            UIControlBuilder.SetButtonAccessKey(btnBatchMO);
            btnBatchMO.UIModel = Part.Model.ElementID;
            btnBatchMO.Action = "";
            btnBatchMO.Text = "导出XLS";
            ((UFWebToolbarAdapter)_Toolbar).Items.Add(btnBatchMO as System.Web.UI.WebControls.WebControl);
            //(4)绑定按钮事件
            btnBatchMO.Click += new EventHandler(btnExportXLS_Click);
        }

        private void btnExportXLS_Click(object sender, EventArgs e)
        {
            webPart.Model.ErrorMessage.Message = "你点击了UI插件按钮!";
        }

    }
}

插件代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UFSoft.UBF.UI.ControlModel;

namespace GiftDocUIPlug
{
    class CommonHelper
    {
        /// <summary>
        /// 设置控件在卡片容器中的布局
        /// </summary>
        /// <param name="container">卡片容器</param>
        /// <param name="ctrl">增加的控件</param>
        /// <param name="x">布局横坐标</param>
        /// <param name="y">布局纵坐标</param>
        public static void Layout(UFSoft.UBF.UI.ControlModel.IContainer container, UFSoft.UBF.UI.ControlModel.IUFControl ctrl, uint x, uint y)
        {
            Layout(container, ctrl, x, y, 1, 1, System.Web.UI.WebControls.Unit.Pixel(0), System.Web.UI.WebControls.Unit.Pixel(0), true);
        }

        /// <summary>
        /// 设置控件在卡片容器中的布局
        /// </summary>
        /// <param name="container">卡片容器</param>
        /// <param name="ctrl">增加的控件</param>
        /// <param name="x">布局横坐标</param>
        /// <param name="y">布局纵坐标</param>
        /// <param name="width">控件宽</param>
        /// <param name="height">控件高</param>
        public static void Layout(UFSoft.UBF.UI.ControlModel.IContainer container, UFSoft.UBF.UI.ControlModel.IUFControl ctrl, uint x, uint y, int width, int height)
        {
            Layout(container, ctrl, x, y, 1, 1, System.Web.UI.WebControls.Unit.Pixel(width), System.Web.UI.WebControls.Unit.Pixel(height), false);
        }

        /// <summary>
        /// 设置控件在卡片容器中的布局
        /// </summary>
        /// <param name="container">卡片容器</param>
        /// <param name="ctrl">增加的控件</param>
        /// <param name="x">布局横坐标</param>
        /// <param name="y">布局纵坐标</param>
        /// <param name="xspan">单元格横向跨度</param>
        /// <param name="yspan">单元格纵向跨度</param>
        /// <param name="width">控件宽</param>
        /// <param name="height">控件高</param>
        /// <param name="isAutoSize">是否自适应大小</param>
        public static void Layout(UFSoft.UBF.UI.ControlModel.IContainer container, UFSoft.UBF.UI.ControlModel.IUFControl ctrl, uint x, uint y, int xspan, int yspan,
            System.Web.UI.WebControls.Unit width, System.Web.UI.WebControls.Unit height, bool isAutoSize)
        {
            UFSoft.UBF.UI.Controls.IGridLayout gl = container.Layout as UFSoft.UBF.UI.Controls.IGridLayout;
            if (gl == null) return;
            UFSoft.UBF.UI.WebControls.GridLayoutInfo glInfo = new UFSoft.UBF.UI.WebControls.GridLayoutInfo((uint)x, (uint)y, (uint)xspan, (uint)yspan, width, height);
            glInfo.AutoSize = isAutoSize;
            gl.Controls.Add((System.Web.UI.Control)ctrl, glInfo);
        }

        public static IUFControl FindControl(UFSoft.UBF.UI.IView.IPart Part, string parentControl, string control)
        {
            IUFCard card = (IUFCard)Part.GetUFControlByName(Part.TopLevelContainer, parentControl);
            if (card == null)
                return null;

            foreach (IUFControl ctrl in card.Controls)
            {
                if (ctrl.ID.Equals(control, StringComparison.OrdinalIgnoreCase))
                {
                    return ctrl;
                }
            }
            return null;
        }

    }
}

CommonHelper类方法

3.配置文件
配置文件WebPartExtend以作为前缀命名,如本例中:WebPartExtend_GiftDocUIPlug.config,配置内容如下
主要配置ExtendedPart节点属性值
(1)parentPartFullName:引用的UIForm WebPart的dll
(2)extendedPartFullName:命名空间+类名

(3)extendedPartAssemblyName:程序集

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="WebPartExtend" type="UFSoft.UBF.UI.Custom.ExtendedPartSection, UFSoft.UBF.UI.FormProcess" />
  </configSections>
  <WebPartExtend>

      <ExtendedPart parentPartFullName="Homa.test.ch01.GifDocUIModel.GiftDocUIFormWebPart"
                  extendedPartFullName="GiftDocUIPlug.GiftDocUIPlugExtend"
                  extendedPartAssemblyName="GiftDocUIPlug.dll">
      </ExtendedPart>

  </WebPartExtend>
</configuration>

4.部署发布
(1)配置文件:拷贝至Portal根目录下
(2)dll文件拷贝至Portal\UILib目录下

5.最后运行下单据效果

时间: 2024-10-05 04:19:33

插件开发-UI插件开发的相关文章

插件开发--BE插件开发

U9的插件主要分为3种,即(1)BE插件(2)UI插件(3)BP/SV插件 1.新建类库解决方案 2.新建插件类,并引用以下dll,UBF安装目录U9.VOB.Product.UBF\UBFStudio\RuntimeUFSoft.UBF.Analysis.Exceptions.dllUFSoft.UBF.Business.dll并继续接口UFSoft.UBF.Eventing.IEventSubscriber 3.实现接口代码,以之前做过的礼品单据作为插件对象,则要引入礼品单据的BE的dll,

iOS平台第三方插件开发指导

IOS平台第三方插件开发指导 插件开发 http://ask.dcloud.net.cn/docs#http://ask.dcloud.net.cn/article/67  原出 技术架构 HTML5+ 基座扩展采用三层结构,JS层.PluginBridge层和Native层. 三层功能分别是: JS层: 在Webview页面调用,触发Native层代码,获取执行结果. PluginBridge层: 将JS层请求进行处理,触发Native层扩展插件代码. Native层: 插件扩展的平台原生代码

Word和WPS插件开发总结

为了实现办公的自动化,需要实现文档的自动流转.开发出的WORD和WPS插件的功能包括显示批注.隐藏批注.引入文件.附加对象.保存文档.退出应用. 1 Word插件开发 1.1 插件开发方法 1.1.1 开发语言 开发语言的选择,可以选择C++和C#. 1.1.2 Visual studio开发说明 Visual Studio 2010提供了各个版本Office的插件开发,新建工程-按照的模板-Visual C#-Office-2010,运行程序时其会调用本地安装的Office:文件-选项-加载项

一些关于jquery ui 的 跟插件开发

/* * @author wangshiping461 * @date 2015-10-13 * [滚动公告类型插件] * @param:Object * noticeGroup:[{ * notice_content:"http://www.baidu.com", * notice_name:"测试1", * message:"公告测试一", * type:"2", 1为滚动,2为直接弹出 * openType:"

jquery ui 中的插件开发

1  $.widget() 必须引用 <script src="@Url.Content("~/Scripts/jquery-ui-latest.js?v="+ViewBag.vv+"1")" type="text/javascript"></script> 2. (function ($) { $.widget("hw.CamScan", { options: { //插件的参数

妙味课堂Jquery从入门到插件开发到模拟视频教程 Jquery实战开发 Jquery UI

<jQuery课程 初级到高级到模拟>├<第一课:jQuery初级>│  ├01 妙味云课堂-jQuery简介.mp4│  ├02 妙味云课堂-jQuery设计思想之选择元素.mp4│  ├03 妙味云课堂-jQuery设计思想之写法.mp4│  ├04 妙味云课堂-jQuery设计思想之原生关系和链式操作.mp4│  ├05 妙味云课堂-jQuery设计思想之取值和赋值.mp4│  ├06 妙味云课堂-jQuery方法之filter not has.mp4│  ├07 妙味云课堂

Unity NGUI和UGUI与模型、特效的层级关系

目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 8.UGUI与模型和粒子特效穿插层级管理 写在前面 这篇笔记是整理了之前做的记录,在做项目的过程中,遇到了各种各样的界面穿插问题,界面层级混乱,比如,手机卡了或点快了,就导致两个界面相互交叉.对于界面,这应该算是一个很严重的bug,很大部分原因是整个UI框架没有从整体上考虑这个,后来决心弄清楚层级

Lync二次开发思路

Lync作为目前最为强大的企业及时通信工具,目前被众多大企业所使用(这里就废话去介绍了),其与硬件及自家产品的集成非常强大.但是其即时通信功能,尤其是国内的用户大多习惯了QQ的截图.消息记录.离线留言等功能,另外如何更好的与企业现有的业务系统进行整合,这都需要进行一定的开发工作. 通常Lync的开发技术路线有两种:一种是无UI开发模式,另一种是以插件形式(且称为有UI模式). 无UI模式:即自己重新开发Lync客户端界面,后台进程运行原有的Lync进程,通过Lync SKD去调用响应的模块. 有

Android的热修复-微信Tinker

作者:邓浩宸 11/9/2016 1:13:49 PM Android的热修复 前言: 随着时代的发展,由于公司的项目需要去求变化平凡计划总赶不上变化,H5的高灵活性,开发周期短,更新速度快H5以及一些混合开发越来越被看好,然而主要原因之一:这种混合开发的方式容错率大,更新和修复BUG快.不用发布版本就可以让用户不觉的情况下就更新对应的内容或者BUG,我们不能否认混合开发的快捷,正在此前提下热修复和热更新技术也得到了非常大的发展,不管热修复还是热更新,都是对app的内容或者逻辑变化做出像web页