- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将下拉菜单按钮添加到经典报表行,并将菜单项分配给流程或 DA。我已经使用 Universal Theme 文档来帮助我弄清楚如何将菜单按钮添加到经典报告中,但现在我卡住了,不明白如何为我的每个项目分配/附加动态操作或流程菜单列表:
批准工作量
分配工作量
对于这个实例,两个菜单项都将打开一个对话框页面,传递行的主键(MASTER_ID
),但其他地方的一些其他操作将需要处理更复杂的逻辑,其中 APEX 处理或 DA 最好。
我会感到惊讶的是 APEX 没有像这样的东西可以在本地实现,因为有类似于交互式网格的东西并且是一种常见的网络模式。
更新:我继续将其添加为 APEX 创意 (FR-2133) here .如果您认为这是值得添加到 APEX 的东西,请给它一个赞。
最佳答案
不幸的是,没有内置的解决方案。有一个 good blog post by John Snyders描述了一种自己构建它的方法。
我还构建了一些类似的功能,我有一个 demo of here .这使用定制表来存储菜单选项,并在打开菜单时进行 AJAX 调用以获取要显示的适当菜单条目。这些可以是有条件的,例如“计算佣金”菜单项仅适用于 job='SALESMAN' 的员工。
create table report_menus
( menu_name varchar2(30),
constraint report_menus_pk primary key (menu_name)
);
create table report_menu_entries
( menu_name varchar2(30) not null enable,
entry_title varchar2(100) not null enable,
entry_target varchar2(1000) not null enable,
display_sequence number,
condition_type varchar2(30),
condition_expression varchar2(4000),
constraint report_menu_entries_pk
primary key (menu_name, display_sequence),
constraint report_menu_entries_fk1
foreign key (menu_name)
references report_menus (menu_name)
);
(表 REPORT_MENUS 用于完整性目的,但在此演示中没有做太多事情)。
在我的示例中,我创建了一个名为“EMPLOYEE_MENU”的菜单,其中包含 2 个选项:
insert into report_menu_entries values
( 'EMPLOYEE_MENU',
'Update',
'f?p=&APP_ALIAS.:3:&SESSION.::&DEBUG.:3:P3_EMPNO:<pk>',
1,
'NOT_EXISTS',
'select * from emp where empno=<pk> and job = 'PRESIDENT''');
insert into report_menu_entries values
( 'EMPLOYEE_MENU',
'Calculate commission',
'javascript:alert('Not yet implemented');',
2,
'EXISTS',
'select * from emp where empno=<pk> and job='SALESMAN''');
我发明了一个特殊的占位符 <pk>
无论我想插入我们所在记录的主键(即本演示中的 EMPNO),我都会使用它。这在目标 URL 和取决于数据的条件中是必需的。
在报告中,我通过选择 null as menu
为菜单创建了一个虚拟列。 .我把它变成一个目标 URL 为 #
的链接(我们真的不需要目标)和这些属性:
<span class="fa fa-navicon" aria-hidden="true" title="report menu"></span>
链接属性
class="report-menu" data-key="#EMPNO#" data-menu="EMPLOYEE_MENU"
链接文本显示一个合适的图标,属性是它开始工作的原因。 data-key
属性定义此行的主键值,data-menu
属性指定要使用我们的哪个 REPORT_MENUS。
我们现在需要一个动态 Action 来处理菜单上的点击。这使用了 jQuery 选择器 .report-menu
识别被点击的链接,并执行这段 Javascript 代码:
showReportMenu (this.triggeringElement);
showReportMenu
是一个 Javascript 函数,定义如下:
function showReportMenu (pLink) {
var theLink = $(pLink);
var dataMenu = theLink.attr("data-menu");
var dataKey = theLink.attr("data-key");
apex.server.process ( "Show_Report_Menu", {
x01: dataMenu,
x02: dataKey
}, {
success: function( pData ) {
$('div#reportMenu').remove();
var html = '<div id="reportMenu" ><ul>';
for (i=0; i<pData.menu.length; i++) {
if (pData.menu[i].url == '') {
html = html + '<li><span>' + pData.menu[i].title + '</span></li>';
} else {
html = html + '<li><a href="' + pData.menu[i].url + '">' + pData.menu[i].title + '</a></li>';
}
}
html = html + '</ul></div>';
$(theLink).after(html);
$('#reportMenu').menu({}).menu("toggle",theLink);
}
});
}
这会调用一个 AJAX 回调应用程序进程“Show_Report_Menu”,该进程返回包含菜单选项的 JSON,然后显示这些选项。
“Show_Report_Menu”过程只是调用一个过程:
report_menu_pkg.render_menu
( p_menu_name => apex_application.g_x01
, p_keyvals => apex_application.g_x02
);
该过程会查找菜单的菜单条目,决定是否应为键值显示这些条目,并返回要显示的条目的 JSON。它看起来像这样:
procedure render_menu
( p_menu_name varchar2
, p_keyvals varchar2
)
is
l_first boolean := true;
k_template constant long := '{"title": "%0", "url": "%1"}';
l_buffer long;
l_test_sql long;
l_count integer;
begin
-- Construct a JSON object to return the menu entries e.g. {"menu": [{"title": "Update", "url": ".."}, {"title": "Delete", "url": "..."}]}
sys.htp.p('{"menu": [');
-- Process the menu entries in display sequence order and check any condition before adding to the JSON
<<entries>>
for r in (
select *
from report_menu_entries
where menu_name = p_menu_name
order by display_sequence
) loop
-- Check any condition, substituting placeholder <pk> with the actual key value
case r.condition_type
when 'EXISTS' then
l_test_sql := 'select count(*) from dual where exists (' || replace (r.condition_expression, '<pk>', p_keyvals) || ')';
execute immediate l_test_sql into l_count;
continue entries when l_count = 0;
when 'NOT_EXISTS' then
l_test_sql := 'select count(*) from dual where exists (' || replace (r.condition_expression, '<pk>', p_keyvals) || ')';
execute immediate l_test_sql into l_count;
continue entries when l_count = 1;
else
null;
end case;
-- Separate entries by commas (no comma befor first)
if l_first then
l_first := false;
else
sys.htp.p (',');
end if;
-- Replace placeholders in target URL including the key value
r.entry_target := replace (r.entry_target, '<pk>', p_keyvals);
r.entry_target := replace (r.entry_target, '&APP_ALIAS.', v('APP_ALIAS'));
r.entry_target := replace (r.entry_target, '&SESSION.', v('SESSION'));
r.entry_target := replace (r.entry_target, '&DEBUG.', v('DEBUG'));
r.entry_target := apex_util.prepare_url (r.entry_target);
-- Construct JSON entry
l_buffer := apex_string.format (k_template, r.entry_title, r.entry_target);
sys.htp.p(l_buffer);
end loop entries;
if l_first then
l_buffer := apex_string.format (k_template, '(No actions available)', null);
sys.htp.p(l_buffer);
end if;
sys.htp.p(']}');
end;
我认为这就是一切。有改进的余地,因为这只是演示代码。理想情况下,JSON 将使用 APEX_JSON 或其他任何方式构建得更健壮,并且它应该能够处理复合键,例如通过传入以逗号分隔的值列表并指定例如<pk1>,<pk2>
作为占位符。
关于oracle-apex - 如何将动态操作或流程附加到菜单弹出列表项 - APEX 21.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69270469/
使用 Foundation 6.3.1,我希望在桌面上显示 Canvas 外菜单,在移动设备上显示 Accordion 菜单。例如 This is the desktop view with a co
function HideandUNhideObj(ThisObj) { var nav = document.getElementById(ThisObj).style if (nav.displ
我正在处理一个页面,该页面有一个显示“更新”的链接。当用户单击此链接时,我希望表单使用幻灯片效果并显示在链接下方。提交表单后,它会更新数据库,并且菜单会显示。 我知道这可以用 JavaScript 来
这是我的运行时创建菜单的关键部分: GtkWidget *menu, *menu_item; menu = gtk_menu_new(); menu_item = gtk_image_menu_ite
您好,我想实现一个像这样的 donut 菜单 http://dribbble.com/shots/610433-Wheel-Nav我知道有一种在 css3 中制作 donut 的简单方法。 .doug
我的应用程序中有一个菜单,当菜单打开时我会触发触觉反馈(来自 onTagGesture Action )。 然而 有时当我点击菜单打开触发器时,菜单实际上不会打开,但我仍然收到触觉反馈。我只在菜单实际
也许这是一个简单的解决方案,但我坚持了下来。 这里有我的代码 http://jsbin.com/ejomuv纯CSS菜单 我想要做的是在悬停时在下拉按钮底部设置 0px 边框半径,但仅在下拉菜单上设置
下拉列表、菜单和组合框都是非常常见的用户界面元素。用户习惯于在 native 应用程序和 Web 应用程序中看到这些元素,但它们存在一些问题。 您必须瞄准鼠标。当您将鼠标移开时,有些菜单会折叠,而有些
我有 codeigniter 背景。现在,我正在学习 Laravel。所以,我处于这种情况(示例),我正在尝试创建一个具有多个用户的 web 应用程序。用户类型 A ,他们可以访问菜单 a、菜单 b
我正在学习 JQuery 的基础知识,我的老师显示的 menu() 看起来根本不像我的。 这是我创建的菜单的 LAF: 代码: Hello Hi Welcome World
- SELECT - 上面的显示:none不起作用。我也尝试过“隐藏”,但没有成功。 如何隐藏此选择菜单? 最佳答案 换行与 或并将 id 添加到标签。 - SELECT
我使用 Jquery 创建菜单,如下所示: homeinfo2info3 Jquery 代码如下: $(document).ready(function(){ $(".prof_info1").unb
我是 C 新手,我需要为项目构建一个带有循环的菜单。我有两个问题。 1) 我想在 else 中添加一个字符,如果在主菜单中按“2”后询问某事,问题将是“你要去参加事件吗?”用户可以输入聊天“Y”或“N
大家好,过去几个小时我一直在为类(class)编写这个程序,但似乎无法解决最后两个问题。它基本上是一个略微修改的 CashRegister 类,通过菜单提供基本功能。我遇到的问题是: 1) 用户第一次
List studentInfo = new LinkedList(); int choice; boolean flag = true; Student student =
我正在使用 bootsrap 4 alpha 6 和 midnight.js 来更改导航菜单切换器的颜色。我想在它旁边插入一个文本(菜单)。捕获中的示例。对于文本切换器,我使用 fontawesome
我正在尝试使用 CSS 菜单解决菜单在 IE 6 中无法正确显示的问题 alt text http://content.screencast.com/users/Dokmanc/folders/Jin
我无法让这段代码工作 - 我想要的是当我将鼠标悬停在圆圈上时,菜单会出现,然后如果我将鼠标从圆圈或菜单上移开,它就会消失。我尝试做的任何事情都是非常错误的,例如 onmouseover 在圆圈上然后在
我有一个典型的 CSS 顶部导航,当您滑过不同的父菜单项时,它会显示一个子菜单。如何更改代码以保持显示事件子菜单。因此,如果您在该父菜单项或其子项之一的页面上,它将保持显示该子菜单,除非您将鼠标悬停在
我很亲近。我怎样才能在我的 上有 MENU 1。 fiddle显示为默认菜单选项,然后在 MENU 2 悬停时更改? 提前致谢。继续编码! :) 最佳答案 要根据您的响应完全远离 jquery 进行编
我是一名优秀的程序员,十分优秀!