防止自动提交在 Cognos 中生成报告

To Prevent Auto Submit from generating the report in Cognos

我有 3 个提示。第一个提示包含值 A 和 B。在选择 A 时,其余 2 个提示应该隐藏,在选择 B 时,2 个提示应该显示。所有 3 个提示都是强制性的。谁能帮我实现这个场景?

我假设您已经知道如何有条件地隐藏和取消隐藏元素,并且您只想知道如何在不提交页面的情况下刷新页面。

您的问题有以下三种解决方案:

  1. 添加重新提示按钮
  2. 使用JavaScript检测单选按钮何时改变状态并重新提示页面
  3. 使用使用隐藏值提示的解决方法

方法 1 - 重新提示按钮

只需在报告中添加提示按钮并将 'Type' 属性 设置为 'Reprompt' 即可。我不建议您使用此方法,因为要求用户每次更改提示值时都单击重新提示按钮是糟糕的用户体验。

方法二 - JavaScript API

此方法使用 Cognos 支持的 JavaScript API 在值提示更改值时重新提示页面。请注意,API 仅适用于 10.2 及更高版本。

  1. 为您的值提示命名。这在提示 'Name' 属性 中指定。出于本教程的目的,我将使用名称 'valuePrompt'.
  2. 在报告中添加 'HTML Item'。
  3. 打开 HTML 项并粘贴以下代码:
<script>
var report = cognos.Report.getReport('_THIS_');
var valuePrompt = report.prompt.getControlByName('valuePrompt');

var currentValues = (valuePrompt.getValues().length == 0) ? [{'use':''}] : valuePrompt.getValues();
valuePrompt.setValidator(validateValuePrompt);

function validateValuePrompt(values) {
    if (values && values.length > 0) {
        if (values[0].use != currentValues[0].use) {
            currentValues = values;
            report.sendRequest(cognos.Report.Action.REPROMPT);
        }
    } else {
        currentValues = [{'use':''}];
    }
    return true;
}
</script>

代码已优化,仅当提示更改为新值时才会发生重新提示操作。这可以防止在系统检查提示有效性时多次重新提示,这种情况经常发生。

方法 3 - 隐藏依赖提示

此技术使用隐藏值提示,通过使用级联提示功能将提示绑定到虚拟值提示,从而欺骗 Cognos 在每次值提示更改时重新提示页面。

  1. 添加新值提示
  2. 将新提示的 'Required' 属性 设置为 'No'
  3. 将新提示的 'Cascade Source' 属性 设置为先前存在的值提示的参数
  4. 隐藏新提示
  5. 将您的原始值提示的 'Auto-Sumbit' 属性 设置为 'Yes'。

每当您更改值提示时,页面将重新提示以刷新隐藏提示。