Kalender-Auswahlfelder über Kalenderwochen einstellen
In einigen Bereichen werden Perioden häufig über Kalenderwochen definiert. Diese lassen sich über das Kalenderwidget von Cognos natürlich einstellen (Montag bis Sonntag), aber es fehlt eine Anzeige der Kalenderwochen, so dass man wissen muss, wann z.B. KW 14 beginnt. Dafür ist dann eine Auswahlliste der Kalenderwochen hilfreich, so dass man nur "KW 14" auswählen muss und das Datumswidget direkt auf den richtigen Tag eingestellt wird.
Um diese Funktionalität zu erreichen, ist nicht viel erforderlich:
Man benötigt zwei Auswahllisten mit statischen Werten für die möglichen Kalenderwochen eines Jahres. Und natürlich zwei Kalenderwidgets ("Von" und "Bis").
Weiter unten auf der Eingabeaufforderungsseite fügt man ein HTML-Element hinzu, das folgenden Code enthält:
<script language="JavaScript">
var isoweek = (kou) => {
var year = parseInt(kou.substring(0, 4), 10);
var week = parseInt(kou.substring(4, 6), 10);
// JavaScript weekdays: Sun=0..Sat=6
var jan10 = new Date(year, 0, 10, 12, 0, 0);
var jan4 = new Date(year, 0, 4, 12, 0, 0);
var wk1mon = new Date(jan4.getTime() - (jan10.getDay()) * 86400000);
var startdate = new Date(wk1mon.getTime() + (week - 1) * 604800000);
var enddate = new Date(startdate.getTime() + 518400000);
var datesout = new Array();
datesout[0] = dmyformat(startdate);
datesout[1] = dmyformat(enddate);
return datesout;
}
var dmyformat = (kou) => {
return (kou.getFullYear() + '-'
+ (kou.getMonth() + 101).toString().substring(1, 3) + '-' + (kou.getDate() + 100).toString().substring(1, 3));
}
var __week_from;
var __week_till;
var __year_from;
var __year_till;
pmTitanHelper.findControl("P_LST_WEEK_FROM").addEventListener('change', function (e) {
__year_from = parseInt(pickerControlP_DATEPICKER_FROM.sGetValue().substr(0, 4));
__week_from = (__year_from * 100 + parseInt(e.srcElement.value)).toString();
pickerControlP_DATEPICKER_FROM.setValue(isoweek(__week_from)[0]);
});
pmTitanHelper.findControl("P_LST_WEEK_TILL").addEventListener('change', function (e) {
__year_till = parseInt(pickerControlP_DATEPICKER_TILL.sGetValue().substr(0, 4));
__week_till = (__year_from * 100 + parseInt(e.srcElement.value)).toString();
pickerControlP_DATEPICKER_TILL.setValue(isoweek(__week_till)[1]);
});
</script>
Code enthält eine Funktion zur Berechnung des Wochenstart- bzw. -endedatums anhand eines Index und fügt Eventhandler zu den Drop-Downs hinzu. Sobald eine andere KW-Auswahl getroffen wird, wird das Wochenstart- bzw. -endedatum errechnet und das jeweilige Datumswidget gesetzt und der Wert im Parameter gespeichert.