У меня это работает, все, кроме возвращения фокуса в текстовое поле после повторной реплики. Я использовал комбинацию модуля страницы и пользовательского элемента управления.
Три кодовых блока ниже
- спецификация отчета (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='Samples']/folder[@name='Models']/package[@name='GO Sales (query)']/model[@name='model']</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;
});
Это было весело.