Cognos 11 JavaScript для достижения onkeyup - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь создать отчет Cognos с модулем пользовательского элемента управления / страницы, где я набираю значение в текстовом поле и с задержкой ввода на секунду автоматически обновляет / повторно отображает следующий выпадающий список. Я достигаю этого с помощью встроенного HTML, но мне не повезло с пользовательским API управления / подсказок. Пожалуйста помоги. Вот встроенный код Javascript:

var delay = (function(){
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();

var fW = (typeof getFormWarpRequest == "function" ? getFormWarpRequest() : document.forms["formWarpRequest"]);
fW._textEditBoxtxtB.onkeyup=(function() {
    delay(function(){     
    var oCR = cognos.Report.getReport("_THIS_"); 
    oCR.sendRequest( cognos.Report.Action.REPROMPT);
    var myPrompt = oCR.prompt.getControlByName("CustF"); 

    }, 1000 );
});

снимок экрана

1 Ответ

0 голосов
/ 29 августа 2018

У меня это работает, все, кроме возвращения фокуса в текстовое поле после повторной реплики. Я использовал комбинацию модуля страницы и пользовательского элемента управления.

Три кодовых блока ниже

  • спецификация отчета (xml)
  • Модуль страницы onKeyUp (JavaScript)
  • Reprompt пользовательский модуль управления (JavaScript)

Спецификация отчета onKeyup

<report xmlns="http://developer.cognos.com/schemas/report/14.3/" 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>
                            <list horizontalPagination="true" name="List1" refQuery="main">
                                <noDataHandler>
                                    <contents>
                                        <block>
                                            <contents>
                                                <textItem>
                                                    <dataSource>
                                                        <staticValue>No Data Available</staticValue>
                                                    </dataSource>
                                                    <style>
                                                        <CSS value="padding:10px 18px;"/>
                                                    </style>
                                                </textItem>
                                            </contents>
                                        </block>
                                    </contents>
                                </noDataHandler>
                                <style>
                                    <CSS value="border-collapse:collapse"/>
                                    <defaultStyles>
                                        <defaultStyle refStyle="ls"/>
                                    </defaultStyles>
                                </style>
                                <listColumns>
                                    <listColumn>
                                        <listColumnTitle>
                                            <style>
                                                <defaultStyles>
                                                    <defaultStyle refStyle="lt"/>
                                                </defaultStyles>
                                            </style>
                                            <contents>
                                                <textItem>
                                                    <dataSource>
                                                        <dataItemLabel refDataItem="Country"/>
                                                    </dataSource>
                                                </textItem>
                                            </contents>
                                        </listColumnTitle>
                                        <listColumnBody>
                                            <style>
                                                <defaultStyles>
                                                    <defaultStyle refStyle="lc"/>
                                                </defaultStyles>
                                            </style>
                                            <contents>
                                                <textItem>
                                                    <dataSource>
                                                        <dataItemValue refDataItem="Country"/>
                                                    </dataSource>
                                                </textItem>
                                            </contents>
                                        </listColumnBody>
                                    </listColumn>
                                    <listColumn>
                                        <listColumnTitle>
                                            <style>
                                                <defaultStyles>
                                                    <defaultStyle refStyle="lt"/>
                                                </defaultStyles>
                                            </style>
                                            <contents>
                                                <textItem>
                                                    <dataSource>
                                                        <dataItemLabel refDataItem="City"/>
                                                    </dataSource>
                                                </textItem>
                                            </contents>
                                        </listColumnTitle>
                                        <listColumnBody>
                                            <style>
                                                <defaultStyles>
                                                    <defaultStyle refStyle="lc"/>
                                                </defaultStyles>
                                            </style>
                                            <contents>
                                                <textItem>
                                                    <dataSource>
                                                        <dataItemValue refDataItem="City"/>
                                                    </dataSource>
                                                </textItem>
                                            </contents>
                                        </listColumnBody>
                                    </listColumn>
                                    <listColumn>
                                        <listColumnTitle>
                                            <style>
                                                <defaultStyles>
                                                    <defaultStyle refStyle="lt"/>
                                                </defaultStyles>
                                            </style>
                                            <contents>
                                                <textItem>
                                                    <dataSource>
                                                        <dataItemLabel refDataItem="Quantity"/>
                                                    </dataSource>
                                                </textItem>
                                            </contents>
                                        </listColumnTitle>
                                        <listColumnBody>
                                            <style>
                                                <defaultStyles>
                                                    <defaultStyle refStyle="lm"/>
                                                </defaultStyles>
                                            </style>
                                            <contents>
                                                <textItem>
                                                    <dataSource>
                                                        <dataItemValue refDataItem="Quantity"/>
                                                    </dataSource>
                                                </textItem>
                                            </contents>
                                        </listColumnBody>
                                    </listColumn>
                                </listColumns>
                                <listOverallGroup>
                                    <listFooter>
                                        <listRows>
                                            <listRow>
                                                <rowCells>
                                                    <rowCell colSpan="2">
                                                        <contents>
                                                            <textItem>
                                                                <dataSource>
                                                                    <staticValue>Overall</staticValue>
                                                                </dataSource>
                                                            </textItem>
                                                            <textItem>
                                                                <dataSource>
                                                                    <staticValue> - </staticValue>
                                                                </dataSource>
                                                            </textItem>
                                                            <textItem>
                                                                <dataSource>
                                                                    <staticValue>Summary</staticValue>
                                                                </dataSource>
                                                            </textItem>
                                                        </contents>
                                                        <style>
                                                            <defaultStyles>
                                                                <defaultStyle refStyle="if"/>
                                                            </defaultStyles>
                                                        </style>
                                                    </rowCell>
                                                    <rowCell>
                                                        <contents>
                                                            <textItem>
                                                                <dataSource>
                                                                    <dataItemValue refDataItem="Summary(Quantity)"/>
                                                                </dataSource>
                                                            </textItem>
                                                        </contents>
                                                        <style>
                                                            <defaultStyles>
                                                                <defaultStyle refStyle="is"/>
                                                            </defaultStyles>
                                                        </style>
                                                    </rowCell>
                                                </rowCells>
                                            </listRow>
                                        </listRows>
                                    </listFooter>
                                </listOverallGroup>
                            </list>
                        </contents>
                    </pageBody>
                </page>
            </reportPages>
            <promptPages>
                <page name="Prompt page1">

                    <pageBody>
                        <contents>
                            <table>
                                <style>
                                    <defaultStyles>
                                        <defaultStyle refStyle="tb"/>
                                    </defaultStyles>
                                    <CSS value="border-collapse:collapse"/>
                                </style>
                                <tableRows>
                                    <tableRow>
                                        <tableCells>
                                            <tableCell>
                                                <contents>
                                                    <textItem>
                                                        <dataSource>
                                                            <staticValue>Type here:  </staticValue>
                                                        </dataSource>
                                                    </textItem>
                                                </contents>
                                                <style>
                                                    <CSS value="text-align:left;vertical-align:top"/>
                                                </style>
                                            </tableCell>
                                            <tableCell>
                                                <contents>
                                                    <textBox parameter="TypedValue" name="myText"/>
                                                </contents>
                                                <style>
                                                    <CSS value="text-align:left;vertical-align:top"/>
                                                </style>
                                            </tableCell>
                                        </tableCells>
                                    </tableRow>
                                    <tableRow>
                                        <tableCells>
                                            <tableCell>
                                                <contents>
                                                    <textItem>
                                                        <dataSource>
                                                            <staticValue>Country:  </staticValue>
                                                        </dataSource>
                                                    </textItem>
                                                </contents>
                                                <style>
                                                    <CSS value="text-align:left;vertical-align:top"/>
                                                </style>
                                            </tableCell>
                                            <tableCell>
                                                <contents>
                                                    <selectValue parameter="country" multiSelect="true" selectValueUI="listBox" refQuery="country">
                                                        <useItem refDataItem="Country">
                                                            <displayItem refDataItem="Country"/>
                                                        </useItem>
                                                        <sortList>
                                                            <sortItem refDataItem="Country"/>
                                                        </sortList>
                                                    </selectValue>
                                                </contents>
                                                <style>
                                                    <CSS value="text-align:left;vertical-align:top"/>
                                                </style>
                                            </tableCell>
                                        </tableCells>
                                    </tableRow>
                                    <tableRow>
                                        <tableCells>
                                            <tableCell colSpan="2">
                                                <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>
                                                    <CSS value="padding-top:0.5in"/>
                                                </style>
                                            </tableCell>
                                        </tableCells>
                                    </tableRow>
                                </tableRows>
                            </table>
                            <customControl name="Reprompt" path="/CognosScripts/Reprompt.js"/>
                        </contents>
                        <style>
                            <defaultStyles>
                                <defaultStyle refStyle="py"/>
                            </defaultStyles>
                        </style>
                    </pageBody>

                    <style>
                        <defaultStyles>
                            <defaultStyle refStyle="pp"/>
                        </defaultStyles>
                    </style>
                    <pageModule path="/CognosScripts/onKeyup.js"/>
                </page>
            </promptPages>
        </layout>
    </layouts>
    <XMLAttributes>
        <XMLAttribute output="no" name="RS_CreateExtendedDataItems" value="true"/>
        <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>
    <queries>
        <query name="main">
            <source>
                <model/>
            </source>
            <selection>
                <dataItem aggregate="total" name="Quantity">
                    <expression>[Sales (query)].[Sales].[Quantity]</expression>
                    <XMLAttributes>
                        <XMLAttribute output="no" name="RS_dataType" value="1"/>
                        <XMLAttribute output="no" name="RS_dataUsage" value="2"/>
                    </XMLAttributes>
                </dataItem>
                <dataItem aggregate="none" rollupAggregate="none" name="Country">
                    <expression>[Sales (query)].[Branch].[Country]</expression>
                    <XMLAttributes>
                        <XMLAttribute output="no" name="RS_dataType" value="3"/>
                        <XMLAttribute output="no" name="RS_dataUsage" value="0"/>
                    </XMLAttributes>
                </dataItem>
                <dataItem aggregate="none" rollupAggregate="none" name="City">
                    <expression>[Sales (query)].[Branch].[City]</expression>
                    <XMLAttributes>
                        <XMLAttribute output="no" name="RS_dataType" value="3"/>
                        <XMLAttribute output="no" name="RS_dataUsage" value="0"/>
                    </XMLAttributes>
                </dataItem>
                <dataItemListSummary refDataItem="Quantity" aggregateMethod="aggregate" name="Summary(Quantity)"/>
            </selection>
        </query>
        <query name="country">
            <source>
                <model/>
            </source>
            <selection>
                <dataItem aggregate="none" rollupAggregate="none" name="Country">
                    <expression>[Sales (query)].[Branch].[Country]</expression>
                    <XMLAttributes>
                        <XMLAttribute output="no" name="RS_dataType" value="3"/>
                        <XMLAttribute output="no" name="RS_dataUsage" value="attribute"/>
                    </XMLAttributes>
                </dataItem>
            </selection>
            <detailFilters>
                <detailFilter use="optional">
                    <filterExpression>[Sales (query)].[Branch].[Country] starts with ?TypedValue?</filterExpression>
                </detailFilter>
            </detailFilters>
        </query>
    </queries>
    <reportName>onKeyup</reportName>
</report>

onKeyup.js

define (function () {

    var log = function (label, message) {
        console.log("    ****    " + label + " : " + message);
    }


    function PageModule() {
    };

    var myText;
    var delay = (function(){
        var timer = 0;
        return function(callback, ms){
            clearTimeout (timer);
            timer = setTimeout(callback, ms);
        };
    })();


    PageModule.prototype.load = function( oPage )
    {
        log("page", "PageModule.load" );

        myText = oPage.getControlByName("myText").element;

        myText.onkeyup = (function() {
            delay(function(){     
                oPage.Reprompt();
            }, 100 );
        });

        if (!oPage.Reprompt) {
            oPage.Reprompt = function () {oPage.getControlByName("Reprompt").ControlHost.reprompt()};
        }
    };

    PageModule.prototype.show = function( oPage )
    {
        myText.focus();
        log("page", "PageModule.show" );

    };

    PageModule.prototype.hide = function( oPage )
    {
        log("page", "PageModule.hide" );
    };

    PageModule.prototype.destroy = function( oPage )
    {
        log("page", "PageModule.destroy" );
    };

    return PageModule;
});

Reprompt.js

define( function() {
    "use strict";

    function Reprompt() {
    };

    Reprompt.prototype.initialize = function( oControlHost, fnDoneInitializing ) {
        if (!oControlHost.page.Reprompt) {
            console.log("    Defining Reprompt");
            oControlHost.page.Reprompt = function () {oControlHost.reprompt()};
        }
        fnDoneInitializing();
    };

    Reprompt.prototype.draw = function( oControlHost ) {
    };

    return Reprompt;
});

Это было весело.

...