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. 终端检测HTTPS服务端

    nscurl --ats-diagnostics --verbose https:ssl.tianwensm.xyz

  2. c#项目架构搭建经验

    读过.Net项目中感觉代码写的不错(备注1)有:bbsMax(可惜唧唧喳喳鸟像消失了一样),Umbraco(国外开源的cms项目),Kooboo(国内做开源cms).本人狭隘,读的代码不多,范围也不广 ...

  3. 限制action所接受的请求方式或请求参数

    原文:http://www.cnblogs.com/liukemng/p/3726897.html 2.限制action所接受的请求方式(get或post): 之前我们在HelloWorldContr ...

  4. MultiWiiWinGUI 汉化版

    已经基本汉化完毕 下载

  5. getchar的利用

    /*以每行一个单词的形式打印其输入 */ getchar   putchar函数,是逐个打印和输入(逐个循环打印) #include <stdio.h> int main() { int ...

  6. union和union all有什么不同?

    union和union all有什么不同? 相同点:用来获取两个或者两个以上结果集的并集 不同点: union会自动去重,排序 union all没有去重,排序

  7. 面试 JavaWeb 部分

    1.Tomcat的优化经验 答:去掉对web.xml的监视,把jsp提前编辑成Servlet. 有富余物理内存的情况,加大tomcat使用的jvm的内存 2.HTTP请求的GET与POST方式的区别 ...

  8. 滚动轮播效果,.net 没得混看来只能去写js 了

    <!DOCTYPE html> <html> <head> <title> 滚动图片 </title> <style type=&qu ...

  9. 用canvas画环形圆形图片

    效果如图自动绘制不停歇 代码如下 var canvas = document.getElementById('myCanvas'),width = canvas.width,height = canv ...

  10. Win下,通过Jstack截取Java进程中的堆栈信息

    在Java软件的使用过程中,有时会莫名的出现奇怪的问题.而这些问题常常无法使用日志信息定位,这时我们就需要通过查看进程内部线程的堆栈调用关系来分析问题出在哪里. 举个例子,当我们在做某个操作时,莫名的 ...