官术网_书友最值得收藏!

Show/Hide prompt controls at runtime

A report shows sales quantity by product line and order method. Users need to filter on either product line or order method, any one at the time.

They would like a facility to select which prompt they want to filter on, and depending on the selection, prompt should appear.

Getting ready

Create a list report that shows product lines, order methods, and sales quantity. Create two options filters—one on product lines and the other on order methods.

How to do it...

  1. We will start by creating prompts for both the filters. For that, add a prompt page and add two value prompts. Use the prompt wizard to connect them to the parameters (product line and order method).
  2. Set the Hide Adornment property of both the prompts to Yes.
  3. Now drag an HTML item just before the product line prompt. Define it as:
    <Input type = radio Name = r1 title= "Click me to select Product Line..." Value = "PL" onclick= "radioSelect(this)">Product Line &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <Input type = radio Name = r1 title= "Click me to select Order Method..." Value = "OM" onclick= "radioSelect(this)">Order Method &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <span id = 'ProductSpan'>
  4. Now add another HTML item between the product line prompt and order method prompt. Define it as: </span> <span id = 'OrderSpan'>.
  5. Finally, add a third HTML item after the order method prompt. Define it as:
    </span>
    <script>
    var fW = (typeof getFormWarpRequest == "function" ?getFormWarpRequest() : document.forms["formWarpRequest"]);
    if ( !fW || fW == undefined) { fW = ( formWarpRequest_THIS_ ?formWarpRequest_THIS_ : formWarpRequest_NS_ );}
    var theSpan = document.getElementById("ProductSpan");
    var a = theSpan.getElementsByTagName('select');
    for( var i = a.length-1; i >= 0; i-- )
    { var ProductBox = a[i];
    ProductBox.style.display = 'none'; }
    theSpan = document.getElementById("OrderSpan");
    a = theSpan.getElementsByTagName('select');
    for( var i = a.length-1; i >= 0; i-- )
    { var OrderBox = a[i];
    OrderBox.style.display = 'none'; }
    
    function radioSelect(rad)
    { if (rad.value == "PL")  /* Hide OrderBox and show ProductBox */
    { ProductBox.style.display = '';
    OrderBox.style.display = 'none';
    }
    else if (rad.value == "OM") /* Hide ProductBox and show OrderBox */
    { ProductBox.style.display = 'none';
    OrderBox.style.display = ''; 
    }
    else /* Hide both controls */
    { ProductBox.style.display = 'none';
    OrderBox.style.display = 'none'; }
    }
    </script>

    Now your prompt page will look like the following in Report Studio:

    How to do it...
  6. Run the report to test it. You will see two radio buttons. Depending on which one you select, one of the prompts will be visible.
    How to do it...

How it works...

Tip

Before explaining how this recipe works, I would like the readers to know that it is possible to achieve the required functionality using Conditional Block instead of JavaScript. You would use the auto-submit functionality of radio button prompt, which will then cause the Conditional Block to show appropriate prompt.

If you are using Cognos Report Studio version 8.2 or older, this will refresh the page and will not give a seamless user experience. Hence, you might consider the JavaScript alternative that is explained next. From 8.3 onwards, the whole page is not refreshed. But still you might want to consider JavaScript for a quick response time.

This recipe works in three parts. First, we defined the radio buttons in the HTML item. This is our own code so we can control what happens when users select any of the radio buttons.

Then, we wrapped both the prompts into spans so that we can capture them in the JavaScript and manipulate the properties.

Finally, we wrote the JavaScript to toggle the display of prompts depending on the radio button selection.

There's more...

When the prompt is hidden through the style.display property, the adornments aren't hidden. That is why we set the adornments off in step 2.

More Info

When the visibility of a control is turned off, the control is still present on the form and the selected value (if any) is also submitted in the query when user clicks on Finish button.

Hence, it is preferred that we reset the selection to index(0) when a prompt is hidden. For information on how to select a value through JavaScript, please refer to Dynamic default value for prompt recipe of this chapter.

主站蜘蛛池模板: 黎平县| 武功县| 呼玛县| 仁怀市| 七台河市| 开原市| 贵德县| 乐清市| 大渡口区| 衡南县| 临桂县| 德令哈市| 宜兰县| 响水县| 鹤壁市| 余干县| 平舆县| 石棉县| 商洛市| 焦作市| 积石山| 大渡口区| 襄樊市| 尉氏县| 康乐县| 威信县| 麟游县| 台江县| 大丰市| 会理县| 正镶白旗| 齐齐哈尔市| 隆林| 伊金霍洛旗| 澳门| 当涂县| 陆良县| 镇坪县| 裕民县| 开江县| 永嘉县|