在 Oracle Apex 中实现对 Shuttle 值的依赖
Achieving dependency on the Shuttle value in Oracle Apex
晚上好!
我正在 Oracle Apex 中创建一个页面,这会导致创建一个文档。这个页面有很多字段,比如 "text field" 或 "select list" 等等,它们都有自己的逻辑,我被两个字段卡住了 - 穿梭字段(让它命名为 A)和文本字段(让它命名为 B),这应该取决于第一个。他们的交互方案是这样的:
- 班车 A 的值为 "A"、"B"、"C"、"D" 和 "others";
- 如果从穿梭机中选择值 "others",则还应填写文本字段 B。换句话说,在这种情况下,字段 B 应该是必需的。
我遇到的问题是我无法使字段 B 的行为取决于字段 A 的值。我已经尝试使用从 "onChange" 事件触发的 JavaScript 函数,如果航天飞机 B 的右半部分具有 "others" 值,它应该可以正常工作。但是这种方式并没有像我想要的那样工作,因为每次点击 shuttle 的两半都会出现 "onChange" 事件,我需要让它只在移动值 "others" 时出现(可以做什么有两种方式:双击或单击穿梭机上的箭头图标)。
所以问题是:如何在"master-detail"逻辑中同步飞梭和文本字段?
p.s。我正在使用 Oracle Apex 4.2.6.0003。我也知道我可以有一个解决方法,只使用 select 列表,但我想尝试使用 shuttle 解决这个问题,特别是考虑到最后一个可能有几乎无限数量的值。
使用静态值作为班车的值列表:
STATIC:A;A,B;B,C;C,Others;OTHERS
像这样使用 jvascript 代码:
$("#P40_SHUTTLE").change(function(){
console.log(apex.item(this).getValue().indexOf("OTHERS") != -1);
})
选择OTHERS
已选择(它在航天飞机的值中)时,将return true。 Change 是在这里监听的正确事件!
将其翻译成 DA:
关于换班车
使用类型 "JavaScript expression" 的 "When" 条件并使用此代码:
apex.item(this.triggeringElement).getValue().indexOf("OTHERS") != -1
然后您可以使用 DA 的 True 和 False 操作来根据需要显示和隐藏文本字段。我不会在前端走得更远。也许为文本字段显示一个必需的标签,因为它只会在显示该字段时显示。
在文本字段上添加服务器端验证(提交时),您将在其中检查穿梭车值是否存在 OTHERS
值。如果它存在,那么文本字段应该是必需的。
在文本字段上创建验证。
"PLSQL Function Body"
类型的条件
DECLARE
l_vc_arr2 APEX_APPLICATION_GLOBAL.VC_ARR2;
BEGIN
l_vc_arr2 := APEX_UTIL.STRING_TO_TABLE(:P40_SHUTTLE);
FOR z IN 1..l_vc_arr2.count LOOP
IF l_vc_arr2(z) = 'OTHERS' THEN
RETURN TRUE;
END IF;
END LOOP;
RETURN FALSE;
END;
验证类型:IS NOT NULL
项目:文本字段。
仅当所选值中存在其他内容时才会触发验证,然后要求文本字段为必填项。
晚上好!
我正在 Oracle Apex 中创建一个页面,这会导致创建一个文档。这个页面有很多字段,比如 "text field" 或 "select list" 等等,它们都有自己的逻辑,我被两个字段卡住了 - 穿梭字段(让它命名为 A)和文本字段(让它命名为 B),这应该取决于第一个。他们的交互方案是这样的:
- 班车 A 的值为 "A"、"B"、"C"、"D" 和 "others";
- 如果从穿梭机中选择值 "others",则还应填写文本字段 B。换句话说,在这种情况下,字段 B 应该是必需的。
我遇到的问题是我无法使字段 B 的行为取决于字段 A 的值。我已经尝试使用从 "onChange" 事件触发的 JavaScript 函数,如果航天飞机 B 的右半部分具有 "others" 值,它应该可以正常工作。但是这种方式并没有像我想要的那样工作,因为每次点击 shuttle 的两半都会出现 "onChange" 事件,我需要让它只在移动值 "others" 时出现(可以做什么有两种方式:双击或单击穿梭机上的箭头图标)。
所以问题是:如何在"master-detail"逻辑中同步飞梭和文本字段?
p.s。我正在使用 Oracle Apex 4.2.6.0003。我也知道我可以有一个解决方法,只使用 select 列表,但我想尝试使用 shuttle 解决这个问题,特别是考虑到最后一个可能有几乎无限数量的值。
使用静态值作为班车的值列表:
STATIC:A;A,B;B,C;C,Others;OTHERS
像这样使用 jvascript 代码:
$("#P40_SHUTTLE").change(function(){
console.log(apex.item(this).getValue().indexOf("OTHERS") != -1);
})
选择OTHERS
已选择(它在航天飞机的值中)时,将return true。 Change 是在这里监听的正确事件!
将其翻译成 DA:
关于换班车 使用类型 "JavaScript expression" 的 "When" 条件并使用此代码:
apex.item(this.triggeringElement).getValue().indexOf("OTHERS") != -1
然后您可以使用 DA 的 True 和 False 操作来根据需要显示和隐藏文本字段。我不会在前端走得更远。也许为文本字段显示一个必需的标签,因为它只会在显示该字段时显示。
在文本字段上添加服务器端验证(提交时),您将在其中检查穿梭车值是否存在 OTHERS
值。如果它存在,那么文本字段应该是必需的。
在文本字段上创建验证。 "PLSQL Function Body"
类型的条件DECLARE
l_vc_arr2 APEX_APPLICATION_GLOBAL.VC_ARR2;
BEGIN
l_vc_arr2 := APEX_UTIL.STRING_TO_TABLE(:P40_SHUTTLE);
FOR z IN 1..l_vc_arr2.count LOOP
IF l_vc_arr2(z) = 'OTHERS' THEN
RETURN TRUE;
END IF;
END LOOP;
RETURN FALSE;
END;
验证类型:IS NOT NULL
项目:文本字段。
仅当所选值中存在其他内容时才会触发验证,然后要求文本字段为必填项。