Мне нужно добавить фиктивную строку между табличной формой, чтобы сделать ее более привлекательной для пользователя - PullRequest
1 голос
/ 13 декабря 2011

Табличная форма была создана для классического отчета с 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 имеет только отображаемый формат, а столбец Remarks имеет текстовую область) изображен ниже:

Sr No Skills Remarks

1 Язык Java
2 Oracle Database 3 Oracle DBA
4 Oracle Pl Sql
5 Связь
6 Аналитическое мышление 7 Логическое мышление 8 Отношение
9 Лидерские качества
10 Понимание бизнеса

Мне нужно добавить фиктивную строку (котораябудет действовать только как дисплей) между Sr № 5 и Sr № 6 как «Общая оценка».Как показано ниже ...

Sr Нет замечаний по навыкам

1 Язык Java
2 База данных Oracle 3 Oracle DBA
4 Oracle Pl Sql
5 Связь

"Общая оценка"

6 Аналитическое мышление

7 Логическое мышление

8 Отношение

9 Лидерские качества

10 Понимание бизнеса

Было бы очень полезно, если бы кто-то из вас мог помочь мне с этим (с подробным ответом)

Я надеюсь, что эта информация будет полной ... пожалуйста, дайте мне знать, еслимне нужно дать больше информации

в ожидании обратной связи. Заранее спасибо

(использую ApEX 4.1)

1 Ответ

0 голосов
/ 13 декабря 2011

Что вам действительно нужно, так это две табличные формы на одной странице, что, к сожалению, невозможно (пока?).Как решить это тогда?Если вам действительно не нужно иметь эту функцию редактирования на одной странице: я бы не стал.Если вы это сделаете (и я имею в виду абсолютно обязательно), то с javascript возникнут сложности.Мой совет: сделайте 2 отчета, предоставьте ссылку для редактирования.Это стандартная функциональность тоже.Конечно, не нужно многократно редактировать, но потом будет легче поддерживать.Что-нибудь нестандартное заставит вас задуматься снова, так что стоит подумать.

Если вам это действительно нужно, я думаю, что это самый удобный способ сделать это: НИКАКОГО возиться в SQL, кроме, может быть, столбцаБольше.Нет необходимости разбираться с объединениями с двойными значениями и упорядочением по некоторым «псевдо» столбцам (потому что вам нужен какой-то способ убедиться, что двойной столбец (столбцы) находятся между определенными значениями ...).

Пример с таблицей EMP

Источник региона:

select 
"ROWID",
"EMPNO",
"ENAME",
"JOB",
"DEPTNO"
from "EMP"
where "DEPTNO" IN (10, 20)
order by "DEPTNO"

DEPTNO - скрытый элемент.Порядок по очень важен, так как дальнейшая обработка зависит от определенного порядка строк.Отключите сортировку заголовков столбцов (флажок для сортировки столбцов в атрибутах отчета).

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);
         };
      };
   });
};

Делайте заметки, как я заявляю в комментарии 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>

Обратите внимание на идентификаторы и имена входов, а также на то, где они размещены.

Кроме того, начиная с вершины 4.1 (я полагаю), после элемента таблицы

<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" />
есть отображение

Это можно перевести из атрибутов столбца.Но всегда будьте осторожны и перепроверяйте.Это никогда не повредит, и вам все равно нужно знать выходной код.column attributes

Однако, если все это звучит слишком продвинуто / сложно, не переживайте!Вы только пожалеете об этом потом. Скорее используйте стандартную функциональность для чего-то вроде этого: 2 обычных отчета со ссылкой на страницу редактирования одной записи!Но если вы должны, на мой взгляд, это самый чистый путь.Вам просто нужно знать, что вы делаете.

...