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, , );//一般为从左往右按钮个数乘以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", , , "", "", 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, , , System.Web.UI.WebControls.Unit.Pixel(), System.Web.UI.WebControls.Unit.Pixel(), 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, , , 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.最后运行下单据效果

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

  1. 插件开发--BE插件开发

    U9的插件主要分为3种,即(1)BE插件(2)UI插件(3)BP/SV插件 1.新建类库解决方案 2.新建插件类,并引用以下dll,UBF安装目录U9.VOB.Product.UBF\UBFStudi ...

  2. 【eclipse插件开发实战】Eclipse插件开发4——插件JDE、PDE开发方式及plugin.xml配置文件结构

    Eclipse插件开发4--插件JDE.PDE开发方式及plugin.xml配置文件结构 开发方式分为:java开发环境JDE开发插件的方式和插件开发环境PDE开发插件方式. 插件通过添加到预定义的扩 ...

  3. Chrome插件开发,美化网页上的文件列表。chrome-extension,content-scripts

    趁着2018年还剩最后几天,发几篇博客,荒废太久了,惭愧. 最近也是需求驱动,研究了下Chrome插件开发.来看一下我们公司运维提供的日志查看页面 所有项目的日志都参杂在一起,每次去找都很痛苦.慢慢发 ...

  4. Fiddler 插件开发,使用 WPF 作为 UI 控件

    Fiddler 插件的 UI,本身使用的 WinForm,这个例子是使用 WinForm 中的 WPF 容器,将 WPF 控件作为 Fiddler 插件的 UI 使用. 为什么使用 WPF ?为了自适 ...

  5. jquery ui 中的插件开发

    1  $.widget() 必须引用 <script src=")" type="text/javascript"></script> ...

  6. rcp(插件开发)org.eclipse.ui.decorators 使用

    org.eclipse.ui.decorators这个扩展点可以为对应的节点添加不同的图标显示. 使用方式都差不多,以下就转载一下使用方式: 1.添加扩展点 org.eclipse.ui.decora ...

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

    目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...

  8. openfire spark 二次 开发 服务插件

    ====================  废话 begin   ============================ 最近老大让我为研发平台增加即时通讯功能.告诉我用comet 在web端实现即 ...

  9. Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)

    Cloudera Manager.CDH零基础入门.线路指导http://www.aboutyun.com/thread-9219-1-1.html(出处: about云开发) 问题导读:1.什么是c ...

随机推荐

  1. git安装及命令使用和github网站

    最近参与别人的github项目时,学习了git的使用,首先需要在https://github.com/网站上注册账号和邮箱,然后fork一个开源项目,然后下载目前Windows下最新版本的git,下载 ...

  2. 编辑word文档过程中输入法无法正常使用

    编辑word文档过程中输入法无法正常使用怎么办??有的朋友在使用Word 2010过程中,遇到了这样的问题.每次打开word文档,程序就自动变成英文输入法,中文输入法就退出了,特别是搜狗输入法.即使在 ...

  3. 在virtualbox中安装CentOS-7

    当初才接触linux的时候,因为条件限制,只能在虚拟机中安装linux系统使用,由于是小白,爬了好多坑.于是决定写一篇关于在虚拟机中安装linux系统的博客.一是为了巩固自己的知识,二是希望能够对新手 ...

  4. ListView遍历每个Item出现NullPointerException的异常

    在使用ListView过程中我们有时候需要遍历取得每个Item项中的一些数据(比如每个Item里面有TextView,需要获取它的文本等等),但是我们在遍历过程中经常会遇到NullPointerExc ...

  5. Server.MapPath和Request.PhysicalApplicationPath的异同

    很多人对它们都不陌生,在众多的WEB程序中,使用Server.MapPath和Request.PhysicalApplicationPath来操作目录/文件的几率参半,我曾经也经常混用,然而时间久了. ...

  6. sqlserver查询数据的所有表名和行数

    //查询所有表明 select name from sysobjects where xtype='u' select * from sys.tables //查询数据库中所有的表名及行数 SELEC ...

  7. Android例子源码非第三方实现根据字母排序的城市列表

    values 下dimens.xml <resources> <!-- Default screen margins, per the Android Design guidelin ...

  8. Zend框架设置数据库连接编码为utf8三种方法

    第一种:$conn['host'] = '127.0.0.1';$conn['username'] = '56_' . $tenant['tenant'];$conn['password'] = $t ...

  9. 基于Session的国际化实现

    如何将我们网站的其它内容(如菜单.标题等)做国际化处理呢?这就是本篇要将的内容—>国际化. 在项目的spring.xml文件添加的内容如下 <mvc:interceptors> &l ...

  10. ubuntu下安装JDK并搭建activeMQ

    1.安装JDK,网上有人说activeMQ支持持JDK1.7及以上版本,未实际测试,保险起见我这里直接安装JDK1.7. #apt-get install openjdk--jdk 2.设置环境变量 ...