WGA Portal Services

Die WGA Portal Services sind entwickelt worden, um Websites oder Intranets als "Unternehmensportale" ausbauen zu können.

Das wesentliche Konzept von Portalen ist es, dem Benutzer persönliche Sichten auf Unternehmensdaten und Unternehmensanwendungen zu ermöglichen. Diese "Sichten" werden im Portal in Form von "portlets" eingebunden.
Portlets sind eingenständige Module mit definierter Funktionalität, die im Portal beliebig zusammengestellt werden können.
Portlets besitzen in der Regel benutzerabhängige Konfigurationen, die im Benutzerprofil abgespeichert werden. So kann z. B. in einem CRM-Portlet der augenblicklich ausgewählte Kunde in der (persönlichen) Portletkonfiguration abgespeichert werden.
Für die Verwaltung dieser "Portletkonfigurationen" stehen kompfotable TMLScript-Funktionen zur Verfügung.

Was sind Portlets?
Portlets bestehen aus einem TML-Bibliothekseintrag sowie einem dem Portlet zugewiesenen Bereich im Benutzerprofil.
Die Funktionalitäten eines Portlets werden also in TML bzw. TMLScript programmiert.

Alle Portletfunktionen stehen über das global verfügbare Objekt this.portlet zu Verfügung.

Registrieren von Portlets
Bevor Portlets verwendet werden können, müssen Sie bei WGA "registriert" werden. Durch diese Registrierung wird dem Portlet ein eigenständiger Set an Variablen im Benutzerprofil zugewiesen.
Zur Registrierung von Portlets wird die Funktion

    key=this.portlet.registerPortlet(TML-Name, Portlet-Titel)
verwendet.
Die Funktion erhält als Parameter den Namen eines TML-Bibliothekseintrages sowie eines frei wählbaren Titels.
Der Rückgabewert der Funktion ist ein Schlüssel, über den nach der Registrierung auf das Portlet zugegriffen werden kann. Dieser Schlüssel wird in der Regel in einem Feld des Benutzerprofils abgespeichert, so daß er zukünftig zur Verfügung steht.
Ein Portlet muß also für jeden Benutzer nur einmal registriert werden. Es ist aber durchaus Möglich und sinnvoll, das gleiche Portlet mehrfach zu registrieren. Jedes dieser Portlets besitzt dann zwar die gleiche Funktionalität, jedoch je eine eigene Konfiguration.

Einfügen von Portlets in das Templatedesign
Ein Portlet wird in ein TML-Template über den <tml:include>-Tag eingebunden:
    <tml:include type="portlet" key="key des Portlets"/>
WGA sucht dabei in einer internen Portlettabelle nach dem angegeben Portlet-Key und included den TML-Bibliothekseintrag, der bei der Registrierung angegeben wurde.
Beispiel:
    <tml:script>
      if (this.portlet.item("myPortlet")=="")
      {
        key=this.portlet.registerPortlet("Kunden", "Meine Kunden");
        this.portlet.setitem("myPortlet", key);
        this.portlet.save();
      }
    </tml:script>
    <tml:include type="portlet" key="{this.portlet.item('myPortlet')}"/>
In diesem Beispiel wird zunächst überprüft, ob das Portlet bereits registriert wurde. Ist dies nicht der Fall, wird das Portlet registriert und der Key in dem Feld "myPortlet" im Benutzerprofile gespeichert.
Danach wird das Portlet über <tml:include> in das Template eingefügt.

Zugriff auf die Konfiguration eines Portlets
Innerhalb des TML-Elementes, das die Funktionalität eines Portlets abbildet, kann wahlweise über TML-Tags oder per TMLScript auf Portlet-Daten zugegriffen werden.
Zum Zugriff per TML wird der <tml:item> Tag mit dem Attribut type="portlet" verwendet:
    <tml:item type="portlet" name="Feldname"/>
Der Zugriff per TMLScript geschieht über das Objekt this.portlet:
    this.portlet.item(Feldname) liefert das Portletfeld als String zurück
    this.portlet.itemList(Feldname) liefert das Portletfeld als Liste zurück.
    this.portlet.setItem(Feldname, Wert) speichert einen Wert in einem Feld der Portletkonfiguration
    this.porlet.save() speichert die Änderung der Portletkonfiguration dauerhaft im Benutzerprofil ab.
Zum Speichern von Forumulardaten in einer Portletkonfiguration, steht im Zusammenhang mit TML-Forms und TML-Actions darüber hinaus die Funktion
    this.tmlform.storeInPortlet()
zur Verfügung. Beispiel:
    <tml:form id="myportletform" source="portlet">
      Feld 1: <tml:input name="feld1"/><br>
      <a href="<tml:url type="action">this.tmlform.storeInPortlet();this.setMode("view")</tml:url>">speichern</a>
    </tml:form>

Portlet Modes
Jedes Portlet kann in verschiedenen "Modi" angezeigt werden. Welche "Modes" ein Portlet unterstützt, kann frei vom Portletdesigner bestimmt werden.
Typische Beispiele sind Mode="view" (zur Anzeige von Informationen) und Mode="edit" (zur Konfigurieren eines Portlets).
Zum Setzen eines Portletmodes wird die Funktion
    this.portlet.setMode(mode)
verwendet. Diese Funktion wird in der Regel innerhalb von TML-Actions verwendet.
Beispiel:
    <a href="<tml:url type="action">this.portlet.setMode("edit")</tml:url>">Portlet konfigurieren</a>
Zum Abfragen des Portletmodes kann entweder die Funktion
    this.portlet.getMode()
oder die Condition portletmode="mode" in den TML-Tags <tml:if> und <tml:case> verwendet werden.
Beispiel:
    <tml:select>
      <tml:case portletmode="view">
        Anzeige des Portlets im View-Mode
      </tml:case>
      <tml:case portletmode="edit">
        Anzeige des Portlets im Edit-Mode
      </tml:case>
      <tml:caseelse>
        Fehlermeldung "unbekannter Modus"
      </tml:caseelse>
    </tml:select>
Bevor der Modus eines Portlets mit this.portlet.setMode() gesetzt wurde, ist der "Default-Modus" immer "view".

Verschachteln von Portlets
Das Konzept von Portlets in WGA ist darauf ausgelegt, daß Portlets ineinander verschachtelt werden können und Portlets damit hierarchisch verwaltet werden.
Jedes Portlet besitzt ein "Parent-Portlets" und in der Regel mehrere "Child-Portlets".
Besonders sinnvoll ist diese Verschachtelung bei "Container-Portlets": Portlets, deren Aufgabe es ist, ein Set von benutzerdefinierten "Anwendungs-Portlets" zu verwalten. Das Container-Portlet ist für die optische Darstellung der Child-Portlets verantwortlich (z. B. zweispaltig, dreispaltig etc.), die Child-Portlets bieten die eigentliche Anwendungslogik.
Für Child-Portlets ist es notwendig, auf die Konfiguration des Parent-Portlets zugreifen zu können. Dazu steht die Funktion
    portlet=this.portlet.getParentPortlet()
zur Verfügung.
Parent-Portlets können andererseits auch auf die Konfiguration der Child-Portlets (oder eines beliebigen anderen Portlets) über die Funktion
    portlet=this.portlet.getPortletByKey(portlet-key)
zugreifen.

Beispiel eines Unternehmensportals mit dem WGA Portal Server: