Oracle apex 在自动完成文本字段中存储2个值:ID和名称
目前,我使用弹出LOV显示供应商列表,但我正在尝试将该字段更改为文本字段自动完成。我显示供应商名称,但存储供应商ID。当我尝试更改字段时,APEX表示在LOV查询中选择了错误的列数 是否有在文本字段自动完成中保存两个值的方法?我当前用于弹出LOV的以下查询:Oracle apex 在自动完成文本字段中存储2个值:ID和名称,oracle-apex,Oracle Apex,目前,我使用弹出LOV显示供应商列表,但我正在尝试将该字段更改为文本字段自动完成。我显示供应商名称,但存储供应商ID。当我尝试更改字段时,APEX表示在LOV查询中选择了错误的列数 是否有在文本字段自动完成中保存两个值的方法?我当前用于弹出LOV的以下查询: SELECT SUPPLIER_NAME KEY, SUPPLIER_ID VALUE FROM SUPPLIERS WHERE ENABLED_FLAG = 'Y' order by SUPPLIER_NAME 自动完成文本项没
SELECT SUPPLIER_NAME KEY, SUPPLIER_ID VALUE
FROM SUPPLIERS
WHERE ENABLED_FLAG = 'Y'
order by SUPPLIER_NAME
自动完成文本项没有单独的显示值和返回值,它只有一个值,因此关联的LOV只能有一个值。当标准选项没有剪切它时,您可以始终滚动自己的LOV 基本jquery自动完成项(ex)
(这是相当基本的,但它向您展示了基本知识)
<script src="#IMAGE_PREFIX#libraries/jquery-ui/1.8.14/ui/minified/jquery.ui.autocomplete.min.js" type="text/javascript"></script>
<link rel="stylesheet" href="#IMAGE_PREFIX#libraries/jquery-ui/1.8.14/themes/base/jquery.ui.autocomplete.css" type="text/css" />
DECLARE
v_json CLOB;
BEGIN
FOR rec IN (SELECT '{' || '"value":"' ||e.EMPNO ||'",'||
'"label":"' ||e.ENAME ||'"' -- last entry
|| '}' obj
FROM EMP e
WHERE UPPER(e.ENAME) like UPPER(apex_application.g_x01)||'%'
) LOOP
v_json := v_json ||','|| rec.obj;
END LOOP;
v_json := '[' || LTRIM(v_json, ',') || ']';
htp.p(v_json);
END;
或研究使用插件。例如,这个:首先,单击编辑页面并添加以下CSS:
<style>ac_key{display:none}</style>
- P99_AC_字段-用于在列表中搜索值的文本字段
- P99_AC_FIELD_KEY-用于传递所选密钥的隐藏字段
此外,您还可以将多个值放入分隔列表中,JSON或标记并不重要。在结果事件中,您可以分析它们并一次填写几个(隐藏或正常)字段。解决方案需要更少的自定义编码 创建两个字段。一个用于自动完成名称,另一个用于ID。ID是存储在数据库中的内容 ID字段
- 名称:
字段_1
- 类型:隐藏
- 设置;受保护价值:否
- 来源;类型:数据库列
- 来源;数据库列:
SELECTION\u ID
- 名称:
字段_2
- 类型:具有自动完成功能的文本字段
- 设置:[选择所需内容]
- 价值清单;类型:SQL查询
- 价值清单;SQL查询:
从[LIST\u TABLE]中选择[NAME]
- 确保查询提供唯一的值;没有重复的
- 来源;类型:SQL查询(返回单个值)
- 来源;SQL查询:
从表单的[LIST\u TABLE]中选择[NAME],其中ID=:FIELD\u 1
- 来源;SQL查询:
用于数据网格(从[LIST\u TABLE]中选择[NAME],其中ID=Q.SELECTION\u ID)
- 名称:更新ID字段
- 何时;事件:自定义
- 何时;自定义事件:
结果
- 何时;选择:项目
- 何时;项目:
字段2
- 正确时的操作
- 动作:设定值
- 设置;集合类型:SQL语句
- 设置;SQL语句:
从[LIST\u TABLE]中选择[ID],其中[NAME]=FIELD\u 2
- 受影响因素;选择类型:项目
- 受影响因素<代码>字段_1
对于数据网格,您将无法直接隐藏ID列,您必须在Actions->Columns菜单中取消选择该列。您必须确保名称数据是唯一的。重复将导致从ID检索名称时响应多个值,并将导致错误。但确实如此。请看下面我的答案。@NaeelMaqsudov不,它没有。你下面的答案是一个好主意,但是LOV仍然只有一个单一的价值,你只是对这个价值的内容进行了创新。我的答案仍然正确。当然,我的想法不会使你的答案不正确。我只想指出,自动完成文本项自然地不支持单独的显示和返回值。很好,但从说“这是一种克服限制的方法”开始可能是个好主意+无论如何,令人惊讶的是,这不是APEX最初设计的一部分。它在EBS中以类似的形式出现已经很久了。
<style>ac_key{display:none}</style>
SELECT SUPPLIER_NAME||'<ac_key>'||SUPPLIER_ID||'</ac_key>'
FROM SUPPLIERS
WHERE ENABLED_FLAG = 'Y'
order by SUPPLIER_NAME
$("#P99_AC_FIELD").result(function(event,data,formatted){
if(data){
if(ac_key = data.toString().match("<ac_key>(.*)</ac_key>")){
//console.log(ac_key[1]);
$("#P99_AC_FIELD_KEY").val(ac_key[1]);
}
}
});