Plsql I';我需要在表格表单之间添加一个虚拟行,以使其在用户端更具吸引力

Plsql I';我需要在表格表单之间添加一个虚拟行,以使其在用户端更具吸引力,plsql,oracle-apex,Plsql,Oracle Apex,表格表单是在带有SQL查询(可更新报表)的经典报表上创建的。 它还有一个向导生成的MRU&MRD流程 区域源代码有以下代码(写在下面),可以很好地工作,并显示如下所述的列 select "ROWID", "EVAL_SR_NO", (SELECT SKILL_DESC FROM TB_RCMI_EVAL_SKILLS WHERE SKILL_ID ="TB_RCMI_CNDT_INTV_EVAL"."EVAL_SKILL_ID" ) as "EVAL_SKILL_ID", "EVAL_

表格表单是在带有SQL查询(可更新报表)的经典报表上创建的。 它还有一个向导生成的MRU&MRD流程 区域源代码有以下代码(写在下面),可以很好地工作,并显示如下所述的列

select 
"ROWID",
"EVAL_SR_NO",
(SELECT SKILL_DESC FROM TB_RCMI_EVAL_SKILLS 
   WHERE SKILL_ID ="TB_RCMI_CNDT_INTV_EVAL"."EVAL_SKILL_ID" ) as
"EVAL_SKILL_ID",
"EVAL_SKILL_REMARKS"
from "#OWNER#"."TB_RCMI_CNDT_INTV_EVAL"
where eval_type='TE'and WF_ID = :P33_WF_ID

UNION ALL

select 
"ROWID",
"EVAL_SR_NO",
(SELECT SKILL_DESC FROM TB_RCMI_EVAL_SKILLS
   WHERE SKILL_ID ="TB_RCMI_CNDT_INTV_EVAL"."EVAL_SKILL_ID" ) as
"EVAL_SKILL_ID",
"EVAL_SKILL_REMARKS"
from "#OWNER#"."TB_RCMI_CNDT_INTV_EVAL"
where eval_type='GE'and WF_ID = :P33_WF_ID
order by EVAL_SR_NO
我的表格表格有3列(即Sr No&Skill为仅显示格式,备注列为文本区域),如下所示:

高级工程师:无技能备注

1 Java语言
2 Oracle数据库 3 Oracle DBA
4 Oracle Pl Sql
5沟通
6分析思维 7逻辑思维 8态度
9领导素质
10商业理解

我需要在5号和6号Sr之间添加一个虚拟行(仅用作显示),作为“一般评估”。如下图所示

高级工程师:无技能备注

1 Java语言
2 Oracle数据库 3 Oracle DBA
4 Oracle Pl Sql
5通信

“一般评价”

6分析思维

7逻辑思维

8态度

9领导素质

10商业理解

如果你们中有人能帮我解决这个问题(给出详细的答案),那将是非常有帮助的

我希望这些信息将有助于充分。。。如果我需要提供更多信息,请告诉我

等待反馈。提前感谢


(我使用的是ApEX 4.1)

您真正需要的是在一个页面上显示两个表格,不幸的是,这是不可能的(现在还不可能)。那怎么解决呢?除非你真的绝对需要在一个页面上有这个编辑功能:我不会。如果你这样做了(我的意思是绝对必须),那么javascript将被卷入其中。 我的建议:制作两份报告,提供一个编辑链接。这也是标准功能。当然,不会一次进行多次编辑,但这将是以后最容易维护的。任何习俗都会让你在事后重新思考,所以值得考虑

如果您真的需要它,我认为这是最舒适的方式:除了一个列之外,不要在sql中做手脚。不要用双联管和一些“伪”列进行排序(因为您需要某种方法来确保双联列在特定值之间…)

区域来源:

select 
"ROWID",
"EMPNO",
"ENAME",
"JOB",
"DEPTNO"
from "EMP"
where "DEPTNO" IN (10, 20)
order by "DEPTNO"
DEPTNO是一个隐藏项。order by非常重要,因为进一步的处理取决于行的特定顺序。关闭列标题排序(选中“报告属性上的列排序”复选框)

Javascript:

function bind_for_changes(){
   //since emp is sorted by deptno, i can loop over the elements in this way
   //i also have deptno as a hidden item in the report, so that i can check its value
   //since this hidden item is the 4th editable item, its id will be f04_####
   //be sure to check the source output if you want to be sure.
   //for each input item with name f04 (deptno), do:
   //check if its value differs from our stored value.
   // if it does, but our var is still -1, then it is only the first record. Do nothing.
   // if it does and the var is not -1, then there is a difference between deptnos. 
   // for example, 10 -> 20. 
   // this change will be detected on the first row of deptno=20. So the splitter row
   // needs to be before this one.
   // The input item sits in a TD, the TD in a TR. We need to add a TR element BEFORE
   // the current one, so we get the TR and add a new one before it, with a TD in it.
   // note the colspan=3, which is the amount of displayed columns. If not sure, check the DOM.
   // Or, provide 3 TDs
   var deptno = -1;
   $("input[name='f04']").each(function(){
      if(deptno != $(this).val()){
         if(deptno == -1){
            deptno = $(this).val(); //first time, first record
            //dont change anything
         } else {
            //a change between deptno's. Add a row after the current one
            deptno = $(this).val();
            var tr = $(this).parent().parent();
            var newtr = $("<tr class='highlight-row'><td colspan=3 class='data'>In between rows!</td></tr>");
            tr.before(newtr);
         };
      };
   });
};
函数绑定\u以进行\u更改(){
//因为emp是按deptno排序的,所以我可以用这种方式循环元素
//我还将deptno作为报表中的隐藏项,以便检查其值
//由于此隐藏项是第四个可编辑项,因此其id将为f04_####
//如果要确定,请确保检查源输出。
//对于名为f04(deptno)的每个输入项,执行以下操作:
//检查其值是否与存储值不同。
//如果是,但我们的var仍然是-1,那么它只是第一条记录。什么也不要做。
//如果是,且var不是-1,则deptnos之间存在差异。
//例如,10->20。
//此更改将在deptno=20的第一行上检测到。因此拆分器行
//必须在这之前。
//输入项位于TD中,TD位于TR中。我们需要在之前添加一个TR元素
//当前的一个,所以我们得到TR,并在它前面添加一个新的,其中有一个TD。
//注意colspan=3,这是显示的列的数量。如果不确定,请检查DOM。
//或者,提供3个TDs
var-deptno=-1;
$(“输入[name='f04']”)。每个(函数(){
if(deptno!=$(this.val()){
如果(deptno==-1){
deptno=$(this).val();//第一次,第一条记录
//不要改变任何事情
}否则{
//deptno之间的更改。在当前行之后添加一行
deptno=$(this.val();
var tr=$(this.parent().parent();
var newtr=$(“在行之间!”);
tr.before(newtr);
};
};
});
};
请注意,就像我在js注释中所说的:您需要知道页面将生成什么/能够读取源代码/了解DOM。多多少少的可编辑列可以而且会把你的代码搞砸

例如,在我的页面上,当您查看源代码时,重要的是报告中行的结构:

<tr class="highlight-row">
   <td headers="EMPNO" class="data">7782</td>
   <td headers="ENAME" class="data">
      <label for="f02_0003" class="hideMeButHearMe">Ename</label>
      <input type="text" name="f02" size="12" maxlength="2000" value="CLARK"  id="f02_0003" />
   </td>
   <td headers="JOB" class="data">
      <label for="f03_0003" class="hideMeButHearMe">Job</label>
      <input type="text" name="f03" size="9" maxlength="2000" value="MANAGER"  id="f03_0003" />
      <input type="hidden" name="f01" value=""  id="f01_0003" />
      <input type="hidden" name="f04" value="10"  id="f04_0003" />
      <input type="hidden" id="fcs_0003" name="fcs" value="3C09CABCBA62BE1A064146D162012CEF">
      <input type="hidden" id="frowid_0003" name="frowid" value="AAuDjIABFAAAACTAAC" />
      <input type="hidden" id="fcud_0003" name="fcud" value="U" />
   </td>
</tr>

7782
艾娜
工作
注意输入的ID和名称,以及它们的位置

另外,由于apex 4.1(我相信),在table元素之后有一个映射

<input type="hidden" name="fmap" value="CHECK$01" id="fmap_001" />
<input type="hidden" name="fhdr" value="Select Row" id="fhdr_001" />
<input type="hidden" name="fmap" value="ENAME" id="fmap_002" />
<input type="hidden" name="fhdr" value="Ename" id="fhdr_002" />
<input type="hidden" name="fmap" value="JOB" id="fmap_003" />
<input type="hidden" name="fhdr" value="Job" id="fhdr_003" />
<input type="hidden" name="fmap" value="DEPTNO" id="fmap_004" />
<input type="hidden" name="fhdr" value="Deptno" id="fhdr_004" />

这可以从列属性转换。但要始终小心,仔细检查。它不会伤害你,你仍然需要知道输出代码。

然而,如果所有这些听起来都太高级/困难,那么就不要进行下去!以后你只会后悔的而是使用标准功能实现以下功能:2个普通报告,带有指向单个记录表单页面的编辑链接!
但如果你必须的话,在我看来,这是最干净的道路。您只需要知道自己在做什么。

是的,一页上有两个表格是不可能的,所以唯一的方法是手动创建它们(这同样是一个麻烦),非常感谢。。将尝试合并标准功能,除非我的想法不是绝对必要的..np-如果答案对您有帮助,请接受它并为您(和我)赢得一些声誉;)