Oracle Apex 如何生成有效wwv_flow_api.id以动态构建应用组件
Oracle Apex动态构建组件时wwv_flow_api.id的实现思路
- 优先使用Apex官方内置的
wwv_flow_api.get_next_id函数生成ID
这个函数是Apex原生提供的ID生成能力,返回的ID全局唯一,完全符合wwv_flow_api各组件创建接口的参数格式要求,不会和当前环境内已有的应用、页面、组件ID冲突,无需自己做重复校验。 - 预生成ID后做关联绑定
创建区域前先调用wwv_flow_api.get_next_id拿到ID赋值给临时变量,调用wwv_flow_api.create_plug创建区域时直接将该变量赋值给p_id参数;后续创建该区域下属的页项时,直接将同一个变量赋值给页项创建接口的p_item_plug_id参数,即可天然实现项和区域的关联关系,不会出现ID不匹配的问题。 - 批量创建场景的处理方案
如果需要一次性创建多个区域和对应的批量页项,可以先定义存储区域元数据的集合,遍历集合时逐个预生成区域ID存入集合对应字段,待所有区域创建完成后,再遍历页项的元数据,直接提取对应区域的预生成ID赋值给p_item_plug_id即可,既保证关联准确性,也能提升批量创建的执行效率。 - 核心注意事项
不要手动硬编码指定ID值,手动指定的ID很容易和当前环境内已有的组件ID冲突,轻则组件创建失败,重则导致现有应用的功能异常。所有ID生成操作都要在已经进入对应Apex应用会话上下文的前提下执行,避免出现跨应用的ID冲突问题。
参考实现代码示例
declare -- 存储预生成的区域ID l_region_id number; -- 存储预生成的页项ID l_item_id number; begin -- 生成区域的唯一ID l_region_id := wwv_flow_api.get_next_id; -- 创建区域,p_id传入预生成的ID wwv_flow_api.create_plug( p_id => l_region_id, p_flow_id => 100, -- 替换为你的应用ID p_page_id => 1, -- 替换为你的页面ID p_plug_name => '动态生成的表单区域', p_plug_type => 'NATIVE_FORM', p_display_sequence => 10, p_display_point => 'BODY_1' ); -- 生成页项的唯一ID l_item_id := wwv_flow_api.get_next_id; -- 创建页项,p_item_plug_id传入区域的预生成ID完成关联 wwv_flow_api.create_page_item( p_id => l_item_id, p_flow_id => 100, p_page_id => 1, p_item_plug_id => l_region_id, p_item_name => 'P1_DYNAMIC_INPUT', p_item_type => 'NATIVE_TEXT_FIELD', p_display_sequence => 10, p_label => '动态输入项' ); end; /
内容的提问来源于stack exchange,提问作者Ulrik Larsen
相关产品推荐
相关产品推荐

