Custom controls Cognos11JavaScript实现onkeyup
我正在尝试使用自定义控件/页面模块构建一个cognos报告,在该报告中,我在文本框中键入一个a值,并在输入延迟一秒钟后自动刷新/重新启动以下下拉列表。我通过内联HTML实现了这一点,但我没有幸使用自定义控件/提示API。请帮忙。以下是内联Javascript代码:Custom controls Cognos11JavaScript实现onkeyup,custom-controls,cognos,Custom Controls,Cognos,我正在尝试使用自定义控件/页面模块构建一个cognos报告,在该报告中,我在文本框中键入一个a值,并在输入延迟一秒钟后自动刷新/重新启动以下下拉列表。我通过内联HTML实现了这一点,但我没有幸使用自定义控件/提示API。请帮忙。以下是内联Javascript代码: var delay=(函数(){ var定时器=0; 返回函数(回调,毫秒){ 清除超时(计时器); 定时器=设置超时(回调,毫秒); }; })(); var fW=(getFormWarpRequest的类型==“函数”?getF
var delay=(函数(){
var定时器=0;
返回函数(回调,毫秒){
清除超时(计时器);
定时器=设置超时(回调,毫秒);
};
})();
var fW=(getFormWarpRequest的类型==“函数”?getFormWarpRequest():document.forms[“formWarpRequest”]);
fW._textEditBoxtxtB.onkeyup=(函数(){
延迟(函数(){
var oCR=cognos.Report.getReport(“\u THIS”);
oCR.sendRequest(cognos.Report.Action.REPROMPT);
var myPrompt=oCR.prompt.getControlByName(“CustF”);
}, 1000 );
});
我已经完成了这项工作,但在重新启动后,焦点将返回到文本框提示。我使用了页面模块和自定义控件的组合 下面是三个代码块
- 报告规范(xml)
- onKeyUp页面模块(JavaScript)
- 重新编译自定义控制模块(JavaScript)
<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>
Reprompt.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;
});
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;
});
这很有趣。对我来说效果很好,我现在尝试在同一页面中重复使用多个提示的代码!再次感谢。记住:我只是把它拼凑起来的。可能只需要一个自定义控件就可以做到这一点。这可能会使处理多提示场景变得更容易。另一个选项是通过包含页面模块的配置对象,使其具有通用性和可重用性。因为Cognos没有为页面模块提供配置属性,所以我通过在block属性设置为None block的块中创建一个文本框(包含定义配置的JSON)来实现这一点。