.Net 平台应用与技巧
MRZ图表分组数据源过滤设计示例
平台应用类
OrBit平台Job配置
【序列号规则】插件使用说明
工单自定义流程节点应用说明
平台 【SVN 版本管理】工具使用说明
平台SPC应用介绍
平台WebAPI文件上传、下载(OrBitWebAPI2)
平台【元对象授权】功能使用说明
平台【分级授权】功能使用说明
平台【消息对象】使用说明
平台【表单消息升级】应用说明
平台可配置【 Excel 文件导出】功能使用说明
按产品定义采集功能使用说明
用户自定义编码及系统单据状态、单据类型的颜色配置
系统中如何增加用户密码过期更换提醒
通用在线打印功能使用说明
平台技巧类
MS-SQL 添加并引用 DLL 程序集
OrBit “自定义对话框”使用说明
Matrix标签打印(OrBitMESHelp/OrBitMetaHelp)
MES事务对象Scripter--扩展方法
MES事务帮助类OrBitMESHelp
WebView2管理类--用于展示看板
元对象Scripter--扩展方法
元对象帮助类OrBitMetaHelp
外挂Exc程序(发布为平台插件)---调用自定义对话框
自定义对话框--Xml/Json数据解析神器
OrBit-KanBan File 类型应用说明
OrBit-X 如何支持 Https 协议
OrBit-X 平台 Bartender 标签模板制作说明
OrBit-X 平台元对象多文件上传、预览
OrBit-X 平台内置 WebAPI 使用说明
OrBit-X 应用打包-扩展工具-快捷迁移
OrBit平台“调用摄像头拍照、录制视频,并上传FTP”窗体控件的应用
元对象可配置Excel导入功能应用说明
元对象嵌入看板
基于 Json 数据格式的 Mrt 模板设计说明
如何利用 Bartender 标签模板实现一拖几打印
平台 Excel 对象导入功能应用说明
平台 MES 事务对象实现网格多选效果
平台 WebAPI 应用说明
平台中 Mrz 模板实现钻取功能
平台发布接口(OrBitWebAPI&OrBitWebAPI2)
平台通过 CLR 实现企业微信消息及文件自动推送
标签/报表实现只预览不打印
通过平台 Web 服务实现远端 Wifi 打印说明
静态事务“平铺按钮”控件的应用
静态事务”调用摄像头扫码识别条码(条形码/二维码)“功能的应用与实现
钉钉机器人接口实现及其他API扩展
-
+
首页
OrBit “自定义对话框”使用说明
# 一、概述 :fa-arrow-right: 在实际应用中,特别是对单据的操作,需要批量操作(**比如:插件“采购送货单”中,“添加送货明细”按钮来实现批量添加明细功能**)。目前平台中提供了自定义对话框,包含一些的常见的样式,大家根据实际选择所需的自定义对话框。 **:fa-arrow-right: 由于此控件一直在更新,所支持的功能以实际文字描述为准,界面布局可能稍有差异,请以实际为准** **:fa-arrow-right: 软件包:** 1.应用程序包(插件 --“自定义对话框”) [【附件】OrBitUserDialog_Plugin_20240416.oap](/media/attachment/2024/04/OrBitUserDialog_Plugin_20240416.oap) ------------ 2.服务器插件目录dll(R16/R15/R13) [【附件】OrBitUserDialog_20240710.zip](/media/attachment/2024/07/OrBitUserDialog_20240710.zip) ------------ 注意: ① oap文件是用于升级“自定义对话框”插件,是插件; ② dll是更新服务器的插件目录的,是插件目录; ③ oap与dll要同时更新,这是一对,一定要注意、注意、注意!!! ④ 升级后,请把客户端退出,然后重新登录,一定要注意、注意、注意!! ------------ ### 1.样式。目前总共支持 10大样式(元对象、MES事务对象) **样式1(单表结构)---基础样式**: ![](/media//202102/2021-02-23_160957.png) **样式1(单表结构。变体-无网格)**: ![](/media//202304/2023-04-20_143822.png) **样式2(上下结构)---基础样式**: ![](/media//202102/2021-02-23_161044.png) **样式3(左右结构-下面板)---基础样式**: ![](/media//202102/2021-02-23_161142.png) **样式4(2个tab:上下结构、左右结构-下板面)---由基础样式组合的扩展样式**: ![](/media//202102/2021-02-23_161256.png) **样式5(2个Tab:单表结构、单表结构)---由基础样式组合的扩展样式**: **样式6(2个Tab:上下结构、上下结构)---由基础样式组合的扩展样式**: **样式7(2个Tab:左右结构-下面板、左右结构-下面板)---由基础样式组合的扩展样式**: **样式8(左右结构-上面板)---基础样式**: ![](/media//202208/2022-08-24_111147.png) **样式9(2个Tab:左右结构-上面板、左右结构-上面板)---由基础样式组合的扩展样式**: ![](/media//202208/2022-08-24_143442.png) **样式10(2个Tab:上下结构、左右结构-上面板)---由基础样式组合的扩展样式**: ![](/media//202208/2022-08-24_143540.png) 支持定义按钮 ![](/media//202401/2024-01-16_161532.png) # 二、案例 ### 1.采购送货单 ![](/media//202103/2021-03-19_103102.png) ### 2.送货申请单 ![](/media//202103/2021-03-19_103222.png) ------------ # 三、元对象 实现步骤 ### 1、插件目录添加OrBitUserDialog.dll文件 ### 2、系统参数里添加参数(存在则不需要) ![](/media//202102/2021-02-23_161801.png) ### 3、定义一个对话框参数 ![](/media//202106/2021-06-07_111522.png) ![](/media//202205/2022-05-10_105843.png) #### 3.1、说明 :fa-hand-o-right: 1).提交存储过程 的参数按 **元对象方法的参数**编写,网格数据最终提交给@I_Parameter字段。 1.1)如果要把自定义对话框A网格查询参数传给存储过程,也是可以的,只要存储过程参数添加上字段就可以用;如果是2个网格的关联结构,可以通过@ParentGridRowId或@I_ParentGridRowId字段 接收父级网格的行Id(第1列字段) ![](/media//202106/2021-06-07_123343.png) :fa-hand-o-right: 2).删除存储过程(可选)。用于网格上的“删除按钮”,主要用于删除后台数据,如果不需要,则不用指定。删除存储过程的参数如下: ```sql -- ============================================= -- Author: <OrBit Team Orbchay HH0102> -- Create date: <2022/02/16 14:33:53:0902> -- Description: <测试:自定义对话框中,网格上的删除按钮对应的存储> -- Rev: 15.00 -- Update comment: -- Update date: -- ============================================= ALTER PROCEDURE [dbo].[UDialog_TestDelete] @I_ReturnMessage nvarchar(max)='' output, --返回的信息,支持多语言 @I_LanguageId char(1)='1', --客户端传入的语言ID @I_PlugInCommand varchar(5)='', --插件命令 @I_OrBitUserId char(12)='', --用户ID @I_OrBitUserName nvarchar(100)='', --用户名 @I_ResourceId char(12)='', --资源ID(如果资源不在资源清单中,那么它将是空的) @I_ResourceName nvarchar(100)='', --资源名 @I_PKId VARCHAR(MAX)='', --主键 @I_ParentPKId char(12)='', --用于过滤的上级主键 @I_Parameter nvarchar(100)='', --插件参数 --************以上为平台的标准参数************* @ParentGridRowId NVARCHAR(50)='', --父级网格行Id。有2个网格时,这里才有值 @GridRowId NVARCHAR(50)='' --选中的网格行Id。请注意:如果网格有删除按钮,网格的第一列要是数据的行Id。这个参数只会接收第一列 AS BEGIN -- This Stored Procedure is created by OrBit-MetaObject engine SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED --SET @I_ReturnMessage='ServerMessage:禁止删除!'+@GridRowId --RETURN -1 --提示 --SET @I_ReturnMessage='ServerMessage:删除成功!'+@GridRowId --RETURN 0 --不提示 RETURN 0 END ``` :fa-hand-o-right: 3) .A网格存储过程参数如下(除了固定参数,可以增加自定义参数,会自动生成A网格查询面板参数): 3.1) A网格存储过程提示信息,return_value>=0 时,冒泡提示;return_value<0,弹窗报错 ```sql -- ============================================= -- Author: <OrBit Team Orbchay HH0102> -- Create date: <2022/04/09 15:28:31:3430> -- Description: <来料检验(IQC):NCR-发起8D报告 --查询> -- Rev: 15.00 -- Update comment: -- Update date: -- ============================================= ALTER PROCEDURE [dbo].[UDialog_IQCCheck_NCR_8DReport_Query] @I_Sender NVARCHAR(200)='', --客户端执行按钮 @I_ReturnMessage NVARCHAR(MAX)='' OUTPUT, --返回的信息,支持多语言 @I_ExceptionFieldName NVARCHAR(100)='' OUTPUT, --向客户端报告引起冲突的字段 @I_LanguageId CHAR(1)='1', --客户端传入的语言ID @I_PlugInCommand VARCHAR(5)='', --插件命令 @I_OrBitUserId CHAR(12)='', --用户ID @I_OrBitUserName NVARCHAR(100)='', --用户名 @I_ResourceId CHAR(12)='', --资源ID(如果资源不在资源清单中,那么它将是空的) @I_ResourceName NVARCHAR(100)='', --资源名 @I_PKId CHAR(12)='', --主键ID @I_ParentPKId CHAR(12)='', --父元对象主键ID @QueryParameter NVARCHAR(100)='', --******以上为固定参数****** @MakeAffect NVARCHAR(MAX)='' ``` ![](/media//202210/2022-10-17_172920.png) :fa-hand-o-right: 4) .B网格存储过程参数如下:(除了固定参数,可以增加自定义参数,用于接收A网格查询面板参数): 4.1) B网格存储过程提示信息,return_value>=0 时,冒泡提示;return_value<0,弹窗报错 ```sql -- ============================================= -- Author: <OrBit Team Orbchay HH0102 > -- Create date: <2020/07/14 14:49:07:3417> -- Description: <送货单 之 选择 采购订单明细> -- Rev: 15.00 -- Update comment: -- Update date: -- ============================================= ALTER PROCEDURE [dbo].[UDialog_VendorDelivery_POItemByPO] @I_Sender NVARCHAR(200)='', --客户端执行按钮 @I_ReturnMessage NVARCHAR(MAX)='' OUTPUT, --返回的信息,支持多语言 @I_LanguageId CHAR(1)='1', --客户端传入的语言ID @I_PlugInCommand VARCHAR(5)='', --插件命令 @I_OrBitUserId CHAR(12)='', --用户ID @I_OrBitUserName NVARCHAR(100)='', --用户名 @I_ResourceId CHAR(12)='', --资源ID(如果资源不在资源清单中,那么它将是空的) @I_ResourceName NVARCHAR(100)='', --资源名 @I_PKId CHAR(12)='', --主键ID @I_ParentPKId CHAR(12)='', --父元对象主键ID @QueryParameter NVARCHAR(100)='' --******以上为固定参数****** ``` :fa-hand-o-right: 5) .标签文件存储过程参数,与平台一致,同时支持接收超级对话框参数: ```sql -- ============================================= -- Author: <OrBit Team Orbchay;HH0102;Gu> -- Create date: <2024/01/10 13:45:35:9752> -- Description: <自定义对话框框:标签动态打印> -- Rev: 16.00 -- Update comment: -- Update date: -- ============================================= ALTER PROCEDURE [dbo].[GetLabel_TestPrint] @I_LanguageId CHAR(1)='1', --客户端传入的语言ID @I_PlugInCommand VARCHAR(5)='', --插件命令 @I_OrBitUserId CHAR(12)='', --用户ID @I_OrBitUserName NVARCHAR(100)='', --用户名 @I_ResourceId CHAR(12)='', --资源ID(如果资源不在资源清单中,那么它将是空的) @I_ResourceName NVARCHAR(100)='', --资源名 @I_PKid CHAR(12) = '', --主键 @I_ParentPKId CHAR(12)='', --父级主键 --****************【 以上是平台固有参数 】***************** @I_Sender NVARCHAR(50)='', @I_Parameter NVARCHAR(MAX)='', --网格数据,与“提交存储”一致 @I_ParentGridRowId VARCHAR(MAX)='', --父网格行Id,与“提交存储”一致。用@ParentGridRowId也行 @I_TabIndex INT=1, --Tab页签号,与“提交存储”一致。用@TabIndex也行 @I_UDBtnName NVARCHAR(50)='', --自定义对话框按钮名:包括默认的提交按钮(“btn_Submit”)、自定义按钮(A网格存储过程参数,以“btn_”开头或结尾的参数生成按钮) --****************【 以上为对话框固有参数(可选),参照“提交存储”用法 】***************** @MOName NVARCHAR(50)='', @LotSN NVARCHAR(100)='' --****************【 以上为对话框界面参数(可选),参照“提交存储”用法 】***************** AS ``` :fa-hand-o-right: 6) .值列表支持_ViewList、_ViewListPK、_ViewListEx、_ViewWindow、_ViewWindowPK。注意_ViewWindow、_ViewWindowPK存储过程参数是 一样的 :fa-hand-o-right: 7) .支持全屏显示 :fa-hand-o-right: 8) .支持长宽比例设置 :fa-hand-o-right: 9) .支持关闭窗体刷新树视图 :fa-hand-o-right: 10) .支持提示信息,包括指定存储过程(存储过程返回值 大于等于0,且有返回信息,则提示是否继续(是、否),否则则直接弹出对话框;小于0,则提示报错提示信息,并返回) :fa-hand-o-right: 11) .具体每种样式的网格支持什么功能,请看具体例子 :fa-hand-o-right: 12) .支持预览功能,配置好后可以直接预览; :fa-hand-o-right: 13) .支持界面拖动自动调整对话框长宽比例。点击“对话框预览”,拖动边框界面界面大小调整,界面调整过程中会自动保存。这个特别适用于需要调整对话框大小的场景(几乎所有对话框都需要调整,因为界面显示的内容有多有少,为了更美观,所以可调整对话框调小)。也支持手动调整(直接修改,只是麻烦,因为不知道要调整多大) :fa-hand-o-right: 14) .含A、B网格的表单,支持拖动自动调整A网格区域的所占百分比,无需在人工输入调整了。 :fa-hand-o-right: 15) .支持打包功能。由于自定义对话框支持的功能太多太多了,导致配置参数也多,如果想把一个数据库的配置参数搞到另外一个数据库,就很麻烦,因此,提供了数据打包功能,通过此功能,可以对配置数据、存储过程 进行打包,以免进行迁移 :fa-hand-o-right: 16) .支持使用位置查询。可以查询此对话框在哪里使用(哪个元对象?哪个MES事务对象) :fa-hand-o-right: 17) .支持“关闭窗体是否警告?”控制 :fa-hand-o-right: 18) .解析神器:对话框-解析(Xml/Json) :fa-hand-o-right: 19) .解析神器:SQL语句/存储–解析(Xml/Json) :fa-hand-o-right: 20) .支持事件依赖注入,比如窗体加载事件、单元格值变化事件、窗体关闭事件、提交按钮执行前置事件 :fa-hand-o-right: 21) .增加全局搜索功能(各种对话框风格都增加了),用于对话框数据全局快速搜索,使用更便捷。如果是2个网格,鼠标先点击要搜索的网格,再在搜索框输入; :fa-hand-o-right: 22) .新增bit类型可编辑列批量操作:支持列 单元格 批量设置、支持多列 bit类型 单元格批量设置、支持列头全设置操作。无需配置,自动支持 :fa-hand-o-right: 23) .单面板显示自动计算窗体宽度、高度并设置(隐藏网格时为单面板) :fa-hand-o-right: 24) .提交按钮控件宽度 自动调整(根据文本宽度) :fa-hand-o-right: 25) .支持 滚动到顶行、滚动到底行 功能(为了方便快速选择) :fa-hand-o-right: 26) .复制、粘贴功能( 1、新增:复制快捷键 Ctrl+C 2、新增:批量粘贴1,可以给多个单元格粘贴相同值,实现大批量快速编辑。(可用鼠标右键菜单粘贴、或Ctrl+V键) 3、新增:批量粘贴2,可以把Excel表格数据直接复制粘贴到网格上,实现大批量快速编辑。(可用鼠标右键菜单粘贴、或Ctrl+V键) 4、新增:单元格区域复制功能。网格上一个区域表格数据复制功能,为了方便快速复制粘贴(支持隔行隔列选择,自动组合成表格) 5、新增:单元格区域粘贴功能。网格上选择一个区域(比如2行2列,支持隔行隔列选择),快速粘贴数据(从其他地方复制的表格数据) ) :fa-hand-o-right: 27) .对话框打开时设置默认焦点(第一个可编辑控件) :fa-hand-o-right: 28) .网格右键Excel导出功能 :fa-hand-o-right: 29) .支持行数统计(勾选行数/行总数),如果是搜索,只统计搜索出来的数据; :fa-hand-o-right: 30) .支持“提交按钮”快捷键操作(Ctrl_+S) ------------ ### 4、给具体插件增加对话框(例子如下) #### 4.1、在“元字段建模”中,添加方法名 #### 4.1.1 以前版本,调用时需要传入对话框代码 ![](/media//202102/2021-02-23_162259.png) #### 4.1.2 新版本,调用时不需要对话框代码,版本号从23.5.16版本开始 ![](/media//202305/2023-05-16_110829.png) #### 4.2、在“元对象建模”中,勾选脚本,并引用OrBitUserDialog.dll ![](/media//202102/2021-02-23_162409.png) #### 4.3、在“元对象脚本”中,给具体方法名增加对话框 #### 4.3.1、样式1(单表结构样式) **1).A网格查询参数支持:** 1.1)ID隐藏; 1.2)值列表(同时支持值列表级联,可级联到查询面板上的值列表,也即可级联到网格字段的值列表;值列表同名匹配。支持5种值列表: _ViewList、_ViewListPK、_ViewListEx、_ViewWindow、_ViewWindowPK); 1.3)字段只读设置; 1.4)字段回车自动触发查询按钮; 1.5)字段设置默认值(A网格存储过程中返回2个select,第一个select刷新网格,第二个select 设置字段默认值); 1.6)支持自动查询功能。在输入数据时,自动从网格中过滤出满足条件的数据 1.7)支持“查询参数控件”多行显示,按每行列数定义,自动调整面板大小 1.8)支持“查询参数控件”列宽度定义,自动调整面板大小 1.9)支持“查询参数控件” 字段占用行数设置 1.10)值列表、值窗体控件 支持下拉选择后自动触发“查询按钮”; 1.11)文件控件(包括文件上传、下载、查看、删除),A网格存储过程输入参数包含以"FtpFile_"开头或以"_FtpFile"结尾的参数,会自动映射成文件上传控件(注意是一个字段,比如:@ProductCheck_FtpFile char(12) ); 1.12)支持定义按钮。A网格存储过程输入参数包含以"btn_"开头或以"_btn"结尾的参数,会自动映射成按钮控件,点击事件对应的存储过程为“默认提交按钮”,可以通过参数“@I_UDBtnName”判断具体是哪个按钮 1.13)支持字段非必须输入设置; 1.14)支持接收主视图(元对象主视图/MES事务界面)参数值,相同字段名接收; **2).A网格支持:** 2.1)可编辑列(配置界面); 2.2)不可编辑单元格(一列数据中,有个单元格可编辑,有的不可编辑),注意:要设置此功能,首选要先设置“可编辑列”(2.1)。存储过程返回列包含NotEditCellControlId(例如:SELECT IsRowBtn,CheckQty,CheckValue,Remark,NotEditCellControlId FROM @OutPut);多个不可编辑单元格请按分号隔开,例如: ![](/media//202204/2022-04-19_103247.png); 2.3)Id隐藏; 2.4)列冻结(配置界面); 2.5)值列表(支持5种值列表_ViewList、_ViewListPK、_ViewListEx、_ViewWindow、_ViewWindowPK); 2.6)值列表同名匹配; 2.7)值列表级联1(A网格查询参数级联到网格上的值列表) 2.8)值列表级联2(网格上的字段值 可以给网格上的值列表进行数据级联),值列表级联2 优先级大于 值列表级联1(只能使用一种) 2.9)值列表过滤(网格上的字段值 可以给网格上的值列表进行数据过滤) 2.10)行多选(多行选择的字段名IsRowSelect,数据类型为bit,比如:SELECT CAST(0 AS BIT) AS IsRowSelect...,字段位置放在第一列) 2.11) 行单选(只能勾选一个,单选的字段名IsRowSelectA,数据类型为bit,比如:SELECT CAST(0 AS BIT) AS IsRowSelectA...,字段位置放在第一列) 2.12)行添加/删除/复制 按钮(字段名为IsRowBtn,支持批量操作-鼠标右键,比如:SELECT '' as IsRowBtn,CAST(0 AS BIT) AS IsRowSelect...); 2.13)行删除 按钮(字段名为IsRowBtnA,支持批量操作-鼠标右键,比如:SELECT '' as IsRowBtnA,CAST(0 AS BIT) AS IsRowSelect...); 2.14)行新增 按钮(字段名为IsRowBtnB,支持批量操作-鼠标右键,比如:SELECT '' as IsRowBtnB,CAST(0 AS BIT) AS IsRowSelect...); 2.15)行复制 按钮(字段名为IsRowBtnC,支持批量操作-鼠标右键,比如:SELECT '' as IsRowBtnC,CAST(0 AS BIT) AS IsRowSelect...); 2.16)支持“行复制”按钮 不复制字段的功能(指定复制时哪些字段不复制)。在“自定义对话框”配置界面指定就行 2.17)支持“行删除”按钮 指定存储过程功能(相应的逻辑判断),用于删除后台数据 2.18)颜色设置(ColorControlId字段,与平台定义相同); 2.19)列宽度定义(系统参数“[Column Width]”,与平台定义相同); 2.20)支持隐藏网格。隐藏网格,即不使用网格。 2.21)支持行勾选列颜色高量显示 2.22)日期类型支持显示时间 2.23)支持文件上传、下载(右键)、查看(双击或右键)。每个文件以2列来实现(XXX_FtpFileId、XXX_FtpFile,即文件Id以“_FtpFileId”结尾,文件名以“_FtpFile”结尾),例子如下:SELECT 'FTP1000001TQ' AS AA_FtpFileId,'颜色控制.png' AS AA_FtpFile,'FTP1000001TQ' AS BB_FtpFileId,'颜色控制.png' AS BB_FtpFile 2.24)支持列合并单元格 2.25)日期类型,时间可输入时、分、秒 2.26)A网格存储过程提示信息,return_value>=0 时,冒泡提示;return_value<0,弹窗报错 2.27) 支持A网格 新行搜索功能。行头有一单独的行,用于搜索。 2.28)支持行删除按钮执行OK后,支持自动执行查询; 2.29)支持“批量选中多个行”进行勾选或反勾选(鼠标右键菜单。同时支持跨行选中勾选:Ctrl+鼠标左键点检选中)。在支持行多选时才能使用(IsRowSelect) 2.30)网格统计功能,统计函数包括Sum、Average、Count、Maximum、Minimum。支持按勾选行统计(IsRowSelect、IsRowSelectA),只统计勾选行的对应数据 2.32)网格支持行号显示,在配置界面进行配置 **3).“查询”按钮** 3.1)支持隐藏 3.2)支持返回数据 给“A网格查询参数”设置默认值(返回2个select,第一个select刷新网格、第二个select 设置默认值) 3.3)支持字段焦点设置; 3.4)支持查询提示信息; 3.5)支持获取元对象的多行PKID(请把存储过程参数@I_PKid的大小改为VARCHAR(MAX),多个PKID按';'隔开)。 ---这个属性只是对元对象 **4).“提交”按钮** 4.1)提交的数据是A网格(Json、xml),提交存储过程参数按元对象方法标准参数执行,**提交的数据传给存储过程的@I_Parameter参数,请注意把参数大小改成max**。 4.2)支持把**A网格查询参数**传给“提交的存储过程”(给存储过程的参数 加上A网格查询参数的字段即可,注意数据类型,类型不同无法传送成功); 4.3) 如果点击提交后,不想关闭窗体,也是可以的(比如有些场景,需要继续操作),规则如下:存储过程返回的整数(小于0代表失败,不会关闭窗体;等于0代表成功,会关闭窗体;大于0代表成功,不关闭窗体) 4.4)支持隐藏 提交按钮。有的场景下,并不需要提交按钮 4.5)支持获取元对象的多行PKID(请把存储过程参数@I_PKid的大小改为VARCHAR(MAX),多个PKID按';'隔开)。 ---这个属性只是对元对象 4.6)支持字段焦点设置; 4.5)支持标签打印。标签按平台方式设置,存储过程返回select即可触发打印。标签支持:静态标签 或 动态标签【动态标签文件存储过程】 4.6)数据提交时,只提交看得见的数据(通过筛选过滤掉的数据不提交,支持多条件筛选) 4.7)提交执行OK后,支持自动执行查询(前提是不关闭窗体); 4.8)提交执行OK后,支持是否刷新树视图控制(元对象); 4.9)提交存储过程 支持接收页签索引值(值为1、2),存储过程输入参数包含@TabIndex或@I_TabIndex,int类型),主要用于有2个页签的对话框。 4.10)提交存储过程 支持接收自定义对话框按钮名,包括默认的提交按钮(“btn_Submit”)、自定义按钮(A网格存储过程参数,以“btn_”开头或结尾的参数生成按钮),存储过程输入参数包含@I_UDBtnName,NVARCHAR(50)=''),主要用于自定义按钮,根据按钮名执行不同逻辑 4.11)提交按钮执行前置事件,写叫脚本代码; 4.12) “是否提交隐藏行数据?”控制(对网格进行数据搜索时,不满足条件时,数据行会自动隐藏),默认不提交; 脚本代码: ```csharp /// <summary> /// 容器中按钮通用触发事件 /// </summary> /// <param name="ButtonName">按钮名</param> public void ButtonClick(string ButtonName) { //以前版本 if(ButtonName=="dialog1") { OrBitUserDialog.Dialog.Show( Scripter, "XXX对话框"); } } ``` ```csharp /// <summary> /// 容器中按钮通用触发事件 /// </summary> /// <param name="ButtonName">按钮名</param> public void ButtonClick(string ButtonName) { //新版本。不用传代码,传入按钮名就行。如果有多个按钮,大部分情况写1行代码即可 //不用判断是哪个按钮 OrBitUserDialog.Dialog.ShowA(Scripter, ButtonName); } ``` ![](/media//202102/2021-02-23_170111.png) ![](/media//202108/2021-08-05_161837.png) #### 4.3.2、样式2(上下结构样式) **1).A网格查询参数支持:** 1.1)ID隐藏; 1.2)值列表(同时支持值列表级联,可级联到查询面板上的值列表,也即可级联到网格字段;值列表同名匹配。支持5种值列表:_ViewList、_ViewListPK、_ViewListEx、_ViewWindow、_ViewWindowPK); 1.3)字段只读设置; 1.4)字段回车自动触发查询按钮; 1.5)字段设置默认值(A网格存储过程中返回2个select,第一个select刷新网格,第二个select 设置字段默认值); 1.6)支持自动查询功能。在输入数据时,自动从网格中过滤出满足条件的数据; 1.7)支持“查询参数控件”多行显示,按每行列数定义,自动调整面板大小 1.8)支持“查询参数控件”列宽度定义,自动调整面板大小 1.9)支持“查询参数控件” 字段占用行数设置 1.10)值列表、值窗体控件 支持下拉选择后自动触发“查询按钮”; 1.11)文件控件(包括文件上传、下载、查看、删除),A网格存储过程输入参数包含以"FtpFile_"开头或以"_FtpFile"结尾的参数,会自动映射成文件上传控件(注意是一个字段,比如:@ProductCheck_FtpFile char(12) ); 1.12)支持定义按钮。A网格存储过程输入参数包含以"btn_"开头或以"_btn"结尾的参数,会自动映射成按钮控件,点击事件对应的存储过程为“默认提交按钮”,可以通过参数“@I_UDBtnName”判断具体是哪个按钮 1.13)支持字段非必须输入设置; 1.14)支持接收主视图(元对象主视图/MES事务界面)参数值,相同字段名接收; **2).A网格支持:** 2.1)Id隐藏; 2.2)列冻结; 2.3)行多选(可以选择多行,但是不支持全选按钮,点击勾选时,把A网格的第一列值传给B网格。取消勾选时,会撤销B网格的数据)。行多选字段名为IsRowSelect,数据类型为bit,比如:SELECT MOId,CAST(0 AS BIT) AS IsRowSelect,MOName...,注意第一个列为B网格的数据过滤列,所以不要把IsRowSelect作为第一个列,否则无法过滤数据。 2.4) 行单选(只能勾选一个,点击勾选时,把A网格的第一列值传给B网格。取消勾选时,会撤销B网格的数据)。行单选的字段名IsRowSelectA,数据类型为bit,比如:SELECT MOId,CAST(0 AS BIT) AS IsRowSelectA...,注意第一个列为B网格的数据过滤列,所以不要把IsRowSelectA作为第一个列,否则无法过滤数据。 2.5)行添加(点击时,把A网格的第一列值传给B网格。不支持撤销B网格数据)。字段名为IsRowBtnZ,比如:SELECT MOId,'' AS IsRowBtnZ,MOName...。行添加 与 行多选、行单选 这3个功能只能选一个。 2.6)颜色设置(ColorControlId字段,与平台定义相同); 2.7)列宽度定义(系统参数“[Column Width]”,与平台定义相同); 2.8)支持获取元对象的多行PKID(请把存储过程参数@I_PKid的大小改为VARCHAR(MAX),多个PKID按';'隔开)。 ---这个属性只是对元对象 2.9)支持行勾选列颜色高量显示 2.10)日期类型支持显示时间 2.11)支持文件下载(右键)、查看(双击或右键)。每个文件以2列来实现(XXX_FtpFileId、XXX_FtpFile,即文件Id以“_FtpFileId”结尾,文件名以“_FtpFile”结尾),例子如下:SELECT 'FTP1000001TQ' AS AA_FtpFileId,'颜色控制.png' AS AA_FtpFile,'FTP1000001TQ' AS BB_FtpFileId,'颜色控制.png' AS BB_FtpFile 2.12)支持列合并单元格 2.13)日期类型,时间可输入时、分、秒 2.14)A网格存储过程提示信息,return_value>=0 时,冒泡提示;return_value<0,弹窗报错 2.15) 支持A网格 新行搜索功能。行头有一单独的行,用于搜索。 2.16)支持“批量选中多个行”进行勾选或反勾选(鼠标右键菜单。同时支持跨行选中勾选:Ctrl+鼠标左键点检选中)。在支持行多选时才能使用(IsRowSelect) 2.17)网格统计功能,统计函数包括Sum、Average、Count、Maximum、Minimum。支持按勾选行统计(IsRowSelect、IsRowSelectA),只统计勾选行的对应数据 2.18)可编辑列。编辑后的数据也可传给B网格使用;对于可编辑列,一行中,最后1个可编辑列回车时会自动触发B网格存储过程执行; **3).B网格支持:** 3.1)可编辑列; 2.2)不可编辑单元格(一列数据中,有个单元格可编辑,有的不可编辑),注意:要设置此功能,首选要先设置“可编辑列”(2.1)。存储过程返回列包含NotEditCellControlId(例如:SELECT IsRowBtn,CheckQty,CheckValue,Remark,NotEditCellControlId FROM @OutPut);多个不可编辑单元格请按分号隔开,例如: ![](/media//202204/2022-04-19_103247.png); 3.3)Id隐藏; 3.4)列冻结; 3.5)值列表(支持5种值列表_ViewList、_ViewListPK、_ViewListEx、_ViewWindow、_ViewWindowPK); 3.6)值列表同名匹配; 3.7)值列表级联1(A网格查询参数级联到网格上的值列表); 3.8)值列表级联2(网格上的字段值 可以给网格上的值列表进行数据级联),值列表级联2 优先级大于 值列表级联1(只能使用一种) 3.9)值列表过滤(网格上的字段值 可以给网格上的值列表进行数据过滤) 3.10)行多选(可以选择多行,支持全选按钮,行选择的字段名IsRowSelect,数据类型为bit,比如:SELECT CAST(0 AS BIT) AS IsRowSelect,'' as MOItemId,'' as MOId...); 3.11 行单选(只能勾选一个,单选的字段名IsRowSelectA,数据类型为bit,比如:SELECT CAST(0 AS BIT) AS IsRowSelectA...,字段位置放在第一列) 3.12行添加/删除/复制 按钮(字段名为IsRowBtn,支持批量操作-鼠标右键,比如:SELECT '' as IsRowBtn,CAST(0 AS BIT) AS IsRowSelect,'' as MOItemId,'' as MOId...; 3.13)行删除 按钮(字段名为IsRowBtnA,支持批量操作-鼠标右键,比如:SELECT '' as IsRowBtnA,CAST(0 AS BIT) AS IsRowSelect...); 3.14)行新增 按钮(字段名为IsRowBtnB,支持批量操作-鼠标右键,比如:SELECT '' as IsRowBtnB,CAST(0 AS BIT) AS IsRowSelect...); 3.15)行复制 按钮(字段名为IsRowBtnC,支持批量操作-鼠标右键,比如:SELECT '' as IsRowBtnC,CAST(0 AS BIT) AS IsRowSelect...); 3.16)支持“行复制”按钮 不复制字段的功能(指定复制时哪些字段不复制)。在“自定义对话框”配置界面指定就行 3.17)支持“行删除”按钮 指定存储过程功能(相应的逻辑判断),用于删除后台数据 3.18)颜色设置(ColorControlId字段,与平台相同用法); 3.19)列宽度定义(系统参数“[Column Width]”,与平台定义相同); 3.20)**可以获取A网格查询参数字段。只需在B网格存储过程增加对应的输入参数即可** 3.21)支持获取元对象的多行PKID(请把存储过程参数@I_PKid的大小改为VARCHAR(MAX),多个PKID按';'隔开)。 ---这个属性只是对元对象 3.22)支持行勾选列颜色高量显示 3.23)日期类型支持显示时间 3.24)支持文件上传、下载(右键)、查看(双击或右键)。每个文件以2列来实现(XXX_FtpFileId、XXX_FtpFile,即文件Id以“_FtpFileId”结尾,文件名以“_FtpFile”结尾),例子如下:SELECT 'FTP1000001TQ' AS AA_FtpFileId,'颜色控制.png' AS AA_FtpFile,'FTP1000001TQ' AS BB_FtpFileId,'颜色控制.png' AS BB_FtpFile 3.25)支持列合并单元格 3.26)日期类型,时间可输入时、分、秒 3.27)B网格存储过程提示信息,return_value>=0 时,冒泡提示;return_value<0,弹窗报错 3.28) 支持B网格 新行搜索功能。行头有一单独的行,用于搜索。 3.29)支持行删除按钮执行OK后,支持自动执行查询; 3.30)支持“批量选中多个行”进行勾选或反勾选(鼠标右键菜单。同时支持跨行选中勾选:Ctrl+鼠标左键点检选中)。在支持行多选时才能使用(IsRowSelect) 3.31)网格统计功能,统计函数包括Sum、Average、Count、Maximum、Minimum。支持按勾选行统计(IsRowSelect、IsRowSelectA),只统计勾选行的对应数据 3.32)可以接收A网格行的任意列值,只要在B网格存储过程的输入参数中增加对应的输入字段。注意:@QueryParameter参数 任然是接收A网格的第一列值,即A网格的第1列是主键列 **4).对于这种有两个网格结构的** **4.1)A网格的第一列的值**(建议用Id,以免拖动列,导致无法把数据传到B网格,比如:select **MOId**,MOName,MOQtyRequired from MO。)**作为B网格的查询参数**(通过@QueryParameter参数传递,如图所示)。 4.2)**如果A网格通过IsRowSelect、IsRowSelectA字段勾选数据传给B网格,则B网格的数据列必须包括A网格的第一列字段,目的是为了勾选撤销**(比如:select CAST(0 AS BIT) AS IsRowSelect,**MOId**,LotSN,Qty,WorkflowStepName,'' AS CheckResult, '' CheckResultDesc from lot where moid=@QueryParameter) 4.3)B网格存储过程可以接收A网格行的任意列值,只要在B网格存储过程的输入参数中增加对应的输入字段即可 4.4)网格支持行号显示,在配置界面进行配置 **5).“查询”按钮** 5.1)支持隐藏 查询按钮 5.2)支持返回数据 给“A网格查询参数”设置默认值(返回2个select,第一个select刷新网格、第二个select 设置默认值) 5.3)支持字段焦点设置; 5.4)支持查询提示信息; 5.5)支持获取元对象的多行PKID(请把存储过程参数@I_PKid的大小改为VARCHAR(MAX),多个PKID按';'隔开)。 ---这个属性只是对元对象 **6).“提交”按钮** 6.1)提交的数据是B网格(Json、xml),提交存储过程参数按元对象方法标准参数执行,**提交的数据传给@I_Parameter,请注意把参数大小改成max**。 6.2)支持把A网格查询参数传给“提交的存储过程”(给存储过程的参数 加上A网格查询参数的字段即可,注意数据类型,类型不同无法传送成功); 6.3)如果点击提交后,不想关闭窗体,也是可以的(比如有些场景,需要继续操作),规则如下:存储过程返回的整数(小于0代表失败,不会关闭窗体;等于0代表成功,会关闭窗体;大于0代表成功,不关闭窗体) 6.4)支持隐藏 提交按钮。有的场景下,并不需要提交按钮 6.5)支持获取元对象的多行PKID(请把存储过程参数@I_PKid的大小改为VARCHAR(MAX),多个PKID按';'隔开)。 ---这个属性只是对元对象 6.6)支持字段焦点设置; 6.7)支持标签打印。标签按平台方式设置,存储过程返回select即可触发打印。标签支持:静态标签 或 动态标签【动态标签文件存储过程】 6.8)数据提交时,只提交看得见的数据(通过筛选过滤掉的数据不提交,支持多条件筛选) 6.9)提交执行OK后,支持自动执行查询(前提是不关闭窗体); 6.10)提交执行OK后,支持是否刷新树视图控制(元对象); 6.11)提交存储过程 支持接收页签索引值(值为1、2),存储过程输入参数包含@TabIndex或@I_TabIndex,int类型),主要用于有2个页签的对话框。 4.12)提交存储过程 支持接收自定义对话框按钮名,包括默认的提交按钮(“btn_Submit”)、自定义按钮(A网格存储过程参数,以“btn_”开头或结尾的参数生成按钮),存储过程输入参数包含@I_UDBtnName,NVARCHAR(50)=''),主要用于自定义按钮,根据按钮名执行不同逻辑 6.13)提交存储过程 支持接收A网格第一列,即对话框父级Id,存储过程输入参数字段@ParentGridRowId或@I_ParentGridRowId(注意长度。如果A网格单行传递,则长度与A网格第一列长度一致即可;如果A网格多行传递,则长度最好用够用,比如用max;) 6.14)提交按钮执行前置事件,写叫脚本代码; 6.15)“是否提交隐藏行数据?”控制(对网格进行数据搜索时,不满足条件时,数据行会自动隐藏),默认不提交; 脚本代码:与样式1一样 ![](/media//202102/2021-02-23_171150.png) ![](/media//202107/2021-07-17_160626.png) ![](/media//202107/2021-07-17_160916.png) ![](/media//202103/2021-03-27_163234.png) #### 4.3.3、样式3(左右结构样式),所支持的功能请参照 样式2 脚本代码:与样式1一样 ![](/media//202102/2021-02-23_161142.png) #### 4.3.4、样式4(两个tab:上下结构样式、左右结构样式),所支持的功能请参照 样式2 脚本代码:与样式1一样 ![](/media//202102/2021-02-23_161256.png) ### 5、元对象Show方法重载 #### 5.1、方法重载清单 ```csharp //【需传入对话框代码】 //普通重载 //1.1 Show(OrBitScript.OrBitMetaAPI Scripter, string DialogCode) //1.2 Show(OrBitScript.OrBitMetaAPI Scripter, string DialogCode, string DialogName) //1.3.有I_Sender,支持打印 Show(OrBitScript.OrBitMetaAPI Scripter, string DialogCode, string DialogName, string I_Sender) //1.4 Show(OrBitScript.OrBitMetaAPI Scripter, string DialogCode, string DialogName, string I_Sender, out string I_ExceptionFieldName) //1.5.有I_Sender,支持打印 Show(string DialogCode, string I_Sender, OrBitScript.OrBitMetaAPI Scripter) //特殊重载 //2.1 Show(OrBitScript.OrBitMetaAPI Scripter, string DialogCode, OrBitUserDialog.Model.EventInject eventInject) //2.2 Show(OrBitScript.OrBitMetaAPI Scripter, string DialogCode, string DialogName, OrBitUserDialog.Model.EventInject eventInject) //2.3有I_Sender,支持打印 Show(OrBitScript.OrBitMetaAPI Scripter, string DialogCode, string DialogName, string I_Sender, OrBitUserDialog.Model.EventInject eventInject) //2.4 Show(OrBitScript.OrBitMetaAPI Scripter, string DialogCode, string DialogName, string I_Sender, out string I_ExceptionFieldName, OrBitUserDialog.Model.EventInject eventInject) //2.5有I_Sender,支持打印 Show(string DialogCode, string I_Sender, OrBitScript.OrBitMetaAPI Scripter, OrBitUserDialog.Model.EventInject eventInject) ``` ```csharp //【无需传入对话框代码,在元对象方法里配置】,返回类型是可null的bool类型,为null时表示没有获取到对话框代码。从23.6.7版本开始 //普通重载 ShowA(OrBitScript.OrBitMetaAPI Scripter, string I_Sender) ShowA(OrBitScript.OrBitMetaAPI Scripter, string DialogName, string I_Sender) ShowA(OrBitScript.OrBitMetaAPI Scripter, string DialogName, string I_Sender, out string I_ExceptionFieldName) //特殊重载 ShowA(OrBitScript.OrBitMetaAPI Scripter, string I_Sender, OrBitUserDialog.Model.EventInject eventInject) ShowA(OrBitScript.OrBitMetaAPI Scripter, string I_Sender, string DialogName, OrBitUserDialog.Model.EventInject eventInject) ShowA(OrBitScript.OrBitMetaAPI Scripter, string I_Sender, string DialogName, out string I_ExceptionFieldName, OrBitUserDialog.Model.EventInject eventInject) ``` #### 5.2、EventInject事件注入 5.2.1 为了一个特殊开发,比如单元格值变化事件,窗体加载事件,现在增加了EventInject事件注入类,目前包含4个事件:Grid_AfterCellUpdate、Form_Load(因为是加载,也可以在这个方法里注册事件)、Form_Closed(一般用于释放资源)、BtnSubmitClickBefore(提交按钮 执行前置事件) 例如: ```csharp private void button1_Click(object sender, EventArgs e) { OrBitUserDialog.Model.EventInject eventInject = new OrBitUserDialog.Model.EventInject(); eventInject.GridAfterCellUpdate = UltraGrid_AfterCellUpdate;//可选 eventInject.FormLoad = Form_Load;//可选。1.可以获取对话框对象(可存在全局变量里,以便串口等其他设备传递数据);2.可以对对话框进行设置;3.可以注册事件 eventInject.FormClosed = Form_Closed;//可选。1.主要用于释放资源,比如关闭串口、关闭定时器等;2.可以获取对话框数据(通过对话框对象获取以及面板API) eventInject.BtnSubmitClickBefore = BtnSubmit_ClickBefore;//可选。1.用于提交前进行逻辑检查;2.用于提交前进行数据处理(比如:把数据设置到查询面板上,以便提交存储过程可以接收) OrBitUserDialog.Dialog.Show(Scripter, "QMS IQCCheckA", "", button1.Name, eventInject); } #region OrBitUserDialog /// <summary> /// 自定义对话框。网格-单元格值更新事件 /// </summary> /// <param name="TabIndex">Tab索引:1、2</param> /// <param name="Grid">网格</param> /// <param name="e"> 参数</param> /// <param name="GridName">网格名:A、B</param> /// <param name="PanelApi">面板API接口</param> private void UltraGrid_AfterCellUpdate(int TabIndex, Infragistics.Win.UltraWinGrid.UltraGrid Grid, Infragistics.Win.UltraWinGrid.CellEventArgs e, string GridName, OrBitUserDialog.API.PanelApi PanelApi) { //to do.. } /// <summary> /// 自定义对话框。窗体加载事件 /// </summary> /// <param name="TabIndex">Tab索引:1、2</param> /// <param name="AGrid">A网格</param> /// <param name="BGrid">B网格,可能为null</param> /// <param name="PanelApi">面板API接口</param> private void Form_Load(int TabIndex,Infragistics.Win.UltraWinGrid.UltraGrid AGrid, Infragistics.Win.UltraWinGrid.UltraGrid BGrid, OrBitUserDialog.API.PanelApi PanelApi) { //to do.. } /// <summary> /// 自定义对话框。窗体关闭事件 /// </summary> /// <param name="TabIndex">Tab索引:1、2</param> /// <param name="AGrid">A网格</param> /// <param name="BGrid">B网格,可能为null</param> /// <param name="PanelApi">面板API接口</param> private void Form_Closed(int TabIndex, Infragistics.Win.UltraWinGrid.UltraGrid AGrid, Infragistics.Win.UltraWinGrid.UltraGrid BGrid, OrBitUserDialog.API.PanelApi PanelApi) { //to do.. } /// <summary> /// 自定义对话框。提交按钮 触发时检查前置事件 /// </summary> /// <param name="TabIndex">Tab索引:1、2</param> /// <param name="AGrid">A网格</param> /// <param name="BGrid">B网格,可能为null</param> /// <param name="PanelApi">面板API接口</param> /// <returns>True表示继续,False表示退回</returns> private bool BtnSubmit_ClickBefore(int TabIndex, Infragistics.Win.UltraWinGrid.UltraGrid AGrid, Infragistics.Win.UltraWinGrid.UltraGrid BGrid, OrBitUserDialog.API.PanelApi PanelApi) { //to do.. return true; } #endregion ``` 5.2.2 、面板API(PanelApi) 提供标准方法和属性 属性: 1)BtnSubmit。提交按钮控件 2)BtnQuery。查询按钮控件 3)I_Sender。按钮名称(元对象方法、MES事务对象方法名),字符型。 4)TsTxt_SearchAll。全局搜索框控件(System.Windows.Forms.ToolStripTextBox) 5)Ts_ToolStrip。工具条控件(System.Windows.Forms.ToolStrip) 方法: 1)GetParameterValue(string parameterName)。获取查询面板参数值 2)GetParameterControl(string parameterName)。获取查询面板参数控件 3)SetParameterValue(string parameterName, string parameterValue)。设置查询面板参数值 4)SetParameterViewList(string parameterName, DataTable viewListDataTable)。设置查询面板参数值列表 5)Grid_ClearSearch(Infragistics.Win.UltraWinGrid.UltraGrid grid)。清除网格搜索。可以用在BtnSubmit_ClickBefore事件中,提交数据时,清除搜索条件,以便把隐藏的勾选数据提交 6)Grid_GetData(Infragistics.Win.UltraWinGrid.UltraGrid grid, string dataforma = "XML")。获取网格数据,返回字符串。 7)CloseForm()。关闭窗体。比如在BtnSubmit_ClickBefore方法中,把对话框网格数据赋值给MES事务参数后,直接关闭对话框,不执行后续的提交逻辑。 8)RefreshCount()。刷新统计,有时候可能通过代码去更新行选择列IsRowSelect(通过输入的值判断,自动打勾),这时需要手动刷新统计 # 四、MES事务对象 实现步骤 ### 1、插件目录添加OrBitUserDialog.dll文件(添加了就不用管) ### 2、系统参数里添加参数(存在则不需要) ![](/media//202102/2021-02-23_161801.png) ### 3、定义一个对话框参数 ![](/media//202106/2021-06-07_111522.png) ![](/media//202205/2022-05-10_105917.png) ### 3.1、说明: :fa-hand-o-right: 1)**提交存储过程不需要指定**,直接使用的是**MES事务对象的方法**,网格数据最终提交给@I_Parameter字段 。 1.1)如果要把自定义对话框A网格查询参数传给存储过程,也是可以的,只要存储过程参数添加上字段就可以用;如果是2个网格的关联结构,可以通过@ParentGridRowId字段 接收父级网格的行Id(第1列字段)。 1.2)同时支持MES事务方法的部分功能:回刷MES事务面板网格、面板参数、标签打印【第一个select刷网格;最后一个select设置面板参数;第1个select(无刷新网格)或第2个select(有刷新网格)开始用于标签打印 】 :fa-hand-o-right: 2)**其他与“元对象”完全一致。** ### 4、给具体插件增加对话框(例子如下) #### 4.1、在“MES事务对象”中,勾选脚本,并引用OrBitUserDialog.dll ![](/media//202106/2021-06-07_140311.png) #### 4.2、在“MES事务对象方法”中,添加方法 1)跟正常使用没有任何区别,可以照常的传递参数,刷新网格。 2)自定义对话框会把网格数据传给@I_Parameter字段, 3) 如果要把自定义对话框A网格查询参数传给存储过程,也是可以的,只要存储过程添加上参数就可以用 #### 4.2.1、不配置自定义对话框代码,调用时传入 ![](/media//202106/2021-06-07_140419.png) #### 4.2.2、配置自定义对话框代码,调用时无需传入。从23.5.16版本开始 ![](/media//202305/2023-05-16_111948.png) #### 4.3、在“MES事务对象脚本”中,给具体方法名增加对话框 #### 4.3.1、样式1(单表结构样式),所支持的功能与元对象一样 脚本代码例子: ```csharp //以前版本。需要传入自定义对话框代码 /// <summary> /// 容器中按钮触发时的通用检查前置事件 /// </summary> /// <param name="ButtonName">按钮名</param> /// <returns>True表示继续,False表示退回</returns> public bool ButtonClickBefore(string ButtonName) { //to do.. if(ButtonName=="Dialog_QueryMLotInfo") { //(可选) //如果希望把MES事务对象面板上的参数 传给 “A网格存储过程的QueryParameter参数” //则在“MES事务对象参数”中定义字段QueryParameter,调用对话框之前,先给这个字段赋值 Scripter.SetParameterValue("QueryParameter",Scripter.GetParameterValue("ProductId")); //调用自定义对话框 if(OrBitUserDialog.Dialog.Show(Scripter,"Txn NotStockMLotInfoQuery",ButtonName)) { ButtonClick( ButtonName); ButtonClickAfter(ButtonName,true,""); } return false;//(必须输入),一定要返回false } return true; } ``` ```csharp //新版本。不用传代码,传入按钮名就行。如果有多个按钮,大部分情况写1行代码即可 /// <summary> /// 容器中按钮触发时的通用检查前置事件 /// </summary> /// <param name="ButtonName">按钮名</param> /// <returns>True表示继续,False表示退回</returns> public bool ButtonClickBefore(string ButtonName) { //to do.. //(可选) //如果希望把MES事务对象面板上的参数 传给 “A网格存储过程的QueryParameter参数” //则在“MES事务对象参数”中定义字段QueryParameter,调用对话框之前,先给这个字段赋值 Scripter.SetParameterValue("QueryParameter",Scripter.GetParameterValue("ProductId")); //调用自定义对话框,不用判断是哪个按钮 bool? result=OrBitUserDialog.Dialog.ShowA(Scripter, ButtonName); if(result.HasValue); { if(result.Value) { ButtonClick( ButtonName); ButtonClickAfter(ButtonName,true,""); } return false;//(必须输入),一定要返回false } return true; } ``` #### 4.3.2、样式2(上下结构样式),所支持的功能与元对象一样 脚本代码例子:与样式1一样 #### 4.3.3、样式3(左右结构样式),所支持的功能与元对象一样 脚本代码例子:与样式1一样 #### 4.3.4、样式4(两个tab:上下结构样式、左右结构样式),所支持的功能与元对象一样 脚本代码例子:与样式1一样 ### 5、MES事务对象Show方法重载 #### 5.1、方法重载清单 Show方法重载,需要转入自定义对话框代码 ```csharp //普通重载 //1.1 Show(OrBitScript.OrBitAPI Scripter, string DialogCode, string I_Sender) //1.3 Show(OrBitScript.OrBitAPI Scripter, string DialogCode, string DialogName, string I_Sender) //1.5 Show(OrBitScript.OrBitAPI Scripter, string DialogCode, string DialogName, string I_Sender, out string I_ExceptionFieldName) //特殊重载 //2.1 Show(OrBitScript.OrBitAPI Scripter, string DialogCode, string I_Sender, OrBitUserDialog.Model.EventInject eventInject) //2.2 Show(OrBitScript.OrBitAPI Scripter, string DialogCode, string DialogName, string I_Sender, OrBitUserDialog.Model.EventInject eventInject) //2.3 Show(OrBitScript.OrBitAPI Scripter, string DialogCode, string DialogName, string I_Sender, out string I_ExceptionFieldName, OrBitUserDialog.Model.EventInject eventInject) ``` ShowA方法重载,不需要转入自定义对话框代码,返回类型是可null的bool类型,为null时表示没有获取到对话框代码。从23.6.7版本开始 ```csharp //普通重载 //1.1 ShowA(OrBitScript.OrBitAPI Scripter, string I_Sender) //1.2 ShowA(OrBitScript.OrBitAPI Scripter, string I_Sender, string DialogName) //1.3 ShowA(OrBitScript.OrBitAPI Scripter, string I_Sender, string DialogName, out string I_ExceptionFieldName) //特殊重载 //2.1 ShowA(OrBitScript.OrBitAPI Scripter, string I_Sender, OrBitUserDialog.Model.EventInject eventInject) //2.2 ShowA(OrBitScript.OrBitAPI Scripter, string I_Sender, string DialogName, OrBitUserDialog.Model.EventInject eventInject) //2.3 ShowA(OrBitScript.OrBitAPI Scripter, string I_Sender, string DialogName, out string I_ExceptionFieldName, OrBitUserDialog.Model.EventInject eventInject) ``` #### 5.2、EventInject事件注入 与元对象一致。 # 五、MES事务对象 补充(对话框 变 MES事务插件的页签) 1.有时候,希望把自定义对话框当做MES事务插件的页签,即整个界面就是一个对话框,这样就可以快速开发出“零脚本”代码网格批量操作功能。OrBitUserDialog控件提供了ShowForm方法。 ShowForm方法重载,需要转入自定义对话框代码 ```csharp //普通重载 //1.1 ShowForm(OrBitScript.OrBitAPI Scripter, string DialogCode, string I_Sender) //1.2 ShowForm(OrBitScript.OrBitAPI Scripter, string DialogCode, string DialogName, string I_Sender) //特殊重载 //2.1 ShowForm(OrBitScript.OrBitAPI Scripter, string DialogCode, string I_Sender, OrBitUserDialog.Model.EventInject eventInject) //2.2 ShowForm(OrBitScript.OrBitAPI Scripter, string DialogCode, string DialogName, string I_Sender, OrBitUserDialog.Model.EventInject eventInject) ``` ShowFormA方法重载,不需要 传入自定义对话框代码 ```csharp //普通重载 //1.1 ShowFormA(OrBitScript.OrBitAPI Scripter, string I_Sender) //1.2 ShowFormA(OrBitScript.OrBitAPI Scripter, string I_Sender, string DialogName) //特殊重载 //2.1 ShowFormA(OrBitScript.OrBitAPI Scripter, string I_Sender, OrBitUserDialog.Model.EventInject eventInject) //2.2 ShowFormA(OrBitScript.OrBitAPI Scripter, string I_Sender, string DialogName, OrBitUserDialog.Model.EventInject eventInject) ``` 例子如下: ```csharp /// <summary> /// 脚本对象实例化时加载时的方法 /// </summary> public void ScriptLoad() { //to do.. OrBitUserDialog.Dialog.ShowForm(Scripter,"Txn IQCCheckA","Test"); } ``` ![](/media//202109/2021-09-27_173500.png) # 六、值窗体(_ViewWindow、_ViewWindowPK) 本自定义控件的值窗体与平台稍微有点区分(比平台的多了几个功能): 1.可以双击行选中(单选); 2.可以DB搜索 3.支持颜色设置,返回的select 可以增加字段ColorControlId返回颜色设置 本控件也支持多选(SELECT CAST(0 AS bit) AS SelectRow,'124' AS LotSN) ![](/media//202107/2021-07-17_161535.png) ![](/media//202107/2021-07-17_161643.png)
HH0102
2024年7月10日 16:40
分享
上一篇
下一篇
目录
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
下载Markdown文件