首页 文章

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

提问于
浏览
0

我有3个提示 . 第一个提示包含值A和B.在选择A时,其余2个提示应隐藏,选择B时,应显示2个提示 . 所有3个提示都是强制性的 . 任何人都可以帮我实现这种情况吗?

1 回答

  • 2

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

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

    • 添加重新提示按钮

    • 使用JavaScript检测单选按钮何时更改状态并重新启动页面

    • 使用使用隐藏值提示的变通方法

    Method 1 - Reprompt Button

    只需在报告中添加一个提示按钮并将“Type”属性设置为“Reprompt”即可完成此操作 . 我不建议您使用此方法,因为要求用户每次更改提示值时都会单击“重新提示”按钮,这是一种糟糕的用户体验 .

    Method 2 - JavaScript API

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

    • 为您的值提示命名 . 这在提示'Name'属性中指定 . 出于本教程的目的,我是'm going to use the name ' valuePrompt' .

    • 在报告中添加'HTML Item' .

    • 打开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>
    

    优化代码,以便仅在提示更改为新值时才会发生重新提示操作 . 只要系统检查提示的有效性,这就可以防止多次重新插入,这种情况可能经常发生 .

    Method 3 - Hidden Dependent Prompt

    此技术使用隐藏值提示通过使用级联提示功能将提示绑定到虚拟值提示来欺骗Cognos在每个值提示更改时重新提交页面 .

    • 添加新值提示

    • 设置新提示's '必需' property to '否'

    • 将新提示的'Cascade Source'属性设置为先前存在的值提示的参数

    • 隐藏新提示

    • 将原始值提示的'Auto-Sumbit'属性设置为'Yes' .

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

相关问题