Oracle Retail(Retek)小结之Form的multiview开发过程总结

本文主要介绍在做retek系统的form开发的时候,怎么去开发一个multiview。下面以我做的一个简单的含有multiview的form为例,全程详细介绍开发过程。首先,我们看如下图1所示,这是我们将要开发的form的最终效果图。

multiview实现最终效果图

图1:multiview实现最终效果图

下面就以上图1作为开发目标,通过以下步骤实现开发效果:

(1)首先,按照图示做一个form(这里的form文件名为cmx_yed_getusers.fmb,form的name为CMX_YED_GETUSERS),该form主要有三个块组成,b_user_attrib块是数据库块,用以显示记录;b_col_head是字段的头部块,是文本类型;b_action块包括一些非数据库项,比如确认按钮、取消按钮等等。

form布局结构图

图2:form布局结构图

(2)给该form添加一些实现multiview的库、对象组等等。

添加MVIEW45库

图3:添加MVIEW45库

添加必要的MVIEW45库文件,同时它会自动加载相关的库文件,比如TOOLS45等。

添加对象组

图4:添加对象组

从模版form中,将OG_MULTISEARCH、OG_MULTIVIEW这两个对象组复制过来(拖过来),复制过来之后,它会自动带入相关的一些文件,比如一些form级触发器,一些window、canvas、block等。

添加对象组后自动带过来的trigger

图5:添加对象组后自动带过来的trigger

(3)设置form中b_col_head块下字段头部item的属性,这里注意将子类信息设置成PC_MULTI_COL_HEAD1,其他的设置就不强调了。

将子类信息设置成PC_MULTI_COL_HEAD1

图6:将子类信息设置成PC_MULTI_COL_HEAD1

(4)制作menu文件,最后menu的布局如下图7所示,menu文件名为cmx_mngetusers。

201410311414739132110428.png

图7:menu布局

图7中可以看到我设置的菜单名是option_menu,其实这里建议使用的名字是view_menu,multiview的初始化代码中默认的也是view_menu,不过这里自定义名字也没事,后面初始化的时候注意下代码就好。menu中DEFAULT、CUSTOM、SAVED这三个菜单项是必须的,菜单做好以后,往menu_elements、menu_elements_langs表中注册下相关信息。

此外,要在DEFAULT、CUSTOM、SAVED这三个菜单项中分别添加如下PL/SQL代码:

在DEFAULT中添加如下:

set_menu_item_property ('OPTION_MENU.DEFAULT', CHECKED, PROPERTY_TRUE);
set_menu_item_property ('OPTION_MENU.SAVED', CHECKED, PROPERTY_FALSE);
set_menu_item_property ('OPTION_MENU.CUSTOM', CHECKED, PROPERTY_FALSE);
Execute_trigger('T_view_default');

在CUSTOM中添加如下:

set_menu_item_property ('OPTION_MENU.DEFAULT', CHECKED, PROPERTY_FALSE);
set_menu_item_property ('OPTION_MENU.SAVED', CHECKED, PROPERTY_FALSE);
set_menu_item_property ('OPTION_MENU.CUSTOM', CHECKED, PROPERTY_TRUE);
Execute_trigger('T_view_custom');

在SAVED中添加如下:

set_menu_item_property ('OPTION_MENU.DEFAULT', CHECKED, PROPERTY_FALSE);
set_menu_item_property ('OPTION_MENU.SAVED', CHECKED, PROPERTY_TRUE);
set_menu_item_property ('OPTION_MENU.CUSTOM', CHECKED, PROPERTY_FALSE);
Execute_trigger('T_view_saved');

对于菜单文件的处理到此结束。

(5)设置form的属性,使form与menu对应,如图8所示:

form中菜单模块设置

图8:form中菜单模块设置

处理好了上面设置以后,还有一步重要的是往form_menu_link表中添加注册信息,使得form与menu匹配,代码如下:

INSERT INTO form_menu_link
  (FM_NAME, MENU_FILENAME)
VALUES
  ('CMX_YED_GETUSERS', 'cmx_mngetusers');

(6)在form中增加三个form级trigger,分别为T_VIEW_CUSTOM、T_VIEW_DEFAULT、T_VIEW_SAVED。

新增三个form级trigger

图9:新增三个form级trigger

T_VIEW_CUSTOM中增加代码如下:

P_MULTIVIEW_MENU.CUSTOMIZE;

T_VIEW_DEFAULT中增加代码如下:

P_MULTIVIEW_MENU.SHOW_DEFAULT_VIEW;

T_VIEW_SAVED中增加代码如下:

P_MULTIVIEW_MENU.SHOW_SAVED_VIEW;

(7)在P_FORM_STARTUP存储过程中增加初始化代码,初始化代码如下:

mutiview初始化代码

图10:multiview初始化代码

  p_multiview.initialize('CMX_YED_GETUSERS', -- 这里是表multiview_default_45中存储的FM_NAME,一般我都用form的NAME
                         '', -- 一般这里不写
                         10, -- 第一个显示列的X位置
                         5000, -- 最后一列最大可显示的位置,位置不够时,会报错,可参见图11
                         'N', -- 默认为N就好
                         'N', -- 默认为N就好
                         NULL, -- 默认为NULL就好
                         TRUE, -- 默认为true就好
                         'OPTION_MENU'); -- 这里默认的是VIEW_MENU,由于我改了名字,所以写上
  p_multiview.go_multiview_block;

位置设置不够而报错

图11:位置设置不够而报错

根据这些操作就可以成功的做一个multiview了,这里介绍的并不是特别详细,只是把做multiview的核心过程总结在这里了,仅供参考。我在做multiview的时候出现过FRM:41067-Cannot find Menu Item:invalid ID错误,有出现过类似错误的朋友,也可以点击《FRM:41067-Cannot find Menu Item:invalid ID错误》这篇文章看看,记住在开发的时候,也是要往multiview_default_45表中注册一些信息的。

multiview开发可以参考的现成form:multiview开发参考form.zip

2014年12月25日补充:

retek multiview的设置除了用代码实现对它的控制以外,还可以通过retek 系统本身提供的可视化界面去操作,比如可以对multiview进行编辑,以设置某个item是否显示,等等。

multiview多视图编辑器

图11:multiview多视图编辑器

多视图管理的所在的位置是:控制 -> 系统 -> 多视图搜索工具 -> 编辑 或 添加。

本文标题:Oracle Retail(Retek)小结之Form的multiview开发过程总结

本文链接:http://yedward.net/?id=123

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章