Cognos 11.0.11 - отображение / скрытие даты в Javascript

Некоторое время назад я получил приведенный ниже javascript с веб-сайта, который показывает и скрывает подсказку даты на основе выбора из подсказки значения переключателя.

<script type = "text/javascript">
var inputs = document.getElementsByTagName("input");
var list_box = new Array();

/****Identify Radio Buttons and load them into an array****/
var radio_buttons = new Array();
j=0;

for(i=0;i<inputs.length;i++)
{
if (inputs[i].type=='radio')
  {
    radio_buttons[j] = inputs[i];
    j++;
  }   
}

/****Set the onclick event of each radio button option to trigger our custom function****/
radio_buttons[0].setAttribute("onclick",function(){ToggleDate();});
radio_buttons[1].setAttribute("onclick",function(){ToggleDate();});
radio_buttons[2].setAttribute("onclick",function(){ToggleDate();});


/****Create a handle for date prompt****/
var prompt = document.getElementById("date_prompts").childNodes[0];

function ToggleDate()
{
if (radio_buttons[0].checked)
  {
  /**** First options (in our case "Custom") is selected.**** 
   **** Date Prompt will be Shown or Enabled.            ****/

  document.getElementById("date_prompts").style.display = '';  //show
  // prompt.disabled = '';   //enable

  canSubmitPrompt();
  }
else
  {
  /**** Second options (in our case "Yesterday") is selected.****
   **** Date Prompt will be Hidden or Disabled.              ****/

  document.getElementById("date_prompts").style.display = 'none';   //hide
  //prompt.disabled = 'true';   //disable

  canSubmitPrompt();
  }
}
</script> 

Хотя мы использовали Cognos 10.2.2, этот код работал нормально (вместе с парой других элементов HTML, охватывающих подсказку даты). Сейчас мы находимся в процессе обновления до Cognos 11.0.11, пока я тестировал отчеты в новой среде, я обнаружил, что этот код больше не работает, а подсказка даты отображается независимо от того, какой вариант выбран с помощью радиокнопки.

Пожалуйста, может кто-нибудь дать мне несколько указателей относительно того, что может здесь происходить, или еще лучше сказать мне, как решить проблему.

При создании нового отчета в Cognos 11 и добавлении элементов по отдельности появляется следующее сообщение об ошибке ...

Вывод отчета в формате HTML сформирован некорректно. Если в вашем отчете используются элементы «HTML Item», убедитесь, что они приводят к правильному формату HTML.

Причина: имя содержит недопустимый символ.

URL: Строка: 274 Характер: 24 Источник: для (i = 0; i

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
3 497
2

Ответы 2

Cognos выпустила JavaScript API с Cognos 10.2, который значительно упрощает то, что вы здесь делаете. Кроме того, он гарантированно будет поддерживаться между версиями.

Вот те же функции, написанные для Cognos JavaScript API:

Предположения:

  • Существует одно приглашение Cognos Select, настроенное как группа переключателей, у которого есть свойство Name 'radio_buttons', дающее возможность выбора из трех отдельных значений (1, 2 и 3).
  • Существует приглашение даты, заключенное в диапазон с атрибутом id 'date_prompts', которое должно отображаться, когда выбран первый переключатель, но не отображаться, если выбраны два других.

Код

var report = cognos.Report.getReport('_THIS_'); //Get report reference
var radioprompt = report.prompt.getControlByName('radio_buttons'); //Get prompt reference
var datespan = document.getElementById('date_prompts'); //Get span to hide/unhide

radioprompt.setValidator(validateRadio); //Assign a validation function

function validateRadio(values) {
     var result = true;
     if (values && values.length > 0) { //Make sure prompt has value
          if (values[0].use == '1') {  //Check if first radio button selected
               datespan.style.display = ''; //Show
          } else {
               datespan.style.display = 'none'; //Hide
          }
     }    
     return result; //Return result to Cognos. Always true in this case.
}

Дополнительную информацию о Cognos JavaScript API можно найти здесь: Документация по Cognos 11 JavaScript API

Спасибо за ответ. Предположительно, указанный вами фрагмент кода заменит код в тегах <script>? /

Ben Jennings 11.06.2018 13:58

Вы можете сделать это с помощью переменной рендеринга.

  1. Установите для свойства Работайте с полной интерактивностью отчета значение Нет.
  2. Создайте страницу подсказки и добавьте подсказку значения и подсказку даты.
  3. Установите для свойства Выберите интерфейс запроса значения значение Группа радиокнопок.
  4. Установите для свойства Авто-отправка запроса значения значение да.
  5. Добавьте значения Показать подсказку даты и Скрыть запрос даты к свойству Статический выбор подсказки значения.
  6. Создайте строковую переменную (Запросы | Обозреватель условий), которая использует параметр, связанный с подсказкой значения.
  7. Задайте для свойства Переменная рендеринга приглашения даты значение переменной, созданной на предыдущем шаге. Снимите флажок Скрыть запрос даты.

Чтобы функция автоматической отправки не запускала отчет, вам, вероятно, потребуется создать некоторые настраиваемые функции, чтобы заменить кнопку Заканчивать. См. Образец кода в спецификации отчета ниже. (Свойство Работайте с полной интерактивностью, похоже, не хранится в спецификации отчета. Вам нужно будет установить его вручную.)

Этот конкретный пример работает в 10.2.1 или 11.0.7 в режиме совместимости (Запуск с полной интерактивностью = Нет). Я еще не работал, чтобы сделать это правильно в 11.0.4+, используя RequireJS.

<report xmlns = "http://developer.cognos.com/schemas/report/14.1/" useStyleVersion = "11.4" expressionLocale = "en-us">
    <drillBehavior/>
    <layouts>
        <layout>
            <reportPages>
                <page name = "Page1">
                    <style>
                        <defaultStyles>
                            <defaultStyle refStyle = "pg"/>
                        </defaultStyles>
                    </style>
                    <pageBody>
                        <style>
                            <defaultStyles>
                                <defaultStyle refStyle = "pb"/>
                            </defaultStyles>
                        </style>
                        <contents/>
                    </pageBody>
                </page>
            </reportPages>
            <promptPages>
                <page name = "Prompt page1">
                    <pageHeader>
                        <contents>
                            <block>
                                <contents>
                                    <textItem>
                                        <dataSource>
                                            <staticValue>Prompt Page</staticValue>
                                        </dataSource>
                                        <style>
                                            <defaultStyles>
                                                <defaultStyle refStyle = "tt"/>
                                            </defaultStyles>
                                        </style>
                                    </textItem>
                                </contents>
                                <style>
                                    <defaultStyles>
                                        <defaultStyle refStyle = "ta"/>
                                    </defaultStyles>
                                </style>
                            </block>
                        </contents>
                        <style>
                            <defaultStyles>
                                <defaultStyle refStyle = "hp"/>
                            </defaultStyles>
                        </style>
                    </pageHeader>
                    <pageBody>
                        <contents>
                            <table>
                                <style>
                                    <defaultStyles>
                                        <defaultStyle refStyle = "tb"/>
                                    </defaultStyles>
                                    <CSS value = "border-collapse:collapse;width:100%"/>
                                </style>
                                <tableRows>
                                    <tableRow>
                                        <tableCells>
                                            <tableCell>
                                                <contents>
                                                    <selectValue selectValueUI = "radioGroup" autoSubmit = "true" parameter = "ShowHide">
                                                        <selectOptions>
                                                            <selectOption useValue = "Show Date Prompt">
                                                                <displayValue>Show Date Prompt</displayValue>
                                                            </selectOption>
                                                            <selectOption useValue = "Hide Date Prompt">
                                                                <displayValue>Hide Date Prompt</displayValue>
                                                            </selectOption>
                                                        </selectOptions>
                                                    </selectValue>
                                                    <selectValue parameter = "Parameter2" cascadeOn = "ShowHide" required = "false">
                                                        <style>
                                                            <CSS value = "visibility:hidden"/>
                                                        </style>
                                                    </selectValue>
                                                </contents>
                                                <style>
                                                    <CSS value = "text-align:left;vertical-align:top"/>
                                                </style>
                                            </tableCell>
                                            <tableCell>
                                                <contents>
                                                    <selectDate parameter = "Date">
                                                        <conditionalRender refVariable = "String1">
                                                            <renderFor refVariableValue = "Show Date Prompt"/>
                                                        </conditionalRender>
                                                    </selectDate>
                                                </contents>
                                                <style>
                                                    <CSS value = "text-align:left;vertical-align:top"/>
                                                </style>
                                            </tableCell>
                                        </tableCells>
                                    </tableRow>
                                </tableRows>
                            </table>
                        </contents>
                        <style>
                            <defaultStyles>
                                <defaultStyle refStyle = "py"/>
                            </defaultStyles>
                        </style>
                    </pageBody>
                    <pageFooter>
                        <contents>
                            <promptButton type = "cancel">
                                <contents/>
                                <style>
                                    <defaultStyles>
                                        <defaultStyle refStyle = "bp"/>
                                    </defaultStyles>
                                </style>
                            </promptButton>
                            <promptButton type = "finish">
                                <contents/>
                                <style>
                                    <defaultStyles>
                                        <defaultStyle refStyle = "bp"/>
                                    </defaultStyles>
                                </style>
                            </promptButton>
                        </contents>
                        <style>
                            <defaultStyles>
                                <defaultStyle refStyle = "fp"/>
                            </defaultStyles>
                        </style>
                    </pageFooter>
                    <style>
                        <defaultStyles>
                            <defaultStyle refStyle = "pp"/>
                        </defaultStyles>
                    </style>
                </page>
            </promptPages>
        </layout>
    </layouts>
    <XMLAttributes>
        <XMLAttribute output = "no" name = "RS_CreateExtendedDataItems" value = "true"/>
        <XMLAttribute output = "no" name = "RS_modelModificationTime" value = "2013-01-08T15:30:33.117Z"/>
        <XMLAttribute output = "no" name = "listSeparator" value = ","/>
    </XMLAttributes>
    <modelPath>/content/folder[@name=&apos;Samples&apos;]/folder[@name=&apos;Models&apos;]/package[@name=&apos;GO Sales (query)&apos;]/model[@name=&apos;model&apos;]</modelPath>
    <reportVariables>
        <reportVariable type = "string" name = "String1">
            <reportExpression>ParamDisplayValue(&apos;ShowHide&apos;)</reportExpression>
            <variableValues>
                <variableValue value = "Show Date Prompt"/>
                <variableValue value = "Hide Date Prompt"/>
            </variableValues>
        </reportVariable>
    </reportVariables>
    <reportName>ShowHide</reportName>
</report>

Уловка для предотвращения автоматической отправки заключается в использовании скрытого приглашения, у которого свойство «Cascade Source» заполнено как параметр переключателя. Это превращает автоматическую отправку в повторную подсказку. Однако ваше решение менее желательно, потому что вся страница приглашения должна обновляться каждый раз, когда выбирается значение переключателя. Это может занять много времени и привести к неидеальному взаимодействию с пользователем.

Johnsonium 14.06.2018 18:49

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

dougp 15.06.2018 20:10

Мне очень нравится ваша рекомендация использовать скрытую подсказку. Мне удалось удалить весь JavaScript из образца. Это увеличивает вероятность того, что отчет сохранится после обновления.

dougp 15.06.2018 21:35

Другие вопросы по теме