当前位置: 首页 > news >正文

T100开发实战:如何用azzi903和azzi850搞定自定义按钮的权限与布局?

T100深度开发实战:基于azzi903与azzi850的权限与布局定制指南

当企业ERP系统需要适应特定业务流程时,界面按钮的权限控制与布局调整往往成为开发的关键痛点。本文将系统性地拆解如何利用T100系统中的azzi903(功能菜单配置工具)与azzi850(功能权限管理工具)实现精细化的界面控制。

1. 理解T100界面架构的核心机制

T100系统的界面元素管理遵循严格的层级结构。每个程序界面(如cooi666)的功能按钮并非随意放置,而是通过"上阶功能编号"这一关键字段确定其在菜单体系中的归属位置。默认情况下,新增功能按钮会被归类到"弹出式菜单"(popup menu),这往往不符合实际业务操作流程的需求。

典型功能按钮的三种归属类型:

  • 整单操作(full-operator):针对整张单据的核心功能,如保存、审核
  • 单身操作(detail-operator):针对单据明细行的特定操作
  • 弹出式菜单(popup-menu):次级或辅助功能

理解这种分类机制是进行自定义布局的前提。例如,"审核后修改身份证"这类功能显然更适合放在"整单操作"区域而非默认的弹出菜单。

2. 功能按钮的全生命周期管理

2.1 从规格设计到代码生成

在规格设计器中新增功能按钮时,系统会自动生成Action代号(如modify_sfz),这个代号将成为后续所有操作的唯一标识。关键步骤包括:

  1. 在规格设计器右侧点击【新增项目】
  2. 在左侧Action设定区域定义:
    Action代号: modify_sfz 说明: 审核后修改身份证
  3. 上传规格并重新生成程序框架

注意:此时生成的按钮默认位于弹出式菜单,需要通过后续步骤调整位置

2.2 使用azzi903调整按钮布局

azzi903工具是调整功能按钮位置的核心武器。要将按钮从弹出式菜单迁移到整单操作区,需执行:

1. 查询目标程序编号(如cooi666) 2. 双击"整单操作"节点,复制其"上阶功能编号"(通常为full-operator) 3. 在"弹出式菜单"下找到目标Action代号 4. 将其"上阶功能编号"修改为刚才复制的值 5. 保存后重新生成4tm和4ad文件

这一过程实质上是修改了功能按钮在菜单树中的父节点,从而改变其最终显示位置。

2.3 通过azzi850实现权限控制

按钮显示在界面上后,还需要通过azzi850为其配置访问权限:

1. 查询作业编号(如cooi666) 2. 在功能授权界面找到新增的Action 3. 为不同角色勾选相应的执行权限

权限配置的颗粒度可以精确到:

  • 角色级别(如财务、采购等)
  • 组织架构级别(如分公司、部门等)
  • 特殊条件组合

3. 功能逻辑的代码实现要点

权限和布局配置完成后,需要在4GL程序中实现具体的业务逻辑。以"审核后修改身份证"功能为例:

3.1 对话框控制与事务管理

ON ACTION modify_sfz LET g_action_choice="modify_sfz" IF cl_auth_chk_act("modify_sfz") THEN IF g_oozyuc_m.oozyucstus = 'Y' THEN CALL s_transaction_begin() CALL cooi666_modify_sfz() RETURNING l_success IF NOT l_success THEN CALL s_transaction_end('N', '0') # 回滚 ELSE CALL s_transaction_end('Y', '0') # 提交 END IF ELSE # 报错:单据未审核 INITIALIZE g_errparam TO NULL LET g_errparam.code = "coo-00667" CALL cl_err() EXIT MENU END IF END IF

3.2 字段修改的核心函数

PRIVATE FUNCTION cooi666_modify_sfz() DEFINE l_success LIKE type_t.num10 LET l_success = TRUE OPEN cooi666_cl USING g_enterprise,g_oozyuc_m.oozyuc00 IF STATUS THEN # 错误处理 CLOSE cooi666_cl LET l_success = FALSE RETURN l_success END IF DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM) INPUT BY NAME g_oozyuc_m.oozyuc005 AFTER INPUT UPDATE oozyuc_t SET oozyuc005 = g_oozyuc_m.oozyuc005 WHERE oozyucent = g_enterprise AND oozyuc001 = g_oozyuc_m.oozyuc001 IF SQLCA.SQLCODE THEN CLOSE cooi666_cl CALL cl_err() LET l_success = FALSE END IF END INPUT CLOSE cooi666_cl RETURN l_success END FUNCTION

4. 高级应用场景与最佳实践

4.1 跨单据操作按钮的实现

在某些场景下,需要实现单据间的数据传递,例如将已审核单据的数据复制到另一张单据:

实现步骤:

  1. 在规格设计器中新增"产生单据"按钮
  2. 通过azzi903调整到目标菜单位置
  3. 使用azzi850配置权限
  4. 实现数据复制逻辑:
PRIVATE FUNCTION cooi666_insert_oozzuc() DEFINE r_success LIKE type_t.num10 DEFINE l_oozzuc RECORD oozzucent LIKE oozzuc_t.oozzucent, oozzuc001 LIKE oozzuc_t.oozzuc001, ... END RECORD # 从原单赋值 LET l_oozzuc.oozzucent = g_enterprise LET l_oozzuc.oozzuc001 = g_oozyuc_m.oozyuc001 ... # 插入目标表 INSERT INTO oozzuc_t VALUES(l_oozzuc.*) IF SQLCA.SQLCODE THEN CALL cl_err() LET r_success = FALSE END IF RETURN r_success END FUNCTION

4.2 界面元素的动态控制

通过程序逻辑可以实现更精细的界面控制:

# 根据单据状态动态禁用按钮 IF g_oozyuc_m.oozyucstus = 'Y' THEN CALL gfrm_curr.setElementDisabled("modify_sfz", FALSE) ELSE CALL gfrm_curr.setElementDisabled("modify_sfz", TRUE) END IF

4.3 参数化功能的扩展

对于需要在标准参数作业中添加字段的情况:

  1. 使用azzi993查询作业对应的参数表
  2. 通过azzi990添加参数记录
  3. 在azzi993中配置作业参数
# 查询参数作业对应的表 azzi993 → 查询aoos010 → 显示对应表为ooaa_t # 添加参数记录 azzi990 → 查询ooaa_t → 新增记录并维护字段属性 # 配置作业参数 azzi993 → 设置aoos010的查询方案

这种开发模式在T100系统中非常普遍,掌握后可以灵活应对各种定制化需求。实际项目中,建议建立完整的测试用例来验证按钮权限和布局调整的效果,特别是在多角色、多组织的复杂场景下。

http://www.zskr.cn/news/1315564.html

相关文章:

  • 爱快路由下Mercury AC跨三层寻AP:Option字段实战与避坑指南
  • GPU缓存架构优化与AI加速器内存技术解析
  • MFC老树开新花:手把手教你用CMake配置动态/静态链接库并解决中文乱码
  • 【NotebookLM研究问题生成终极指南】:20年AI研究员亲授3大高阶技巧,90%用户忽略的提示工程盲区
  • Codex Prompt 中“目标 + 约束 + 上下文 + 验证标准 + AGENTS.md”终极组合版
  • Codex Prompt 中“目标 + 约束”写法详解与操作指南
  • 5分钟快速上手Mermaid Live Editor:免费在线图表编辑器完整指南
  • 从零到一:在VMware中部署银河麒麟V10桌面版全流程实战
  • AI Agent大模型入门指南:小白程序员必收藏,轻松掌握智能体核心技术
  • 51单片机项目避坑指南:用ADC0832和应变片传感器做电子秤,精度校准与误差分析实战
  • 外贸必知:土耳其诉讼时效与货款催收技巧
  • 【NotebookLM版本治理白皮书】:基于127个真实项目复盘,提炼出的6类高危变更模式与自动拦截方案
  • 通过用量看板与账单追溯实现团队 AI 成本精细化管理
  • 【NotebookLM研究问题生成避坑白皮书】:从0到1构建可复现、可评估、可审计的问题生成工作流
  • NotebookLM概念关联分析全链路解析,从原始文本到可验证知识网络的6大断点与修复方案
  • 架构重构:HiveWE如何通过现代C++20技术栈重塑魔兽争霸III地图编辑体验
  • 【JavaSE全面教学】Java集合框架上Day12(2026年)
  • 5分钟搞定网页视频下载:VideoDownloadHelper完整指南
  • NotebookLM期刊推荐矩阵(含影响因子、APC费用、AI政策条款、平均一审周期——仅限本周开放下载)
  • 简历被AI“带偏”?实测这款不编造经历、数据全存本地的求职神器!
  • 从零到一:FOFA搜索引擎实战语法精解与场景化应用
  • 部门文件同步协作难?企业网盘选型必须知道的 3 个标准(含 5 款网盘实测)
  • 别再只调RTC了!STM32L4低功耗设计:电源、时钟、IO的协同配置清单
  • 量子退火优化CPS测试用例生成的技术解析
  • Windows Defender 完全卸载指南:系统性能提升30%的深度技术实现方案
  • HTML结合Leaflet:从零构建无网环境下的离线GIS地图应用
  • SpringBoot项目交付必备:手把手教你用TrueLicense 1.33实现软件授权与过期控制
  • 量子计算与机器学习:从基础原理到实践应用
  • IS802高频反激电源变压器选型实测:从空载饱和到带载效率的全面评估
  • Go 连接 Redis 代码详细解析