Cognos Prompt页面提示使用render变量显示/隐藏

Cognos Prompt page prompts show/hide using render variable

本文关键字:变量 render 显示 隐藏 Prompt 提示 Cognos      更新时间:2023-09-26

我很难在Cognos提示页面中显示/隐藏提示。我使用Cognos 10.2.1。

我的要求,提示页面选择不同。我有三个提示。运行报告后,只需显示第一个提示。然后,选择第一个提示值后,将显示第二个提示。就像第三次提示一样。

现在我使用的是布尔变量ParamDisplayValue<>'"0"。如果为true,则表示其呈现第二个提示。就像另一个提示。但在这里我只能选择第一个提示。未显示第二个提示。

如果你有任何想法,请与我分享。

谢谢&当做Chandrasekr。

渲染变量仅在页面渲染时求值。它们只能通过三种方式重新评估:

  1. 用户单击设置为"重新计算"的按钮
  2. 用户从"自动提交"属性设置为"是"且尚未提供所需提示的提示中选择一个值
  3. JavaScript在重新启动页面时被激发

1号可以工作,但不能提供很好的可用性,因为每次页面需要刷新时,你都需要用户点击一个按钮

如果您使用所需的提示,编号2将起作用。如果提示是可选的,则当"自动提交"设置为"是"的提示更改时,将提交整个提示页面。你可以使用一个隐藏的提示来绕过这个问题,但它很混乱。

3号是最好的选择,因为它能给你最大的控制权。值得庆幸的是,自从Cognos10.2以来,提供了一个文档化的、受支持的JavaScript API,这使得这变得非常容易和受支持。以下是步骤:

  1. 为要在值更改时触发重新启动的提示*指定一个名称
  2. 在提示页面的底部添加一个新的HTML项目
  3. 添加以下JavaScript作为表达式:

var report = cognos.Report.getReport("_THIS_");
var prompt = report.prompt.getControlByName("prompt_name"); //Substitue the prompt name you set in step one for the string "prompt_name"
var currentvalue = prompt.getValues()[0].use;
prompt.setValidator(validatePrompt); //Sets a function to validate the prompt on change
function validatePrompt(values) {
  if (values && values.length > 0 && values[0].use != currentvalue) {
    currentvalue = values[0].use;
    report.sendRequest(cognos.Report.Action.REPROMPT); //Reprompt the page
  }
}

该代码在提示中添加了一个验证函数,该函数将在值更改时刷新页面。设置初始值并根据该值进行字母检查的代码用于防止Cognos在后台多次启动提示验证时进行不必要的刷新。除非用户实际更改了提示的值,否则不希望刷新页面。

*这个提示应该不是文本提示,因为每次按键都会进行文本提示验证,因此他们键入的每个字母都会进行刷新。该技术在值提示(如列表、下拉列表或单选按钮组)上效果最佳。