客开UI插件按钮
比如现在有一个出货单的【信用重检】按钮,想要加入界面权限,让顾问同事决定谁不能点这个按钮
UI插件代码如下
using Newtonsoft.Json;
using System;
using UFIDA.U9.SCM.SD.ShipUIModel;
using UFSoft.UBF.UI.ControlModel;
using UFSoft.UBF.UI.Engine.Builder;
using UFSoft.UBF.UI.IView;
using UFSoft.UBF.UI.WebControlAdapter;
namespace UFIDA.U9.SCI.QXUIPlugIn
{
public class ShipMainUIFormUIPlugIn : UFSoft.UBF.UI.Custom.ExtendedPartBase
{
private ShipMainUIFormWebPart _part = null;
private void SetStatusMsg(string value)
{
_part.CurrentSessionState["StatusMsg"] = value;
}
public override void AfterRender(IPart Part, EventArgs args)
{
base.AfterRender(Part, args);
if (Part is ShipMainUIFormWebPart && Part.CurrentSessionState.ContainsKey("StatusMsg"))
{
string statusMsg = Part.CurrentSessionState["StatusMsg"]?.ToString();
Part.CurrentSessionState.Remove("StatusMsg");
if (!string.IsNullOrEmpty(statusMsg))
{
Part.ShowWindowStatus(statusMsg, true);
}
}
}
public override void AfterInit(IPart Part, EventArgs args)
{
base.AfterInit(Part, args);
_part = Part as ShipMainUIFormWebPart;
if (_part == null) return;
// 操作 增加【信用重检】按钮
// 实例化按钮
IUFButton btnItem = new UFWebButtonAdapter();
// 找到工具栏控件
IUFToolbar toolbar = (IUFToolbar)_part.GetUFControlByName(_part.TopLevelContainer, "Toolbar1");
// 将按钮添加到工具栏
btnItem = UIControlBuilder.BuilderToolbarButton(toolbar, "True", "BtnRecheckCreditLimit", "True", "True", 70, 28, "22", "", true, false, "", "", "6C3C553C-B981-8CE6-57AB-3EFB9FB517D7");
UIControlBuilder.SetButtonAccessKey(btnItem);
((UFWebToolbarAdapter)toolbar).Items.Add(btnItem as System.Web.UI.WebControls.WebControl);
btnItem.Text = "信用重检";
btnItem.UIModel = _part.Model.ElementID;
btnItem.Action = "RecheckCreditLimitClick";
btnItem.UFTabIndex = 48;
btnItem.AutoPostBack = true;
// 绑定按钮事件
btnItem.Click += new EventHandler(BtnRecheckCreditLimit_Click);
}
private void BtnRecheckCreditLimit_Click(object sender, EventArgs e)
{
if (_part == null) return;
_part.Model.ClearErrorMessage();
_part.DataCollect();
var record = _part.Model.Ship.FocusedRecord;
if (record == null || record.ID <= 0 || !record.Status.HasValue) return;
if (record.Status.Value == 1) return;
QXPubBP.JsonOper.Proxy.CommonProxy proxy = new QXPubBP.JsonOper.Proxy.CommonProxy
{
OptType = "RecheckCreditLimit",
JsonData = JsonConvert.SerializeObject(new
{
ID = record.ID,
UIVersion = record.SysVersion
})
};
var res = proxy.Do();
_part.Action.NavigateAction.Refresh(null);
SetStatusMsg($"单号:{record.DocNo},信用重检完成{(string.IsNullOrEmpty(res.Msg) ? "!" : ":" + res.Msg)}");
}
}
}
SQL语句写入界面权限
UI插件的BuilderToolbarButton方法的第三个参数就是@BtnCtrlName
最后一个参数就是@BtnGuid
btnItem.Action就是@BtnActionName(一定要赋值,为''会关联出来系统一些别的动作)
@BtnDisplayName就是显示在界面权限的动作名,跟btnItem.Text保持一致
DECLARE @parentPartFullName NVARCHAR(255)='UFIDA.U9.SCM.SD.ShipUIModel.ShipMainUIFormWebPart' -- UI插件配置的parentPartFullName
declare @SNIndex bigint=202511100001 -- 年月日+4位流水
declare @BtnGuid nvarchar(50)='6C3C553C-B981-8CE6-57AB-3EFB9FB517D7' -- UI插件新增按钮给的guid
DECLARE @BtnCtrlName NVARCHAR(50)='BtnRecheckCreditLimit' -- UI插件按钮的控件名称
DECLARE @BtnActionName NVARCHAR(50)='RecheckCreditLimitClick' -- UI插件按钮的.Action值,代码里面不能给''(需唯一,可以跟@BtnCtrlName一样)
DECLARE @BtnDisplayName NVARCHAR(50)='信用重检' -- UI插件按钮的显示名称
DECLARE @UIControlUID NVARCHAR(50)
DECLARE @ResourceValueUID NVARCHAR(50)
-- 查询旧值,没有就NEWID(防止有些地方的关联是使用的UID,不使用旧值直接换一个NEWID会产生问题)
SELECT @UIControlUID=UID FROM UBF_MD_UIControl WHERE ID=@SNIndex+1
IF ISNULL(@UIControlUID,'')='' SET @UIControlUID=NEWID()
SELECT @ResourceValueUID=ResourceID FROM UBF_RES_ResourceValue WHERE ResourceName=@BtnGuid AND LanguageName = 'zh-CN'
IF ISNULL(@ResourceValueUID,'')='' SET @ResourceValueUID=NEWID()
-- 清空旧值
DELETE UBF_MD_UIAction WHERE UID=@BtnGuid
DELETE UBF_MD_UIAction_Trl WHERE ResourceName=@BtnGuid
DELETE UBF_MD_UIControl WHERE ID=@SNIndex+1
DELETE UBF_MD_UIEvent WHERE ID=@SNIndex+2
DELETE FROM UBF_RES_ResourceValue WHERE ResourceName=@BtnGuid AND LanguageName = 'zh-CN'
declare @UIFormID bigint
declare @UIFormUID nvarchar(50)
declare @UIModel bigint
declare @UIModelUID nvarchar(50)
select @UIFormID=A.ID,@UIFormUID=A.UID,@UIModelUID=A.[DataSource],@UIModel=A1.ID
from UBF_MD_UIForm AS A
INNER JOIN UBF_MD_UIModel AS A1 ON A1.UID=A.[DataSource]
where A.ClassName=@parentPartFullName
-- 动作表
INSERT INTO UBF_MD_UIAction(ID, UID, Name, CreatedBy, CreatedOn, ModifiedBy, ModifiedOn, UIModel, Container, GroupName)
VALUES(@SNIndex, @BtnGuid, @BtnActionName, 'SQL', GETDATE(), 'SQL', GETDATE(), @UIModel, @UIModelUID, 'Cust')
-- 控件表
INSERT INTO UBF_MD_UIControl(ID, UID, Name, Container, UIForm, ControlType, ParentControl, IsBinding, UIView, UIField, CreatedBy, CreatedOn, ModifiedBy, ModifiedOn, RefType, Visible)
VALUES(@SNIndex+1, @UIControlUID, @BtnCtrlName, @UIFormUID, @UIFormID, 'Button', null, 0, null, null, 'SQL', GETDATE(), 'SQL', GETDATE(), null, 1)
-- 事件表
INSERT INTO UBF_MD_UIEvent(ID, Name, ActionName, CreatedBy, CreatedOn, ModifiedBy, ModifiedOn, UIControl, Container)
VALUES(@SNIndex+2, 'Click', @BtnActionName, 'SQL', GETDATE(), 'SQL', GETDATE(), @SNIndex+1, @UIControlUID)
-- 资源表
INSERT INTO UBF_RES_ResourceValue(LanguageName, ResourceName, Status, Description, DisplayName, Type, Help, ComponentID, ParentHelpResourceName, ResourceID, ParentResourceName)
VALUES('zh-CN', @BtnGuid, 'T', @BtnDisplayName, @BtnDisplayName, 'UimUIActionInfo', null, @UIModelUID, null, @ResourceValueUID, null)
执行后效果

效果动图展示

评论 (0)