【065】客开插件按钮加入界面权限
侧边栏壁纸
  • 累计撰写 70 篇文章
  • 累计收到 2 条评论

【065】客开插件按钮加入界面权限

竹秋廿九
2025-11-10 / 0 评论 / 27 阅读 / 正在检测是否收录...

客开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)

执行后效果

image.png

效果动图展示

PixPin_2025-11-10_20-19-04

0

评论 (0)

取消