//This file contains various functions and helpers for Cognos 10.2 reports. Do not use this on any other version without first checking with Paul.
//Control Scripts for the API. Don't change unless you know what you're doing.
var paulScripts = {};
//Gets the control object for the API. promptName refers to the name of the prompt on the page.
paulScripts.getControl = function(promptName) {
var ocr = cognos.Report.getReport("_THIS_");
return ocr.prompt.getControlByName(promptName);
};
// Get the system year and month
var currentDate = new Date( );
// Extract year, month and day components as numbers from current date
var currentYear = currentDate.getFullYear( );
var currentMonth = currentDate.getMonth( ); // zero based, January is month 0
var currentDay = currentDate.getDate( ); // 1 based
if (timeFrame == "Yesterday") {
// Calculate yesterday's date including determining if yesterday was in a previous Month and/or Year
// If today is not the first day of the month, subtract one day and keep the same month and year
if (currentDay != 1) {
var rangeStartYear = currentYear;
var rangeStartMonth = currentMonth;
var rangeStartDay = currentDay - 1;
} else { // Today is the first day of the month so set month to previous month
if (currentMonth != 0) { // First day of Feb through December
// The Date.setFullYear will return the last day of the previous month if you pass zero as the day
var workingDate = new Date;
workingDate.setFullYear(currentYear, currentMonth, 0);
var rangeStartYear = workingDate.getYear( );
var rangeStartMonth = workingDate.getMonth( );
var rangeStartDay = workingDate.getDate( );
} else { // First day of January
// The Date.setFullYear will return the last day of the previous month if you pass zero as the day
var workingDate = new Date;
workingDate.setFullYear(currentYear, currentMonth, 0);
var rangeStartYear = workingDate.getYear( );
var rangeStartMonth = workingDate.getMonth( );
var rangeStartDay = workingDate.getDate( );
}
}
} else if (timeFrame == "PreviousMonth") {
// Calculate the first day of the previous month based on today's date
// Set Current Month to previous Month (and Current Year as required)
if (currentMonth == 0) { //set month and year to previous december and year
var rangeStartMonth = 11;
var rangeStartYear = currentYear - 1;
} else { // set to previous month in same year
rangeStartMonth = currentMonth - 1;
var rangeStartYear = currentYear;
}
var rangeStartDay = 1; // Always first day of month
} else if (timeFrame == "YTD") {
// Calculate the first day of the year based on today's date
var rangeStartYear = currentYear;
var rangeStartMonth = 0; // Always January
var rangeStartDay = 1; // Always first day of month
} else if (timeFrame == "PreviousQuarter") {
// Calculate the first day of the previous calendar quarter month based on today's date
// Quarters Conversion is:
// Q1 = January to March (Month 0 to 2) >>> October (9) Previous year
// Q2 = April to June (Month 3 to 5) >>> January (Zero) Same year
// Q3 = July to September (Month 6 to 8) >>> April (3) Same year
// Q4 = October to December (Month 9 to 11) >>> July (6) Same year
// Set Quarter and Year
if (currentMonth <= 2) {
var rangeStartMonth = 9; // October
var rangeStartYear = currentYear - 1; // Previous year
} else if (currentMonth <= 5) {
var rangeStartMonth = 0; // January
var rangeStartYear = currentYear; // Same year
} else if (currentMonth <= 8) {
var rangeStartMonth = 3; // April
var rangeStartYear = currentYear; // Same year
} else {
rangeStartMonth = 6; // July
var rangeStartYear = currentYear; // Same year
}
var rangeStartDay = 1; // Always first day of month
} else if (timeFrame == "PreviousYear") {
var rangeStartYear = currentYear - 1;
var rangeStartMonth = 0; // Always January
var rangeStartDay = 1; // Always first day of month
} else {
alert ("Invalid Time Frame");
}
var rangeStart = new Date (rangeStartYear , rangeStartMonth, rangeStartDay);
return rangeStart;
};
/*
*
* This function calculates the date range end date based on the passed time frame and start date
*
*/
paulScripts.calculateEndDate = function(dateRangeStart, timeFrame) {
// Calculate the end of the date range based on the passed time frame
// Extract Year, Month and Day from passed in dateRangeStart
var workingYear = dateRangeStart.getFullYear( );
var workingMonth = dateRangeStart.getMonth( );
var workingDay = dateRangeStart.getDate( );
if (timeFrame == "Yesterday") {
// use today's date
dateRangeEnd = new Date( );
} else if (timeFrame == "PreviousMonth") {
// Calculate the last day of the passed month
// The Date.setFullYear will return the last day of the previous month if you pass zero as the day
var dateRangeEnd = new Date;
dateRangeEnd.setFullYear(workingYear, workingMonth + 1, 0);
} else if (timeFrame == "YTD") {
// Calculate the current date
dateRangeEnd = new Date( );
} else if (timeFrame == "PreviousQuarter") {
var endMonth = 0;
var endDay = 0;
// Calculate the end of the passed quarter
if (workingMonth == 0) {
endMonth = 2; // March
endDay = 31; // Last day of March = 31
} else if (workingMonth == 3) {
EndMonth = 5; // June
EndDay = 30; // Last day of March = 30
} else if (workingMonth == 6) {
endMonth = 8; // September
endDay = 30; // Last day of March = 30
} else {
endMonth =11; // December
endDay = 31; // Last day of March = 31
}
dateRangeEnd = new Date(workingYear, endMonth, endDay);
} else if (timeFrame == "PreviousYear") {
var rangeEndYear = workingYear; // Same year as start range
var rangeEndMonth = 11; // Always December
var rangeEndDay = 31; // Always last day of December
dateRangeEnd = new Date(rangeEndYear, rangeEndMonth, rangeEndDay);
paulScripts.EncodeDateRangeAsJSON = function(dateRangeStart, dateRangeEnd) {
// Encode the date range as JSON (JavaScript Literal Notation)
// The following steps will create string representation of the date range start and end dates
// in the format yyyy-mm-dd such as 2012-01-12 for to encode into JSON
// First, get the year, month and day parts of the date range start
var yearPart = dateRangeStart.getFullYear( ) ;
var monthPart = dateRangeStart.getMonth( ) + 1; // Add 1 month for base zero month (Jan = month 0)
var dayPart = dateRangeStart.getDate( );
// Second, create the string representation of the date range start
var startDateString = yearPart + "-" + monthPart + "-" + dayPart;
// Third, get the year, month and day parts of the date range end
var yearPart = dateRangeEnd.getFullYear( ) ;
var monthPart = dateRangeEnd.getMonth( ) + 1; // Add 1 month for base zero month (Jan = month 0)
var dayPart = dateRangeEnd.getDate( );
// Lastly, create the string representation of the date range end
var endDateString = yearPart + "-" + monthPart + "-" + dayPart;
// Now that we have our dates as strings, encode the date range as JSON (JavaScript Literal Notation)
var JSONEncodedDateRange = { 'start': {'use': startDateString}, 'end': {'use': endDateString} };
return JSONEncodedDateRange;
};
paulScripts.EncodeDateAsJSON = function(dateRangeStart) {
// Encode the date range as JSON (JavaScript Literal Notation)
// The following steps will create string representation of the date range start and end dates
// in the format yyyy-mm-dd such as 2012-01-12 for to encode into JSON
// First, get the year, month and day parts of the date range start
var yearPart = dateRangeStart.getFullYear( ) ;
var monthPart = dateRangeStart.getMonth( ) + 1; // Add 1 month for base zero month (Jan = month 0)
var dayPart = dateRangeStart.getDate( );
// Second, create the string representation of the date range start
var startDateString = yearPart + "-" + monthPart + "-" + dayPart;
// Now that we have our dates as strings, encode the date range as JSON (JavaScript Literal Notation)
var JSONEncodedDate = {'use': startDateString};
return JSONEncodedDate;
};
/*
* setDatePreset
* By Rick Blackwell
* Modified by Paul Mendelson
* Param 1 is the prompt object name.
* Param 2 can be one of the following: Clear, Yesterday, PreviousMonth, YTD, PreviousQuarter, PreviousYear
* Param 3 indicates if the prompt is a range or not. default is false (not a range prompt)
*/
paulScripts.setDatePreset = function(promptName,timeFrame,range) {
if(timeFrame=='Clear')
{
document.getElementById('txtDate'+paulScripts.getControl(promptName)._id_).value='';
return true;
}
// Calculate the date range start date
var dateRangeStart = paulScripts.calculateRangeStart(timeFrame);
// Calculate the date range end date
var dateRangeEnd = paulScripts.calculateEndDate(dateRangeStart, timeFrame);
// Encode the date range as JSON
var JSONEncodedDates = range?paulScripts.EncodeDateRangeAsJSON(dateRangeStart, dateRangeEnd):paulScripts.EncodeDateAsJSON(dateRangeStart);
// Set the Date prompt using the JSON encoded date range
paulScripts.setDatePrompt(promptName, JSONEncodedDates);
};
2 个回复
左右 - 数据服务专家 专注于IBM家族高级分析领域钻研 数据可视化践行者 2015-10-15 回答
赞同来自: Iven0814
但是,你可以通过js来控制这个值。
1. 我下面附上一个js,你把他放在组件之前,
2. 然后把这个命令放在组件之后:<script>paulScripts.set你的组建名称('PromptName','Clear')</script>
***
<script>
//This file contains various functions and helpers for Cognos 10.2 reports. Do not use this on any other version without first checking with Paul.
//Control Scripts for the API. Don't change unless you know what you're doing.
var paulScripts = {};
//Gets the control object for the API. promptName refers to the name of the prompt on the page.
paulScripts.getControl = function(promptName) {
var ocr = cognos.Report.getReport("_THIS_");
return ocr.prompt.getControlByName(promptName);
};
paulScripts.cancelBubble = function(eventOjbect){
if(!eventObject) var eventObject = window.event;
if(eventObject.cancelBubble) eventObject.cancelBubble = true;
if(eventObject.stopPropagation) eventObject.stopPropagation();
};
/*
* DATE PROMPTS
*/
//Date setter
paulScripts.setPrompt = function(promptName, JSONData){
var prompt = paulScripts.getControl(promptName);
prompt.setValue([JSONData])
}
paulScripts.calculateRangeStart = function(timeFrame) {
// Get the system year and month
var currentDate = new Date( );
// Extract year, month and day components as numbers from current date
var currentYear = currentDate.getFullYear( );
var currentMonth = currentDate.getMonth( ); // zero based, January is month 0
var currentDay = currentDate.getDate( ); // 1 based
if (timeFrame == "Yesterday") {
// Calculate yesterday's date including determining if yesterday was in a previous Month and/or Year
// If today is not the first day of the month, subtract one day and keep the same month and year
if (currentDay != 1) {
var rangeStartYear = currentYear;
var rangeStartMonth = currentMonth;
var rangeStartDay = currentDay - 1;
} else { // Today is the first day of the month so set month to previous month
if (currentMonth != 0) { // First day of Feb through December
// The Date.setFullYear will return the last day of the previous month if you pass zero as the day
var workingDate = new Date;
workingDate.setFullYear(currentYear, currentMonth, 0);
var rangeStartYear = workingDate.getYear( );
var rangeStartMonth = workingDate.getMonth( );
var rangeStartDay = workingDate.getDate( );
} else { // First day of January
// The Date.setFullYear will return the last day of the previous month if you pass zero as the day
var workingDate = new Date;
workingDate.setFullYear(currentYear, currentMonth, 0);
var rangeStartYear = workingDate.getYear( );
var rangeStartMonth = workingDate.getMonth( );
var rangeStartDay = workingDate.getDate( );
}
}
} else if (timeFrame == "PreviousMonth") {
// Calculate the first day of the previous month based on today's date
// Set Current Month to previous Month (and Current Year as required)
if (currentMonth == 0) { //set month and year to previous december and year
var rangeStartMonth = 11;
var rangeStartYear = currentYear - 1;
} else { // set to previous month in same year
rangeStartMonth = currentMonth - 1;
var rangeStartYear = currentYear;
}
var rangeStartDay = 1; // Always first day of month
} else if (timeFrame == "YTD") {
// Calculate the first day of the year based on today's date
var rangeStartYear = currentYear;
var rangeStartMonth = 0; // Always January
var rangeStartDay = 1; // Always first day of month
} else if (timeFrame == "PreviousQuarter") {
// Calculate the first day of the previous calendar quarter month based on today's date
// Quarters Conversion is:
// Q1 = January to March (Month 0 to 2) >>> October (9) Previous year
// Q2 = April to June (Month 3 to 5) >>> January (Zero) Same year
// Q3 = July to September (Month 6 to 8) >>> April (3) Same year
// Q4 = October to December (Month 9 to 11) >>> July (6) Same year
// Set Quarter and Year
if (currentMonth <= 2) {
var rangeStartMonth = 9; // October
var rangeStartYear = currentYear - 1; // Previous year
} else if (currentMonth <= 5) {
var rangeStartMonth = 0; // January
var rangeStartYear = currentYear; // Same year
} else if (currentMonth <= 8) {
var rangeStartMonth = 3; // April
var rangeStartYear = currentYear; // Same year
} else {
rangeStartMonth = 6; // July
var rangeStartYear = currentYear; // Same year
}
var rangeStartDay = 1; // Always first day of month
} else if (timeFrame == "PreviousYear") {
var rangeStartYear = currentYear - 1;
var rangeStartMonth = 0; // Always January
var rangeStartDay = 1; // Always first day of month
} else {
alert ("Invalid Time Frame");
}
var rangeStart = new Date (rangeStartYear , rangeStartMonth, rangeStartDay);
return rangeStart;
};
/*
*
* This function calculates the date range end date based on the passed time frame and start date
*
*/
paulScripts.calculateEndDate = function(dateRangeStart, timeFrame) {
// Calculate the end of the date range based on the passed time frame
// Extract Year, Month and Day from passed in dateRangeStart
var workingYear = dateRangeStart.getFullYear( );
var workingMonth = dateRangeStart.getMonth( );
var workingDay = dateRangeStart.getDate( );
if (timeFrame == "Yesterday") {
// use today's date
dateRangeEnd = new Date( );
} else if (timeFrame == "PreviousMonth") {
// Calculate the last day of the passed month
// The Date.setFullYear will return the last day of the previous month if you pass zero as the day
var dateRangeEnd = new Date;
dateRangeEnd.setFullYear(workingYear, workingMonth + 1, 0);
} else if (timeFrame == "YTD") {
// Calculate the current date
dateRangeEnd = new Date( );
} else if (timeFrame == "PreviousQuarter") {
var endMonth = 0;
var endDay = 0;
// Calculate the end of the passed quarter
if (workingMonth == 0) {
endMonth = 2; // March
endDay = 31; // Last day of March = 31
} else if (workingMonth == 3) {
EndMonth = 5; // June
EndDay = 30; // Last day of March = 30
} else if (workingMonth == 6) {
endMonth = 8; // September
endDay = 30; // Last day of March = 30
} else {
endMonth =11; // December
endDay = 31; // Last day of March = 31
}
dateRangeEnd = new Date(workingYear, endMonth, endDay);
} else if (timeFrame == "PreviousYear") {
var rangeEndYear = workingYear; // Same year as start range
var rangeEndMonth = 11; // Always December
var rangeEndDay = 31; // Always last day of December
dateRangeEnd = new Date(rangeEndYear, rangeEndMonth, rangeEndDay);
} else {
alert ("calculateEndDate: Invalid Time Frame");
}
return dateRangeEnd;
};
paulScripts.EncodeDateRangeAsJSON = function(dateRangeStart, dateRangeEnd) {
// Encode the date range as JSON (JavaScript Literal Notation)
// The following steps will create string representation of the date range start and end dates
// in the format yyyy-mm-dd such as 2012-01-12 for to encode into JSON
// First, get the year, month and day parts of the date range start
var yearPart = dateRangeStart.getFullYear( ) ;
var monthPart = dateRangeStart.getMonth( ) + 1; // Add 1 month for base zero month (Jan = month 0)
var dayPart = dateRangeStart.getDate( );
// Second, create the string representation of the date range start
var startDateString = yearPart + "-" + monthPart + "-" + dayPart;
// Third, get the year, month and day parts of the date range end
var yearPart = dateRangeEnd.getFullYear( ) ;
var monthPart = dateRangeEnd.getMonth( ) + 1; // Add 1 month for base zero month (Jan = month 0)
var dayPart = dateRangeEnd.getDate( );
// Lastly, create the string representation of the date range end
var endDateString = yearPart + "-" + monthPart + "-" + dayPart;
// Now that we have our dates as strings, encode the date range as JSON (JavaScript Literal Notation)
var JSONEncodedDateRange = { 'start': {'use': startDateString}, 'end': {'use': endDateString} };
return JSONEncodedDateRange;
};
paulScripts.EncodeDateAsJSON = function(dateRangeStart) {
// Encode the date range as JSON (JavaScript Literal Notation)
// The following steps will create string representation of the date range start and end dates
// in the format yyyy-mm-dd such as 2012-01-12 for to encode into JSON
// First, get the year, month and day parts of the date range start
var yearPart = dateRangeStart.getFullYear( ) ;
var monthPart = dateRangeStart.getMonth( ) + 1; // Add 1 month for base zero month (Jan = month 0)
var dayPart = dateRangeStart.getDate( );
// Second, create the string representation of the date range start
var startDateString = yearPart + "-" + monthPart + "-" + dayPart;
// Now that we have our dates as strings, encode the date range as JSON (JavaScript Literal Notation)
var JSONEncodedDate = {'use': startDateString};
return JSONEncodedDate;
};
/*
* setDatePreset
* By Rick Blackwell
* Modified by Paul Mendelson
* Param 1 is the prompt object name.
* Param 2 can be one of the following: Clear, Yesterday, PreviousMonth, YTD, PreviousQuarter, PreviousYear
* Param 3 indicates if the prompt is a range or not. default is false (not a range prompt)
*/
paulScripts.setDatePreset = function(promptName,timeFrame,range) {
if(timeFrame=='Clear')
{
document.getElementById('txtDate'+paulScripts.getControl(promptName)._id_).value='';
return true;
}
// Calculate the date range start date
var dateRangeStart = paulScripts.calculateRangeStart(timeFrame);
// Calculate the date range end date
var dateRangeEnd = paulScripts.calculateEndDate(dateRangeStart, timeFrame);
// Encode the date range as JSON
var JSONEncodedDates = range?paulScripts.EncodeDateRangeAsJSON(dateRangeStart, dateRangeEnd):paulScripts.EncodeDateAsJSON(dateRangeStart);
// Set the Date prompt using the JSON encoded date range
paulScripts.setDatePrompt(promptName, JSONEncodedDates);
};
paulScripts.setDatePrompt = function(promptName,JSONEncodedDates) {
paulScripts.getControl(promptName).addValues([JSONEncodedDates]);
}
</script>
四月天90 - 90后IT媛 2015-10-16 回答
赞同来自:
组件前面放的你给我的那个代码
后面是这个代码:
这是属性: