EDD9ADFBC6E745A6AD7251F8A545020A
  • Thomas Pollinger
  • 13.06.2019
  • DE

SmartExtensions: SmartTree und Server Manager Features

Das SmartExtensions-Framework soll die Arbeit erleichtern. Daher gibt es auch viele Funktionen, welche das Arbeiten mit dem Management Server (MS) innerhalb der GUI einfacher macht. Dazu gehören auch Dinge, welche je Management Server Modul, wie z.B. SmartEdit oder SmartTree, anders ablaufen. Aber im Ergebnis dann die gleiche Aktion ausführen. Diese Erleichterungen möchte ich heute vorstellen, jedoch sei gleich von Beginn an gesagt, es ist noch nicht vollständig.
 

Datums- und Zeitformat (OADATE)

Der Management Server nutzt das Microsoft Datumsformat OADATE, welches für OLE Automatisierungsdatum steht. Damit man die Berechnung, in beide Richtungen, nicht jedesmal manuell durchführen muss. Wird in diesem Framework moment.js und weitere kleine Helfer genutzt:

Konvertieren eines Datums in OLE-Automatisierungsdatum

Date.prototype.toOADate = function () {
    console.log(this);
    console.log(moment(this));
    console.log(moment(this).tz('Europe/Berlin'));
    return moment(this).toOADate();
}

Beispiel:

var lastLoginDate = new Date(elementData.LoginDate.fromOADate());

 

Konvertieren eines OLE-Automatisierungsdatums in ein Datum

Number.prototype.fromOADate = function () {
    moment.fromOADate(this).tz('Europe/Berlin');
    return moment.fromOADate(this);
}

Beispiel:

var currentDate = new Date();
var oaCurrentDate = currentDate.toOADate();

 

Kalibrieren des Datumsobjekt bei Bedarf

Date.prototype.calibrateDays = function (numberOfDays) {
    return new Date(
        this.getFullYear(),
        this.getMonth(),
        this.getDate() + numberOfDays,
        this.getHours(),
        this.getMinutes(),
        this.getSeconds()
    );
}

Beispiel:

var color = (currentDate.calibrateDays(-365) > lastLoginDate ? 'danger' : 'dark');

 

Diese Funktionen sind in der functions.oadate.js hinterlegt und liegen im Ordner /global/js/..
 

SmartTree / Server Manager GUI Funktionen

Es gibt auch Funktionen mit denen man die UI des SmartTree und des Server Managers steuern kann. Es sind noch nicht alle implementiert, jedoch gibt es schon die ersten Möglichkeiten zur Steuerung des Clipboards oder der Seite selbst.

class opentext {
    constructor(_rqlConnectorObj) {
        this.rqlConnectorObj = _rqlConnectorObj;
        this.ms = {
            ui: {
                clipboard: {
                    reload: () => {
                        switch (this.rqlConnectorObj.info.session.LastActiveModule) {
                            case "servermanager":
                                top.opener.top.Module.ioTreeIFrame.ioTreeFrames.ioClipboard.RefreshClipboardData();
                                break;
                            case "smarttree":
                                top.opener.top.Module.ioTreeIFrame.ioTreeFrames.ioClipboard.RefreshClipboardData();
                                break;
...
                            default:
                                console.log("no LastActiveModule");
                        }
                    }
                },
                goto: {
                    treesegment: (_Guid, _Type, _ParentGuid) => {
                        switch (this.rqlConnectorObj.info.session.LastActiveModule) {
                            case "servermanager":
                                top.opener.top.Module.ioTreeIFrame.ioTreeFrames.ioTree.GotoTreeSegment(_Guid, _Type, _ParentGuid);
                                break;
                            case "smarttree":
                                top.opener.top.Module.ioTreeIFrame.ioTreeFrames.ioTree.GotoTreeSegment(_Guid, _Type, _ParentGuid);
                                break;
...
                            default:
                                console.log("no LastActiveModule");
                        }
                    }
                },
                refresh: {
                    treesegment: () => {
                        switch (this.rqlConnectorObj.info.session.LastActiveModule) {
                            case "servermanager":
                                top.opener.top.Module.ioTreeIFrame.ioTreeFrames.ioTree.ReloadTreeSegment();
                                break;
                            case "smarttree":
                                top.opener.top.Module.ioTreeIFrame.ioTreeFrames.ioTree.ReloadTreeSegment();
                                break;
...
                            default:
                                console.log("no LastActiveModule");
                        }
                    },
...
                    }
                }
            }
        }
    }
}

Beispiel für die Initialisierung:

$(document)
    .ready(
        function () {
            /* ----- ----- ----- ----- ----- ----- ----- ----- */
            var rqlConnectorObj = {};
            var ws = {};
            createRqlConnector({
                    DebugMode: false
                },
                function (returnConnectorObj) {
                    rqlConnectorObj = returnConnectorObj;
                    ws = new opentext(rqlConnectorObj);
                }
            );

Beispiel für den Aufruf:

ws.ms.ui.clipboard.reload();

Damit lässt sich sehr gut die Implementierung innerhalb der Erweiterungen von den eigentlichen Aufrufen im Management Server trennen. 


Viel Spaß beim ausprobieren, der Source-Code liegt bereits im GitHub zur freien Verfügung.

Im nächsten Artikel beschäftigen wir uns mit SmartExtensions: Framework und Asset-Folder Features ;)


Über den Autor:
Thomas Pollinger

... ist Senior Site Reliability Engineer bei der Vodafone GmbH in Düsseldorf. Seit dem Jahr 2007 betreut er zusammen mit seinen Kollegen die OpenText- (vormals RedDot-) Plattform Web Site Management für die deutsche Konzernzentrale.

Er entwickelt Erweiterungen in Form von Plug-Ins und PowerShell Skripten. Seit den Anfängen in 2001 (RedDot CMS 4.0) kennt er sich speziell mit der Arbeitweise und den Funktionen des Management Server aus.