Einführung in BBj

Werbung
Stand: Januar 2012
Für BBj Releases ab 11.11
Einführung in BBj
Das Tutorial für Ein- und Umsteiger
Tutorial • Einführung in BBj
Inhaltsverzeichnis
Installation und
Konfiguration 9
Überblick4
Architektur4
Die Programmiersprache BBj 5
Die Installation9
Barista - Rapid Application
Verfügbare Versionen im Download9
Development (RAD) für Java
6
Java installieren9
Weiterführende Informationen 7
Die BBj-Installation Dokumentation7
Die installierten Module
Online-Angebote7
Lizensierung19
Englischsprachige Tutorials und
30 Tage Demo-Lizenz 19
Entwicklerlizenz20
Trainingsunterlagen7
9
19
Video Tutorials 7
Lizenzen für Produktivsysteme 20
Java Breaks 7
Notfalllizenzen20
Häufig gestellte Fragen – FAQ 7
60 Tage Demo-Lizenz 20
Moderierte Newsgroups /
Der Lizenzmanager20
Diskussionsforen7
Konfigurationsdateien 21
BBj + Barista Downloads 8
Der Enterprise Manager Training8
Enterprise Manager starten 22
Newsletter8
JVM Settings 23
Technischer Produktsupport8
Das laufende System überwachen 23
22
Log Files 24
BUI- und Webstart Einrichtung 24
2
© BASIS Europe 2012
Software entwickeln
mit BBj 25
Ein erstes BBj
GUI Programm 42
Die .arc Ressourcendatei - Definition
Die BASIS IDE 25
der grafischen Benutzeroberfläche 42
Die BBj API und die Syntax der
BBj Programmiersprache 25
Einfache Eventsteuerung
Grundsätzliches25
Start der Anwendung im Browser 48
Variablen und Objekte 26
Schneller zum Ziel mit dem
Generische Datentypen26
Records / Strukturen als
String Templates 26
Eine neue .arc Ressource
Benutzerdefinierte Feld-Attribute
27
44
Dialog Wizard 50
als Grundlage 50
Dialog Wizard starten 51
Wiederholende Felder 28
Das Zusammenspiel von Programmen,
Zugriff auf die Felder
28
Threads und Klassen
58
Zuweisungen mit Templated Strings28
BBj Anwendungen – Start per Verknüpfung
FATTR29
und per Weblink
65
FIELD und NFIELD 29
Weiteres zur Benutzung von Templates 30
Klassen, Objekte und
Objektorientierung31
Die BBj-API Klassen
in der Dokumentation 32
Code Completion in der IDE
32
Index70
Eigene Klassen 33
Client Side Objects33
Die BBj Syntax – einige wichtige
Sprachkonstrukte34
Bedingungen34
Schleifen 35
WHILE….WEND 36
CONTINUE und BREAK 36
Sprünge und Labels36
In der Interpreter-Konsole arbeiten 39
Ein Programm mit Hilfe
des Interpreters debuggen 40
3
Tutorial • Einführung in BBj
Überblick
Architektur
Die Entwicklungsumgebung BBj von BASIS verfügt über eine echte 3-Tier Architektur und
bietet somit ein hohes Maß an Flexibilität beim Produktivbetrieb Ihrer fertigen Anwendung.
• Datenbank, Ausführungsschicht und Benutzeroberfläche können vollständig über
verschiedene Hardware-Plattformen und Betriebssysteme im Netzwerk hinweg verteilt und
unabhängig voneinander skaliert werden, wenn sich der Bedarf des Anwenders verändert.
BBj bietet zwei plattformunabhängige RIA Thin Clients an.
• Der erste basiert auf Java Swing und kann mit Java Webstart oder im Browser als
Applet verwendet werden. Er benötigt nur eine geringe Bandbreite zur Kommunikation mit
dem Server und bietet den Benutzerkomfort und das Look and Feel einer lokal installierten
Desktop-Anwendung.
• Der zweite RIA Thin Client ist für Javascript-fähige Browser gedacht. Mit diesem Client
laufen Ihre Anwendungen auch auf allen iPads, Smartphones usw., ohne Änderungen am
Quellcode. Diese Technologie nennt BASIS „Browser User Interface“ (BUI).
•
Moderne Verschlüsselungsverfahren sichern den Datentransfer über das Netzwerk.
• Der integrierte Lizenzmanager (BLM) ist serverbasiert. Während des Betriebs „zählt“
er die gleichzeitigen Nutzer. Er schützt Ihr geistiges Eigentum bei jeder kundenseitigen
Installation.
4
© BASIS Europe 2012
Das Lizenzmanagement und der echte BBj Thin Client machen Ihre Anwendung fit für
SaaS- und Cloud Computing-Konzepte.
• Der BBj Enterprise Manager bildet den zentralen Zugangspunkt des Entwicklers
auf alle installierten BBj-Anwendungen. Er bietet auch vollen Zugriff auf die laufende
Installation.
BBj verfügt über eine eigenständige Programmiersprache, die Ähnlichkeiten sowohl
mit Java als auch mit BASIC-Dialekten (Business Basic, Visual Basic) aufweist. Diese
Programmiersprache setzt auf der Java Virtual Machine (JVM) auf.
Dank der vollständigen Java-Integration laufen BBj-Programme plattformunabhängig
– derselbe Quellcode kann auf jedem System gestartet werden, auf dem eine Java VM
(Virtual Machine) verfügbar ist.
Die Programmiersprache BBj
BBj® ist eine objektorientierte Hochsprache für die schnelle Entwicklung und den
effizienten Betrieb kaufmännischer Geschäftsanwendungen. Alle Funktionen, die Sie bei
der täglichen Arbeit brauchen, sind integriert:
• BBj als Programmiersprache bietet zahllose Funktionen im Sprachstandard, deren
Realisierung viele andere Sprachen dem Programmierer überlassen.
• Eine vollständige Integration in die Java-Umgebung bietet dem Programmierer bei
Bedarf flexiblen Zugriff auf Java-Funktionen.
• Eine leistungsfähige GUI-API reduziert die Entwicklungszeit für grafische Oberflächen
dramatisch.
• Die interpretierte, dynamische Sprache bietet vollen Zugriff auf den Zustand der
Programme und der Umgebung zur Laufzeit und bietet so Realtime-Debugging, Test
und Troubleshooting.
• BBj liefert eine integrierte SQL-Datenbank mit allen Standard-Features. Der «Direct
Navigational Access» bietet auch ohne SQL den direkten Zugriff auf einzelne
Datensätze. Die Verwendung einer Standard- SQL-Datenbank wie mySQL, Oracle,
usw., ist allerdings auch möglich.
5
Tutorial • Einführung in BBj
Barista - Rapid Application
Development (RAD) für Java
Barista® ist ein RAD-Framework für BBj, mit dem Sie fast ohne Programmierkenntnisse
visuell Java-Anwendungen entwickeln können. Barista ist besonders für kaufmännische
Anwendungen geeignet.
Mit Barista definieren oder übernehmen Sie aus Ihrer Datenbank Felder, Tabellen und
Relationen. Aus diesen Elementen setzt Barista ohne Programmierung eine Anwendung
inklusive Formularen, Bildschirmmasken und Lookup-Tabellen und einem Menüsystem
zusammen.
Das Menüsystem beinhaltet bereits Benutzerverwaltung und rollenbasierter Rechtevergabe.
Zahlreiche Funktionen, wie z. B. die Lookup-Anzeigen, können benutzerabhängig
konfiguriert werden.
Trotz dieser komfortablen Framework-Unterstützung bleibt der Programmierer frei in seiner
Arbeit. Java- und BBj-Code können über Callpoints beliebig in die Barista-generierte
Applikation eingefügt werden.
Barista beschleunigt nicht nur Ihre Entwicklung, da viele Grundfunktionen umfangreicher
Softwareprojekte sehr schnell implementiert sind, sondern verbessert auch ganz allgemein
die Qualität Ihrer Projekte: Durch das zentrale Repository werden Barista-Projekte selbst
dokumentierend, dadurch besser wartbar und leichter erweiterbar.
6
© BASIS Europe 2012
Weiterführende Informationen
In diesem Kapitel finden Sie die wichtigsten Informationsquellen, die Ihnen helfen,
produktiv mit BASIS Tools zu arbeiten.
Dokumentation
Bei der täglichen Arbeit wird die Dokumentation wohl Ihr wichtigster Begleiter und Ihre
wichtigste Informationsquelle sein. Die Produktdokumentation finden Sie online unter:
http://www.basis.com/documentation/
Hinweis: Die Dokumentation befasst sich auch mit älteren Produktversionen der BBjEntwicklungsumgebung wie Visual PRO/5 und andere. Die angegebenen Beispiele und
Anleitungen sind zwar auch für die moderne BBj-Version gültig, repräsentieren aber nicht
unbedingt den aktuellen Stand der Programmiertechnik. Neueinsteigern empfehlen wir
den Weg über die BBj API, die in diesem Tutorial eingeführt wird.
Einige Beispielprogramme in der Dokumentation zeigen z. B. ältere Wege zur GUIProgrammierung. Einen guten Überblick über die Unterschiede dieser beiden Wege gibt
das folgende Dokument in englischer Sprache:
http://www.basis.com/solutions/Guide_to_GUI_Programming.pdf
Online-Angebote
Über die Dokumentation hinaus bietet BASIS weitere technische Informationen online an.
Die Materialien in den Online-Angeboten bieten eine gute Grundlage zum Selbststudium.
Darüber hinaus ermutigen wir alle Entwickler, die moderierten Newsgroups zu besuchen
und zu nutzen. Hier finden Sie Antworten zu Fragen anderer Teilnehmer, und hier können
Sie auf Ihre eigenen Fragen Antworten von anderen Entwicklern oder direkt vom BASIS
Entwicklerteam erhalten.
Englischsprachige Tutorials und Trainingsunterlagen
http://www.basis.com/training
Video Tutorials
http://www.basis.com/trainingtutorials
Java Breaks
Java Breaks sind kompakte Webinare zu verschiedenen Aspekten von BBj.
http://www.basis.com/java-break-basis
Häufig gestellte Fragen – FAQ
http://www.basis.com/support
Moderierte Newsgroups / Diskussionsforen
http://www.basis.com/discussion-forums
7
Tutorial • Einführung in BBj
BBj + Barista Downloads
https://www.basis.com/bbj-download
Sie können jederzeit BASIS Produkte von der BASIS Homepage herunterladen und
installieren. Sie können bei der Installation eine persönliche 30 Tage Demolizenz oder eine
7 Tage Notfalllizenz für höhere Benutzerzahlen automatisch ohne persönlichen Kontakt zu
BASIS installieren.
Training
BASIS USA und BASIS Europe bieten regelmäßig Trainings, Informationsveranstaltungen
und Konferenzen an. Eine Übersicht über Angebote von BASIS USA finden Sie unter
https://www.basis.com/events
Eine Übersicht über Veranstaltungen von BASIS Europe finden Sie unter
http://www.basis-europe.eu/de/index.php/news/agenda.html
Auf beiden Websites finden Sie verschiedene Angebote – Onlineangebote genauso wie
Präsenzveranstaltungen. Schauen Sie regelmäßig vorbei!
Newsletter
Wenn Sie regelmäßig über Schulungstermine u. ä. unterrichtet werden wollen, abonnieren
Sie unseren Newsletter unter http://basis-europe.eu/de/index.php/contact-basis-europe.html
oder per formloser Mail an [email protected].
Technischer Produktsupport
Bei Fragen zur Installation, Benutzung oder auch Programmierung in BBj und Barista steht
unser technisches Supportteam zu Ihrer Verfügung:
•
•
E-Mail: [email protected]
Telefon: +49 681 968 14-40
Wir bieten telefonische Unterstützung in Deutsch, Englisch, Französisch und Italienisch an.
8
© BASIS Europe 2012
Installation und Konfiguration
Die Installation
BASIS BBj und Barista werden mit einem Installer für Java auf Ihrem Rechner installiert.
Die Installation kann auch auf zeichenorientierten Oberflächen in einer SSH Sitzung
oder im UNIX Terminalfenster durchgeführt werden. BBj ist nicht nur geeignet für
GUI Programmierung, sondern kann auch auf Webservern oder für die Realisierung
zeichenorientierter Benutzeroberflächen verwendet werden.
Verfügbare Versionen im Download
Im Downloadbereich können Sie zwischen verschiedenen Release-Versionen wählen,
dem täglichen Nightly Build (eine Version, die den aktuellen Stand der Arbeit bei BASIS
widerspiegelt, ohne eine vollständige Verwendbarkeit zu garantieren) sowie eine gewisse
Zeit vor dem Erscheinen einer neuen Produktversion einen Release Candidate, mit dem Sie
bereits frühzeitig Ihre Anwendung an die Funktionen der neuen Version anpassen können.
BBj wird von einigen nativen Bibliotheken begleitet, die eine nahtlose Integration Ihrer
Anwendung in nahezu alle modernen Betriebssysteme ermöglicht. Wählen Sie „BBj +
Barista für diese Tutorial.
Java installieren
Da BBj auf der JVM aufsetzt, müssen Sie zuerst die aktuell unterstützte Java-Version
installieren, bevor Sie BBj installieren. Sie erhalten die Java JVM für die meisten
gebräuchlichen Betriebssysteme direkt von der Oracle Homepage unter http://java.oracle.
com. Einige Hersteller von Betriebssystemen, wie HP oder IBM, bieten eigene JVMs an.
Ziel von BASIS ist es, BBj und Barista immer auf allen verfügbaren JVM-Versionen
funktionsfähig zu halten. Damit wird Ihnen die Last genommen, Ihre Software an die
vielen verschiedenen Java Versionen, die im Laufe der Zeit erscheinen, anzupassen.
Dennoch kann es sein, dass eine bestimmte BBj-Version aus verschiedenen Gründen
nicht mit allen Java-Versionen funktioniert. Sie finden in den Release Notes eine Liste der
Einschränkungen.
Einen Überblick über die unterstützten Betriebssystemversionen finden Sie unter
http://www.basis.com/availability.
Die BBj-Installation
Nach dem Download liegt das Produkt in einer selbst entpackenden .jar-Datei („jar“ steht
für „Java Archiv“) vor. Sie können die Installation auf den meisten Systemen einfach per
Doppelklick auf diese Datei starten. Ansonsten starten Sie die Installation manuell mit
folgendem Kommando an der Kommandozeile:
<java_bin>java
–jar
BBjBaristaIDE1111_11-18-2011_0923.jar
(Ersetzen Sie <java_bin> durch den Pfad zu Ihrer Java-Installation.)
9
Tutorial • Einführung in BBj
Die einzelnen Installationsschritte:
1. Wählen Sie die Sprache der Installation und klicken Sie auf „OK“
2. Lesen Sie die Einführung und akzeptieren Sie die Lizenzvereinbarungen.
10
© BASIS Europe 2012
3. Wählen Sie den Zielpfad für die Installation.
Normalerweise empfiehlt es sich, die Standardvorgabe der Installationsroutine zu
übernehmen. Ausnahmen: Unter Windows Vista und Windows 7 mit eingeschalteter
Benutzerkontensteuerung (UAC - User Account Control) ist es möglicherweise sinnvoll,
BBj außerhalb des Verzeichnisses \Programme zu installieren.
Der Grund: Da Windows Vista und Windows 7 den Zugriff auf Dateien in diesen
Verzeichnissen virtualisieren bzw. verhindern, vermeiden Sie so unerwartete Probleme bei
der Arbeit mit BBj, z. B. den Beispieldaten oder den Konfigurationsdateien.
Unter Unix/Linux sind die geeignetsten Installationsorte normalerweise /usr/basis, /usr/
local/basis oder /opt/basis. Die Funktionstüchtigkeit der Installation ist jedoch nicht von
einem bestimmten Installationsort abhängig.
4. Überprüfen Sie, welche Java Version der Installer für BBj vorschlägt, und wählen Sie
falls gewünscht eine andere.
Das Installationsprogramm schlägt normalerweise die Java Version vor, die für seinen
eigenen Start verwendet wurde. Klicken Sie auf „Browse“, um eine andere Version
auszuwählen. Es wird empfohlen, BBj und Barista mit einer aktuellen Java-Version zu
installieren.
11
Tutorial • Einführung in BBj
5. Wählen Sie die Teile des Installationspakets, die Sie installieren möchten.
Als Entwickler wählen Sie typischerweise „Standard“, um alle verfügbaren Tools,
Democodes und die Dokumentation zu installieren.
6. Wenn Sie die Installation als Webstart zur Verfügung stellen, werden alle Installationsdateien nochmals kopiert. Danach kann die Installation vom diesem Rechner per httpWebstart Link aufgerufen werden.
Hinweis: Diese Option belegt etwa doppelt so viel Speicherplatz auf der Festplatte wie
eine Standard-Installation ohne Webstart.
7. Die Installation startet nach Bestätigung des Überblicks über den Installationsumfang.
12
© BASIS Europe 2012
8. Einstellungen zur Benutzerkontensteuerung (nur verschiedene Windows Systeme):
Legen Sie fest, ob BBj immer mit Standardrechten (= Anwenderrechten) oder
Administratorrechten gestartet werden soll.
Wenn Sie Administratorrechte wählen, erfolgt je nach Systemeinstellung vor jedem Start
von BBj ein Warnhinweis.
Die erste Konfiguration nach abgeschlossener Installation
Nachdem das Installationsprogramm alle gewählten Produktteile kopiert und installiert
hat, startet eine Folge von Dialogen, die eine erste Konfiguration von BBj und Barista
erlauben. Alle dabei vorgenommenen Einstellungen können später mit dem „Admin“-Tool
im Startmenu (oder im bbj/bin-Verzeichnis) bearbeitet werden.
Jede BBj-Lizenz gestattet auch die Nutzung zurückliegender Programmversionen wie
PRO/5, BBx usw. (Produktiv- und Entwicklerlizenz). Über Produktivlizenzen für Barista
informieren wir Sie gern. Entwicklerlizenzen für BBj und Barista sind kostenlos erhältlich.
9. Wählen Sie die Art der Lizenzierung
9.1 eine Lizenz registrieren
Wählen Sie “Für eine Lizenz registrieren” wenn Sie
- bereits eine Seriennummer mit Autorisierungscode erhalten haben, z. B. als kostenlose
Developer-Lizenz,
- eine 30 Tage Demolizenz registrieren möchten:
13
Tutorial • Einführung in BBj
Geben Sie zunächst Ihren Namen und Ihre Firmendaten ein, und dann die Seriennummer
und den Autorisierungscode.
Wenn Sie „30-Tage-Demolizenz anfordern” anklicken, werden Seriennummer und ein
Autorisierungscode automatisch erzeugt und eingetragen. Die Demolizenz erlischt nach
30 Tagen, wenn sie nicht verlängert wird.
Die Host-ID identifiziert den Rechner, auf dem Sie die BASIS-Produkte installiert haben.
Über diese ID wird die Seriennummer aktiviert.
14
© BASIS Europe 2012
Im letzten Dialog wählen Sie die Art der Registrierung – im Normalfall direkt über Internet
per „Lizenz automatisch registrieren und installieren“.
Wir stellen Ihnen auch gern kostenlose Developer-Lizenzen für Ihren Zweitrechner oder
Testsysteme zur Verfügung. Senden Sie einfach eine E-Mail an [email protected].
Mit dem Klick auf “Weiter” lösen Sie die Aktivierung über das Internet aus.
9.2 Eine Lizenz manuell installieren
Falls der Rechner, auf dem Sie installieren möchten, nicht über eine Internetverbindung
verfügt, notieren Sie bitte die Host-ID in diesem Dialog (Achtung: auf manchen Rechnern
müssen Sie im Feld nach rechts scrollen, da die ID nicht vollständig in das Feld passt), und
klicken dann auf „Zurück“, um wie unter 9.2 beschrieben eine Lizenzdatei manuell zu
installieren. Diese erhalten Sie unter
http://www.basis.com/support/licensing/register.html.
Geben Sie in dem Webformular die Seriennummer, die Autorisierungsnummer und die
Host-ID ein. Die Seite erzeugt eine Lizenzdatei im Textformat, die Sie manuell auf dem
Rechner installieren können.
Wenn Ihnen bereits eine Lizenzdatei (im Textformat) vorliegt, so können Sie diese mit „eine
Lizenz installieren“ auf Ihrem Rechner installieren. Geben Sie einfach den Speicherort der
Datei an und klicken Sie auf „Weiter“.
15
Tutorial • Einführung in BBj
9.3 Einen Lizenzmanager wählen
Wählen Sie diese Option, wenn Sie bereits auf einem anderen Rechner oder Server einen
BBj-Lizenzmanager betreiben, der über eine Lizenz verfügt, die Sie auf diesem Rechner
mit verwenden möchten. Geben Sie den gültigen Rechner-Netzwerknamen oder die IPAdresse an (z. B. 192.168.0.33).
10. BASIS Lizenz Manager (BLM) Startkonfiguration
10.1 BLM als Windows Dienst starten (unter Windows)
Auf Windows-Rechnern wird der Lizenzmanager typischerweise als Dienst gestartet. Unter
Mac, Unix und Linux gibt es eine analoge Auswahl, um den BLM als Dienst (Daemon) zu
starten.
16
© BASIS Europe 2012
10.2 BLM nach Anmeldung eines Benutzers starten
Der Lizenzmanager wird nach Anmeldung eines Benutzers am System im Vordergrund
gestartet.
10.3 Den BLM manuell starten
Wenn Sie diese Option auswählen, müssen Sie den BLM jedes Mal mit dem AdminWerkzeug manuell starten, wenn Sie ihn benötigen.
11.Den BASIS Lizenz Manager starten
12. Den Start der BBj Services konfigurieren
Der Dienst „BBj Services“ übernimmt in der 3-Tier Architektur von BBj die Aufgaben der
Ausführungsschicht und der integrierten Datenbank (sofern Sie diese verwenden).
12.1 BBj Services als Windows Dienst starten
In der Standardeinstellung für die Einrichtung eines Serversystems wird BBj Services sofort
beim Systemstart als Dienst gestartet. Der Dienst und alle BBj-Prozesse erhalten die Rechte
und Gruppenmitgliedschaften des Benutzerkontos, das Sie in diesem Dialog angeben. Das
Windows-Benutzerkonto, das Sie hier eingeben, muss auf jeden Fall mit einem Passwort
versehen sein.
17
Tutorial • Einführung in BBj
Unter Mac, Unix und Linux besteht eine analoge Option, um BBj Services als Hintergrunddienst zu starten. Wenn der Dienst als Benutzer “root” unter UNIX/Linux gestartet wird,
erhalten alle laufenden BBj-Prozesse die Rechte derjenigen Benutzerkonten, unter denen
sie gestartet werden.
12.2 BBj Services nach Benutzer-Anmeldung starten
Wählen Sie diese Option auf Ihrem
Entwicklungsrechner, um vollständige
Kontrolle über BBj Services im Vordergrund
zu haben. Unter Windows wird ein Symbol
(„Kaffeetasse“) im System Tray neben der
Uhr angezeigt, mit dessen Hilfe Sie per
Rechtsklick den Dienst starten, stoppen und
neu starten können.
12.3 BBj Services manuell starten
Wählen Sie diese Option, falls Sie auf diesem Rechner die BBj Services nur gelegentlich
benötigen. Wenn Sie diese Variante wählen, können Sie den BBj Service bei Bedarf
manuell mit Hilfe des Admin-Werkzeugs, des „BBjServices Wizard“ im Startmenu oder per
Kommandozeile starten:
<bbj_bin>\bbjservices
–noservice
Die Installation von BASIS BBj und Barista kann mit Hilfe eines Scripts automatisiert
werden. Lesen Sie hierzu
documentation.basis.com/advantage/V14-2010/custinstall.pdf
18
© BASIS Europe 2012
Die installierten Module
Nach einer vollständigen Installation finden Sie folgende Module im Startmenu Ihres
Rechners vor:
Die integrierte Entwicklungsumgebung
BASIS IDE
Ordner “Barista”
xx Barista
Der Start des Barista Application Development Framework
xx ReadMe
Web-Link zur Barista ReadMe
xx Relnotes Web-Link zu den Barista Release Notes
• Ordner “BBj”
xx Admin
Das Admin-Werkzeug, mit dem Sie die Ersteinrichtung,
die nach der Installation durchgeführt wird, verändern
können.
xx BBj
Der BBj-Interpreter selbst
xx Configurator
Interaktives Tool zum Einstellen der Parameter in der
config.bbx Datei
xx Enterprise Manager Werkzeug zum Konfigurieren der Einstellungen der
BBjServices und zum Überwachen einer laufenden
Installation.
xx Performance AnalyzerWerkzeug zur Analyse der Ausführungsgeschwindigkeit
IhrerProgramme, um mögliches Verbesserungspotenzial
aufzuzeigen. Benutzen Sie „SETTRACE“, um eine ASCII
Tracefile mit Zeitstempeln der Programmausführung zu
erzeugen, sie Sie mit diesem Werkzeug analysieren können.
xx ReadMe
Web-Link zur BBj ReadMe
xx Relnotes Web-Link zu den BBj Release Notes
xx Demos
Ein Unterordner mit verschiedenen Demoprogrammen
Launch Dock Eine zentrale Starteranwendung zum Start der Demos:
- Linksklick startet die Demo
- Rechtsklick öffnet den Quellcode in der IDE
xx BBjServices Wizard Tool zum Starten und Beenden der BBj Services
•
•
Hinweis: Die Module „ResBuilder“, „DDBuilder“ und „GUIBuilder“ werden nur von
Entwicklern benötigt, die mit Visual PRO/5 Projekte gestartet hatten. Sie sind für den
Neueinsteiger nicht von Belang.
Lizensierung
Die vollständige Downloadversion von BBj und Barista enthält alles, was Sie zur
Installation eines Entwicklungsrechners oder eines Produktivsystems / Servers benötigen.
Es gibt verschiedene Arten von Lizenzen zum Betrieb in verschiedenen Umgebungen:
30 Tage Demo-Lizenz
Diese Lizenz ist für eine einfache erste Produktevaluierung gedacht. Sie wird durch
einfaches Anklicken der entsprechenden Option bei der Installation installiert. Sie kann auf
19
Tutorial • Einführung in BBj
demselben System nur begrenzt oft installiert werden – danach wird keine weitere 30 Tage
Demolizenz mehr ausgestellt. 30 Tage Demolizenzen sind kostenlos.
Entwicklerlizenz
Diese Lizenz ist gedacht für die Softwareentwicklung, Tests und weitergehende
Produktevaluierung. Sie ist jeweils für ein Jahr gültig und kann verlängert werden. Eine
persönliche Entwicklerlizenz (für einen PC oder Laptop) wird kostenlos ausgestellt.
Mehrbenutzer-Entwicklerlizenzen können für eine geringe jährliche Support-Gebühr
bestellt werden. Bevor Sie eine Entwicklerlizenz erhalten können, müssen Sie diese
Bedingungen durch Ausfüllen des DVK/NFR Formulars (www.basis-europe.eu, „Jetzt
starten“ / „DVK-Lizenz kostenlos“) akzeptieren.
Lizenzen für Produktivsysteme
Produktivlizenzen sind Einzel- oder Mehrbenutzerlizenzen zum Einsatz in Produktivumgebungen. Die erforderliche Lizenzgröße bemisst sich bei BASIS Produkten nach der
Anzahl der User, die das System gleichzeitig nutzen.
Dabei wird jede eindeutige Kombination aus Benutzerkonto und Netzwerkadresse als
eine Lizenz gezählt, solange der Nutzer den BBj-Interpreter mit den Laufzeitbibliotheken
in Benutzung hat. Die benötigten Lizenzen können gekauft oder gemietet werden. Für
Entwickler niedrig gepreister Software in höheren Stückzahlen stehen Volumenlizenzen zur
Verfügung.
Notfalllizenzen
Damit eine BASIS Lizenz neu installiert werden kann, muss die Lizenzaktivierung im
Registrierungssystem zurückgesetzt werden. Wird auf diesen Reset verzichtet, wird jede
neu installierte Produktivlizenz zur sog. Notfalllizenz, die nur sieben Tage weiter benutzt
werden kann. In dieser Zeit kann die permanente Lizenz durch Anfordern des Lizenzreset
wieder hergestellt werden.
60 Tage Demo-Lizenz
Für Produktvorführungen und Tests stellen wir gerne kostenlos eine Produktivlizenz mit
einer Gültigkeit von 60 Tagen aus. Diese Lizenzen können in beliebiger Größe über den
BASIS Support oder Vertrieb angefordert werden.
Der Lizenzmanager
Der BASIS Lizenz Manager (BLM) überwacht die lizensierte Nutzung Ihrer Software in der
jeweiligen Installation. Der Lizenzmanager nutzt Registrierungsdaten in Form einer ASCIIDatei, die Host-ID, Seriennummer und Anzahl lizensierter gleichzeitiger Nutzer enthält.
Diese Datei wird bei der Registrierung erzeugt.
20
© BASIS Europe 2012
Mit dem Lizenzmanager kann BASIS auch eine die lizenzkonforme Nutzung ihrer
gesamten Applikation prüfen, oder nur von einzelnen Bestandteilen. Gern informiert Sie
der BASIS Europe Support über diese Möglichkeit, Ihr geistiges Eigentum wirksam zu
schützen.
Der Lizenzmanager schreibt eine Logdatei „blm.log“ unter bbj\blm\log. Diese Logdatei
gibt Aufschluss über mögliche Probleme mit der Lizenz Senden Sie diese Datei an
[email protected], wenn Sie Hilfe bei der Lizenzinstallation benötigen.
Konfigurationsdateien
Verschiedene Dateien dienen zur Konfiguration Ihrer BBj-Installation. Dieser Abschnitt
listet die wichtigsten Dateien auf und gibt Ihnen einige grundlegende Informationen zu
ihrer Verwendung. Weitere Informationen gibt die BASIS Dokumentation.
Sie finden diese Konfigurationsdateien im Unterordner „cfg“ des BBjInstallationsverzeichnisses.
config.bbx und config.min
In der Datei config.bbx sind verschiedene Parameter der laufenden Interpreter-Sitzung, wie
z. B. verfügbare Drucker, TCP Sockets, der Titel des Interpreter-Fensters oder verschiedene
Lockingstrategien (bei Verwendung der BBj-Datenbank) gespeichert.
Benutzen Sie den Kommandozeilenparameter –c, um den BBj-Interpreter mit einer
anderen config.bbx zu starten. Der Dateiname kann völlig frei gewählt werden.
Änderungen an dieser Datei werden erst bei einem Neustart des Interpreters gültig.
Sie können das Tool „Configurator“ aus dem Startmenü verwenden, um die Optionen
komfortabel zu verwalten.
Details: Suchen Sie nach “config.bbx” im Index der Dokumentation.
Die Datei „config.min“ enthält die minimal erforderlichen Parameter und wird z. B. beim
Start von BBj-Programmen aus der IDE verwendet.
config.ini
Die Datei config.ini listet alle verfügbaren BASIS BBj-Datenbanken im System auf. Sie
verweist jeweils auf das Data Dictionary (= die Metadaten, die die Datenbank beschreiben)
und das Verzeichnis mit den Daten selbst. Einträge können durch verschiedene Parameter
ergänzt werden. Normalerweise ändern Sie die config.ini nicht direkt, sondern verwenden
den Enterprise Manager zum Verwalten der BBj Datenbank. Wenn Sie diese Datei auf
anderem Wege editieren, kann das Kommando BBjAdmin::reloadDBConfig() der BBjAPI
benutzt werden, um die BBj Services die veränderte Config.ini ohne Neustart einlesen zu
lassen.
21
Tutorial • Einführung in BBj
sql.ini
In der Datei sql.ini listen Sie alle erreichbaren JDBC-Datenbanken auf, auf die Sie mit
den BBj Befehlen SQLOPEN, SQLPREP, SQLEXEC und SQLFETCH zugreifen möchten.
Detaillierte Informationen zu diesen Kommandos finden Sie in der Dokumentation.
Suchen Sie nach “SQL.INI File” im Index der Dokumentation.
Hinweis: Unter Windows können im System bekannte ODBC-Datenquellen ohne weitere
Konfiguration verwendet werden.
BBj.properties
Die Datei BBj.properties enthält alle Java-spezifischen Einstellungen, u. a. für den BBj
Service, wie z. B. Classpath, Java Startoptionen (z.B. Xmx zur Speicherzuweisung,
Einstellungen zur Garbage Collection) sowie die JVM.
Normalerweise werden Sie den Enterprise Manager zur Verwaltung dieser Einstellungen
verwenden. Die meisten Einstellungen in den BBj.properties erfordern bei Änderungen
einen Neustart der BBj Services.
Der Enterprise Manager
Der Enterprise Manager erlaubt die Konfiguration Ihrer BBj Installation sowie die
Überwachung eines laufenden Systems. Dabei kann nicht nur die lokale Installation
verwaltet werden, sondern auch ein anderes System, das über Netzwerk erreichbar ist.
Enterprise Manager starten
Beim Start des Enterprise Manager erscheint zunächst ein Login-Dialog, in dem Sie
den Rechner, den Sie verwalten möchten (voreingestellt: localhost = Ihr PC), sowie
Benutzername und Passwort eingeben müssen. Standard-Benutzername und Passwort für
den BBj Administrator lauten:
Username: admin
Password: admin123
22
© BASIS Europe 2012
Nach dem Login sehen Sie folgenden Dialog:
Auf der linken Seite finden Sie die Hauptfunktionen, wie die Konfiguration der Server
Einstellungen, sowie einige andere Überwachungs- und Konfigurationseinstellungen. Links
unten wird die Konfiguration der BBj Datenbanken eingestellt.
JVM Settings
Auf dem Tab “JVM“ des Punktes “Server Information” können Sie die Java Einstellungen
für die verschiedenen BBj Module überprüfen und ändern. Die Einstellungen sind für die
meisten Installationen korrekt eingestellt.
Das laufende System überwachen
Der Abschnitt “BBj Processes” erlaubt eine Live-Ansicht der laufenden Interpreter-Sessions.
Bei einer Serverinstallation können Sie hier sehen, welcher Benutzer gerade welches
Programm ausführt, und sogar, welche Codezeile gerade ausgeführt wird.
23
Tutorial • Einführung in BBj
Es stehen weitere Funktionen für die Überwachung der JDBC Verbindungen, offener
Dateien und der Speichernutzung zur Verfügung.
Log Files
Der Enterprise Manager enthält unter „System Logs“ eine Anzeigefunktion für die BBj
Logdateien, die im Verzeichnis bbj/log gespeichert sind.
BUI- und Webstart Einrichtung
BBj-Anwendungen können mit Hilfe der Webstart-Funktion automatisch im Web gestartet
werden. Webstart erzeugt automatisch eine .jnlp Datei, in der die Beschreibung der
Anwendung gespeichert wird, und die für den Start der BBj-Anwendung im Web benötigt
wird. Wir werden dies im Verlauf dieses Tutorials noch näher betrachten.
24
© BASIS Europe 2012
Software entwickeln mit BBj
BBj ist eine objektorientierte dynamische interpretierte Programmiersprache für die Java
JVM. Die Hauptstärke von BBj liegt in der Entwicklung von kaufmännischen Applikationen
mit grafischer Benutzeroberfläche. Aber BBj kann ebenso zum Erstellen von Script-Code,
von zeichen-orientierten Programmen für Telnet- oder SSH-Anwendungen oder auch von
Web-Anwendungen eingesetzt werden.
BBj lässt Ihnen die Wahl, ob Sie prozedurale oder objektorientierte Programme schreiben
oder beide Techniken gemischt anwenden wollen. Die folgenden Abschnitte zeigen Ihnen
zunächst den für den Einstieg leichteren und kürzeren Weg, mit BBj GUI-Programme zu
schreiben – nämlich prozedural, unter Verwendung der BBj API.
Die BASIS IDE
Die BASIS IDE ist die integrierte Entwicklungsumgebung mit Editor, Interpreter, Debugger
und diversen anderen Funktionen, die Ihnen die Erstellung von BBj-Programmen
erleichtern. Die IDE ist der komfortabelste Weg zur Entwicklung von BBj-Programmen,
aber nicht der einzige: Sie können BBj-Programme auch direkt in der Interpreter-Konsole
oder mit einem Editor Ihrer Wahl erstellen.
Der BBj-Interpreter verarbeitet Programme in Form von ASCII-Dateien. Der BBj-Compiler
übersetzt Programme optional in ein Binärformat, das vom Interpreter schneller geladen
und gestartet werden kann.
BBj-Programme können auch verschlüsselt und mit Passwort versehen gespeichert werden,
so dass sie z. B. nicht unbefugt gelistet oder manipuliert werden können. Siehe hierzu
„SAVEP Verb – BBJ“ im Index der Dokumentation.
Die BBj API und die Syntax der
BBj Programmiersprache
BBj liefert eine leistungsfähige API zur Erstellung von Businessanwendungen. Diese
API stellt eine Art Framework dar z. B. für die Erstellung von Benutzeroberflächen, und
übernimmt auch Architektur-Funktionen.
Grundsätzliches
BBj versucht, zentrale Sprachelemente an BASIC anzulehnen und so den Einstieg in die
Programmierung zu erleichtern. Dahingegen sind die Objektorientierung und auch die API
stark an Java angelehnt. Folgende Regeln gelten grundsätzlich:
• Kein Semikolon am Zeilenende
• Variablen können dynamisch verwendet und müssen nicht deklariert werden
25
Tutorial • Einführung in BBj
• BBj selbst kennt keinen bool-Datentyp. Boolesche Operationen werden in der Regel
wie folgt entschieden:
xx Ausdruck ergibt 0 -> FALSE;
xx Ausdruck ergibt nicht 0 -> TRUE
•
Kommentare werden mit dem Schlüsselwort REM eingeleitet. Beispiel:
REM ermittle Umsatz
UMSATZ=…
Variablen und Objekte
BBj unterscheidet zwischen generischen Datentypen und Objekten:
Generische Datentypen
Generische Datentypen sind einfache Zeichenketten oder numerische Variablen:
A$ = "Hello World"Stringvariablen (= Zeichenketten) tragen ein “$” als Suffix.
PI=3.14Numerische Variablen tragen kein Suffix
Hinweis: Das Schlüsselwort PRECISION kann zum Einstellen der
Rechengenauigkeit verwendet werden; mit SETOPTS Bit 2 $20$ kann eingestellt werden, ob Zwischenergebnisse gerundet werden oder erst die Endergebnisse zusammengesetzter Rechnungen.
AGE%=27
Integer = Ganzzahlvariablen tragen ein Prozentzeichen “%”
als Suffix
Records / Strukturen als String Templates
BBj erlaubt eine Satzbeschreibung, „TEMPLATE“ genannt, die einem String eine Struktur
gibt. Ein Template wird einem String mit Hilfe des DIM-Befehls zugewiesen:
DIM SATZ$:TEMPLATE$
In diesem Beispiel enthält TEMPLATE$ die Satzbeschreibung für SATZ$. Das Template
enthalt eine Liste von Feldern, die mit Kommata voneinander getrennt werden. Jedes Feld
in der Template wird in etwa wie folgt beschrieben:
"FIRMA:C(6O),ORT:C(40)"
Dieses Beispiel definiert zwei Felder, FIRMA mit 60 Stellen Länge, und ORT mit 40 Stellen
Länge, beide vom Typ Zeichenkette.
26
© BASIS Europe 2012
Feldnamen können bis zu 32 Zeichen (alphanumerisch, jedoch beginnend mit einem
Buchstaben) lang sein.
Variabel lange Felder werden mit dem „*“ definiert:
"FIRMA:C(6O*),ORT:C(40*)"
Folgende Feldtypen werden unterstützt:
C einfacher Zeichen-String (alphanumerisch)
N numerischer String
I
U ein binärer Integer-String ohne Vorzeichen
F IEEE binäres Fließkomma-Format (8 Bytes)
D BCD Fließkomma-Format (8 Bytes)
B Business-Fließkomma-Format (8 Bytes)
X Float (C) (4 Bytes)
V Double (C) (4 Bytes)
A ADJN() Business floating point (8 bytes)
K Sortiert numerisch (1 to 32767 bytes)
O „BLOB“ (4 bytes plus Benutzerdaten)
ein vorzeichenbehafteter binärer Integer-String
Variabel lange Felder werden per Standard mit $0A$=char(10) abgeschlossen.
Das Template kann jedoch ein anderes Zeichen als Abschluß variabel langer Felder
definieren, z.B.
"FIRMA:C(6O*=09),ORT:C(40*=09)"
Dieses Template erzeugt zwei Felder, mit Tab ( char(09) ) separiert.
Falls der Abschluss des letzten Feldes das Ende des Strings selbst ist (ohne
Abschlusszeichen), kann dies wie folgt angegeben werden:
"FIRMA:C(6O*=09),ORT:C(40*=)"
Benutzerdefinierte Feld-Attribute
Einem Feld kann optional ein vom Benutzer definierter String wie folgt mitgegeben
werden:
27
Tutorial • Einführung in BBj
"FIRMA:C(6O*=09):label=Firma opt=n:,ORT:C(40*=):label=Firma opt=y:"
Der Doppelpunkt im Anschluss an die Lange zeigt den Beginn der benutzerdefinierten
Attribute an. Dieser Bereich muss dann von einem weiteren Doppelpunkt abgeschlossen
werden. Jeder beliebige Text kann hier erscheinen, muss jedoch immer im Format
„BEGRIFF=WERT“ angegeben werden.
Wiederholende Felder
Man kann sowohl numerische als auch String-Felder als Array definieren:
"PREISE[5]:N(l0*)"
"KENNZEICHEN[20]:C(5)"
Die eckigen Klammern bedeuten z. B., dass PREISE ein numerisches Feld mit 5 Elementen
darstellt. Beachten Sie bitte, dass die Felder hier mit 1 beginnend gezählt werden.
Lediglich eindimensionale Felder werden hier unterstützt.
Zugriff auf die Felder
Auf die Felder eines Strings, der per Template zu einer Struktur gemacht wurde, kann nun
mit den Feldnamen zugegriffen werden. Beispiel:
DIM SATZ$:"FIRMA:C(6O*),ORT:C(40*),KONTOSTAND:N(10)"
SATZ.FIRMA$="BASIS"
SATZ.KONTOSTAND=500
PRINT SATZ.KONTOSTAND * 2.5
Auch wenn ein String als Template definiert ist, kann man auf ihn wie gewöhnlich als
String zugreifen:
DIM SATZ$:"FIRMA:C(6O),ORT:C(40),KONTOSTAND:N(10)"
SATZ.FIRMA$="BASIS"
SATZ.ORT$="SAARBRÜCKEN"
PRINT SATZ$(61,40)
Zuweisungen mit Templated Strings
Bei einer Zuweisung wird immer nur der String selbst kopiert, nicht jedoch sein Template.
Der Zielstring kann sein eigenes Template haben, oder auch keines:
DIM SATZ$:"FIRMA:C(6O),ORT:C(40),KONTOSTAND:N(10)"
SATZ.FIRMA$="BASIS"
SATZ.ORT$="SAARBRÜCKEN"
SATZ1$=SATZ$
28
© BASIS Europe 2012
FATTR
Informationen über eine Template können mit Hilfe der FATTR()-Funktion abgefragt
werden. Diese Funktion hat mehrere Formen. Die erste Form erzeugt eine TemplateBeschreibung, die wiederum in einem DIM-Befehl benutzt werden kann:
LET B$=FATTR(AS)
Dieses Beispiel kopiert die Template-Beschreibung von A$ als Daten nach B$. Falls A$
keine Template besitzt, wird ein Fehler ausgegeben. Wenn Sie z.B. B$ mit den gleichen
Feldern (=gleiche Template) wie A$ definieren wollen, würde es wie folgt aussehen:
DIM B$:FATTR(AS)
Eine einfache Liste der Feldnamen eines Template kann wie folgt erzeugt werden:
LET B$=FATTR(AS,"")
Beachten Sie bitte das zweite leere Argument. Dieser Aufruf erstellt eine Liste der Felder
von A$ durch Zeilenvorschübe (LF) voneinander getrennt nach B$.
Informationen über ein bestimmtes Feld kann man durch Angabe des Feldnamens
erzeugen:
LET B$=FATTR(A$,"SATZGR")
Dieses Beispiel erstellt eine codierte Feldbeschreibung des Feldes SATZGR von A$ in B$.
Schließlich können auch noch die benutzerdefinierten Attribute mit FATTR abgefragt
werden:
DIM SATZ$:"FIRMA:C(6O*=09):label=Firma opt=n:
LET LBL$=FATTR(SATZ$,"FIRMA","label")
Dieses Beispiel durchsucht den benutzerdefinierten Teil des Feldes FIRMA in SATZ$ nach
einem Wert für den Schlüssel "label". Falls dieser nicht existiert, wird ein Fehler erzeugt.
FIELD und NFIELD
Um erst während der Laufzeit zu bestimmen, welche Felder angesprochen werden sollen
können FIELD() und NFIELD() verwendet werden. Beide Funktionen beziehen den
Feldnamen aus einer String-Variable, die zur Laufzeit erzeugt und übergeben wird:
B$=FIELD(AS,"NAME")
X=NFIELD(AS,"PREIS",4)
29
Tutorial • Einführung in BBj
Diese beiden Beispiele bewirken das gleiche wie:
B$=A.NAME$
X=A.PREISE[4]
Ein Spezialfall der FIELD()-Funktion schneidet zusätzliche Daten am Ende ab, z. B.
wenn ein Satz aus einer Datei gelesen wurde:
DIM A$:TPL$
READ RECORD (1)A$
A$=FIELD(A$)
Das Gegenstück zu den FIELD()-Funktionen ist der FIELD-Befehl, der Daten in ein Feld
bringt:
FIELD A$,"NAME"="LORRAINE"
FIELD A$,"PREISE",[4]=22.75
Diese beiden Befehle bewirken dasselbe wie
A.NAME$=" LORRAINE"
A.PREISE[4]=22.75
Weiteres zur Benutzung von Templates
Obwohl die Template-Syntax in BBj Strukturen und Satze abbildet, wie sie in vielen
anderen Hochsprachen vorkommen, sollte man sie nicht wie diese betrachten. So, wie
BBj eine extrem dynamische Sprache ist, sind es auch die Templates. Einem String kann
jederzeit ein neues Template zugewiesen werden, oder er kann jederzeit neue Daten
zugewiesen bekommen. Bis zum Zugriff auf ein bestimmtes Feld ist nicht bekannt, wo
dieses Feld sich befindet und ob es überhaupt existiert.
Das Data Dictionary der BASIS BBj Datenbank baut die Beschreibung der Satzstrukturen
auf Templates auf. Hier sei nur folgendes Beispiel aufgeführt, das eine Tabelle in der
ChileCompany Demodatenbank durchliest, nachdem das Template der SQL-Abfrage
ermittelt wurde:
SQLOPEN (1)"ChileCompany"
SQLPREP (1)"SELECT * FROM CUSTOMER"
DIM SATZ$:SQLTMPL(1)
WHILE 1
SATZ$=SQLFETCH(1)
PRINT SATZ.CUST_NUM$,"-",SATZ.COMPANY$
WEND
PRINT "***FERTIG***"
30
© BASIS Europe 2012
Templates sind auch hilfreich beim Einlesen von CSV-Dateien. Nehmen wir an, Sie haben
eine ASCII-Datei „katalog.csv“ mit den zwei Feldern „Katalognummer“ und „Text“,
beide mit Tab =char(09) abgeschlossen.
Dann kann folgendes Beispiel zum Einlesen genutzt werden:
OPEN (1)"katalog.csv"
DIM SATZ$:"KATALOGNUMMER:C(10*=09),TEXT:C(10*=09)"
WHILE 1
READ (1,END=*break)SATZ$
IF SATZ$="" THEN CONTINUE; REM LEERE ZEILEN ÜBERLESEN
PRINT SATZ.KATALOGNUMMER$,": ",SATZ.TEXT$
WEND
PRINT "***FERTIG***"
Klassen, Objekte und Objektorientierung
BBj kennt wie Java und C++ Objektorientierung mit Klassen, Interfaces, Vererbung
und Polymorphie. Die BBj API, die dem Programmierer den Zugriff auf die grafische
Benutzeroberfläche oder auf Dateisystem, Namespaces und vieles mehr erlaubt, ist dabei
bereits vollständig objektorientiert angelegt. Eigene Klassen definiert der Programmierer in
BBj Sourcedateien, und kann dabei von BBj Klassen oder Java Klassen ableiten, oder BBjoder Java-Interfaces implementieren.
Die BBj API als objektorientierte Klassenbibliothek
Objektvariablen werden in BBj durch das Suffix "!" markiert.
api!=BBjAPI()
erzeugt die Variable api! und weist eine Instanz der BBj API zu.
Da BBj eine dynamische Sprache ist, brauchen Objekte (und andere Variablen) nicht
formal deklariert zu werden. Es hat allerdings Vorteile, es dennoch zu tun. Es ermöglicht
z. B. die Typprüfung beim Kompilieren sowie die Nutzung der komfortablen Code
Completion-Funktion in der IDE.
declare BBjAPI api!
Immer wenn eine Variable deklariert wird, müssen Sie möglicherweise die CAST-Funktion
verwenden, wenn Sie Rückgabewerte vom Typ einer abgeleiteten Klasse einer Variable
zuweisen möchten, die mit einem Elterntyp deklariert wurde:
31
Tutorial • Einführung in BBj
declare BBjButton btn!
btn! = cast(BBjButton,window!.getControl("MY_BUTTON"))
Der Modifier "auto" zum declare ermöglicht einen komfortablen automatischen CAST:
declare auto BBjButton btn!
btn! = window!.getControl("MY_BUTTON")
Neben den Klassen der BBj API können Sie beliebige Java-Klassen verwenden, die in der
Classpath bekannt sind (Konfiguration in der BBj.properties, Einstellung im Enterprise
Manager), oder in der Session-abhängigen Classpath (Suchen Sie nach “SSCP” im Index
der Dokumentation – Kapitel „Session Specific Classpath“):
declare java.util.HashMap hm!
hm! = new java.util.HashMap()
hm!.put("TEST","Hello World")
Die BBj-API Klassen in der Dokumentation
In der BASIS-Dokumentation sind alle verfügbaren BBj-Klassen mit den dazugehörigen
Methoden aufgeführt. Wenn Sie alle Methoden einer Klasse auflisten möchten, geben Sie
den Namen der Klasse ein. Alle BBj API-Klassen beginnen mit „BBj…“ .
Die Einleitungsseite zu jeder Klasse gibt Informationen zur Vererbungsstruktur, verfügbaren
Methoden und allen passenden Events, die mit dieser Klasse registriert werden können.
Code Completion in der IDE
Sobald Sie Objektvariablen in der IDE deklarieren, kann die Funktion „Code Completion“
genutzt werden, die Ihnen Tipparbeit erspart. Nachdem Sie den Punkt („ . “) nach dem
Namen einer Objektvariablen eingegeben haben, listet Code Completion die verfügbaren
Methoden einer Klasse auf. Sie brauchen nur die passende Zeile auszuwählen, um sie in
den Quellcode zu übernehmen.
Die Code Completion kann auch manuell durch Drücken von <Strg>-<Leertaste>
aufgerufen werden.
32
© BASIS Europe 2012
Eigene Klassen
Sie können Klassen auch direkt in BBj-Syntax erstellen:
class public Car
field public BBjString make!
field public BBjString color!
field public BBjNumber highspeed!
method public void drive()
print "brumm"
methodend
classend
declare Car mycar!
mycar! = new Car()
mycar!.setmake("Volkswagen")
mycar!.drive()
Eine ausführliche Einführung in die Erstellung eigener Klassen mit BBj finden Sie
im Tutorial unter http://www.basis.com/solutions/BBj_CustomObjects.pdf .
Client Side Objects
Sie können in BBj alle Arten von Java-Klassen verwenden. Das macht aus der BBj Sprache
ein sehr leistungsfähiges Werkzeug, denn Sie sind nicht an die begrenzten Möglichkeiten
einer RAD-Entwicklungsumgebung gebunden, sondern können nahezu beliebig eigene
Java-Klassen oder solche von Drittanbietern in BBj einbinden, um zusätzliche Funktionen
zu implementieren.
In der 3-Tier Architektur von BBj geschieht die Ausführung des Programmcodes auf dem
Server. Das ist in vielen Fällen auch bei der Einbindung von Java-Klassen gewünscht, z. B.
beim Zugriff auf Datenbanken, dem Aufruf von Web Services oder bei der Verwendung der
java.util Klassen.
Manchmal ist jedoch die Verwendung einer Java-Klasse am Client nötig – etwa,
um eine Grafik darzustellen, oder um die Spracheinstellungen und Zeitzone des
Arbeitsplatzrechners zu ermitteln. BBj hilft auch in solchen Fällen.
Sie können mit BBj eine Java-Klasse auch im Thin Client instanziieren und mit ihr arbeiten,
als befände sie sich auf dem Server. BBj bietet auch Funktionen zum Klonen eines
serverseitigen Objekts zum Client und umgekehrt.
Das ClientObject Tutorial in der Dokumentation bietet tiefergehende Informationen:
http://documentation.basis.com/BASISHelp/WebHelp/bbjobjects/clientobject_tutorial.htm
33
Tutorial • Einführung in BBj
Die BBj Syntax – einige wichtige Sprachkonstrukte
Bedingungen
IF…THEN…ELSE
In BBj werden IF Statements meistens mehrzeilig notiert. Dabei muss die Anweisung
mit FI oder ENDIF abgeschlossen werden.
Beispiel 1
if x=0 then
x=1
y=8
endif
Beispiel 2
if x=1 then
x=0
y=6
else
x=9
z=r
fi
Es sind auch einzeilige IF Statements zulässig, die dann automatisch terminiert werden:
Beispiel
if X=1 then Y=6 else Y=7
Diese Anweisung würde mehrzeilig wie folgt lauten:
if X=1 then
Y=6
else
Y=7
endif
SWITCH…CASE
Switch-Case Anweisungen in BBj basieren immer auf dem numerischen Ergebnis eines
Ausdrucks:
34
© BASIS Europe 2012
INPUT "WERT ? ",A
SWITCH A
CASE 1
PRINT "EINS"
BREAK
CASE 2
PRINT "ZWEI"
BREAK
CASE DEFAULT
PRINT "WEDER EINS NOCH ZWEI"
BREAK
SWEND
Dabei kann ein Vergleich mit einer Zeichenkette direkt im Statement eingebaut werden:
INPUT "EINGABE ? ",A$
SWITCH 1
CASE A$="A"
PRINT "Eingabe A"
BREAK
CASE A$="B"
PRINT " Eingabe B"
BREAK
CASE DEFAULT
PRINT "WEDER A NOCH B"
BREAK
SWEND
Schleifen
FOR…NEXT
Die Syntax einer FOR..NEXT Schleife in BBj lautet wie folgt:
FOR numname=numA TO numB {STEP numC}
…
NEXT {numname}
Dabei kann auf die Angabe der Zählvariable beim NEXT-Befehl verzichtet werden, da
FOR..NEXT Schleifen ohnehin immer sauber geschachtelt sein müssen und sich nicht
überlappen dürfen. Beispiel:
FOR 99 to 1 STEP -1
PRINT STR(i), " Durchläufe übrig"
NEXT i
35
Tutorial • Einführung in BBj
WHILE….WEND
Die WHILE..WEND Schleife wird durchlaufen, solange die WHILE Bedingung erfüllt ist:
WHILE A<B
…
WEND
Ein häufiger Anwendungsfall ist das Einlesen von Datenquellen bis zum Dateiende.
Folgendes Beispiel öffnet die Datenbank ChileCompany, liest alle Datensätze ein und gibt
Kundennummer und Kundenname aus:
SQLOPEN (1)"ChileCompany"
SQLPREP (1)"SELECT CUST_NUM, COMPANY FROM CUSTOMER"
DIM SATZ$:SQLTMPL(1)
WHILE 1
SATZ$=SQLFETCH(1)
PRINT SATZ.CUST_NUM$,"-",SATZ.COMPANY$
WEND
PRINT "***FERTIG***"
CONTINUE und BREAK
Diese beiden Schlüsselworte setzen eine Schleife mit dem nächsten Durchlauf fort
(CONTINUE) bzw. brechen die Schleifenausführung ab (BREAK).
Sprünge und Labels
BBj kennt neben den klassischen Schleifen auch Sprünge, darunter auch (eventuell zum
Leidwesen mancher) das klassische GOTO. Da BBj jedoch ohne Zeilennummern auskommt,
basieren die ersten beiden Sprünge zumeist auf Labels als Sprungadresse.
Labels
Labels sind Sprungmarken, die eine Sprungadresse per Name vorgeben, gefolgt von einem
Doppelpunkt:
ERROR_ROUTINE:
REM Fehlerbehandlung
IF err=0 THEN
WAIT 5
RETRY
ENDIF
36
© BASIS Europe 2012
Symbolische Labels
Eine Sonderform der Labels sind symbolische Labels. Diese verweisen nicht auf eine
absolute Sprungmarke, sondern auf eine dynamische Sprungadresse im Kontext. Sie
werden zumeist bei der Fehlerbehandlung (siehe auch dort) verwendet:
ERR=*PROCEED
bei Fehler: nächster Befehl in derselben Zeile oder
nächste Zeile
ERR=*NEXTbei Fehler: nächste Zeile
ERR=*SAME
bei Fehler: zum Anfang derselben Zeile zurück
ERR=*RETRY
bei Fehler: nochmals versuchen
ERR=*BREAK
bei Fehler: emuliere BREAK
ERR=*CONTINUE
bei Fehler: emuliere CONTINUE
ERR=*ESCAPE
bei Fehler: emuliere ESCAPE
ERR=*RETURN
bei Fehler: emuliere RETURN
ERR=*STOP or ERR=*END bei Fehler: emuliere STOP/END
ERR=*EXITbei Fehler: emuliere EXIT
ERR=*ENDIF
bei Fehler: gehe zu Ende des innersten IF..ENDIF -Blocks.
GOTO
Der GOTO-Befehl verzweigt direkt zu einer Sprungadresse. Dabei wird keine
Rücksprungadresse gespeichert, und alle Variablen bleiben erhalten:
IF A=5 THEN GOTO Ende
…
Ende:
REM Programmende
RELEASE
GOSUB…RETURN
Der GOSUB Befehl verzweigt wie GOTO zu einer Sprungadresse. Dabei wird jedoch
die Rücksprungadresse gespeichert. RETURN kehrt zu dieser Rücksprungadresse (=dem
nächsten Statement nach dem GOSUB) zurück.
Hinweis: Um aus einer GOSUB – Routine auszuscheren ist das Verb EXITTO erforderlich,
damit die Rücksprungadresse gelöscht wird.
Beispiel:
GOSUB Rechne_Rabatt
…
Rechne_Rabatt:
A=50
B=A*C/2
RETURN
37
Tutorial • Einführung in BBj
Overlays mit CALL
Der CALL-Befehl ruft ein anderes Programm als Unterprogramm auf. Dabei verwendet
das aufgerufene Programm einen eigenen Variablenraum, so dass Seiteneffekte vermieden
werden.
Die Syntax lautet
CALL programm{::label}{,ERR=errlabel}{,expr...}
expr… steht für eine Liste von Variablennamen und/oder Ausdrücken, die an das CALL
Programm übergeben werden. Variablen werden dabei immer per Call-by-Reference
übergeben. Durch Einklammern werden Variablen, genauso wie Ergebnisse von
Ausdrücken, zu Call-by-Value Parametern.
Die Parameterlisten werden durch das ENTER Statement im CALL Programm definiert.
Hinweis: Ein ENTER ohne Variablenliste übernimmt den kompletten Variablenraum des
aufrufenden Programms. (!)
Beispiel:
Programm „multi.bbj“
ENTER A,B,C
A=A*B
C=A
EXIT
Programm “test.bbj”
A=3
B=5
CALL "multi.bbj",(A),(B),C
PRINT "A=",A
PRINT "B=",B
PRINT "C=",C
Weitere Befehle und Funktionen
Dies waren lediglich die wichtigsten Sprachelemente, die der Einsteiger benötigt.
Die Dokumentation listet alle verfügbaren Schlüsselworte mit Erklärung auf. Siehe:
38
Language - Commands – Alphabetical Listing
© BASIS Europe 2012
In der Interpreter-Konsole arbeiten
BBj ist eine interpretierte Sprache. Der Interpreter liest den Quellcode Zeile für Zeile ein,
analysiert ihn und führt ihn aus. Dieses dynamische Laden und Ausführen gibt Ihnen die
Möglichkeit, ein laufendes Programm zu unterbrechen und direkt an beliebiger Stelle mit
dem Programm und dem Variablenraum zu interagieren.
Bei einer Ausnahme können Sie das laufende Programm auf die Eingabeaufforderung des
Interpreters fallen lassen, Variablen oder sogar Programmzeilen abfragen und ändern, und
dann mit der Ausführung fortfahren.
Sie können Programme auch direkt in den Interpreter eingeben, anstatt die IDE zu
verwenden. In diesem Fall benötigen wir Zeilennummern, um die Reihenfolge der Zeilen
anzugeben. Starten Sie den Interpreter ("BBj” im Startmenu) und geben Sie diese Zeilen
ein:
10 FOR I = 1 TO 20
20 PRINT I
30 NEXT I
RUN
Betrachten Sie, was passiert.
Sie können eine Zeile ändern mit z. B.
EDIT 20
In der IDE sind keine Zeilennummern erforderlich. Um ein Programm im Interpreter
nachträglich mit Zeilennummern zu versehen, können Sie das Schlüsselwort RENUM
verwenden. Um die Zeilennummern wieder loszuwerden verwenden Sie DENUM.
Geben Sie diese Zeilen ein:
DENUM
LIST
Was sehen Sie?
Jetzt geben Sie ein:
RENUM
LIST
…und die Zeilennummern sind wieder da.
39
Tutorial • Einführung in BBj
Ein Programm mit Hilfe des Interpreters debuggen
In der BASIS IDE ist ein moderner Debugger mit Breakpoints und Watch-Listen zum
Monitoring von Variableninhalten und Objekten eingebaut. Aber Sie können auch den
Interpreter selbst einsetzen, um Ihren Programmcode zu debuggen.
Mit dem Schlüsselwort ESCAPE setzen Sie einen Breakpoint in Ihrem Programmcode.
Geben Sie in unserem kleinen Programmbeispiel von eben ein:
25 IF I=3 THEN ESCAPE
LIST
Der Befehl wird an der richtigen Stelle zwischen den Zeilen Nr. 20 und 30 eingefügt.
Führen Sie das Programm mit RUN aus. Es wird am definierten Breakpoint unterbrochen.
Wenn Sie nun einen Punkt "." und <Enter> („dot command“) eingeben, wird das Programm
Befehl für Befehl ausgeführt. Mit PRINT können Sie Variableninhalte anzeigen lassen, oder
Sie können Variablen neue Werte zuweisen. Ein RUN lässt das Programm weiterlaufen.
Das Kapitel „Dot Commands“ in der Dokumentation listet alle Stepping-Kommandos für
die Eingabeaufforderung auf.
Mit
BYE
beenden Sie die laufende Interpretersitzung.
Lesen Sie unter “User‘s Reference Guide > Fundamentals > Language Concepts > Console
Mode/Run Mode” mehr zu diesem Thema.
40
© BASIS Europe 2012
Suchpfade – Steuerung
BBj verwendet beim Zugriff auf Dateien einen Suchpfad, wenn die Datei nicht im
aktuellen Verzeichnis gefunden werden kann. Das aktuelle Verzeichnis kann mit CHDIR,
unter Windows das Laufwerk mit SETDRIVE gesetzt werden.
Der Suchpfad wird mit dem Befehl PREFIX bzw. dem Eintrag PREFIX in der config.
bbx gesetzt. Die einzelnen Verzeichnisse sind dabei durch Leerzeichen zu trennen,
und mit einem Slash abzuschließen. Verzeichnisse mit Leerzeichen im Namen sind in
Anführungszeichen (") zu setzen. Bei der Suche nach einer Datei kombiniert BBj immer
den angegebenen Dateinamen mit den einzelnen Einträgen im PREFIX. Dabei wird die
Datei unter dem ersten passenden Pfad geöffnet und die weiteren Verzeichnisse werden
nicht mehr durchsucht.
Forward Slashes oder Backslash
BBj ist plattformunabhängig, BBj Programme laufen ohne Änderung unter Windows,
Linux / UNIX oder auch Mac OS. Windows verwendet im Gegensatz zu den anderen
genannten Betriebssystemen den Backslash (\) zur Trennung von Verzeichnishierarchien
bei Dateipfaden. Verwenden Sie in allen Ihren Programmen und Konfigurationsdateien
immer den Forward Slash, und BBj sorgt automatisch unter Windows für die korrekte
Umsetzung. (Umgekehrt geschieht dies nicht.)
Laufwerksbuchstaben unter Windows
Wenn Sie auf den Laufwerksbuchstaben verzichten, so wird der Suchpfad (PREFIX) auf
alle verfügbaren Laufwerke angewendet. Der DSKSYN - Eintrag in der config.bbx kann
verwendet werden, um einzelne Laufwerke vom Suchpfad auszunehmen. Standardmäßig
ist unter Windows Installationen nur C: bzw. das Installationslaufwerk freigegeben.
Index:
Laufwerksbuchstabe
Slash
Backslash
PREFIX
Suchpfad
41
Tutorial • Einführung in BBj
Ein erstes BBj GUI Programm
Um Ihnen ein grundlegendes Verständnis für die Erstellung von BBj Programmen zu
vermitteln, wollen wir ein erstes, sehr einfaches „Hello World“ Programm erstellen.
Öffnen Sie die BASIS IDE und überprüfen Sie, dass Sie links den Tab “Filesystems” sehen
können (falls nicht, können Sie ihn mit “Window > Filesystems” anzeigen lassen).
Klicken Sie mit der rechten Maustaste auf “Filesystems” und wählen Sie “Mount > Local
Directory”, um ein Arbeitsverzeichnis im Baum einzublenden. Es bietet sich an, für unsere
ersten Gehversuche ein neues, leeres Verzeichnis anzulegen.
Die .arc Ressourcendatei Definition der grafischen Benutzeroberfläche
Danach klicken Sie mit der rechten Maustaste auf den leeren Ordner und wählen “New >
All Templates -> BBj/BBjResource.arc -> Next”, um eine neue leere BBj Ressourcen-Datei
anzulegen. Verwenden Sie „hello“ als Dateinamen.
42
© BASIS Europe 2012
Ressourcendateien enthalten alle Informationen, die das Bildschirmlayout beschreiben.
Ressourcendateien können mit dem in die BASIS IDE eingebauten WYSIWYG Editor
bearbeitet werden.
Nun können Sie die Werkzeugleiste rechts („BBj GUI Palette“) verwenden, um
Steuerelemente im Fenster hinzuzufügen und ihre Eigenschaften festzulegen.
Da dieser Formulareditor ähnlich funktioniert wie andere bekannte Werkzeuge, verzichtet
dieses Tutorial auf eine detaillierte Einführung. Wir verweisen Sie auf die Online-Hilfe der
IDE.
Fügen Sie für unser kleines Programm ein statisches Textfeld, ein Eingabefeld namens ED_
INPUT und eine Schaltfläche namens BTN_PUSH zum Fenster hinzu. Die Namen geben
Sie unter dem Reiter „Properties“ ein, und schließen den Vorgang jeweils mit <Enter> ab,
um den neuen Namen zu speichern. Das Ergebnis sollte etwa so aussehen:
Speichern Sie die fertige Ressourcendatei „hello.arc“ durch Mausklick auf das
Diskettensymbol in der Toolbar.
43
Tutorial • Einführung in BBj
Einfache Eventsteuerung
Nun wollen wir den Programmcode schreiben. Klicken Sie erneut mit der rechten
Maustaste auf den Ordner im Filesystems-Tab und erzeugen Sie ein leeres Programm
“hello” mit Hilfe der Vorlage “BBjProgram.bbj”.
Im Folgenden diskutieren wir die einzelnen Abschnitte des zugehörenden Programms:
Da BBj eine dynamische Sprache ist, ist es nicht unbedingt erforderlich, unsere Variablen
zu deklarieren, aber es ist vorteilhaft:
declare
declare
declare
declare auto
declare auto
BBjAPI
BBjSysGui
BBjWindow
BBjEditBox
BBjButton
api!
sysgui!
wnd!
ed_input!
btn_push!
Die nächsten Zeilen sind immer nötig, um die BBj API zu initialisieren und das Startfenster
der Anwendung aus der Ressourcendatei anzuzeigen:
api!
sysgui!
res
wnd!
=
=
=
=
BBjAPI()
api!.openSysGui("X0")
sysgui!.resOpen("hello.arc")
sysgui!.createTopLevelWindow(res,101)
Im nächsten Schritt schaffen wir uns Objektvariablen, die die Steuerelemente auf unserem
Dialogfenster repräsentieren:
ed_input! = wnd!.getControl("ED_INPUT")
btn_push! = wnd!.getControl("BTN_PUSH")
Unser BBj Programm soll auf zwei verschiedene Ereignisse reagieren – den Event zum
„Fenster schließen“ und den Klick auf die Schaltfläche:
44
© BASIS Europe 2012
wnd!.setCallback(wnd!.ON_CLOSE,"byebye")
btn_push!.setCallback(btn_push!.ON_BUTTON_PUSH,"push")
Die komplette Eventsteuerung in BBj wird von einem einzigen Schlüsselwort behandelt:
process_events
Nun fehlen noch die zwei Routinen zur Behandlung der Ereignisse:
byebye:
bye
push:
text$ = ed_input!.getText()
a = msgbox(text$,0,"Hello World")
return
Hinweis: Die Prozedur-Labels werden von einem Doppelpunkt “:” abgeschlossen.
Diese Prozeduren erben den kompletten Variablenraum und können daher auch als
Sprungmarken angesehen werden. Dies ist ein schneller und handlicher Weg zur schnellen
Programmierung. In der Praxis, insbesondere in größeren, komplexeren Projekten, setzt
man eher objektorientierte Methodenaufrufe ein, um unerwünschte Seiteneffekte zu
vermeiden.
Drücken Sie F9, um das Programm zu kompilieren und überprüfen Sie, ob Fehler im
Ausgabefenster angezeigt werden.
45
Tutorial • Einführung in BBj
Das komplette Programm mit Kommentaren („rem“) lautet:
rem hello.bbj: ein erstes Hello World-Programm
rem Deklaration der Objektvariablen
rem “declare auto” erlaubt automatische Typkonvertierung
declare
declare
declare
declare auto
declare auto
BBjAPI
BBjSysGui
BBjWindow
BBjEditBox
BBjButton
api!
sysgui!
wnd!
ed_input!
btn_push!
rem Konsolenfenster ausblenden
rem Das Fenster kann auch im Alias-Eintrag der config.bbx ausgeblendet werden:
rem ALIAS T0 SYSWINDOW "" INVISIBLE
print 'HIDE',
rem Fenster erzeugen – dieser Programmteil ist fast immer gleich
rem API initialisieren
api!
= BBjAPI()
rem sysgui-Objekt erzeugen
rem sysgui bietet Funktionen für die GUI-Programmierung an
sysgui! = api!.openSysGui("X0")
rem Ressourcendatei öffnen
res
= sysgui!.resOpen("hello.arc")
rem Fenster erzeugen
wnd!
= sysgui!.createTopLevelWindow(res,101)
rem Je ein Objekt für die Steuerelemente auf dem Formular erzeugen
ed_input! = wnd!.getControl("ED_INPUT")
btn_push! = wnd!.getControl("BTN_PUSH")
rem Events registrieren
rem Den ON_CLOSE-Event zum Schließen des Fensters registrieren
wnd!.setCallback(wnd!.ON_CLOSE,"byebye")
rem Der Event ON_BUTTON_PUSH dem Prozedurlabel “Push” zuordnen
btn_push!.setCallback(btn_push!.ON_BUTTON_PUSH,"push")
rem process_events ist das Schlüsselwort für die Event-Behandlungsschleife
process_events
rem byebye: Programm beenden
byebye:
bye
rem Push: Schaltfläche wurde angeklickt
rem Messagebox mit dem Titel "Hello World" und eingegebenem Text anzeigen
push:
text$ = ed_input!.getText()
a = msgbox(text$,0,"Hello World")
return
46
© BASIS Europe 2012
Das war’s – Ihr erstes BBj-Programm ist fertig. Mit F5, per Rechtsklick auf das Programm
und „Execute“ oder mit dem Toolbutton „Ausführen“ können wir das Programm starten…
…und unser Ergebnis testen.
47
Tutorial • Einführung in BBj
Start der Anwendung im Browser
Mit BBj laufen Ihre Anwendungen nicht nur auf dem Desktop unter Windows, Linux
und Mac, sondern auch in jedem aktuellen Javascript-fähigen Browser. Auch unser
kleines „Hello World“ Beispiel kann mit einigen wenigen Schritten im Browser
gestartet werden.
Im Enterprise Manager (Default-Login: admin / admin123) unter „BUI Configuration“
konfigurieren wir eine BBj Anwendung für den Betrieb im Browser:
Klicken Sie auf den „Plus“- Button.
Im nächsten Dialog genügen drei Einträge – Name der Anwendung (für den Link),
Arbeitsverzeichnis und Programm:
48
© BASIS Europe 2012
Ein Klick auf den grünen Haken und das Diskettensymbol (nicht vergessen!) speichert die
Einstellungen. Nun können wir die Anwendung testen – der Link wird angezeigt (und kann
per Rechtsklick gleich aus dem Enterprise Manager gestartet werden):
Es öffnet sich der Browser mit der Anwendung:
Hinweis: Der im Link verwendete Hostname sollte dem Namen entsprechen, unter dem
der Rechner im Netzwerk gefunden werden kann. Ändern Sie ihn unter:
„localhost“ eignet sich für das lokale Testen am eigenen Rechner immer.
49
Tutorial • Einführung in BBj
Schneller zum Ziel mit dem Dialog Wizard
Das erste, sehr einfache „Hello World“ Beispiel hat uns gezeigt, wie sich BBj als Sprache
handhaben lässt. An ihm kann man gut ablesen, wie in BBj die Ereignissteuerung, die
Sprache und die BBj API funktionieren. Allerdings will man wahrscheinlich nicht jedes
Programm auf einem derart niedrigen Abstraktionsniveau erstellen.
BASIS bietet mit Barista ein Rapid Application Development Framework, mit dem für
Datenbank-basierende Anwendungsfälle schnell Masken, Abfragen und ganze Anwendungen zusammengestellt werden können. Barista bietet dabei auch die Programmierung
von Events (dort: Callpoints) in BBj. Die Steuerungslogik für die Formulare und Abfragen
bleibt jedoch vollends der Barista-Runtime überlassen.
Der mit dem BBj Dialog Wizard generierte Programmcode kann im Unterschied dazu vom
Entwickler eingesehen und sehr flexibel gestaltet werden. Auch Anwendungen, die nichts
oder nur wenig mit Sichten auf Datenbanktabellen zu tun haben, sind mit dem Dialog
Wizard schnell erstellt.
Eine neue .arc Ressource als Grundlage
Auch für den Dialog Wizard dient eine .arc Ressourcen Datei als Grundlage. In einem
kleinen Programmbeispiel wollen wir zwei Zahlen miteinander multiplizieren.
Wir erstellen also wieder eine neue .arc Ressourcendatei „calc.arc“ per Rechtsklick auf
den Filesystem-Baum und definieren eine Maske mit drei Feldern – M1, M2 und RESULT
sowie zwei Buttons OK und CANCEL. Verwenden Sie für M1, M2 und RESULT den
Control-Typ BBjInputN. Bei dem RESULT – Feld schalten wir das Attribut „Editable“ aus.
Hinweis: Geben Sie den Buttons OK und CANCEL in BBj die IDs 1 und 2, so werden diese
mit Enter bzw. Escape ausgelöst.
50
© BASIS Europe 2012
Unser Formular sieht dann etwa so aus:
Dialog Wizard starten
Als nächstes starten wir den Dialog Wizard
per Rechtsklick auf die Datei calc.arc im
Filesystem-Baum.
Im ersten Formular können Sie den Namen für das zu erzeugende Programm angeben –
wir belassen es bei „calc.bbj“ im selben Verzeichnis und klicken auf „Nächste“:
51
Tutorial • Einführung in BBj
Der zweite Schritt zeigt die vorhandenen Controls auf dem Formular an, und bietet eine
Möglichkeit, Arbeitsvariablen zu definieren. Diese Variablen könne später z.B. beim Aufruf
des Dialogs zum Vorbelegen der Feldinhalte, oder zu deren Abfrage nach dem Schließen
des Dialogs mit OK benutzt werden:
52
© BASIS Europe 2012
Im dritten Dialog wählen wir die Events, auf die unser Programm reagieren soll. Im ersten
Durchlauf registrieren wir lediglich den „Close“–Event der Form selbst.
Der vierte Schritt dient dem Hinzufügen einer Toolbar. In unserem Beispiel wollen wir
keine Toolbar verwenden.
53
Tutorial • Einführung in BBj
Hinweis: Es stehen verschiedene Toolbars zur Verfügung, wie sie auch Barista verwendet.
Wird eine solche Toolbar hinzugefügt und das Programm später innerhalb von Barista
ausgeführt, so interagiert diese automatisch mit der Barista Toolbar in der MDI Titelzeile.
Eine Toolbar kann aber auch völlig unabhängig von der Verwendung des Programms mit
Barista eingestellt werden.
Wir klicken auf „Fertig“. Unser Programm erscheint im Filesystem-Tab.
54
© BASIS Europe 2012
Wir öffnen das erzeugte Programm und starten es. Es erscheint ein Auswahlbildschirm:
Die ersten beiden Optionen starten das Programm in GUI (Java Swing Desktop- Version)
bzw. als BUI-Variante (im Browser). Die dritte Option startet den Wizard erneut, um z.B.
weitere Events hinzuzufügen.
Nachdem wir beide Testläufe gemacht haben, wollen wir uns an die Fertigstellung
machen. Es fehlen noch einige Events:
• OK und CANCEL – Buttons
• Die Berechnung soll bei jeder Modifikation der Eingabe in einem
der beiden Felder automatisch durchgeführt werden.
Wir starten also den Wizard erneut und registrieren vier weitere Events:
•
•
Button Push für OK und CANCEL
Edit Modify für M1 und M2
55
Tutorial • Einführung in BBj
Wir durchlaufen den Wizard bis zum Ende und werfen einen genaueren Blick auf den
erzeugten Code:
Die Event-Routinen für die beiden Buttons OK und CANCEL sowie der ON_CLOSE
Event enthalten automatisch einen Aufruf von #postCancelAnswer() bzw.
#postReturnAnswer(). Diese beiden Methoden können auch an anderer Stelle benutzt
werden, um den Dialog positiv oder abbrechend zu beenden.
Die beiden ON_EDIT_MODIFY Events müssen wir nun mit Leben füllen.
Hierzu fügen wir zunächst eine Methode doCalc zu unserer Klasse hinzu, die die
Berechnung selbst ausführen soll. Wir schreiben ans Ende, vor classend:
method private void doCalc()
m1=#C_M1!.getValue()
m2=#C_M2!.getValue()
#C_RESULT!.setValue(m1*m2)
methodend
56
© BASIS Europe 2012
Dann müssen wir nur noch #doCalc()von den beiden Event-Methoden für den ON_EDIT_
MODIFY Event aufrufen, damit bei jeder Eingabe eine Neuberechnung ausgelöst wird.
Das Ergebnis des Teils sieht somit folgendermaßen aus (neue Codeteile gelb markiert):
Wir sehen:
• Auf die Controls kann im generierten Code per #C_<Controlname>! zugegriffen
werden. Diese Control-Variablen sind alle im Kopfteil deklariert.
• Wir können selbst Methoden zu der entstehenden Klasse hinzufügen. Dieser eigene
Code kommt mit dem Wizard bei weiteren Durchläufen nicht in Konflikt.
Bitte beachten Sie:
•
Ändern Sie keinen Code, der von Kommentaren eingeschlossen ist, die mit
/** DLGWIZ_... beginnen (es gibt BEGIN und END). Der Wizard orientiert sich an diesen
Kommentaren. Manuelle Änderungen können einen weiteren Durchlauf des Wizard
unmöglich machen.
• Ändern Sie die Ressourcen-Datei nicht, während eines der Wizard Fenster offen
ist. Der Wizard liest die Ressource ein, bevor er das erste Fenster anzeigt. Wenn Sie die
Resource währenddessen ändern, kann es sein, dass das generierte Programm nicht mehr
zur Form passt.
57
Tutorial • Einführung in BBj
Wenn wir unser Programm ablaufen lassen, können wir beobachten, wie bei jeder
Änderung in einem der Eingabefelder das Ergebnis neu berechnet wird.
In der Klasse gibt es zwei Methoden, „onInitDialog“ und „onExitDialog“. Diese
sind für Ihren Code zum Start und zum Ende des Dialogaufrufs gedacht, also z.B. um die
Datenbank zu öffnen und einige Variablen zu initialisieren, oder auch, um dann am Ende
beim Schließen des Fensters eine Datenbankverbindung wieder zu schließen.
Das generierte Programm hat außerdem an seinem Ende (nach der Klasse selbst) einige
Zeilen Code, die beim Start den Auswahldialog einblenden. Wie man den Dialog in
andere BBj Programme einbindet, sehen wir im nächsten Kapitel. Sollen der Dialog allein
gestartet und keine Felder von außen vorbelegt werden, so genügen folgende Zeilen:
myDialog! = new calc()
myDialog!.doModal()
Das Zusammenspiel von Programmen, Threads und Klassen
Meistens besteht eine Anwendung aus verschiedenen Programmen und Funktionen, die
einander gegenseitig aufrufen und miteinander Daten austauschen. In diesem Kapitel
stellen wir die beiden wichtigsten Wege vor, wie einzelne BBj Programme zu einer
kompletten Anwendung zusammengefasst werden können.
Einbinden von eigenen Klassen
Zunächst betrachten wir anhand unserer beiden kleinen Beispielprogramme, wie man eine
Klasse, die in einer anderen Programmdatei definiert wurde, einbindet und aufruft.
Hierzu öffnen wir wieder unser erstes Programm „hello.bbj“ und ändern es so ab, dass
beim Klick auf den Button unser kleiner „Rechner“ gestartet wird, und beim Klick auf „OK“
das Ergebnis zurück ins Eingabefeld übernommen wird.
Zunächst müssen wir dem Programm „hello.bbj“ die Klasse „calc“ aus „calc.bbj“
bekannt machen. Hierzu dient der use – Befehl, den wir gleich ganz oben, zusammen mit
passendem declare, einbauen:
58
© BASIS Europe 2012
Als nächstes ergänzen wir die Zeilen nach dem „Push“ – Label, um den Dialog
aufzurufen:
Modale Fenster
Wenn wir den Dialog in GUI und BUI testen, funktionert alles auf den ersten Blick wie
gewünscht. Allerdings fällt eines auf: das zweite Fenster (mit unserem Rechner) ist nicht
wirklich modal – man kann noch immer in das andere zurück wechseln und dort Eingaben
vornehmen, die jedoch nicht beantwortet werden – klar, das Programm wartet ja auf den
geöffneten Dialog.
Wir müssen also noch dafür sorgen, dass der geöffnete Dialog wirklich modal ist. Dies
geschieht in der Ressource, mit dem Attribut „modal“ für das Formular.
59
Tutorial • Einführung in BBj
Nun funktioniert alles wie gewünscht, und in der BUI Variante entsteht ein echter Dialog,
der kein Zurückwechseln in das wartende Fenster erlaubt.
Echtes Multithreading
Im vorigen Beispiel wurden beide Dialoge im selben Thread ausgeführt. Soll ein BBj
Programm jedoch unabhängig gestartet werden, müssen wir einen neuen Thread starten.
Dies geschieht in BBj mit dem Befehl „SCALL“ oder per BBjAPI mit "newBBjSession()")
Beispiel mit SCALL:
result=SCALL("bbj programmname.bbj&")
Das & gibt an, dass die neue Session asynchron gestartet werden, also der aufrufende
Prozess nicht auf die Beendigung des neuen Prozesses warten soll. Ansonsten entsprechen
die Kommandozeile und die Aufrufparameter denjenigen Parametern, die auch beim Start
über einen Shortcut definiert werden können.
Der Rückgabewert „result“ ist 0, wenn der Start erfolgreich war, ansonsten enthält er
einen Fehlercode.
Hinweis: SCALL kann auch verwendet werden, um Befehle an das Betriebssystem zu
senden – z. B.
r=SCALL("cmd /c start http://www.basis-europe.eu")
Eleganter geht der Start asynchroner Sessions mit der Funktion “newBBjSession” (bzw.
„newSynchBBjSession“ für synchronen, blockierenden Aufruf):
myAPI! = BBjAPI()
myCFG! = myAPI!.getConfig().getCurrentCommandLineObject()
myCFG!.setProgramName(„foo“)
x = myAPI!.newBBjSession(myCFG!)
Das BBjCommandLineObject bietet dabei Zugriff auf alle verfügbaren Aufrufparameter
über Methoden. Das Zusammenstellen eines Strings für die Kommandozeile wie beim
SCALL entfällt somit.
60
© BASIS Europe 2012
Namespaces - globale Variablenräume und Interprozesskommunikation
Nun haben wir gesehen, wie zwei voneinander unabhängige BBj-Prozesse erzeugt
werden können. Als nächstes schauen wir uns an, wie diese beiden Prozesse miteinander
kommunizieren können. Bereits beim Aufruf können Kommandozeilen-Parameter
übergeben und im aufgerufenen Programm mit ARGV übernommen werden. Aber zum
Datenaustausch zur Laufzeit brauchen wir andere Mechanismen.
BBj bietet mit Namespaces ein Konzept, das die Kommunikation zwischen Prozessen
untereinander erlaubt. Ein Namespace ist ein Variablenraum, der Objekte enthält, auf
die von verschiedenen Prozessen zugegriffen werden kann. Der globale Namespace und
der generische Namespace (= mit einem Namen versehen) können sogar von Prozessen
verschiedener Benutzer, die im selben BBj Service laufen, angesprochen werden.
Der Group Namespace ist allen Prozessen gemeinsam, die von einem gemeinsamen
Prozess aus gestartet wurden. Ein Menüsystem, das verschiedene Programme mit (->)
SCALL startet, ist hierfür ein gutes Beispiel – der Group Namespace kann alle Variablen
enthalten, die einer Benutzersitzung gemeinsam sind.
Mit setCallback können Events für ganze Namespaces oder für einzelne Objekte
registriert werden, so dass Namespaces auch sehr gut zur Kommunikation zwischen
Prozessen eingesetzt werden können.
Mehrere Threads und Namespace-Kommunikation in unserem Beispiel
Ergänzen wir nun unseren Kalkulator um ein zweites Fenster, das nur das Ergebnis, das
sich bei jeder Eingabe ändert, in einem separaten Prozess anzuzeigen. Wir erzeugen
hierzu eine neue Resource „calcwatch.arc“ und mit dem Wizard das zugehörige
Programm „calcwatch.bbj“. Zur Anzeige des Wertes verwenden wir diesmal ein Static
Text Control mit dem Namen „VALUE“. Im Wizard denken wir daran, den ON_CLOSE Event
für die Form zu registrieren, damit wir das Fenster auch wieder schließen können.
61
Tutorial • Einführung in BBj
In der erzeugten Klasse fügen wir direkt zu Beginn die folgende Zeile hinzu, um eine
Variable für den Namespace zu erhalten:
field private BBjNamespace ns!
In der Methode onInitDialog initialisieren wir diese – wir verwenden einen Generic
Namespace, der über seinen Namen angesprochen wird, und der von allen Threads im
BBj Service unter diesem Namen angesprochen werden kann. Wir zeigen den Wert an
und registrieren einen Namespace-Event für jede Variablenänderung, der bei jeder
Änderung eine neue Methode „updateValue“ aufruft. Der ergänzte Code sieht so aus:
Wir können das Programm nun starten – das Feld wird wie erwartet geleert und wartet
auf die erste Aktualisierung.
62
© BASIS Europe 2012
Nun ändern wir unseren Kalkulator in „calc.bbj“ so ab, dass bei jedem Aktualisieren des
Ergebnisfeldes auch die Variable im Namespace aktualisiert wird. Hierzu fügen wir einfach
folgende Zeile in der Methode doCalc ein:
BBjAPI().getNamespace("CALC","WATCH",1).setValue("VALUE",str(m1*m2))
Diese Methode sieht nun folgendermaßen aus:
Starten wir nun das Programm und beobachten, was bei jeder Änderung des Resultats
passiert. Da wir einen Generic Namespace verwendet haben, können wir sogar eines der
Programme im Browser und das andere in der Swing GUI laufen lassen, und die Werte
werden dennoch übertragen:
Die BUI Variante des einen Programmes versteht sich auch prima mit der
GUI Variante des anderen…
63
Tutorial • Einführung in BBj
Ausnahmebehandlung
Ausnahmen können in BBj abgefangen werden mit einer ERR=-Option im jeweiligen
Statement, oder mit einem global wirkenden SETERR-Befehl, der eine Sprungadresse
für eine Fehlerroutine setzt, die im Falle einer nicht explizit abgefangenen Ausnahme
angesprungen wird.
Neben der ERR=-Option existiert auch END=, die bei einer Dateiende-Ausnahme (z. B.
Ende einer SQL Ergebnismenge) angesprungen wird.
Um feste Labels als Sprungmarken vermeiden zu können, existieren folgende symbolische
Labels (siehe auch „Symbolic Labels“ in der Dokumentation):
ERR=*PROCEEDbei Fehler: nächster Befehl in derselben Zeile
oder nächste Zeile
ERR=*NEXT bei
ERR=*SAME
bei
ERR=*RETRY
bei
ERR=*BREAK
bei
ERR=*CONTINUE
bei
ERR=*ESCAPE
bei
ERR=*RETURN
bei
ERR=*STOP or ERR=*END bei
ERR=*EXIT
bei
ERR=*ENDIF
bei
Fehler: nächste Zeile
Fehler: zum Anfang derselben Zeile zurück
Fehler: nochmals versuchen
Fehler: emuliere BREAK
Fehler: emuliere CONTINUE
Fehler: emuliere ESCAPE
Fehler: emuliere RETURN
Fehler: emuliere STOP/END
Fehler: emuliere EXIT
Fehler: gehe zum Ende des
innersten IF..ENDIF-Blocks.
Beispiel: Schleife zum Einlesen eines SQL Abfrageergebnisses.
SQLOPEN (1)"ChileCompany"
SQLPREP (1)"SELECT * FROM CUSTOMER"
SQLEXEC (1)
WHILE 1
DIM X$:SQLTMPL(1)
X$=SQLFETCH(1,END=*BREAK)
PRINT X.CUST_NUM$,"-",X.LAST_NAME$
WEND
PRINT "***END OF LIST***"
END
Bei Aufrufen von Java-Methoden können Sie ebenfalls einfach err= hinzufügen:
a!=new java.util.HashMap()
PRINT a!.size(err=*next)
Lesen Sie “SETERR” und “Error Trapping Rules” in der Dokumentation für weitere
Informationen.
64
© BASIS Europe 2012
BBj Anwendungen – Start per Verknüpfung und per Weblink
Unsere fertige Anwendung wollen wir nicht immer aus der IDE starten. Es gibt
verschiedene Wege, eine BBj Anwendung lokal oder über ein Netzwerk zu starten: Per
direkter Verknüpfung, per Java Webstart von einem entfernten Rechner, oder im Browser
als BUI Anwendung.
Die Konfiguration einer BUI Anwendung für den Start im Browser hatten wir bereits ganz
zu Beginn bei unserem ersten Beispiel durchgeführt.
Link zu einem lokal installierten BBj
Sind BBj, Anwendung und Daten lokal installiert, so genügt eine Verknüpfung, die den BBj
Interpreter mit Ihrem Programm startet. Das Schema lautet
<Pfad zu BBj-bin>bbj.exe <Optionen> <prog.bbj> - <Argumente>
(Auf Nicht-Windows Systemen entsprechend bbj-Binary anstatt .exe)
Der Bindestrich und die <Argumente> sind optional, frei wählbar und können im
Programm mit der Funktion ARGC gezählt und mit ARGV eingelesen werden.
Die häufigsten <Optionen> sind
-c<configuration file>
Gibt den Pfad zur Konfigurationsdatei an, die an Stelle der cfg/config.bbx verwendet
werden soll.
-t<terminal alias>
Definiert den Terminal Alias in der config.bbx. (Siehe nächsten Abschnitt „SysWindow
abschalten“
-CP<classpath name>
Definiert eine Session-spezifische Classpath. Diese kann im Enterprise Manager angelegt
werden.
-WD<Verzeichnis>
Definiert das Working Directory, das nach dem Start von BBj eingestellt werden soll.
Eine komplette Übersicht der verfügbaren Kommandozeilenoptionen finden Sie in der
Dokumentation unter
http://documentation.basis.com/BASISHelp/WebHelp/b3odbc/running_from_the_command_line.htm.
65
Tutorial • Einführung in BBj
Das SysWindow „abschalten“
Wir haben bei jedem Programmstart aus der IDE das SysWindow bemerkt, das BBj
Ausgaben anzeigt und Eingaben für den Interpreter entgegennimmt. Das SysWindow
kann im Programm jederzeit mit PRINT 'HIDE' und PRINT 'SHOW' aus- und wieder
eingeschaltet werden. Ob es beim Start von BBj sichtbar sein soll wird über die Datei
config.bbx und den sogenannten Terminal Alias definiert.
Standardmäßig startet BBj mit dem Alias T0. Um kein SysWindow anzuzeigen, können
Sie entweder in der Datei config.bbx den Eintrag für T0 so anpassen wir für T2 voreingestellt, oder BBj mit –tT2 starten. Die Einträge für T0 und T2 in der config.bbx
sehen per Default so aus:
Aufruf per Java Webstart
Ist die BBj Anwendung auf einem Server installiert, kann der Java Swing Thin Client per
Java Webstart gestartet werden. Dazu ist auf dem Arbeitsplatzrechner lediglich eine Java
JVM erforderlich. Der Benutzer startet einen http-Link zu einer Datei mit der Erweiterung
.jnlp. In dieser ist der BBj Start definiert, und Java kann zunächst einige BBj Module
herunterladen und starten, und sich dann mit dem Server verbinden und die Anwendung
selbst ausführen.
Die Einrichtung von Webstart geschieht im Enterprise Manager, unter „JNLP
Configuration“.
Klicken Sie auf „New JNLP Application“, dann im Baum auf den neuen Eintrag „newapp“,
um eine neue Anwendung zu konfigurieren.
Zunächst füllen wir den Knoten „Application Summary“ aus und Speichern mit Klick auf
die Diskette.
66
© BASIS Europe 2012
Danach noch einige Einträge unter „application-desc“, und wir können die Anwendung
über Netzwerk aufrufen:
Der Parameter „- run“ nach dem Programmnamen soll lediglich verhindern, dass der
Abfragedialog des Wizard ausgeführt wird, falls Sie den generierten Code beibehalten
haben.
Es ist wichtig, dass sowohl in der Server Konfiguration als auch unter „Remote Host“ der
echte Netzwerkname (oder die IP Adresse) des Servers eingetragen wird. Ändern Sie den
Namen für den BBj Service selbst unter „localhost“ eignet sich für das lokale Testen am
eigenen Rechner immer…
67
Tutorial • Einführung in BBj
68
© BASIS Europe 2012
Index
3-Tier Architektur 4, 33 .arc 42, 50 A
admin 22 API 25, 31 asynchron 60 Ausführungsschicht 4 Ausnahmebehandlung 64 B
Backslash 41 Barista 6, 50, 54 BBj 5 BBj.properties 22 BBj Services 17 BBj Services starten 18 Benutzeroberfläche 4 BLM 4 BLM, Konfiguration 16 Browser 49, 65 Browser User Interface 4 BUI 4, 48, 65 Business Basic 5 C
CALL 38 CAST 31 ChileCompany 64 Client 33 Client Side Objects 33 Code Completion 32 config.bbx 21, 66 config.ini 21 D
declare 31 Demo-Lizenz 19, 20 Dialog Wizard 50 Dokumentation 7 Download 8 DVK-Lizenz 20 E
Enterprise Manager 5, 48, 49 Entwicklerlizenz 20 Event 53 Lizenz registrieren 13 T
Login 22 Thin Client 4, 5, 33 Log 24 Template 27 M
Threads 58 Events 61 Modale Fenster 59 F
Multithreading 60 Eventsteuerung 44 FAQ 7 Module 19 N
FATTR 29 Namespaces 61 FOR..NEXT 35 Newsletter 8 FIELD 29 G
globale Variablenräume 61 GOTO 36 GUI 42 H
Hello World 42 Hostname 49 Netzwerk 65 NFIELD 29 Notfalllizenzen 20 O
Objekte 26, 31 Objektorientierung 31 Online-Angebote 7 R
IDE 25, 42, 66 Records 26 Installation 9 Ressourcen 42 Interpreter 39, 66 Interprozesskommunikation 61 Schleifen 35 JVM Settings 23 Sprünge 36 Kommandozeile 61, 65 Kommandozeilen-Parameter 61 Konfigurationsdateien 21 Konsole 39 L
Labels 36, 37, 45 Lizenzen 19, 20 Lizenzmanager 4 Variablenräume 61 Verknüpfung 65 Video 7 Visual Basic 5 W
Weblink 65 Webstart 4, 65, 66 Windows Dienst 17 RIA 4 S
Klassen 31, 33, 58 Variablen 26 Ressourcendatei 44 Java-Methoden 64 K
V
Ressource 50 J
Javascript 4 Training 8 Overlays 38 I
IF..THEN..ELSE 34 Toolbar 53 Slash 41 sql.ini 22 Start 65 String Templates 26 Strukturen 26 Suchpfade 41 Swing 4 SWITCH..CASE 34 synchron 60 Syntax 34 SysWindow 66 69
Tutorial • Einführung in BBj
70
© BASIS Europe 2012
71
Nell-Breuning-Allee 6
66115 Saarbrücken
Germany
Tel. +49 681 96814-0
Fax +49 681 96814-33
[email protected]
www.basis-europe.eu
BBjTutorial_DE_1201_72_P4.indd
BASIS Europe Distribution GmbH
Herunterladen