Eine neue Funktion implementieren
Stellen Sie sich vor, dass Sie Informationen benötigen bzw. Operationen mit in-STEP BLUE ausführen möchten, für die in der Model-Schnittstelle keine Funktionen vorgesehen oder die nur umständlich zu erfassen sind. In diesem Fall wäre es doch schick, wenn Sie sich die Informationen direkt aus der Datenbank holen könnten, oder?
Und das ist natürlich möglich: Hierzu dient die Schnittstelle IServerCommand. Eine Komponente, die diese Schnittstelle implementiert, wird ausschließlich serverseitig ausgeführt. Werfen wir dazu einen genauen Blick auf IViewGroupLinkItem. Bei einer Komponente, die die Schnittstelle IViewGroupLinkItem implementiert, handelt es sich um eine Schaltfläche in der in-STEP BLUE-Leiste. In den Anfangstagen von in-Step wurde diese Schnittstelle primär dazu verwendet, Daten aus in-Step in Fremdanwendungen bereitzustellen: beispielsweise für den Prozessexport nach MS Visio oder die Übernahme von Aktivitäten (als Aufgaben oder Termine) nach MS Outlook. Aus diesem Grund werden auch alle Komponenten, die diese Schnittstelle implementieren, im Dialog Leiste anpassen unter Externe Komponenten aufgeführt:
Unser Beispiel – eine neue Schaltfläche Projekteigenschaft anzuzeigen – soll folgendermaßen funktionieren: Wenn ein Anwender auf die Schaltfläche drückt, erhält er den aktuellen Wert einer (vorher konfigurierten) Projekteigenschaft. Der Wert wird über ein Server-Command ermittelt.
Als erstes definieren Sie eine neue ViewGroupLinkItem-Klasse, die Sie entsprechend ihrer Funktionalität ProjectPropertyViewLink taufen:
Die Funktionen der Schnittstelle sind recht überschaubar. Einige kennen Sie vielleicht bereits (oder in ähnlicher Form) von der ICommand-Schnittstelle:
Bitmap: Das Symbol der Schaltfläche in der in-STEP BLUE-Leiste.
Name: Die Bezeichnung der Schaltfläche in der in-STEP BLUE-Leiste.
Init: Die Methode wird aufgerufen, wenn die Schaltfläche geladen oder einer Sichtengruppe zugeordnet wird. Über das System-Model können Sie auf Informationen des Systems zurückgreifen. Der Parameter pi_sParameter beinhaltet die Einstellungen dieser Schaltflächen-Instanz (Siehe Configure und Parameter).
Configure: Diese Methode wird aufgerufen, wenn Sie die Schaltfläche einer Sichtengruppe zuordnen bzw. nach der Zuordnung die Einstellungen der Schaltfläche ändern möchten.
Parameter: Dieses Property wird von in-STEP BLUE aufgerufen, wenn die Schaltfläche konfiguriert wurde (Configure-Methode durchgelaufen). Die Schaltfläche speichert darüber ihre speziellen Einstellungen ab, die beim erneuten Laden der Schaltfläche über die Init-Methode wieder übergeben wird.
Execute: Diese Methode wird natürlich aufgerufen, wenn Sie die Schaltfläche bedienen.
Schauen Sie sich als erstes die Konfiguration an:
In diesem Fall setze ich explizit den Wert „Qualitätsstatus“. Die Schaltfläche wird also immer den aktuellen Wert der benutzerdefinierten Eigenschaft „Qualitätsstatus“ des Projekts ausgeben. Sofern diese Eigenschaft überhaupt existiert.
Nachdem die Configure-Methode abgearbeitet wurde, ruft in-STEP BLUE das Property Parameter auf, um die soeben konfigurierten Daten für die Schaltfläche zu speichern:
Wie Sie die Informationen über das Parameter-Property in in-STEP BLUE speichern, können Sie festlegen. Empfehlenswert wäre eine Orientierung an den bei uns intern üblichen Strukturen, sprich die Werte in „Tags“ zu füllen. Wichtig ist, dass Sie die Struktur in der Init-Methode auch wieder auslesen können:
Nun geht es nur noch darum, die Execute-Methode mit Leben zu füllen. Sie können sich jetzt über die Model-Schnittstelle die Daten des Projekts holen:
Diese können Sie nun nach dem „Qualitätsstatus“ durchsuchen und den Wert ausgeben. Alternativ können Sie aber auch die Abfrage nach der Projekt-Eigenschaft über ein eigenes Server-Command realisieren:
Ein Server-Command wird zuerst initialisiert. Der Parameter pi_xdParameter wird von der Client-Komponente vorgegeben. Der zweite Parameter ist das COM-Objekt des in-STEP BLUE-Systems (isKernel20.System). Die Init-Funktion wird vom in-STEP BLUE Server aufgerufen. Ebenso wird die Execute-Methode vom Server ausgeführt.
Dementsprechend schauen Sie erst mal an, wie Sie von der Clientseite ein Server-Command aufrufen:
Was passiert hier?
Ein Server-Command wird mit dem System-Objekt initialisiert. Um den Wert der benutzerdefinierten Eigenschaft „Qualitätsstatus“ ermitteln zu können, braucht der Befehl zwei weitere Informationen:
- die ID des Projekts
- den Namen der benutzerdefinierten Eigenschaft
Beide Informationen schreiben Sie nun in eine definierte XML-Struktur, die auch Ihr Server-Command kennt:
Nun rufen Sie bitte das Server-Command auf:
Der Ablauf ist wie folgt:
Die Model-Schnittstelle übergibt die Informationen per TCP an den in-STEP BLUE Server. Dieser instanziiert (via COM) Ihren Server-Command über dessen ProgID. Das heißt, die inStepHelloExtension.tlb (aus diesem Beispiel) muss auch auf dem Server unter Windows registriert sein.
Sofern der in-STEP BLUE Server das Server-Command instanziieren konnte, übergibt es der Instanz das Parameter-Objekt und das System-Objekt des aktuellen Systems. Anschließend ruft es die Execute-Methode des Server-Commands auf. Die Execute-Methode im Server-Command führt ihre Operationen durch und gibt anschließend ein Ergebnis (wieder IXMLDOMDocument2) zurück. Dieses Ergebnis wird dann vom in-STEP BLUE Server an den in-STEP BLUE Client zurückgeliefert. Die Komponente, die das Server-Command aufgerufen hat, kann anhand des Ergebnisses nun weitere Aktionen durchführen.
Anmerkung: Wenn Sie keinen in-STEP BLUE Server im Einsatz haben, dann ist Ihr in-STEP BLUE Client auch gleichzeitig der Server.
Bei der Implementierung eines Server-Commands sind folgende Dinge unbedingt zu beachten:
- Es dürfen keine Dialoge oder Meldungen serverseitig aufgerufen/angezeigt werden. Diese würden nämlich auf dem Server-Rechner angezeigt werden. Nur gibt es niemanden, der diese Dialoge bestätigen kann. Das bedeutet: Der Client-Rechner erhält nie eine Rückmeldung vom in-STEP BLUE Server und wird hängenbleiben.
Auftretende Fehler müssen deshalb auch direkt weitergeleitet werden. Das bedeutet: Der Server überträgt die Fehlerinformationen an den Client. - Alle Aktionen auf Elementen der Datenbank müssen in Schreib- oder Lesetransaktionen vorgenommen werden. Wird dies nicht durchgeführt, scheitert das Server-Command beim ersten Zugriff auf einem Element.
Die Transaktion sollte vor dem Verlassen der Execute-Methode wieder geschlossen werden. Wenn die Transaktion nicht geschlossen wird, kann der in-STEP BLUE Client i.d.R. wegen der offenen Transaktion keine weiteren Operationen durchführen und muss neu gestartet werden.
Die Operationen in Ihrem Server-Command wären nun wie folgt:
Wollen Sie jetzt Ihre neue Funktionalität in Aktion sehen? Dann öffnen Sie dazu das Multiprojektmanagement-Tutorial und darin das Projekt Hello, weil in diesem System die benutzerdefinierte Eigenschaft existiert. Dort weisen Sie als Erstes Ihre neue Komponente zu.
Nun noch kurz die in-STEP BLUE Leiste angepassen:
Beim Zuweisen wird der Name automatisch in Qualitätsstatus ausgeben geändert. Dies ist im Name-Property so vorgesehen:
Nach der Zuweisung können Sie die Schaltfläche mit Eigenschaften weiter anpassen (anderes Symbol, anderer Name, eine Notiz und eine erneute Konfiguration):
Nachdem Sie die Anpassungen gespeichert haben, wird es spannend. Ein Klick auf das Symbol Qualitätsstatus ausgeben – und Sie erhalten folgende Meldung:
Na, dann ist ja alles OK.
Diskutieren Sie mit.