custom-controls - Cognos 11 javascript实现onkeyup
问题描述
我正在尝试使用自定义控件/页面模块构建一个 cognos 报告,在该模块中我在文本框中输入 aa 值,并且类型延迟一秒钟会自动刷新/重新提示以下下拉菜单。我使用内联 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 );
});
解决方案
我有这个工作,除了重新提示后将焦点返回到文本框提示之外。我使用了页面模块和自定义控件的组合。
下面三个代码块
- 报告规范 (xml)
- onKeyUp 页面模块 (JavaScript)
- 重新提示自定义控制模块 (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;
});
重新提示.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;
});
那很有趣。
推荐阅读
- python - 通过 Python 中的 POST 请求将产品添加到 Supreme 上的购物车 - 请求不起作用
- java - 为什么我的代码不断收到错误:
预期的? - amazon-s3 - MLflow:为什么 backend-store-uri 不能是 s3 位置?
- pandas - 将具有不同位置的人分组
- javascript - javascript return 语句停止执行其余语句
- c# - “onTimer”没有重载匹配委托“ElapsedEventHandler”
- for-loop - 有没有办法让 forloop 识别它即将结束?
- docker - Dockerized Redis 在服务器和本地系统之间的性能差异
- sass - 为什么 node-sass 在 \" @include corners\" 之后抛出“无效的 CSS:预期 \"}\",是 \".rounded;\""
- c++ - 计数排序未正确排序