Form_Form树形结构HTree的开发(案例)

简介: 2014-06-09 Created By BaoXinjian 一、摘要 Oracle Developer 6.0以上版本提供了hierarchy tree(层次树)的概念,htree控件非常方便,只需要少量的编程即可实现显示层次结构的目的。

2014-06-09 Created By BaoXinjian

一、摘要


Oracle Developer 6.0以上版本提供了hierarchy tree(层次树)的概念,htree控件非常方便,只需要少量的编程即可实现显示层次结构的目的。

1. 树的特有属性中如下几个较为重要

(1). 多项选择(Multi-Selection)

是否允许一次选中树的多个节点。如果不允许,那么选中第二个节点时,第一个被选中的节点会取消选择。

(2). 记录组(Record Group)

指定生成树的记录组的名字。

2. 开发Tree的方式如下

Step1. 创建目录结构存放表

Step2. 创建目录数据

Step3. 创建一个数据块,命名为:BXJTREE

Step4. 查看所创建Tree组件

Step5. 创建一个记录组,命名为BXJTREERG,记录组查询代码如下:(记得别加任何Order by)

Step6. 查看所创建TreeRG

Step7.修订Tree ITEM 属性

Step8. 创建Trigger: WHEN-NEW-FORM-INSTANCE

Step9. Form已经可以预览了,这一步的目的是对tree的一些操作的简单代码,可以自己摸索,本例到此为止。

Step10. 创建Trigger的选中触发器WHEN-TREE-NODE-SELECTED

Step11. 其他的Trigger类型

 

二、解析


Step1. 创建目录结构存放表

CREATE TABLE bxj_menu
(
   menu            VARCHAR2 (100),
   submenu         VARCHAR2 (100),
   menu_function   VARCHAR (100),
   attribute1      VARCHAR2 (240),
   attribute2      VARCHAR2 (240),
   attribute3      VARCHAR2 (240),
   attribute4      VARCHAR2 (240),
   attribute5      VARCHAR2 (240)
)

Step2. 创建目录数据

BEGIN
   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('0', 'SCM_DEPT_MENU', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('0', 'FIN_DEPT_MENU', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('SCM_DEPT_MENU', 'PO_MENU', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('SCM_DEPT_MENU', 'INV_MENU', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('FIN_DEPT_MENU', 'GL_MENU', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('FIN_DEPT_MENU', 'AP_MENU', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('AP_MENU', 'AP_FORM', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('PO_MENU', 'PR_FORM', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('PO_MENU', 'PO_FORM', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('PO_MENU', 'PO_QUOTATION', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('PO_QUOTATION', 'QUOTATION_FORM', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('INV_MENU', 'ONHAND_FORM', '');

   INSERT INTO bxj_menu (menu, submenu, menu_function)
     VALUES   ('INV_MENU', 'TRANSACTION_FORM', '');
END;

Step3. 创建一个数据块,命名为:BXJTREE

在画布上创建一个文本项,命名为TREELIST,打开属性选项板,项类型选择:层次树

Step4. 查看所创建Tree组件

Step5. 创建一个记录组,命名为BXJTREERG,记录组查询代码如下:(记得别加任何Order by)

    SELECT   -1 state,
             LEVEL,
             a.submenu,
             NULL Icon,
             a.submenu
      FROM   apps.bxj_menu a
     WHERE   a.submenu IS NOT NULL
START WITH   a.menu = '0'
CONNECT BY   PRIOR a.submenu = a.menu

Step6. 查看所创建TreeRG

Step7.修订Tree ITEM 属性

打开ITEM:BXJTREE的属性选项板,选择其记录组为BXJTREELIST

Step8. 创建Trigger: WHEN-NEW-FORM-INSTANCE

DECLARE
    HTREE ITEM;
    v_ignore NUMBER;
    rg_emps RECORDGROUP;
BEGIN
    HTREE := FIND_ITEM('BXJTREE.TREELIST');
    FTREE.POPULATE_TREE(HTREE);
    rg_emps := FIND_GROUP('NEWTREE');
    IF NOT ID_NULL(rg_emps) THEN
      DELETE_GROUP(rg_emps);
    END IF;
    rg_emps := CREATE_GROUP_FROM_QUERY('rg_emps','select -1 state, level, a.submenu, null Icon, submenu
                                                  from apps.bxj_menu a
                                                  where a.submenu is not null
                                                  start with a.menu = ''0''
                                                  connect by prior a.submenu = a.menu'
                                      );
    -- Populate the record group with data.  
    v_ignore := POPULATE_GROUP(rg_emps);
    Ftree.Set_Tree_Property(HTREE, Ftree.RECORD_GROUP, rg_emps);
   
END;

Step9. Form已经可以预览了,这一步的目的是对tree的一些操作的简单代码,可以自己摸索,本例到此为止。

Step10. 创建Trigger的选中触发器

创建Trigger: WHEN-TREE-NODE-SELECTED

DECLARE
   htree        ITEM;
   node_value   VARCHAR2 (100);
BEGIN
   htree := FIND_ITEM ('BXJTREE.TREELIST');
   --node_value := Ftree.Get_Tree_Node_Property(htree, :SYSTEM.TRIGGER_NODE, Ftree.NODE_VALUE);
   --node_value := Ftree.Get_Tree_Node_Property(htree, :SYSTEM.TRIGGER_NODE, Ftree.NODE_STATE);
   --node_value := Ftree.Get_Tree_Node_Property(htree, :SYSTEM.TRIGGER_NODE, Ftree.NODE_DEPTH);
   node_value := Ftree.GET_TREE_NODE_PROPERTY (htree,:SYSTEM.TRIGGER_NODE,Ftree.NODE_VALUE);
   /*
   其中property有如下几种:
  NODE_STATE:EXPANDED_NODE(扩展节点)
  COLLAPSED_NODE(收缩节点)
  LEAF_NODE(叶节点)--注:不能展开或收缩  
  NODE_DEPTH:既节点在树中的层级。  
  NODE_LABEL:节点的显示文本  
  NODE_ICON:节点的图标 
  NODE_VALUE:节点的值。
   */
   MESSAGE ('Node:' || node_value);
--Message('Node:'||node_value);
END;

Step11. 其他的Trigger类型

 

Thanks and Regards

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
4月前
|
自然语言处理 前端开发 Java
SpringMVC中form标签与数据绑定应用实践
SpringMVC中form标签与数据绑定应用实践
40 0
|
5月前
|
JavaScript
layui-form下隐藏元素的验证问题
layui-form下隐藏元素的验证问题
|
5月前
|
移动开发 搜索推荐 JavaScript
form的作用?
form的作用?
|
7月前
HTML form 表单组合功能使用
HTML form 表单组合功能使用
117 0
|
7月前
|
存储 安全 API
orbeon form 的架构简介 - 如何访问用户通过 form 存储的数据
orbeon form 的架构简介 - 如何访问用户通过 form 存储的数据
51 0
Element-ui中 表单(Form)校验的几种形式 及 表单嵌套表格含上传(Upload)组件的综合案例
Element-ui中 表单(Form)校验的几种形式 及 表单嵌套表格含上传(Upload)组件的综合案例
641 0
Element-ui中 表单(Form)校验的几种形式 及 表单嵌套表格含上传(Upload)组件的综合案例
|
JavaScript
Extjs Form 表单修改
Extjs修改分两种方法:1.前台直接加载;2.通过后台远程加载 1.直接加载:方法 form.getForm().loadRecord(); 应用时要求页面上已经存在页面中的所有数据,比如选中gridPanel一行,然后直接传递此行记录,到formPanel页面,可直接加载 2.后台加载:方法 form.getForm().load(); 应用时 传递一个参数到后台,然后远程取值,绑定。
977 0
|
容器
SAP Spartacus User Form里checkbox的设计原理
SAP Spartacus User Form里checkbox的设计原理
SAP Spartacus User Form里checkbox的设计原理