Sie sind auf Seite 1von 177

IntarS Handbuch

1 IntarS Handbuch
1.1 Das Buch
Die Informationen in diesem Buch wurden mit grter Sorgfalt erarbeitet. Dennoch knnen Fehler nicht vollstndig ausgeschlossen werden. Die seat-1 Software GmbH bernimmt keinerlei Verantwortung oder Haftung fr eventuell verbliebene Fehler und deren Folgen. Alle Warennamen werden ohne Gewhrleistung der freien Verwendbarkeit benutzt und sind mglicherweise eingetragene Warenzeichen. Auch Wrter, die nicht ausdrcklich als Warennamen gekennzeichnet sind, knnen dennoch welche sein. Der Autor richtet sich im Wesentlichen nach den Schreibweisen der Hersteller. Das Werk, einschlielich aller seiner Teile, ist urheberrechtlich geschtzt. Dieses Werk ist unter der GNU Free Documentation License verffentlicht (s. Anhang). Copyright (c) Pirmin Braun, seat-1 Software GmbH. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

Kommentare und Fragen knnen Sie gerne an uns richten:


seat-1 Software GmbH Am Hofbruhaus 1 96450 Coburg 09561 235503 seat-1 Software GmbH Sinziger Str. 29a 53424 Remagen 02642 308288 info@seat-1.de www.intars.de www.seat-1.de

IntarS Handbuch

1.2 Die Software


Rechtliches zu IntarS
Copyright (C) 1997-2011 Pirmin Braun, seat-1 Software GmbH This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Den vollen Wortlaut der GPL finden Sie im Anhang.

Was bedeutet das?


Weil IntarS unter GPL steht, darf die Software genutzt, weitergegeben, verkauft, verndert und kopiert werden. Allerdings mssen die Urheberangaben unverndert bleiben und der Source ebenfalls mit ausgehndigt werden.

Wer hilft mir?


Grundstzlich knnen Sie sich selbst helfen, denn IntarS ist ein Open Source-System. Die Struktur ist einfach, durchgngig, konsistent und dokumentiert. Jede Datei ist nach dem gleichen Schema aufgebaut und ggf. mit einem Texteditor zu bearbeiten. Sie werden berrascht sein, wie schnell Sie sich hineinfinden. Es gibt eine Community von IntarS-Benutzern und -Entwicklern, die Sie auf http://sourceforge.net/projects/intars/ kontaktieren knnen. Mglicherweise finden Sie dort in den Foren die gesuchte Antwort. Sie knnen sich jedoch auch an einen zertifizierten IntarS-Partner in Ihrer Nhe wenden. Zertifizierte IntarS-Partner sind von uns geschult und haben einen Nachweis ihrer Qualifikation erbracht. Sie haben die aktuellsten Informationen sowie Zugriff auf unsere Experten. Wir arbeiten eng mit ihnen zusammen und leisten 3rd-Level-Support. Eine Liste der zertifizierten IntarS-Partner finden Sie auf unserer Internetseite www.seat-1.de. Gerne geben wir auch Auskunft darber, ob ein Dienstleister zertifiziert ist. Falls jemand das IntarS-Partner-Siegel fhrt, ohne von uns dazu autorisiert zu sein, handelt es sich um Betrug und wird strafrechtlich verfolgt. Die seat-1 Software GmbH selbst lebt seit ber 11 Jahren von professional Services (Programmierung, Support, Hotline, Beratung und Schulung) rund um IntarS.

IntarS Handbuch

1.3 Vorwort
Willkommen bei IntarS
Importieren Sie ihre Daten z. B. aus Sugar-CRM (tm), Cobra Adress PLUS (tm) oder aus jeder anderen Software im CSV-Format. Verwalten und verfolgen Sie alle Kommunikationen mit Kunden und Kontakten: Faxe, Briefe, E-Mails und Telefonate. Alles wird in elektronischen Akten abgelegt. Ordnen Sie beliebige Dateien als Anhnge zu. Stellen Sie Verbindungen zwischen Kunden, Akten und Dokumenten her. Legen Sie Akten auf Termin, fhren Sie Todo-Listen, delegieren Sie Akten und arbeiten Sie mit Wiedervorlagen. Plugins geben Ihnen auf der Startseite einen berblick ber aktuell anstehende Bearbeitungsvorgnge und dienen dem Einstieg in die Vorgnge. Gliedern Sie Kunden mit frei verwaltbaren Stichworten. Fhren Sie Recherchen durch, erstellen Sie Verteilerlisten daraus, versenden Sie Anschreiben und E-Mails an Verteilerlisten, verfolgen Sie den Rcklauf. Arbeiten Sie mit groen Datenmengen: 100.000 Kunden sind kein Problem fr IntarS. Richten Sie weitere Benutzer ein und verteilen Sie die Arbeit. Gestalten Sie die Oberflche ganz nach Ihren Bedrfnissen und Vorlieben. Lernen Sie mit der Tastatur zu arbeiten und erreichen Sie ungeahnte Effizienz. Erstellen Sie eigene Reports, bersichten, Plugins und Module. Erzeugen Sie professionelle Geschftskorrespondenz als PDF ohne Office-Paket. Erfllen Sie automatisch die gesetzlichen Auflagen mit dem PDF-Archiv. Arbeiten Sie mit dem freien Browser Firefox oder mit mobilen Gerten von jedem Ort der Welt aus, der ber einen Internetanschluss verfgt (Konfiguration fr externen Zugriff muss dafr eingerichtet werden). Profitieren Sie von der laufenden Weiterentwicklung der Software.

IntarS bietet Ihnen aber noch mehr. An jener Stelle, an der ein herkmmliches CRM aufhrt, geht es mit IntarS nahtlos weiter. Haben Sie durch Akquise-Ttigkeiten Interessenten gewonnen, schreiben Sie ihnen Angebote. Legen Sie diese auf Wiedervorlage und haken Sie spter nach. Erstellen Sie verschiedene Versionen eines Angebots, binden Sie Dokumente, Alternativpositionen oder Textpositionen mit ein. Nimmt der Interessent ein Angebot an, erstellen Sie daraus mit einem Klick einen Auftrag. Halten Sie Muster-Angebote vor. Erstellen Sie Lieferscheine und Rechnungen, auch Teil-/Sammel-Lieferscheine, sowie Teil-/Sammel-Rechnungen. Erfassen Sie Zahlungseingnge, behalten Sie den berblick ber relevante Vorgnge mittels Plugins. Lassen Sie sich eine betriebswirtschaftliche Auswertung anzeigen, erfassen Sie Kosten und Reisekostenabrechnungen im Rechnungswesen.

IntarS Handbuch
Leiten Sie die Zahlen an den Buchhalter oder Steuerberater weiter. Kurzum: managen Sie Ihr gesamtes Unternehmen mit IntarS.

IntarS ist Open Source, Sie bekommen alles mit und knnen es an Ihre Bedrfnisse anpassen oder anpassen lassen. Regelmig sind neue Versionen verfgbar. IntarS enthlt ein ber 10 Jahre hinweg in Deutschland entwickeltes und gereiftes Framework fr groe Unternehmenssoftware. Hinter IntarS stehen die seat-1 Software GmbH, ein Netzwerk zertifizierter Partner sowie eine lebendige Community. Wir bieten offene Anwenderschulungen und individuelle Firmenschulungen. Dieses Handbuch ist auch innerhalb der Anwendung online als Hilfe verfgbar und kann durchsucht werden. Farben und Stile sowie die Anordnung von Bildschirmelementen knnen von Ihrer Version abweichen, da dies alles mandantenspezifische Einstellungen sind. Die Screenshots wurden mit Administrator-Berechtigung erstellt. Mit niedrigerer Berechtigung sind gewisse Elemente nicht zu sehen. In diesem Handbuch werden u. U. Module und Funktionen dokumentiert, die sich nicht in Ihrer Version der Software finden. Das kann daran liegen, dass Sie eine vereinfachte Version haben, z. B. Candy-CRM. Das Handbuch ist fr alle Versionen gleich und dokumentiert den grten Funktionsumfang.

Installation

2 Installation
2.1 Virtual Appliance
IntarS wird auch als sog. Virtual Appliance ausgeliefert. Dies ist vereinfacht gesagt, ein komplett vorinstalliertes, sofort lauffhiges System in einer einzigen Datei. Die Datei wird Virtual Image genannt. Um IntarS laufen zu lassen, bentigen Sie noch eine Virtual Machine, welche das Virtual Image ldt und ausfhrt. IntarS wird von folgenden frei erhltlichen und kostenlosen Virtual Machine-Produkten untersttzt: VMWare Player, VMWare Server von VMWare (tm) VirtualBox von Innotek (tm), jetzt Sun Microsystems (tm) VirtualPC 2004 und 2007 von Microsoft (tm)

Diese sind kostenlos per Download erhltlich: http://www.vmware.com/de/products/free_virtualization.html http://www.virtualbox.org/wiki/Downloads

Whlen Sie die Virtualisierungslsung, die Ihnen am meisten zusagt bzw. von Ihrem Host-Betriebssystem untersttzt wird. Virtual PC 2007 eignet sich fr Windows Vista (tm), jedoch weniger fr Windows XP (tm). Fr Windows 2000 ist VirtualPC 2004 von Vorteil. Die anderen beiden Virtualisierungsprodukte sind kompatibler. Fr Windows7 ist VirtualPC kostenlos per Download erhltlich.

Warum Virtualisierung?
Es ist einfach und funktioniert sofort. Es ist sicher; IntarS wird in einer geschtzten Umgebung betrieben. Es gibt keine unerwnschten Wechselwirkungen mit bereits installierter Software (z.B. inkompatible DLLs). IntarS ist eine komplexe Unternehmenssoftware mit Datenbank, Applikations-, Mail-, Fax-, Druckserver u.v.m. Eine klassische Installation wrde einen ganzen Tag in Anspruch nehmen und viel Erfahrung erfordern. Diese Arbeit haben wir Ihnen vorab schon abgenommen. Sie erhalten eine echte, harmonisierende Serverlsung, ohne dass Sie sich um die Details kmmern mssen. Hhere Qualitt und Zuverlssigkeit: in dem Virtual Image passt alles optimal zusammen; unangenehme berraschungen mit nicht kompatiblen Paket-Versionen, Systemeinstellungen und Derivaten sind ausgeschlossen. Kein rger mit Registry, DLLs oder Installer. Denkbar einfache Sicherung: nur eine Datei (das Virtual Image) ist zu sichern. Einfacher Umzug auf einen anderen Rechner: lediglich das Virtual Image auf den neuen Rechner kopieren und sofort weiterarbeiten. Schnelles "Disaster-Recovery": das Virtual Image der letzten Sicherung wird auf einen neuen Rechner kopiert.

Verfahren Sie bitte wie folgt:


Download von http://www.seat-1.com/Download/IntarS61_230_SF.7z Dies ist eine ca. 600 MB groe, gepackte VMWare Appliance.

Installation

Nach dem Auspacken im VMWare Player oder VMWare Workstation o.. starten. Es ist ein Debian 6.0.1 System mit komplett installiertem und konfigurierten IntarS 6.1 Mandant 230 und Demodaten. 1. 2. 3. 4. 5. Falls Sie noch keine Virtual Machine im Einsatz haben, besorgen Sie sich eine (s. oben). Kopieren Sie das Virtual Image auf die Festplatte, entpacken es und laden es in die Virtual Machine. Starten Sie die Virtual Machine. Warnungen bezglich unterschiedlicher Prozessor-Architektur knnen ignoriert werden. VMWare fragt evtl. nach, ob eine neue ID erzeugt werden soll, da die VM kopiert wurde. Klicken Sie auf "Ja". In der Virtual Machine bootet Debian und IntarS wird hochgefahren. Sobald das System gebootet hat, kann man ber den Browser damit arbeiten. ffnen Sie den Mozilla Firefox-Browser, und geben Sie ein: http://IntarS61-230/GSWeb/Aprica3000230 Es sollte sich das Anmelde-Panel zeigen.

6. 7. 8.

9.

10. Die URL mit Anmeldedaten ist: http://IntarS61-230/GSWeb/Aprica3000230.woa?pw=root&loginname=Administrator 11. Falls das nicht funktioniert, muss ber die IP-Adresse gearbeitet werden: loggen Sie sich dazu mit "root" und Passwort "root" in die Konsole der Virtual Machine ein und geben "ifconfig" ein. Die IP von eth0 ist die gewnschte. 12. Falls eth0 nicht zu sehen ist, oder keine ordentliche IP erhalten hat, sollten Sie die Netzwerkonfiguration der Virtual Machine ndern oder eine andere Virtual Machine verwenden. 13. Wenn ber IP gearbeitet werden muss, lautet die URL: http://xxx.xxx.xxx.xxx/GSWeb/Aprica3000230 wobei xxx.xxx.xxx.xxx die IP-Adresse ist. 14. Loggen Sie sich in IntarS mit Kennung "Administrator" und Passwort "root" ein. Anschlieend befinden Sie sich in der laufenden Anwendung. Fr den Anfang konsultieren Sie am besten die Hilfe. 15. Wenn das System sich Ihnen erschlieen soll, knnen Sie sich mithilfe von SSH einloggen (root, root) und die Struktur ergrnden. Beginnen Sie am besten bei /usr/GNUstep/Local/Library/Aprica2/_K_000230.

IntarS auf Windows 7


Download von http://www.seat-1.com/Download/IntarS61_230_VPC.7z Dies ist eine ca. 600 MB groe, gepackte VirtualPC Appliance fr Windows 7. Und so wird's gemacht: Falls noch nicht geschehen, VirtualPC folgendermaen aktivieren: http://www.microsoft.com/germany/windows/virtual-pc/download.aspx Betriebssystemversion und Sprache auswhlen Auf [ Windows Virtual PC ] klicken. Es wird nun die Echtheit von Windows geprft. Hierfr wird WindowsActivationUpdate.exe heruntergeladen. Diese Datei muss ausgefhrt werden. (Bei der Verwendung von Firefox muss dieser im Anschluss neu gestartet werden.)

Installation

Nun das Update KB958559 (hinterdem sich Virtual PC verbirgt) installieren. Windows neu starten. Das von http:/www.seat-1.com/download/IntarS61_230_VPC.7z heruntergeladene File entpacken. Die Datei _K_000230.vmc doppelklicken und warten. Wenn die Maschine hochgefahren ist, ist die Anwendung ber einen Webbrowser unter http://192.168.1.230/GSWeb/Aprica3000230.woa?pw=root&loginname=Administrator erreichbar. Falls die Anwenung nicht erreichbar ist, bitte im VPC-Fenster auf [ Extras ] -> Einstellungen und dann auf Netzwerk klicken. Fr Adaptor 1 sollte die Netzwekkarte des Hostsystems ausgewhlt sein. Befinden Sie sich in einem anderen Netz (z.B. 192.168.8.0), mssen Sie sich im VirtualPC-Fenster mit dem Benutzer "root" und dem Passwort "root" anmelden. Nun knnen Sie mit dem Befehl "vim /etc/network/interfaces" die IP-Adresse festlegen. Navigieren Sie zu der Stelle an der Sie die nderungen vornehmen mchten, drcken Sie "a" und fhren Sie die nderungen durch. Tragen Sie entweder eine neue Feste Adresse ein. Beispiel: # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.8.230 netmask 255.255.255.0 gateway 192.168.8.1 Oder lassen Sie die IP-Adresse von Ihrem DHCP vergeben. Beispiel: # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet dynamic

Drcken sie [ ESC ] und geben dann :wq ein. Nun "reboot" eingeben und warten bis das System neu gestartet ist.

Installation

2.2 Native Installation


2.2.1 Readme_first
Zur erstmaligen Installation von IntarS 6 sind die Schritte in den vier Files Install_Debian_601.txt Install_GNUStep.txt Install_IntarS6_Framework.txt Install_IntarS6_Mandant.txt nacheinander auszufhren. Das Install_IntarS6_Mandant.txt benutzt die Mandantennummer 000230. Hier ist eine evtl. abweichende eigene Mandantennummer stattdessen einzutragen. Fr zustzliche Mandanten auf demselben IntarS 6 gengt es, die Anweisungen aus Install_IntarS6_Mandant.txt mit den entsprechenden zustzlichen Mandantennummern auszufhren. Anweisungen fr den laufenden Betrieb einer IntarS 6-Installation sind in der Datei $MANDANT_PATH/aprica_commands.txt zu finden.

2.2.2 Install_Debian_601
- immer als root arbeiten - Erfahrung mit Linux und Shell erforderlich - nur bash als Shell benutzen ########################################## # Debian Basissystem installieren # Folgendes weiter Software auswhlen: # Web-Server # Datei-Server # SSH-Server # Standard-Systemwerkzeuge ########################################## # Wenn ein Fehler beim Installieren der nachfolgenden Pakete hat, diese nderung vornehmen # in /etc/apt/sources.list # deb http://ftp.de.debian.org/debian/ squeeze main deb http://ftp.de.debian.org/debian/ squeeze main deb-src http://ftp.de.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main # squeeze-updates, previously known as 'volatile' deb http://ftp.de.debian.org/debian/ squeeze-updates main deb-src http://ftp.de.debian.org/debian/ squeeze-updates main deb http://ftp.de.debian.org/debian/ etch main non-free contrib deb-src http://ftp.de.debian.org/debian/ etch main non-free contrib deb http://security.debian.org/ etch/updates main contrib non-free

Installation
deb-src http://security.debian.org/ etch/updates main contrib non-free ########################################## # dann diese Pakete in aptitude nachinstallieren zustzlich aller, die jeweils dazu vorgeschlagen werden # exim4 und postgres werden nicht bentigt und knnen deinstalliert werden. aptitude -y install ssh aptitude -y install bash aptitude -y install wget aptitude -y install smbfs aptitude -y install samba aptitude -y install smbclient aptitude -y install winbind aptitude -y install insserv aptitude -y install ntp # Fragt evtl. nach neuem root-Passwort -> root eingeben # Dann muss spter der grant-Befehl nicht mehr gemacht werden aptitude -y install mysql-server aptitude -y install mysql-client aptitude -y install libmysqld-dev aptitude -y install libmysqlclient-dev aptitude -y install mysqltuner aptitude -y install vim aptitude -y install less aptitude -y install patch aptitude -y install flex aptitude -y install bison aptitude -y install bzip2 aptitude -y install zlib1g-dev aptitude -y install rsync aptitude -y install subversion aptitude -y install gobjc aptitude -y install libxslt1-dev aptitude -y install libffi-dev aptitude -y install libssl-dev aptitude -y install esmtp aptitude -y install mutt aptitude -y install ghostscript-x aptitude -y install imagemagick aptitude -y install make aptitude -y install apache2-threaded-dev ########################################## # Rechnername in /etc/hostname eintragen vim /etc/hostname IntarS61-230 # ESC :wq ########################################## # Rechnername in /etc/hosts hinter localhost schreiben, sonst namensauflsung nur mit Domain .lokal ! vim /etc/hosts

Installation
127.0.0.1 127.0.1.1 # ESC :wq localhost IntarS61-230 IntarS61-230.local IntarS61-230

10

########################################## # /etc/esmtprc anpassen (smtp-Server und User und Passwort eintragen): vim /etc/esmtprc # The SMTP host and service (port) hostname=smtp.1und1.com:25 # The user name username=test@seat-1.com # The password password=sag-ich-nicht # ESC :wq ########################################## # mutt konfigurieren in ~/.muttrc # fuer debug-output: set sendmail="/usr/bin/esmtp -v -X /tmp/esmtp.log" vim ~/.muttrc a set sendmail="/usr/bin/esmtp" set use_envelope_from=yes # ESC :wq ########################################## # feste IP eintragen (Beispiel) in /etc/network/interfaces: # The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.1.3 netmask 255.255.255.0 gateway 192.168.1.1 ########################################## # en_US.utf8 locale muss installliert sein; kann so getestet werden: locale -a |grep en_US.utf8 # falls nicht vorhanden: vim /etc/locale.gen # hinzufuegen: de_DE.UTF-8@euro UTF-8 de_AT.UTF-8@euro UTF-8 en_US.UTF-8 UTF-8 # speichern: # ESC :wq # dann: locale-gen ##########################################

Installation
# mysql konfigurieren vim /etc/mysql/my.cnf # im [mysql] Abschnitt, falls noch nicht vorhanden: default_character_set=utf8 # im [mysqld] Abschnitt: default-storage-engine=MYISAM sql_mode=MYSQL40 # folgende Parameter je nach lokalen Gegebenheiten sinnvoll einstellen # 4 GB Hauptspeicher query_cache_size = 128M query_cache_limit = 8M key_buffer_size = 512M tmp_table_size = 128M join_buffer_size = 16M read_rnd_buffer_size = 8M read_buffer_size = 8M thread_stack = 1M table_cache = 2048 thread_cache_size = 16 max_allowed_packet = 16M # 1 GB Hauptspeicher: query_cache_size query_cache_limit key_buffer_size tmp_table_size join_buffer_size read_rnd_buffer_size read_buffer_size thread_stack table_cache thread_cache_size max_allowed_packet

11

= = = = = = = = = = =

32M 2M 128M 32M 16M 2M 2M 1M 2048 16 16M

/etc/init.d/mysql restart # Kann wegfallen, wenn whrend der MySQL-Installation das root-PW schon gesetzt worden ist. # Fllt auf druch Meldung: "ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)" mysql show grants; grant all on *.*to root@'localhost' identified by 'root' with grant option; quit

Installation

12

2.2.3 Install_GNUStep
immer als root arbeiten Erfahrung mit Linux, Shell und Compiler erforderlich nur bash als Shell benutzen Rechnerzeit muss aktuell sein, sonst klappt install nicht

########################################## # prerequisite: Install_Debian_601.txt export LANG=en_US.utf8 # production releases SVNREV_MAKE=23034 SVNREV_BASE=23034 SVNREV_GDL2=23034 SNVREV_GSWEB=23034 GSW_APXS_CONFIG="--with-apxs=apxs2" mkdir -p /usr/GNUstep/Local/Projects/Scripts cd /usr/GNUstep/Local/Projects/Scripts svn checkout -r HEAD --no-auth-cache svn://svn.intars.at/intars/Local/Projects/Scripts/IntarS6 --username anonsvn --password 'intars' cd IntarS6 DATE=`date +"%Y%m%d%H%M"` LOGFILE=$PWD/GNUStep_$DATE.log date > $LOGFILE chmod a+rw $LOGFILE ########################################## # propertylist wg. gsweb.conf PROPLIST=libPropList-0.10.1 PROPLISTTGZ=libPropList-0.10.1.tar.gz PROPLISTURL=http://www.intars.at/packages/Source/libPropList-0.10.1.tar.gz if [ ! -f ${PROPLISTTGZ} ]; then echo "Downloading ${PROPLISTTGZ}" 2>&1|tee -a $LOGFILE wget ${PROPLISTURL} 2>&1|tee -a $LOGFILE else echo "${PROPLISTTGZ} already present" 2>&1|tee -a $LOGFILE fi if [ ! -d ${PROPLIST} ]; then echo "Unpacking ${PROPLIST}" 2>&1|tee -a $LOGFILE tar -zxvf ${PROPLISTTGZ} 2>&1|tee -a $LOGFILE else echo "${PROPLIST} already present" 2>&1|tee -a $LOGFILE fi echo "Building libproplist" 2>&1|tee -a $LOGFILE cd ${PROPLIST} if [ ! -f config.status ] ; then ./configure 2>&1|tee -a $LOGFILE

Installation
fi make clean install 2>&1|tee -a $LOGFILE

13

########################################## cd /usr/GNUstep/Local/Projects/Scripts/IntarS6 echo "Downloading gnustep-make" 2>&1|tee -a $LOGFILE if [ -d make/CVS ] ; then mv make /tmp fi if [ -d make ] ; then cd make svn diff |tee tmp.patch 2>&1|tee -a $LOGFILE svn revert -R . 2>&1|tee -a $LOGFILE svn update -r $SVNREV_MAKE 2>&1|tee -a $LOGFILE cd .. else svn checkout -r $SVNREV_MAKE http://svn.gna.org/svn/gnustep/tools/make/trunk make 2>&1|tee -a $LOGFILE fi ########################################## cd /usr/GNUstep/Local/Projects/Scripts/IntarS6 echo "Downloading gnustep-base" 2>&1|tee -a $LOGFILE if [ -d base/CVS ] ; then mv base /tmp fi if [ -d base ] ; then cd base svn diff |tee tmp.patch 2>&1|tee -a $LOGFILE svn revert -R . 2>&1|tee -a $LOGFILE svn update -r $SVNREV_BASE 2>&1|tee -a $LOGFILE cd .. else svn checkout -r $SVNREV_BASE http://svn.gna.org/svn/gnustep/libs/base/trunk/ base 2>&1|tee -a $LOGFILE fi ########################################## cd /usr/GNUstep/Local/Projects/Scripts/IntarS6 echo "Downloading gnustep-gdl2" 2>&1|tee -a $LOGFILE if [ -d gdl2/CVS ] ; then mv gdl2 /tmp fi if [ -d gdl2 ] ; then cd gdl2 svn diff |tee tmp.patch 2>&1|tee -a $LOGFILE svn revert -R . 2>&1|tee -a $LOGFILE svn update -r $SVNREV_GDL2 2>&1|tee -a $LOGFILE cd .. else svn checkout -r $SVNREV_GDL2 http://svn.gna.org/svn/gnustep/libs/gdl2/trunk/ gdl2 2>&1|tee -a $LOGFILE fi

Installation
########################################## cd /usr/GNUstep/Local/Projects/Scripts/IntarS6 echo "Downloading gnustep-gsweb" 2>&1|tee -a $LOGFILE if [ -d gsweb/CVS ] ; then mv gsweb /tmp fi if [ -d gsweb ] ; then cd gsweb svn diff |tee tmp.patch 2>&1|tee -a $LOGFILE svn revert -R . 2>&1|tee -a $LOGFILE svn update -r $SNVREV_GSWEB 2>&1|tee -a $LOGFILE cd .. else svn checkout -r $SNVREV_GSWEB http://svn.gna.org/svn/gnustep/libs/gsweb/trunk/ gsweb 2>&1|tee -a $LOGFILE fi ########################################## cd /usr/GNUstep/Local/Projects/Scripts/IntarS6/make if [ -f ../make.patch ] ; then echo "Applying gnustep-make patch" 2>&1|tee -a $LOGFILE patch -Np0 < ../make.patch 2>&1|tee -a $LOGFILE fi echo "Building gnustep-make" 2>&1|tee -a $LOGFILE pwd|tee -a $LOGFILE if [ ! -f config.status ] ; then ./configure CFLAGS=-g 2>&1|tee -a $LOGFILE fi make clean install 2>&1|tee -a $LOGFILE if [ -f /usr/GNUstep/System/Library/Makefiles/GNUstep-reset.sh ] ; then . /usr/GNUstep/System/Library/Makefiles/GNUstep-reset.sh fi . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh ########################################## # /etc/ld.so.conf erweitern: vim /etc/ld.so.conf a /usr/GNUstep/Local/Library/Libraries /usr/GNUstep/System/Library/Libraries # ESC :wq

14

########################################## # gnustep-base cd /usr/GNUstep/Local/Projects/Scripts/IntarS6/base if [ -f ../base.patch ] ; then echo "Applying gnustep-base patch" 2>&1|tee -a $LOGFILE patch -Np0 < ../base.patch 2>&1|tee -a $LOGFILE fi echo "Building gnustep-base" 2>&1|tee -a $LOGFILE pwd|tee -a $LOGFILE

Installation
if [ ! -f config.status ] ; then ./configure 2>&1|tee -a $LOGFILE fi make clean install 2>&1|tee -a $LOGFILE ldconfig 2>&1 |tee -a $LOGFILE ########################################## # gnustep-gdl2 - entfllt bald; enthlt noch EOF-Sachen und Patches, um GNUStep zu verbiegen cd /usr/GNUstep/Local/Projects/Scripts/IntarS6/gdl2 if [ -f ../gdl2.patch ] ; then echo "Applying gnustep-gdl2 patch" 2>&1|tee -a $LOGFILE patch -Np0 < ../gdl2.patch 2>&1|tee -a $LOGFILE fi echo "Building gnustep-gdl2" 2>&1|tee -a $LOGFILE pwd|tee -a $LOGFILE if [ ! -f config.status ] ; then ./configure 2>&1|tee -a $LOGFILE fi make clean install 2>&1|tee -a $LOGFILE ldconfig 2>&1 |tee -a $LOGFILE ########################################## # gsweb - entfllt bald; cd /usr/GNUstep/Local/Projects/Scripts/IntarS6/gsweb if [ -f ../gsweb.patch ] ; then echo "Applying gnustep-gsweb patch" 2>&1|tee -a $LOGFILE patch -Np0 < ../gsweb.patch 2>&1|tee -a $LOGFILE fi pwd|tee -a $LOGFILE echo "Building gnustep-gsweb" 2>&1|tee -a $LOGFILE if [ ! -f config.status ] ; then ./configure --with-gswnames=wo 2>&1|tee -a $LOGFILE fi # evt. rm -rf rm -rf rm -rf rm -rf rm -rf rm -rf alte Headers und libs wegloeschen /usr/GNUstep/System/Library/Headers/WebObjects /usr/GNUstep/System/Library/Headers/WOExtensions /usr/GNUstep/System/Library/Headers/WOExtensionsGSW /usr/GNUstep/System/Library/Libraries/libWebObjects.so* /usr/GNUstep/System/Library/Libraries/libWOExtensions.so* /usr/GNUstep/System/Library/Libraries/libWOExtensionsGSW.so*

15

make clean install 2>&1|tee -a $LOGFILE ########################################## # gsweb Apache Adaptor module cd /usr/GNUstep/Local/Projects/Scripts/IntarS6/gsweb/GSWAdaptors/Apache echo "Building gnustep-gsweb adaptor" 2>&1|tee -a $LOGFILE if [ ! -f config.status ] ; then echo './configure $GSW_APXS_CONFIG' 2>&1|tee -a $LOGFILE ./configure $GSW_APXS_CONFIG 2>&1|tee -a $LOGFILE echo 'make clean' 2>&1|tee -a $LOGFILE make clean 2>&1|tee -a $LOGFILE

Installation
echo make echo make 'make' 2>&1|tee -a $LOGFILE 2>&1|tee -a $LOGFILE 'make install' 2>&1|tee -a $LOGFILE install 2>&1|tee -a $LOGFILE

16

fi ldconfig 2>&1 |tee -a $LOGFILE echo "Fertig." 2>&1|tee -a $LOGFILE

2.2.4 Install_IntarS6_Framework
immer als root arbeiten Erfahrung mit Linux, Shell und Compiler erforderlich nur bash als Shell benutzen Rechnerzeit muss aktuell sein, sonst klappt install nicht

########################################## # prerequisite: Install_Debian_601.txt, Install_GNUStep.txt cd /usr/GNUstep/Local/Projects export LANG=en_US.utf8 DATE=`date +"%Y%m%d%H%M"` LOGFILE=$PWD/IntarS_Framework_$DATE.log date > $LOGFILE chmod a+rw $LOGFILE ########################################## # checkout # PBproject2GNUmakefile - entfllt, wenn GNUMakefile direkt editiert wird svn checkout -r HEAD --no-auth-cache svn://svn.intars.at/intars/Local/Projects/PBproject2GNUmakefile --username anonsvn --password 'intars' # Wrapper f. MySQL - entfllt, wenn Namespaces sauber getrennt sind svn checkout -r HEAD --no-auth-cache svn://svn.intars.at/intars/Local/Projects/PBMySQL4 --username anonsvn --password 'intars' # das eigentliche IntarS-Framework svn checkout -r HEAD --no-auth-cache svn://svn.intars.at/intars/Local/Projects/Aprica3 --username anonsvn --password 'intars' cd /usr/GNUstep/Local/Projects/Aprica3 chmod a+x *.sh ########################################## # compile # Environment setzen . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh

Installation

17

# PBproject2GNUmakefile - entfllt, wenn GNUMakefile direkt editiert wird cd /usr/GNUstep/Local/Projects/PBproject2GNUmakefile echo "Building PBproject2GNUmakefile" 2>&1|tee -a $LOGFILE pwd|tee -a $LOGFILE make clean install 2>&1|tee -a $LOGFILE # Wrapper f. MySQL - entfllt, wenn Namespaces sauber getrennt sind cd /usr/GNUstep/Local/Projects/PBMySQL4 echo "Building PBMySQL4" 2>&1|tee -a $LOGFILE pwd|tee -a $LOGFILE make clean install 2>&1|tee -a $LOGFILE ldconfig 2>&1 |tee -a $LOGFILE # das eigentliche IntarS-Framework cd /usr/GNUstep/Local/Projects/Aprica3 echo "Building IntarS Framework" 2>&1|tee -a $LOGFILE # aus WO Project-Definition die GNUmakefile.files generieren - entfllt, wenn GNUMakefile direkt editiert wird PBproject2GNUmakefile -pb PB.project -tpl GNUmakefile.template > GNUmakefile.files pwd|tee -a $LOGFILE make clean install 2>&1 |tee -a $LOGFILE ########################################## # _GLOBAL Files mkdir -p /usr/GNUstep/Local/Library/Aprica2 cd /usr/GNUstep/Local/Library/Aprica2 svn checkout -r HEAD --no-auth-cache svn://svn.intars.at/intars/Local/Library/Aprica2/_GLOBAL --username anonsvn --password 'intars'

2.2.5 Install_IntarS6_Mandant
immer als root arbeiten Erfahrung mit Linux und Shell erforderlich nur bash als Shell benutzen Rechnerzeit muss aktuell sein, sonst klappt install nicht

########################################## # prerequisite: Install_Debian_601.txt, Install_GNUStep.txt, Install_IntarS6_Framework.txt export LANG=en_US.utf8 mandant=000230 ########################################## # auschecken cd /usr/GNUstep/Local/Library/Aprica2 svn checkout -r HEAD --no-auth-cache svn://svn.intars.at/intars/Local/Library/Aprica2/_K_$mandant --username

Installation
anonsvn --password 'intars' cd _K_000230 chmod a+x *.sh cp etc_initd_aprxxxxxx.sh /etc/init.d/apr$mandant insserv -dfv apr$mandant

18

########################################## # Demodaten einlesen mysql -uroot -proot -e "drop database aprica2_$mandant;" mysql -uroot -proot -e "create database aprica2_$mandant CHARACTER SET utf8;" mysql -uroot -proot --default-character-set=utf8 aprica2_$mandant < /usr/GNUstep/Local/Library/Aprica2/_K_$mandant/DataArchiv/dumps/Sicherung _Demo.sql ########################################## # samba einrichten: alles offen cd /etc/samba mv smb.conf smb.conf.bak vim smb.conf # das hier reinpasten: [global] workgroup = ARBEITSGRUPPE printing = cups printcap name = cups map to guest = root guest ok = Yes # guest user = root writeable = Yes guest account = root read only = No browseable = Yes security = share wins support = Yes [Resources] path = /usr/GNUstep/Local/Library/Aprica2/_K_000230/Resources [Alles] path = / writeable = No /etc/init.d/samba restart ########################################## # crontab einrichten vim /etc/crontab # so hinzufgen: # taeglich um 23:00 0 23 * * * root /usr/GNUstep/Local/Library/Aprica2/_K_000230/Batch_nightly.sh # alle 10 min. von 06:00 bis 18:00 0,10,20,30,40,50 6-18 * * * root /usr/GNUstep/Local/Library/Aprica2/_K_000230/Batch_Wiedervorlage.sh # ESC :wq

Installation
########################################## # testweise starten INTARS_OPTIONS="--GNU-Debug=NoWarn -GSWMTEnabled NO -WOHost localhost -WODebuggingEnabled NO -WOStatusDebuggingEnabled NO -WOStatusLoggingEnabled NO" INTARS_APP=/usr/GNUstep/Local/GSWApps/Aprica3.gswa/Aprica3 MANDANT_PATH=/usr/GNUstep/Local/Library/Aprica2/_K_$mandant GLOBAL_PATH=/usr/GNUstep/Local/Library/Aprica2/_GLOBAL PROJECT_PATH=/usr/GNUstep/Local/Projects/Aprica3 $INTARS_APP -mandant $mandant -adjustDBWithDrop -n 1 $INTARS_OPTIONS ########################################## # Aufruf im Firefox mittels URL http://server/GSWeb/Aprica3$mandant.woa # login mit "Administrator" Passwort "root"; # (evt. Firewall konfigurieren/deaktivieren) # Klappt alles, kann IntarS als Service betrieben werden: /etc/init.d/apr$mandant start /etc/init.d/apr$mandant stop ########################################## # Maintenance und Operating # siehe: less $MANDANT_PATH/aprica_commands.txt

19

Erste Schritte

20

3 Erste Schritte
3.1 Starten und Stoppen
Virtual Machine
IntarS startet, wenn Sie die Virtual Machine starten. Warten Sie, bis der Startvorgang abgeschlossen ist. Dies ist der Fall, wenn in der Konsole ein Login-Prompt zu sehen ist. Danach kann ber den Firefox mit IntarS gearbeitet werden. Zum Stoppen klicken Sie als Administrator im "Start"-Modul unter "Service" auf den "Herunterfahren"-Button. Beobachten Sie in der Virtual Machine-Konsole den Shutdown. Wenn die Meldung "System halted" erscheint, knnen sie die Virtual Machine abschalten.

Native Installation
Betreiben Sie IntarS nativ, wird IntarS beim Starten des Rechners ber die "init"-Scripts gestartet. Manuell knnen Sie IntarS mit /etc/init.d/apr000230 start starten und mit /etc/init.d/apr000230 stop wieder stoppen. Weitere Informationen zum Starten und zur Systempflege finden Sie in der Datei "aprica_commands.txt" im Mandantenpfad /usr/GNUstep/Local/Library/Aprica2/_K_000230/.

Kommandozeilen-Parameter
-secure Die Anwendung luft im sicheren Modus. Alle Funktionalitten, welche das System beschdigen oder die Sicherheit gefhrden knnten, sind deaktiviert. Auch der Administrator kann diese nicht mehr ausfhren. Dies dient dazu, die Anwendung als Demo auf einem ffentlich zugnglichen Server zu betreiben. -noModelToDB Das zeitintensive laden des Modells in die Datenbanktabellen entfllt. Damit startet die Anwendung schneller. Nachteil ist, dass die eingebaute Modellverwaltung mglicherweise auf veraltete Metainformationen zugreift. Daher vermeiden Sie es bitte dies im Echtbetrieb zu verwenden. -batch scriptname Die Anwendung wird im Batch-Modus wie ein Kommandozeileninterpreter gestartet, fhrt das angegebene Script mit den Berechtigungen des Batch-Users aus und beendet sich wieder. Damit werden zeitgesteuerte automatische Verarbeitungen realisiert, z. B. nchtliche Statistik-Verdichtungen. -mandant nummer Gibt an, unter welchem Mandanten die Instanz laufen soll. Wird normalerweise aus dem Filename des Binaries extrahiert. Diese Option wirkt strker. -n nummer Gibt die Instanznummer an. Default ist '1'. Die Anwendung skaliert, indem mehrere Instanzen (=Prozesse) parallel laufen. Jede Instanz muss eine eigene Nummer haben. Der Loadbalancer verteilt die Last auf die Instanzen. -port nummer Optionale Definition eines eigenen Ports zur Kommunikation zwischen dem Apache-Modul und der Applikations-Instanz. Standardmig wird der Port automatisch aus Mandant- und Instanznummer berechnet. -db_mandant nummer

Erste Schritte

21

Angabe eines abweichenden Mandanten fr die Datenbank.

3.2 Aufrufen
1. 2. 3. 4. ffnen Sie den Firefox Browser. Geben Sie als URL http://IntarS ein. Erscheint die Login-Seite, speichern Sie die URL als Bookmark. Evtl. ist es notwendig, ber IP zu gehen. Dann lautet die URL http://xxx.xxx.xxx.xxx/GSWeb/Aprica3000230.woa wobei xxx.xxx.xxx.xxx die von DHCP vergebene IP des IntarS-Systems ist.

Die Login-Seite (Abb. hnlich)

Anmelden
Geben Sie auf der Login-Seite die Kennung und das Passwort ein, das Ihnen vom Systemverwalter mitgeteilt wurde. Sind Sie selbst der Systemverwalter und melden sich zum ersten Mal an, lautet die Kennung Administrator und das Passwort root Drcken Sie dann die "Return"-Taste. Funktioniert alles, erscheint Ihre persnliche Start-Seite. Ist die Kennung unbekannt, das Passwort falsch oder die Kennung gesperrt, teilt Ihnen das System dies mit. Das Passwort wird brigens als MD5-Hash gespeichert. Es kann von niemandem gesehen oder rckverschlsselt werden. SQL-Insertion funktioniert nicht. Auch der Systemverwalter kann nur ein neues Passwort vergeben, aber nicht nachschauen, wie das aktuelle Passwort lautet. Sie knnen sich mit Ihrer Kennung beliebig oft im System anmelden. Vor allem im Mozilla Firefox mit dessen tabbed Browsing erffnet dies groartige Mglichkeiten der Arbeitsorganisation. Verwenden Sie z. B. ein Fenster, um Notizen zu erfassen, ein zweites, um Angebote zu erstellen und ein drittes, um in Geschftsvorfllen zu recherchieren.

Erste Schritte

22

Haben Sie das Administrator-Passwort vergessen, muss direkt ber SQL der Zugang wieder hergestellt werden. Sie bentigen dazu einen lokalen Zugang zum MySQL-Server, da dieser standardmig so konfiguriert ist, dass er keine Verbindungen von einem anderen Rechner akzeptiert. Mit folgendem Befehl kommen Sie in die Kommandozeile des MySQL-Clients: mysql -uroot -proot aprica2_000230 So stellen Sie den Administrator-Benutzer wieder her: update vid_benutzer set cryptedpw = md5('root') where kennung = 'Administrator';

Alternative Anmeldung
Sie knnen beim ersten Aufruf gleich User und Kennwort als Parameter mit bergeben: http://IntarS/GSWeb/Aprica3000230?pw=root&login=Administrator Dies ist komfortabel, aber gefhrlich. Sind Sie der einzige Benutzer des Systems oder kennt jeder die Passwrter von jedem Kollegen, ist das vertretbar. Mit weiteren Parametern knnen Sie gleich ein Modul ansteuern und sogar Datenstze aufrufen: http://IntarS/GSWeb/Aprica3000230?pw=root&login=Administrator&zielmodul=vid_ku nde

3.3 Start
Nach dem Anmelden befinden Sie sich im "Start"- oder "Home"-Modul. Es ist vergleichbar mit der Homepage einer Webseite. Hier beginnt alles und hier hin kann man jederzeit zurckkehren.

Homepage oder Home-Modul oder Startseite oder Start-Modul

Sinnvollerweise liegen im Start-Modul alle Elemente, die Sie zuerst sehen mchten. Da dies bei jedem anders ist, knnen Sie sich die Startseite selbst einrichten. Vielerlei Plugins zeigen Termine, offene Auftrge, offene Rechnungen, Aufgaben, Anrufe etc. Blenden Sie diejenigen ein, die zu Ihrem Aufgabenbereich gehren und bringen Sie sie in eine Anordnung, welche Ihnen zusagt. Plugins zeigen oft eine scrollbare Liste an. Klicken Sie auf einen Eintrag, kommen Sie unmittelbar zum betreffenden Vorgang. Das ist eine geschickte Sache, um Workflow zu implementieren.

Erste Schritte

23

Das Hauptmen und die Modulsuche sind auch auf der Startseite. Diese beiden Elemente werden in separaten Kapiteln behandelt. Der Abmeldebutton findet sich ebenfalls hier. Klicken Sie darauf, beendet das System nach Rckfrage die Sitzung und es wird wieder die Login-Seite angezeigt. Tun Sie lngere Zeit nichts, wird Ihre Sitzung automatisch beendet. Diese Zeit ist einstellbar, standardmig ist es eine Stunde. Wenn Sie einfach das Browser-Fenster schlieen, besteht die Sitzung noch eine Stunde lang weiter, bis sie automatisch beendet wird. Der Server bemerkt es nicht, wenn Sie einfach das Fenster schlieen. Es wird weder die Anwendung dadurch beendet noch kommt es zum Datenverlust. Im Gegensatz zu PHP-Anwendungen arbeitet IntarS nicht mit Cookies. In der URL ist die Session-ID verschlsselt. Cross-Site Scripting und Session-Hijacking sind damit nicht mglich.

3.4 Wo finde ich Hilfe


Hier finden Sie Hilfe:
Hilfe-Modul (oben rechts im Browser) Gedrucktes Handbuch Modulhilfe - in aktivem Modul nochmals auf dessen Name klicken; erklrt jedes Feld und jeden Button des Moduls Button-Tooltipps Im IntarS-Anwenderforum auf http://sourceforge.net/projects/intars Hotline der seat-1 Software GmbH (www.seat-1.com)

3.5 Firmendaten erfassen


Ihre Firmenstammdaten erfassen Sie im Modul "Config" unter dem Register "myIntarS". Farben und Layout knnen anders aussehen. Die Firmenstammdaten werden u. a. auf der Geschftskorrespondenz angedruckt.

Erste Schritte

24

Firmenstammdaten erfassen

Laden Sie Ihr Firmenlogo mit "Upload" hoch, whlen Sie das dabei entstandene Dokument und setzen es als Firmenlogo fr Ihre Geschftskorrespondenz ein.

3.6 Benutzer einrichten


Der Administrator, welcher uneingeschrnkte Berechtigungen im System hat, ist bereits vorkonfiguriert. Sollen jedoch weitere Benutzer mit dem System arbeiten, mssen sie im Modul "Benutzer" erfasst und ihre Rechte verwaltet werden.

Erste Schritte

25

Benutzer Daten

Zunchst mssen Sie die Personendaten erfassen. Beachten Sie dabei die gltigen Datenschutzbestimmungen (Einwilligung des Benutzers ntig). Wird die "Mobil Telefon"-Nummer gefllt, knnen Sie dem Benutzer eine SMS senden. Die "Signature" wird an E-Mails angehngt, die der Benutzer aus dem System heraus verschickt. "Session-Timeout" ist die Zeit in Sekunden, nach der eine inaktive Session vom System automatisch beendet wird. Im Feld "Modul f. Prestarting" lassen sich, mit Kommata getrennt, Modulnamen auffhren, die beim Login gleich vorgestartet werden sollen. Man erreicht dies auch, ber die Buttons "+" und "-" unter den Modulnamen. Das System trgt dann das aktuelle Modul ein bzw. nimmt es heraus. Hier kann das Feld zustzlich manuell verwaltet werden.

Benutzer Rechte

Erste Schritte

26

Unter dem Register "Rechte" wird gesteuert, welche Berechtigung der Benutzer besitzt. Mit der Sonderberechtigung "alles" hat er, wie der Administrator, uneingeschrnkte Berechtigungen. ber "Aktivieren"/"Deaktivieren" lsst sich ein Benutzerprofil ein-/ausschalten. Ist es deaktiviert, kann sich der Benutzer nicht mehr anmelden und wird auch nicht mehr in Verarbeitungslufen (z. B. Mailings) bercksichtigt. Mchten Sie lediglich die Anmeldung verhindern, ist dies ber die Einstellung "Login zulssig" mglich. Im Feld "Fehlversuche Online Login" zhlt das System mit, wie oft das Passwort falsch eingegeben wurde. Hat der Benutzer (oder ein Hacker) zu oft falsch geraten, wird das Profil vom System gesperrt. Der Administrator kann die Anzahl Fehlversuche dann manuell wieder auf "0" stellen. Mit dem Button "Berechtigungs-Druck" lsst sich eine bersicht der Berechtigungsvergabe drucken. Zur Steuerung der Strategie der Oberflchen-Layouts stehen folgende Einstellungen zur Verfgung: LIF von User Ist hier ein anderer Benutzer eingetragen, werden die Layouts dieses Benutzers verwendet. Der Benutzer hat dann selbst kein eigenes LIF und ihm fehlt der "C" Button, mit dem das LIF eingestellt wird. So lassen sich z. B. Gruppen-LIFs realisieren. Die Modulberechtigungen werden ber Berechtigungsgruppen gesteuert. Diese sind im Modell hinterlegt und knnen individuell benannt werden. Die Gruppenzugehrigkeit eines Benutzers wird mit einem Hkchen an der jeweiligen Gruppe markiert. Damit erhlt er die Berechtigung fr alle Module, die sich ebenfalls in dieser Gruppe befinden. Module ordnen Sie in der Modulverwaltung in die Gruppen ein. Der Benutzer "Administrator" nimmt eine Sonderrolle ein. Er kann nicht gelscht oder gesperrt werden, hat immer die Berechtigung "alles" und immer ein eigenes LIF. Es ist das Default-LIF des Systems.

3.7 Stammdaten erfassen


Kunden erfassen

Kundenmodul aufrufen

Navigieren Sie zum Kundenmodul, klicken Sie auf "Neu" oder drcken die Tastenkombination "Alt-n". Beachten Sie das blinkende Dreieck. Es signalisiert, dass ungesicherte Daten vorliegen. Dies sagt Ihnen auch der Tooltipp, wenn Sie den Mauszeiger mind. 2 Sekunden auf das Dreieck positionieren. Allen anderen Bedienelementen sind ebenfalls Tooltipps hinterlegt. Probieren Sie es aus, indem Sie den Mauszeiger mind. 2 Sekunden auf verschiedene Buttons platzieren.

Erste Schritte

27

Neuen Kunden anlegen

Fllen Sie die Felder aus und arbeiten Sie sich durch die Register. Haben Sie alles eingegeben, klicken Sie auf "Sichern" oder drcken die Tastenkombination "Alt-s". Sollten Sie Pflichtfelder nicht gefllt haben, wird das System Ihnen dies mitteilen und nicht sichern. Vervollstndigen Sie dann Ihre Eingabe. Das Gleiche passiert, wenn Sie ungltige Werte (z. B. nicht existierende Schlssel von Hilfstabellen) eingeben.

Felder ausfllen

Hilfstabellen
Bei der Erfassung sind Sie auf verschiedene Hilfstabellen, wie z. B. Land, Skonto-Profil, Artikelgruppe, gestoen. Evtl. mssen Sie dort weitere Daten erfassen. Eintrge aus Hilfstabellen lassen sich suchen, nachschlagen und auswhlen.

Artikel erfassen
Verfahren Sie analog mit dem "Artikelstamm"-Modul. Sie werden erkennen, dass es exakt dieselbe Struktur aufweist. Dies ist ein herausragendes Merkmal von IntarS. Jedes Modul lsst sich einheitlich bedienen.

Erste Schritte

28

3.8 Drucken
IntarS druckt, indem ein PDF nativ erzeugt wird. Das PDF-Dokument wird unter Verwendung des Adobe Reader in einem neuen Browser-Fenster oder -Tab angezeigt. Dieser muss daher auf dem Client installiert sein. Um sicherzustellen, da Sie ordentlich drucken knnen, gehen Sie wie folgt vor: 1. 2. 3. Rufen Sie das Modul "Home" auf. Klicken Sie das Register "Verkauf" an und lokalisieren Sie den Button "Auftragsliste". Klicken Sie auf den "Auftragsliste"-Button. Es sollte sich ein neues Browser-Fenster oder -Tab ffnen, in welchem die Liste ausgegeben wird.

Drucke Liste

Resultierende PDF Ausgabe

Falls die Liste nicht erscheint, prfen Sie folgende Ursachen:

Popup-Blocker
Es kann sein, dass die Browsereinstellungen das Aufblenden verhindern. In diesem Fall sehen Sie eine entsprechende Kopfzeile. Klicken Sie darauf und erlauben Sie Popups von Ihrem Server.

kein PDF-Viewer
Sie haben keinen PDF-Viewer eingerichtet. Meist ist dies der Adobe Reader. Laden Sie ihn von der Adobe-Homepage herunter und installieren diesen. Zum Test ffnen Sie ein lokales PDF-Dokument. Wird es korrekt angezeigt, besitzen Sie prinzipiell die Mglichkeit, PDF-Dateien darzustellen.

Erste Schritte

29

Lizenz-Alertbox
Vom Adobe Reader ist bekannt, dass er beim ersten Aufruf die Besttigung einer Lizenzvereinbarung erfordert. Diese erscheint in einer sogenannten Alertbox. Als Plugin sieht man die Alertbox nicht und kann sie nicht besttigen. Rufen Sie daher ein lokales PDF-Dokument auf und besttigen ggf. die Alertbox.

Einstellung des PDF-Viewers


Unter Umstnden ist Ihr PDF-Viewer nicht so eingestellt, dass er mit dem Browser zusammenarbeitet. Beim Adobe Reader gibt es eine versteckte Check-Box "Web-Dokumente anzeigen" (je nach Version).

Einstellungen des Browsers


Ihr Browser muss wissen, da er fr den MIME-Typ "pdf/application" einen PDF-Viewer aufrufen soll. Testen knnen Sie dies, indem Sie im Internet ein PDF-Dokument aufrufen. Funktioniert das nicht, bearbeiten Sie die Einstellungen entsprechend.

Virenscanner und Firewall


Der Virenscanner muss evtl. ausgeschaltet sein und die Firewall muss Port 80 durchlassen.

Adobe Reader reagiert nicht mehr


In seltenen Fllen kommt es vor, dass der Adobe Reader sich verhakt und evtl. die komplette CPU fr sich beansprucht. Dann zeigt er kein PDF-Dokument an. Beenden Sie in diesem Fall den Prozess (Taskmanager in Windows). Acrobat kann ab Version 4 verwendet werden. Version 6 ist fehlerhaft und sollte unbedingt durch eine andere ersetzt werden. Wir empfehlen daher die Verwendung des "Foxit PDF Readers".

3.9 Daten importieren


Fr freie Datenbernahme aus CSV-Files gibt es das Modul "Daten-Import/Export". Es arbeitet tabellenbezogen und erwartet CSV-Files in UTF-8 Kodierung, deren erste Zeile die Spaltennamen beinhaltet. Man kann damit auch den Tabelleninhalt dumpen und wieder restoren. Ein Plugin zeigt die bisherigen dumps, jeweils mit Datum. Desweiteren knnen Sie einen CSV-Export durchgefhren. Dabei werden ebenfalls in der ersten Zeile die Spaltennamen ausgegeben. Am besten gehen Sie folgendermaen vor: 1. Legen Sie einen neuen Satz fr die Tabelle an und schreiben Sie dazu, was und warum Sie das tun mchten. Klicken Sie auf "Dump". Klicken Sie auf "Exportieren". Benutzen Sie das nun erhaltene CSV-File, um die eigenen Import-Daten mit den Spaltennamen zu versehen. Erstellen Sie ein CSV (z. B. mit OpenOffice Calc), welches die gewnschten Spalten enthlt. Laden Sie das CSV hoch ("Upload") und erfassen Sie eine Beschreibung, sodass Sie es spter wiederfinden. Tragen Sie das dabei entstandene Dokument in den unter 1. angelegten Satz ein und speichern Sie. Klicken Sie auf "Importieren".

2. 3. 4.

5. 6.

7. 8.

Funktioniert irgendetwas nicht, knnen Sie mit "Restore" das unter 2. erzeugte Dump wieder einspielen. Sie haben dann den ursprnglichen Zustand wieder hergestellt.

Erste Schritte

30

Beispiel fr Datenimport

Weitere Optionen
Sie knnen beim Export die Spalten angeben, welche exportiert werden sollen. Auch beim Import mssen nicht alle Spalten vorhanden sein. Es werden die verarbeitet, welche vorhanden sind. Wollen Sie beim Import vorhandene Stze updaten, muss die Spalte des Primary Key im Import vorhanden sein. So kann z. B. der Preis im Artikelstamm upgedated werden. Gibt es in der Datenbank bereits einen Satz mit demselben Primrschlssel wie ein importierter Datensatz, wird er mit den importierten Daten upgedated. Andernfalls wird aus dem importierten Datensatz ein neuer in der Datenbank erzeugt (insert). Mit dem Flag "autom. Nr.Verg. aus" kann man steuern, ob beim Insert die automatische Nummernvergabe der Datenbank ausgeschaltet sein soll. Es wird dann versucht, mit dem Wert des Primrschlssels zu inserten. Das kann sinnvoll sein, um z. B. bestehende Kundennummern zu behalten.

Erste Schritte

31

3.10 Demodaten lschen


IntarS wird mit Demo-Daten ausgeliefert. Damit kann gefahrlos gebt und getestet werden. Bevor richtig mit dem System gearbeitet wird, mssen die Demo-Daten gelscht werden. Dazu ist ein Skript vorbereitet, das der Administrator ausfhren kann. Es wird bewusst nicht als Button angeboten, um eine sptere ungewollte Bettigung auszuschlieen. Das Script befindet sich im "Start"-Modul, Register "System". Klicken Sie auf "Auflisten". Es werden alle Skripte des Start-Moduls angezeigt. Markieren Sie "bu_empty_db.script", kopieren Sie den Namen und fgen Sie es in die Eingabezeile ("Tempscriptname") neben dem Textfeld ein. Klicken Sie nun auf "Verwenden" und anschlieend auf "Ausfhren". Dann sind bis auf wenige Systemtabellen alle Daten gelscht.

Demo-Daten lschen

Erste Schritte

32

3.11 Sugar CRM migrieren


Im Startmodul stehen Skripte bereit, um Daten von Sugar CRM (tm) (http://www.sugarcrm.com/crm/) zu migrieren. Je nachdem, was bereits an Daten angefallen ist, sind sie ggf. an die jeweilige Situation anzupassen. Diese Anleitung richtet sich an den Administrator. Des Weiteren sind tiefergehende Kenntnisse von MySQL, sowie Scripting und allgemeiner Datenverarbeitung notwendig. Wenn Ihnen in der folgenden Beschreibung etwas unklar ist, lassen Sie es lieber bleiben. Es ist jegliche Haftung fr Datenverluste oder sonstige Verluste aller Art ausgeschlossen. Die Fa. seat-1 Software GmbH oder einer der zertifizierten IntarS-Partner macht das aber gerne fr Sie. Gehen Sie folgendermaen vor: 1. 2. 3. Stoppen Sie die MySQL Datenbank. Duplizieren Sie das MySQL-Sugar CRM-Directory. Im duplizierten Directory "document.*" in "documents_sugar.*", "users" in "users_sugar.*", "notes.*" in "notes_sugar.*" und "project.*" in "project_sugar.*" umbenennen. Die Files aus dem duplizierten Directory in das IntarS-Daten-Directory der MySQL kopieren. Das "Sugar_Cobra.idm" im Mandanten-Directory an das "Mandant.idm" anhngen. IntarS kennt damit die Sugar CRM-Tabellen. Sie sind im Repository beschrieben und damit uneingeschrnkt ansprechbar. Starten Sie die MySQL-Datenbank wieder. Starten Sie IntarS neu. Falls IntarS nicht mehr startet, fhren Sie ggf. das "autoadjustDb"-Script aus.

4. 5. 6.

7. 8. 9.

10. Lokalisieren Sie die Migration-Skripte, passen diese (falls gewnscht) an und fhren sie aus. Es wird empfohlen, vor dieser Aktion eine Datensicherung durchzufhren. Ist das Ergebnis im ersten Schritt noch nicht zufriedenstellend, kann die Sicherung wieder eingespielt werden. Diese dauert nur wenige Minuten. Sie knnen es nach Script-nderungen erneut versuchen, solange bis es Ihnen zusagt.

Erste Schritte

33

3.12 Cobra migrieren


Im Startmodul steht ein Script "migrate_cobra.script" bereit, um Daten von cobra Adress PLUS (tm) zu bernehmen (http://www.cobra.de/). Dazu sind jedoch tiefergehende Kenntnisse von MySQL, sowie Scripting und allgemeiner Datenverarbeitung vonnten. Wenn Ihnen in der folgenden Beschreibung etwas unklar ist, lassen Sie es lieber bleiben. Es ist jegliche Haftung fr Datenverluste oder sonstige Verluste aller Art ausgeschlossen. Die Fa. seat-1 Software GmbH oder einer der zertifizierten IntarS-Partner macht das aber gerne fr Sie. Das Script "migrate_cobra.script" lscht alle Kunden und Akten, bevor es die Cobra-Adressen und -Kontakte migriert. Dokumente werden nicht migriert, da in Cobra nur die Pfade zu den Files stehen. Stichworte und ihre Zuordnungen werden migriert. Die grobe Vorgehensweise sieht so aus: 1. Bringen Sie die Daten aus der Access-DB nach MySQL in die "ga_..."-Tabellen. Die "ga_..."-Tabellen sind Zwischen-Tabellen. Analysieren Sie die Daten in den "ga_..."-Tabellen und bearbeiten Sie diese, falls ntig. Tranferieren Sie die Daten aus den "ga_..."-Tabellen in die IntarS-Tabellen.

2. 3.

Im Einzelnen:

Bringen Sie die Daten aus der Access-DB nach MySQL in die "ga_..."-Tabellen.
Verwenden Sie SQLWays (http://www.ispirer.com/products/). Hierfr sind zwei Files vorbereitet, die in "DataArchiv/Migragtion_Cobra" liegen. Ein "sqlways.xml"-File fr die Konfiguration von SQLWays und ein "migrate.bat"-File fr den Aufruf von SQLWays mit den richtigen Parametern. 1. 2. Kaufen und installieren Sie SQLWays. Die kleinste Version fr 50 Tabellen reicht normalerweise aus. Legen Sie eine ODBC-Datenquelle namens "Cobra" fr den Zugriff auf die Access-Datenbank von Cobra an. Legen Sie ein Arbeitsverzeichnis an und tragen es in "migrate.bat" und "migrate_cobra.script" ein. Fhren Sie "migrate.bat" aus. Es sollten im Arbeitsverzeichnis .txt-, .ldi-, .bat- und .sql-Files entstehen. Fhren Sie die UTF-8 Konvertierung in "migrate_cobra.script" durch. Kommentieren Sie die anderen beiden Subroutinen-Aufrufe aus. Passen Sie die .ldi-Files an, sodass die UTF-8-Daten genommen werden und importieren Sie hiermit die Daten. Hngen Sie das "Sugar_Cobra.idm" im Mandanten-Directory ans "Mandant.idm" an.

3. 4. 5.

6.

7.

Analysieren Sie die Daten in den "ga_..."-Tabellen und bearbeiten Sie diese, falls ntig.
1. 2. Erstellen Sie eine neue Datensicherung. Analysieren Sie die importierten Daten und passen Sie diese mit den gewonnenen Erkenntnissen das "migrate_cobra.script" an (z. B. Lnder-Mapping).

Import
Fhren Sie nun den Kunden- und Kontakt-Import in "migrate_cobra.script" aus. Ist das Ergebnis im ersten Schritt noch nicht zufriedenstellend, kann die Sicherung wieder eingespielt werden. Diese dauert nur wenige Minuten. Sie knnen es nach Script-nderungen erneut versuchen, solange bis es Ihnen zusagt.

Navigation

34

4 Navigation
4.1 Hauptmenu
Das Hauptmen bietet einen guten berblick ber das gesamte System. Es listet die verfgbaren Module thematisch gruppiert auf. In der Modulverwaltung kann die Gliederung eingestellt werden. Es sind nur diejenigen Module sichtbar, fr welche der Benutzer berechtigt ist. Zu finden ist das Hauptmen im Modul "Start" bzw. "Home". Sie kommen jederzeit dorthin, indem Sie auf den "Start"-Button bzw. "Home"-Button klicken, der sich immer links oben befindet.

Hauptmen im Start-Modul

Die Untergliederung lsst sich durch Anklicken einer Rubrik auffalten (1). Es werden dann die darin einsortierten Module sichtbar. Sie sind alphabetisch sortiert. Die Reihenfolge lsst sich durch die Wahl geeigneter GUI-Namen beeinflussen. Beispielsweise kann man 10..., 20..., 30... etc. voranstellen. Beachten Sie, wie die Rubrik bzw. das Modul farbig hinterlegt wird, wenn Sie den Mauszeiger darauf positionieren. Dabei wird der Mauszeiger zu einer Hand. Dies ist bei jedem aktiven Element der Bedienoberflche so. Klicken Sie ein Modul im Hauptmen an (2), wird es aufgeblendet und nimmt den ganzen Raum des Browserfensters ein. Sein Name erscheint oben in der Navigationsleiste. Sie zeigt die geffneten Module. Klicken Sie auf ein Modul, wird es wieder nach vorne gebracht. Das funktioniert analog dem tabbed Browsing von Firefox. Sie mssen also nicht zwingend ber das Hauptmen gehen, um ein Modul aufzurufen. Das Ansteuern eines Moduls nennt man Navigation. IntarS bietet eine Anzahl verschiedener Mglichkeiten der Navigation fr die verschiedenen Ansprche des Arbeitens. Ein einmal geffnetes Modul kann wieder geschlossen werden. Dafr ist der "X"-Button in der Leiste der Universal-Buttons da. Auch hier diente der Firefox als Vorbild. Ein Klick auf den "X"-Button schliet das Modul, das gerade geffnet ist. Statt seiner wird dann das in der Navigationsleiste links von ihm stehende aufgeblendet.

X-Button zum Schlieen eines Moduls

Sie knnen prinzipiell beliebig viele Module geffnet haben. Allerdings kann dies unbersichtlich werden, da jedes geffnete Modul einen Platz in der Navigationsleiste beansprucht. Diese wird dadurch mglicherweise mehrzeilig. Es kann auch zu einem erhhten Resourcenverbrauch auf dem Server fhren. Jedes Modul behlt whrend der Session seinen Zustand. Rufen Sie zwischenzeitlich andere Module auf und kommen dann zu dem Ursprnglichen zurck, werden Sie es exakt so wiederfinden wie Sie es verlassen haben. Insbesondere gehen

Navigation
somit keine Daten verloren.

35

Klicken Sie nochmals auf den Modulnamen in der Navigationsleiste, whrend das Modul schon geffnet ist, wird seine Modul-Hilfe aufgerufen. Hier wird erlutert, wozu das Modul gut ist, was man damit machen kann, sowie Details zu den Feldern und Buttons (s. Hilfe).

4.2 Persnliches Menu


Das persnliche Men ist eine Aufzhlung von vorgestarteten Modulen. Sie stehen direkt nach dem Anmelden bereits geffnet in der obersten Zeile zur Verfgung. Nehmen Sie die Module, die Sie immer bentigen, in Ihr persnliches Men auf.

In persnliches Men aufnehmen

1. 2. 3. 4. Hinweis:

Navigieren Sie zu dem Modul, das Sie in Ihr persnliches Men aufnehmen mchten. Klicken Sie auf das "+", welches rechts in der Leiste der Universal-Buttons liegt. Ab sofort ist das Modul dauerhaft in Ihrem persnlichen Men verfgbar. Mchten Sie ein Modul wieder aus Ihrem Men entfernen, klicken Sie entsprechend auf das "-".

Sie knnen in der Benutzerverwaltung die Liste der vorgestarteten Module auch manuell verwalten (s. "Benutzer einrichten").

vorgestartete Module von Hand verwalten

Navigation

36

4.3 Modulsuche

Die Modulsuche mit Trefferliste

Die Modulsuche ist ein Eingabefeld im "Home"-Modul. Es dient dazu, Module zu suchen. Geben Sie in das Eingabefeld einen Suchbegriff ein und drcken die "Return"-Taste. Das System ermittelt eine Trefferliste von Modulen, die mit dem Begriff in Zusammenhang stehen. Es gengt, einen Teilstring einzugeben, die Gro-/Kleinschreibung ist dabei egal. Klicken Sie auf einen Eintrag der Trefferliste, wird das Modul aufgeblendet. Ergibt die Suche genau ein Modul, wird dieses automatisch aufgerufen. Tipp: Platzieren Sie das Element "Modulsuche" in das erste Register Ihrer "Home"-Seite. Der Cursor wird in diesem Feld stehen, sobald Sie auf der "Home"-Seite sind. Das Element "Modulsuche" erkennt auch die Modulkrzel, die Sie in der Modulverwaltung hinterlegt haben (s. Modulverwaltung). Es sind die wichtigsten Module bereits mit Krzeln versehen. So kommen Sie mit +as z. B. zum Artikelstamm.

4.4 Navigation von Modul zu Modul


Der Einstieg erfolgt am Anfang ber das Hauptmen. Im weiteren Verlauf einer Vorgangsbearbeitung erfolgt die Navigation integriert. Man bleibt in einem Handlungsstrang.

Links der Relationen

Relationen

Die Relationen des Datenmodells werden vom System an der Oberflche als Links dargestellt. So hat z. B. der Kunde eine Relation auf Land. Klicken Sie in einem Kundendatensatz auf dessen Land, gelangen Sie im "Land"-Modul auf dem betreffenden Datensatz.

Navigation

37

Aufrufverschachtelung

Im Land-Modul

Im aufgerufenen Modul wird der Weg, den Sie nehmen, visualisiert, indem in Klammern das Herkunftsmodul angezeigt wird. Gleichzeitig ist der "Zurck"-Button aktiv geworden. Er bringt Sie zum vorherigen Modul zurck. Es lassen sich mehrere Schritte auf diese Weise zurcklegen und auch wieder zurcknehmen. So hat z. B. das Land eine Relation namens "Landeswhrung", die auf die Whrungs-Tabelle verweist. Klicken Sie darauf, kommen Sie im Whrungsmodul und es wird "Land" als rufendes Modul angezeigt. Klicken Sie zweimal auf "Zurck" und Sie sind wieder im Kundenmodul. Der "Zurck"-Button des Browsers funktioniert in IntarS nicht. Er wird abgefangen, indem diesselbe Seite nochmals angezeigt wird. Dies ist notwendig, da der Browser wie ein Terminal benutzt wird. Wrde man im Seitenverlauf zurckgehen knnen, wrden veraltete Bildschirminhalte angezeigt werden, zum Teil mit verhngnisvollen Folgen (z. B. mehrfache Buchungen).

Detail-Bearbeitung

Detail-Register

Navigation

38

Kunden knnen mehrere Anschriften, Kommunikationsvorgnge (CRM) und Ansprechpartner haben. IntarS stellt dies mittels Registern dar, die ein ">" enthalten. Klickt man darauf, gelangt man in eine Positions-Verwaltung. Auch dies ist ein eigenstndiges Modul namens "PBWOPosEditor". Es gibt dort einen "Zurck" Button.

Nachschlagen

Land nachschlagen

Zu jeder Relation (und zu manch anderen Feldern) gibt es eine Nachschlagefunktion. Sie ffnet sich, wenn man im Eingabefeld am Ende einen Punkt (".") eingibt. Gibt man nichts auer einen Punkt ein, werden alle in Frage kommenden Datenstze zur Auswahl aufgeblendet. Gibt man vor dem Punkt noch einen Teilstring an, wird mit diesem nach der Standardvorgehensweise (Kombisuchfelder, schrittweise Ausweitung) gesucht und die Auswahlliste zeigt nur die Treffermenge. Klickt man einen Eintrag daraus an, wird der Datensatz ins rufende Modul bernommen und man gelangt in dieses zurck. brigens kann in der Nachschlagefunktion positioniert und gesucht werden und selbst die Spalten lassen sich individuell einstellen. Die Auswahl im Nachschlagemodul kann auch per Tastatur mit der "Tabulator"- und "Return"-Taste erfolgen: die "Tabulator"-Taste whlt den nchsten Datensatz aus, die Tastenkombination "Shift"-"Tabulator" den vorherigen und "Return" bernimmt den Datensatz.

4.5 bersichten und Plugins

einige bersichten und Plugins des Kunden

Navigation

39

bersichten
In IntarS gibt es bersichten. bersichten liefern tabellarische Daten-Darstellungen. Klicken Sie auf eine Zeile einer solchen Tabelle, wird eine Aktion ausgelst. Das Zielmodul kann spaltenabhngig ermittelt werden. Hat man z. B. eine bersicht, die auf Auftragspositionen aufbaut, kann der Artikelstamm, der Kunde, der Auftrag oder das Angebot (falls vorhanden) aufgerufen werden, je nachdem, in welche Spalte Sie geklickt haben. Das gerufene Modul wird in der Navigationsleiste farblich aufgeblendet, sodass Sie immer wissen, in welchem Sie sich gerade befinden. Eine bersicht kann sich nach jeder Auswahl aktualisieren oder auch die gewhlten Datenstze aus der Anzeige lschen. Ob eine bersicht nach der Auswahl automatisch zurckkehrt oder noch weitere Folge-Auswahlen zulsst, ist ebenfalls einstellbar. Im Gegensatz zu Plugins bentigen bersichten weniger Platz und Performance (die Daten werden erst auf Anforderung ermittelt). Aufgeblendet nehmen sie jedoch den vollen Bildschirm ein. Sie sind auch in der Mglichkeit der Verarbeitung beschrnkt, da sie nur Daten tabellarisch anzeigen und auf einen Klick auf eine Zeile reagieren knnen.

Plugins
Plugins sind kleine Unterfenster. Sie zeigen selbstndig eine eigene Oberflche an. Oft ist dies eine Liste, die beim Klick ebenfalls eine Aktion auslst, z. B. "offene Bestellungen". Klicken Sie auf eine Zeile, so wird das Modul "Bestellungen" aufgerufen und die angeklickte offene Bestellung darin angezeigt. Plugins knnen wie Felder frei positioniert werden. Im Metadatenmodell werden sie mit Berechtigungen versehen. Plugins knnen so konfiguriert werden, dass sie sich stndig aktualisieren (was dann jedoch Performance kostet), wenn ein anderer Datensatz in den Fokus kommt (z. B. Akten eines Kunden). Dies wird im Meta-Datenmodell eingestellt. Andere Plugins werden nur auf Anforderung aktualisiert (z. B. offene Auftrge). Diese haben einen entsprechenden Button. Plugins auf der "Home"-Seite aktualisieren sich im Allgemeinen jede Minute selbst, wenn man nichts tut. Plugins knnen beliebige Funktionalitt und Oberflche kapseln, auch wenn die meisten Plugins nur eine Liste anzeigen. Aufgrund ihrer geringen Gre ist die Darstellung auf das Ntigste beschrnkt. Plugins sind das Mittel der Wahl, um Postkrbe und Workflow (Arbeitsvorrat, auf Bearbeitung wartende Vorgnge, anstehende Entscheidungen) zu implementieren. So bietet die "Home"-Seite eine Anzahl von Einstiegs-Plugins. Man sieht gleich nach dem Anmelden, was an Arbeit anliegt und gelangt mit einem Klick zum entsprechenden Modul mit dem richtigen Datensatz im Fokus. Plugins knnen recht einfach selbst erstellt werden. Sie bestehen (neben dem Eintrag im Meta-Datenmodell) aus zwei Dateien: einem Scriptfile und einem Template fr die Oberflche. Beide werden ber den Namen gefunden, d. h. sie mssen so heien wie das Plugin. Das Scriptfile enthlt 2-5 Skripts. Eines fr die Datenbeschaffung und optional 1-4 weitere fr die Verarbeitung, wenn auf etwas geklickt wurde.

Navigation

40

4.6 implizite Navigation

Neues Angebot

Oft erfolgt eine Navigation implizit. IntarS navigiert aufgrund einer Benutzerinteraktion automatisch in ein anderes Modul. Ein Beispiel ist obiger Button "neues Angebot" im Modul "Kunde". Klicken Sie darauf und besitzen Sie die Berechtigung fr Angebotsverwaltung, wird IntarS das "Angebots"-Modul aufrufen und dort ein neues Angebot fr den markierten Kunden erzeugen. Dort ist der "Zurck"-Button aktiv und ein Hinweis zu sehen, dass man vom Modul "Kunde" kommt. Diese Art der Modulsteuerung erfolgt durch Scripting. IntarScript bietet alle Mglichkeiten, Module fernzusteuern. Das Script, das hinter dem Button liegt, sieht so aus:

bu_neues_ag.script

Navigation

41

4.7 Zwischenablage

Zwischenablage

Die "Zwischenablage" erleichtert Ihnen Ihre Arbeit wesentlich. Ein Groteil heutiger Dokumente entsteht mit "Copy/Paste" (Tastenkombination "Ctrl-C" und "Ctrl-V"). "Ctrl-C" / "Ctrl-V" ist eine der hufigsten Tastenkombinationen. IntarS wre unvollstndig, gbe es nicht etwas entsprechendes auf Objekt-Ebene. Mit der Tastenkombination "Alt-d" oder einem Klick auf "Merken" werden die markierten Objekte in die Zwischenablage befrdert. Dort verbleiben sie dauerhaft, auch ber das Session-Ende hinweg, bis Sie diese wieder explizit daraus entfernen. Abrufen knnen Sie die Objekte in der Zwischenablage mit dem Modul "Zwischenablage". Sie erreichen sie mit dem "gemerkte"-Button.

Zwischenablage-Modul

Hier knnen Sie ein Objekt wieder aufrufen und im Kontext verwenden, z. B. beim Nachschlagen. Es werden nur die vom Kontext her sinnvollen Objekte der Zwischenablage angeboten: wird in Kunden nachgeschlagen, kommen nur die Kunden in der Zwischenablage zum Vorschein. Sie knnen die Zwischenablage aber auch als ganz normales Organisationsmittel verwenden und die Vorgnge oder Objekte hineinlegen, die Sie abseits des normalen Arbeitsablaufs im Auge behalten mchten. Sie knnen auch Objekte, die Sie besonders hufig bentigen (z. B. Top-Artikel oder Stammkunden) in die Zwischenablage legen. Die Zwischenablage untersttzt die Wiedervorlage.

Bedienelemente

42

5 Bedienelemente
5.1 Bildaufbau

Standard-Bildaufbau

Jedes Modul, welches das Default-Template benutzt, verfgt ber diese Oberflchen-Struktur, die in den folgenden Kapiteln erlutert wird.

1 = Navigationsleiste 2 = Universal-Buttons 3 = Such-Leiste 4 = Trefferliste 5 = Common-Bereich 6 = Registerleiste 7 = Detailbereich


Die Anordnung wurde ber die Jahre immer weiter verfeinert und hat sich in dieser Form bewhrt. Der Pfad fhrt von oben nach unten: zuerst whlen Sie das Modul (1), dann entscheiden Sie, ob Sie einen Datensatz mit Hilfe der Universal-Buttons (2) z. B. neu anlegen oder ber die Suche den Arbeitsvorrat (3) spezifizieren mchten. Das Ergebnis des Vorrats wird in der Trefferliste (4) darstellt. Darin markieren Sie eine Zeile, deren Details sich darunter im Common-Bereich (5) entfalten. Dieser wird weiter untergliedert in Register (6) und den restlichen Elementen (Felder, Buttons) (7). Welche Elemente, an welcher Stelle, wie in diese Struktur eingebunden werden, wird mit Hilfe von LIFs in einem komfortablen, visuellen Editor festgelegt.

Bedienelemente

43

5.2 Navigationsleiste

Navigationsleiste

Am oberen Fensterrand erstreckt sich die Navigationsleiste ber die gesamte Fensterbreite. Sie enthlt auf der linken Seite die Buttons der geffneten Module, beginnend mit dem Start-Modul und endend mit dem Hilfe-Modul. Das momentan aktive Modul ist dabei farblich hervorgehoben. Rechts befinden sich der ESC-Indikator und Root-Indikator (R).

ESC-Indikator

Drcken Sie im Mozilla Firefox (im Internet Explorer funktioniert dies nicht) die ESC-Taste, wird der ESC-Indikator aktiv. Drcken Sie nochmals ESC, wird er wieder deaktiviert. Ist der ESC-Indikator aktiviert, erwartet IntarS eine Folge-Taste. Drcken Sie z. B. die "1", wird der Cursor ins Combi-Suchfeld positioniert und der ESC-Indikator wird wieder deaktiviert. So sind eine Reihe von Folgetasten definiert, die den Cursor auf eine bestimmte Stelle positionieren. ESC leitet also eine zusammengesetzte Tastenkombination ein, so wie z. B. Ctrl-x bei Wordstar. Es knnen eigene Tastenkombinationen mit individuellen Sprungzielen definiert werden (s. Oberflche einrichten). Diese Cursor-Navigation ist wesentlich schneller, als den Cursor mittels Tabulator oder Maus zu positionieren. Sie ist Teil des Tastaturbedienkonzepts von IntarS. Die Standard-Folgetasten sind: 1 Combi-Suchfeld / Kommandofeld 2 numerisches Positionierfeld 3 alphanumerisches Positionierfeld 4 selektierter Satz in Trefferliste 5 erster unselektierter Satz in Trefferliste

Root-Flag
Besitzt der angemeldete Benutzer root-Rechte (uneingeschrnkte Rechte), erscheint rechts neben dem ESC-Indikator ein R. Bitte gehen Sie sehr vorsichtig mit diesem Recht um.

Hilfe
Das Hilfe-Modul ist Teil des Hilfe-Konzepts von IntarS (s. Hilfe). Es liefert eine sytembergreifende Sicht der Dinge, kann durchsucht werden, ist nach Themen gegliedert, erlutert Zusammenhnge, grundlegende Ideen und Konzepte. Daneben gibt es die Modulhilfe, die sich auf das jeweils aktive Modul bezieht und bis auf Feldebene hinunter dokumentiert. Tooltipps schlielich geben eine kurze Auskunft darber, welches Element sich unter dem Mauszeiger befindet. Ergnzend steht eine Offline-Dokumentation im Doc-Verzeichnis zu ausgewhlten Themen bereit, die sich jedoch an den Systemverwalter richtet. Die Hilfe wurde in einer Latex-hnlichen Sprache verfasst. Seine Gliederungsstruktur ist die des Hilfe-Directories. Sie knnen es selbst erweitern, indem Sie zustzliche Sub-Directories anlegen und Textfiles in UTF-8 Encoding hineinstellen. Mit "Import" wird die gesamte Struktur aus dem Filesystem gelesen, formatiert und in die Datenbank bernommen. Das Aussehen knnen Sie mit Styles einstellen (s. Stylesheets).

Bedienelemente

44

5.3 Universal-Buttons

Universal Buttons

Bei den Universal-Buttons handelt es sich um die Grundfunktionen. Fast jedes Modul verfgt ber diese Funktionen. Die Universal-Buttons lsen neben ihrer eigentlichen Standardaufgabe Events aus, in denen man eigene Funktionalitt einbringen kann (s. Events). Das gelingt mit IntarScript. Die Universal-Buttons werden immer an der gleichen Stelle in der gleichen Reihenfolge dargestellt (im Gegensatz zu modulspezifischen Buttons, die frei platziert werden knnen). Sie werden so gesteuert, dass nur die jeweils sinnvollen aktiv sind. Inaktive Buttons werden blass dargestellt. Die eigentliche Darstellung kann jedoch per Stylesheet individuell gewhlt werden.

Die Buttons im Einzelnen: Zurck (Alt-q)


Dieser Button ist aktiv, wenn es ein rufendes Modul gibt, von dem aus ins aktuelle Modul verzweigt wurde. (s. Navigation). Klickt man darauf, kommt man zum rufenden Modul zurck.

Neu (Alt-n)
Legt ein neues Objekt an und versorgt es mit Initialisierungswerten wie im Modell hinterlegt.

Dup (Alt-k)
Dupliziert das markierte Objekt. Es werden nur die Inhalte derjenigen Felder kopiert, die im Modell als "duplicate" markiert wurden. Dupliziert man z. B. einen Artikelstamm, will man dessen letzten Bestelltermin nicht mitduplizieren.

Lschen (Alt-r)
Lscht die markierten Objekte. Es knnen mehrere auf einmal gelscht werden. Vorher wird ggf. nochmals zur Sicherheit nachgefragt. Dies kann im Config-Modul eingestellt werden. Beim Internet Explorer ist die Tastatursteuerung nicht so annehmlich. Dort wird nur das Element fokussiert, aber nicht ausgelst. Wir empfehlen daher die Verwendung des Mozilla Firefox.

Sichern (Alt-s)
Sichert einen neu erfassten oder genderten Datensatz.

Merken (Alt-d)
Stellt die markierten Objekte in die Zwischenablage (s. Zwischenablage).

Abbrechen (Alt-z)
Nimmt nderungen zurck, solange nicht gesichert wurde. Es ist nur ein ein Schritt zurck. Der Datensatz wird wieder in den Zustand gebracht, wie er aus der Datenbank geholt wurde. Ein feineres Zurck bietet zustzlich der Firefox mit Ctrl-z. Solange die Daten nicht gesendet wurden (Return), kann jede Feldnderung Schritt fr Schritt zurckgenommen werden.

Bedienelemente

45

Aktualisieren (Alt-5)
Aktualisiert die Anzeige des markierten Satzes, indem er seine Daten neu aus der Datenbank holt. Dies wird nicht oft bentigt. Das System versucht selbststndig, immer aktuelle Daten zu zeigen.

C - Configuration (Alt-o)
Dies ist ein sehr wichtiger und hufig gebrauchter Button. Damit gelangen Sie in die Konfigurations-Sicht des Moduls. Es kann die komplette Oberflche frei eingestellt werden. Das kann jeder Benutzer mit entsprechender Berechtigung fr sich individuell vornehmen. Es gibt aber auch einen Mandanten- und Global-Standard. Trefferliste, Detailsicht sowie bestimmte Sonderbereiche eines Moduls bestimmen sich ausschlielich nach den dort hinterlegten Informationen. Diese werden in sog. Layout-Information-Files (.lif) gespeichert. LIFs bilden eine Teilmenge der aus dem Modell zur Verfgung stehenden Elemente auf die Oberflche ab unter Hinzufgung regelbasierender Formatier-Anweisungen. Diesem Thema widmet sich aber ein eigenes Kapitel "Oberflche einrichten".

+Diese beiden Buttons dienen der Verwaltung des persnlichen Mens (s. Persnliches Men). "+" nimmt das momentane Modul auf, "-" entfernt es wieder.

X
Mit diesem Button schlieen Sie das momentan geffnete Modul (s. Hauptmen).

5.4 Such-Leiste

Suchleiste zwischen Universal-Buttons und Trefferliste

_ Zuklappen (Alt-6)
Damit kann die Trefferliste zugeklappt werden, um Platz zu sparen. Will man z. B. mit der Tastenkombination "Alt-e" Satz fr Satz durchgehen, ist die Liste nicht von Interesse. Ein erneuter Klick darauf klappt die Liste wieder auf.

1 (multi-Selection an/aus)
Schaltet die multi-Selection an oder aus. Die Auswahl ist von Vorteil, wenn Sie z. B. mehrere Datenstze auf einmal lschen mchten.

S (Seite markieren)
Es werden alle Datenstze auf der angezeigten Seite der Trefferliste markiert.

A (alles markieren)
Markiert alle Datenstze in der Trefferliste.

<< Seite zurck (Alt-a)


Blttert eine Seite zurck, ohne die Markierung zu verndern (solange man sich im Fetchlimit bewegt).

Bedienelemente

46

- Satz zurck (Alt-w)


Positioniert einen Satz zurck. Die Markierung ndert sich. Es wird der vorhergehende Satz selektiert und im Detail angezeigt.

Eingabefeld "numerisch positionieren"


Der Cursor kann mit "ESC-2" platziert werden. Gibt man hier eine Zahl ein und drckt "Return", zeigt die Trefferliste die Seite, welche diesen Satz enthlt.

Eingabefeld "auf Suchbegriff positionieren"


Der Cursor kann mit "ESC-3" platziert werden. Hier ist ein Suchbegriff (z. B. Anfangsbuchstabe) einzugeben, zu dem positioniert werden soll. Es wird in der Spalte gesucht, die markiert ist. Beispielsweise knnte man die Kunden nach Name sortieren lassen (einfach auf die Namen-Spalte klicken). Gibt man dann den Buchstaben "M" ein und drckt "Return", wird auf die Seite positioniert, auf welcher der Name des ersten Kunden mit "M" beginnt.

+ Satz weiter (Alt-e)


Positioniert einen Satz weiter. Die Markierung ndert sich. Es wird der nchste Satz selektiert und im Detail angezeigt.

>> Seite weiter (Alt-g)


Blttert eine Seite weiter, ohne die Markierung zu verndern.

Information ber Selektion und Treffermenge


Hier meldet das System, wie gro die Treffermenge ist und wo genau man sich darin befindet.

Combi-Suchfeld
Universelles Suchfeld bzw. Kommandofeld, das hnlich wie Google funktioniert. Geben Sie das ein, wonach Sie suchen mchten. IntarS bezieht aus seinem Meta-Modell Informationen ber die Wichtigkeit und Reihenfolge von Suchfeldern und sucht in mehreren Schritten bis eine befriedigend groe Treffermenge vorhanden ist. Mit optionalen Steuercodes kann dieses Verhalten beeinflusst werden: +,++,+++ fr mehr Ergebnisse k fr Keyfelder t fr Textfelder - fr Prefix = fr exakte Suche Welche Felder in welcher Reihenfolge beim Suchen bercksichtigt werden, wird in der Modellverwaltung ber die Eigenschaft "Combisuchfeld" am Attribut gesteuert. Gibt man dort eine Ziffer 0...9 ein, wird das Feld mit dieser Ziffer in die Liste der Combisuchfelder aufgenommen. Ist der Primrschlssel das erste Feld in der Combisuchfeldliste, ist die initiale angestrebte Treffermenge 1, sonst 5. Wurde gar kein Feld als Combisuchfeld markiert, nimmt das System den Primrschlssel.

Bedienelemente

47

Such-Codes

Es knnen hier auch andere Kommandos eingegeben werden, die nichts mit Suchen zu tun haben. Ein ".m" gefolgt von einem Modulkrzel springt zu dem Modul, z.B. ".mdok" zum Modul Dokument. Im Event-Script knnen eigene Codes definiert werden, die frei definierbare Suchabfragen oder Verarbeitungen auslsen. Wird so ein Code ins Combi-Suchfeld eingegeben, wird nicht nach dem Code gesucht, sondern die Suchabfrage ausgelst. So ist im Projektmanagement-Modul der Code "1" definiert, um alle Vorgnge auer den erledigten und verworfenen zu ermitteln. Gibt man im Suchfeld ein "?" ein, werden die Codes mit ihrer Bedeutung aufgelistet. Der Cursor kann mit "ESC-1" auf das Suchfeld platziert werden. Die eigentliche Suche wird mit der "Return"-Taste ausgelst.

-f (Filter entfernen)
Dieser Button wird aktiv, sobald ein Filter gesetzt wurde. Sie knnen einen bereits gesetzten Filter ber diese Schaltflche wieder entfernen.

- (vorheriges Suchergebnis anzeigen)


Dieser Button wird aktiv, sobald Sie eine Suche ausgefhrt haben. Mchten Sie zu einer frheren Suche zurckkehren, ohne diese noch einmal im Combi-Suchfeld einzugeben, verwenden Sie diese Schaltflche.

gemerkte
Ruft die Zwischenablage auf (s. Zwischenablage). In der Zwischenablage knnen beliebige Objekte fr die weitere Verwendung dauerhaft abgelegt werden. Diese verbleiben so lange hier, bis sie explizit wieder daraus entfernt werden.

Weitere Elemente des Bereichs "_suchabfr"


Dies ist ein Bereich fr besonders wichtige Elemente, vorzugsweise Buttons, die eine spezielle Suche auslsen. Anstatt sich Codes fr das Suchen-Feld zu entwickeln, kann man alternativ neue Buttons kreieren (im Modell-Editor). Diesen Buttons erteilt man die gewnschte Such-Funktionalitt und platziert sie im Config-Modus in den Bereich "_suchabfr". Fortan tauchen sie dann hier in der Such-Leiste auf.

Bedienelemente

48

5.5 Abfragen
Das Abfragen-Plugin

Abfragen-Plugin zur Verwaltung und Ausfhrung von Abfragen

Jedes Modul hat im Systemreiter ein Abfragen(=Queries)-Plugin. Dort werden die fr dieses Modul angelegten Abfragen angezeigt. Abfragen sind ein Universalwerkzeug. Man kann damit Suchen, Filtern, Sortieren, Drucken, Exportieren und Navigieren. Jeder Benutzer kann Abfragen erstellen. Sie bleiben dauerhaft in der Datenbank sowie im File "queries.txt", welches unter SVN zu finden ist. IntarS wird mit einer Sammlung vordefinierter Abfragen ausgeliefert. Mit Klick auf "Abfragen" wird der Inhalt des Plugins refreshed. Mit Klick auf "verwalten" kommt man in die Abfragen-Verwaltung fr das momentane Modul. Eine Abfrage gehrt immer zu einem Modul. In den Zeilen des Plugins werden je nach Definition der Abfrage verschiedene Mglichkeiten angeboten: Mit Klick auf den Namen wird die Suche und Sortierung ausgefhrt und das Ergebnis in der Trefferliste anzeigt. Falls es sich um eine Navigations-Abfrage handelt, wird zustzlich vorher ins Zielmodul verzweigt. Mit Klick auf "F" wird ein weiterer Filter gesetzt, der die Anzeige der Trefferliste einschrnkt. Sobald ein Filter gesetzt ist, wird ein weiterer Button in der Suchleiste aktiv, um die Filter wieder schrittweise zu entfernen. Mit Klick auf "E" wird ein Daten-Export gestartet, mit "D" wird gedruckt. "E" und "D" werden nur angeboten, wenn in der Abfrage Spalten definiert sind.

Verwalten von Abfragen


Mit Klick auf "verwalten" kommen Sie in die Abfragen-Verwaltung fr das momentane Modul. Hier knnen Sie neue Abfragen fr das Modul anlegen, vernderen oder lschen. Es gibt private und ffentliche Abfragen. Wird das Feld "Benutzer" leer gelassen, ist es eine ffentliche Abfrage, jeder kann sie sehen und verwenden. Trgt man in das Benutzerfeld dagegen einen Benutzer ein, sieht nur dieser die Abfrage im Abfragen-Plugin. Der Administrator sieht alles.

Buttons
In der Abfragenverwaltung werden ebenfalls die Grundfunktionen "Ausfhren", "Drucken" und "Export" angeboten. Sie entsprechen denen im Abfragen-Plugin ("Name", "D", "E"). "Druck CQ" und "Export CQ" sind Sonderfunktionen. Sie verwenden zur Datenbeschaffung den Combined Qualifier (CQ) des Moduls statt der Where-Condition der Abfrage. Die Buttons "Feldhilfe" und "SQL-Hilfe" geben Untersttzung, indem sie im Feld "Feldhilfe" und "SQL-Hilfe" eine Liste aller Felder des Moduls samt mglicher Inhalte bzw. eine kleine bersicht hufig bentigter SQL-Funktionen einblenden. Der Button "Neu von TV" erzeugt eine neue Abfrage fr Druck und Export, wobei die Spaltendefinition aus der Tableview (TV) der Trefferliste abgeleitet wird. Es wird dann so gedruckt, wie es am Bildschirm zu sehen ist.

Bedienelemente

49

Name
Eindeutiger Name der Abfrage, wie er auch im Plugin zum Anklicken erscheint. Er darf Leerzeichen enthalten. Im Plugin wird nach Name sortiert. Will man eine bestimmte Reihenfolge, kann dies durch Voranstellen eines Sortierkriteriums, im einfachsten Fall eine Nummer, erreicht werden. Da Abfragen auch aus dem Kombisuchfeld mit ".q" plus eindeutig qualifizierendem Namensanfang ausgefhrt werden knnen, macht es Sinn, die Namen so zu vergeben, dass sie sich schon in den Anfangsbuchstaben unterscheiden. Also besser a Kunden b Kunden c Kunden als Kunden A Kunden B Kunden C

Ziel-Modul
Wird hier ein Modul eingetragen, wird die Abfrage zu einer Navigations-Abfrage. Klickt man auf ihren Namen, springt sie ins Zielmodul und wendet die Where-Condition dort an. Ein Beispiel: Aufruf der Kundenpreise ausgehend vom Kunde.

Tabelle
Wird vorbelegt mit der Tabelle des Moduls. Dies ist die Tabelle, von der gelesen wird und auf die sich die Feldnamen in der Where-Condition beziehen.

Where-Condition
Hier wird definiert, welche Daten fr die Abfrage verwendet werden sollen. In den meisten Fllen ist das eine SQL-Where-Condition wie z. B. warntext <> '' Auch so etwas funktioniert: \t letzterauf > DATE_SUB(CURRENT_DATE,INTERVAL 1 YEAR) Lsst man die Where-Condition leer, wird der combined Qualifier des Moduls stattdessen genommen. Will man explizit alle Datenstze haben, muss eine Where-Condition definiert werden, die immer wahr ist: 1=1 Wenn andere Tabellen mit gelesen werden mssen, lsst sich die Treffermenge nicht ber eine einfache Where-Condition beschreiben. In diesem Fall schreibt man in die Where-Condition eine komplette select-Anweisung, die als Ergebnis eine einspaltige Liste namens "k" (wie "key") mit den primary Keys liefert: select t1.kundennumm as k from vid_kunde t1 left join ga_keywords t2 on t1.kundennumm = t2.superid where t2.keywordid = 76 Intern fhrt IntarS dann eine weitere Suche aus: select .... where primary_key in (...). Fr Druck und Export kann die Datenbeschaffung auerdem in mehreren SQL-Statements unter Ausnutzung temporrer Tabellen und dem vollen SQL-Funktionsumfang erfolgen. Dazu muss das Flag "freies SQL" gesetzt werden. Zum Beispiel: drop table if exists wurde_uebernommen1; create temporary table wurde_uebernommen1 select sum(anzahl) as anz,artikelnum from vid_anposten where wurde_uebernommen = 'J' group by artikelnum ; alter table wurde_uebernommen1 add index i1 (artikelnum);

Bedienelemente

50

drop table if exists wurde_uebernommen2; create temporary table wurde_uebernommen2 select sum(anzahl) as anz,t1.artikelnum,t1.bezeichnun, t2.preis1 from vid_anposten t1, vid_lager t2 where t1.artikelnum = t2.artikelnum group by artikelnum; select t2.artikelnum,t2.anz as gesamt,IFNULL(t1.anz,0) as uebernommen,t2.bezeichnun, (IFNULL(t1.anz,0) / t2.anz) * 100 as conversionrate, IFNULL(t1.anz,0) * t2.preis1 as umsatz from wurde_uebernommen2 t2 left join wurde_uebernommen1 t1 on t1.artikelnum = t2.artikelnum order by umsatz desc limit 100; Die Felddefinition fr Druck/Export bezieht sich dann auf die Spalten der letzten select-Anweisung. Die Where-Condition kann mit Parametern versehen werden, die zum Zeitpunkt der Ausfhrung expandiert werden. kategorie = '03' and (empfaenger = '%@' or empfaenger = '' or owner = '%@') Hier sind zwei Parameter '%@' enthalten. Was dafr eingesetzt wird, muss im Feld "Parameter" definiert werden.

Parameter
Hier kommen die Namen von Parameterfeldern mit Kommata ohne Leerzeichen getrennt hinein, die in die Where-Condition eingesetzt werden sollen. Speziell fr Abfragen hat jedes Modul vier vordefinierte Universalparameterfelder, zwei fr Datum/Zeit und zwei freie Zeichenfelder. Sie sind im "System"-Register eingeblendet, knnen aber auch beliebig platziert werden. Die Namen lauten p_q_c1, p_q_c2, p_q_d1, p_q_d2 (..c1/...c2 character, ...d1/...d2 Datum). Sie sind in der Abfrageverwaltung als fester Text zum wegkopieren dargestellt. Daneben kann aber auf jedes beliebige Parameterfeld des Moduls genauso zugegriffen werden. Mit "_user" wird die Benutzerkennung des angemeldeten Users genommen. Mit dem Prefix "%selObj." und anschlieendem Feldname werden Felder des markierten Objektes im Modul angesprochen. Where-Condition: select distinct masterkey as k from vid_erposten where von_lieferun = '%@' union select nummer as k from vid_erechnung where von_lieferun = '%@' und Parameter: %selObj.nummer,%selObj.nummer Die Platzhalter fr Parameter in der Where-Condition sind %i fr Integer und %@ fr alles andere. Will man andere %-Zeichen in der Where-Condition unterbringen, mssen sie als %% escaped werden.

Sortierung
Damit wird die Sortierung der Trefferliste bzw. der Druck/Export-Ausgabe beeinflusst. Die Feldnamen der Spalten sind mit Kommata getrennt ohne Leerzeichen aufzufhren. Ein an den Feldnamen angehngtes ":d" bewirkt eine absteigende (desc) Sortierung. Ein Beispiel: plz,name sortiert die Trefferliste nach Postleitzahl und innerhalb der Postleitzahl nach Name. So kann erreicht werden, dass die Trefferliste nach mehr als einer Spalte sortiert wird (beim Klicken auf den Spaltentitel der Trefferliste kann dagegen nur nach der einen Spalte sortiert werden). Dies wird von den Sortierungs-Buttons S1, S2, ... genutzt. Sie rufen jeweils eine Abfrage _sortierung1, _sortierung2, etc. auf, das die Sortierspalten setzt.

Bedienelemente

51

Lsst man das Sortierungsfeld leer, ndert das Plugin die Sortiereinstellungen nicht. Bei freiem SQL kommt das Sortierung-Feld nicht zur Anwendung. In diesem Fall ist die Sortierung ber die "order by"-Klausel im SQL anzugeben.

Felder fr Druck/Export
Soll eine Abfrage drucken oder exportieren knnen, sind hier die Feldnamen der Spalten durch Kommata und ohne Leerzeichen getrennt aufzufhren. Ohne diese Feldnamen wird im Abfragen-Plugin kein "E" oder "D" angeboten. Es mssen die internen (Datenbank-)Feldnamen angegeben werden: masterkey,artikelnum,anzahl,einzelprei Fr den Druck knnen mit ":" getrennt maximal drei Formatieranweisungen an die Feldnamen angehngt werden. 1. 2. 3. z.B.: datum:200:d:Datum Normalerweise nimmt der Druck diese Informationen aus der Attributdefinition des Datenmodells, die Formatangaben sind dann optional. Felder, die jedoch nur durch das select-Statement erzeugt werden (z. B. durch Funktionen oder Ausdrcke), bentigen diese Formatangaben zwingend. Breite in 1/10 mm Datentyp: c = char, i = integer, m = money, d = date Spaltentitel

Nur Summen
Gilt nur fr den Druck. Es werden nur (Zwischen-)Summenzeilen ausgegeben.

Listendruck
Gilt nur fr den Druck. Wenn angehakt, werden die Daten als Liste mit Spaltenberschriften gedruckt. Wenn es aufgrund der Breite ntig wird, wird es automatisch im Querformat ausgegeben. Falls es immer noch zu breit ist, werden die rechten Spalten abgeschnitten. Ist es nicht angehakt, wird jeder Datensatz vollstndig fr sich mit allen Feldern zweispaltig gedruckt. Vor jedes Feld kommt die Feldbezeichnung und Text-Felder werden als Flietext gedruckt.

Freies SQL
Die Where-Condition (s. oben) wird als freies SQL interpretiert. Nur fr Druck und Export.

Limit
Hier kann ein Limit analog der SQL-Limit-Klausel eingetragen werden. Damit kann beim Testen die Ausgabe beschrnkt, aber auch mit entsprechender Sortierung Top-xxx-Listen erzeugt werden. Wird freies SQL verwendet, hat dieses Flag keine Bedeutung; vielmehr ist dann das Limit direkt im SQL zu definieren.

Seitenvorschub
Nur fr Druck. Hier kann angegeben werden, nach welcher Gruppenwechsel-Ebene der Sortierfelder ein Seitenvorschub erfolgt. Default ist 0, es wird kein extra Seitenvorschub erzeugt. Ist die Sortierung z. B. holznr,lw_artnr,oberflnr und steht in Seitenvorschub eine "1", wird fr jede "holznr" eine neue Seite angefangen.

Bedienelemente

52

Button-Nr.
Diese Angabe dient dazu, die Abfrage als Button fr die Oberflche im Modul verfgbar zu machen. Wird eine Nummer > 0 eingegeben, werden zwei Buttons erzeugt, einen fr Suchen und einen fr Filtern. Das bietet sich fr Abfragen an, die man sehr hufig benutzt.

Summenfelder
Nur fr Druck. Hier werden durch Kommata und ohne Leerzeichen die Feldnamen getrennt aufgefhrt, deren Inhalte summiert und in (Zwischen-)Summenzeilen ausgegeben werden sollen.

Zwischensummen
Nur fr Druck. Hier kann angegeben werden, nach welcher Gruppenwechsel-Ebene der Sortierfelder eine Zwischensummenzeile erfolgt. Default ist 0, es werden keine Zwischensummen gedruckt. Ist die Sortierung z. B. artbez,lw_artnr,holznr,oberflnr und steht in Zwischensummen eine "2" wird fr jede neue "artbez" und "lw_artnr" eine Zwischensummenzeile gedruckt.

Bemerkung
Freies Feld, um alles Wissenswerte ber die Abfrage hinein zu schreiben. Der Anfang hiervon wird im Abfragen-Plugin angezeigt.

Feld-/SQL-Hilfe
Hier werden Feld-Dokumentation und SQL-Hilfe angezeigt, wenn auf den entsprechenden Button geklickt wurde.

Button "Felder whlen"


ffnet eine bersicht ber alle Felder der Tabelle, fr welche die Abfrage ist. Durch Anklicken sammelt man sich die Felder zusammen, um sie z. B. fr Druck/Export, Sortierung oder Summenfelder zu verwenden.

didPrint Script
Nur fr Druck. Hier kann der Name eines Scripts angegeben werden, das nach dem Druck eines Datensatzes aufgerufen wird. Das Script hat Zugriff auf den vollen Variablenraum. Man kann damit noch weitere Druckausgaben erzeugen, die ber die Funktionalitt der Abfrage hinausgehen, z. B. Bilder andrucken, farbliche Hervorhebungen etc.

Bedienelemente

53

5.6 Trefferliste

Trefferliste

Die Trefferliste (oder auch Auswahlliste) ist das Ergebnis von Such- und Filtervorgngen. Sie enthlt standardmig maximal 100 Objekte, auch wenn die Treffermenge grer ist. Es wrde die Performance zu sehr belasten, alle Objekte zu laden, zumal nur einzelne daraus dann tatschlich bearbeitet werden. Deshalb werden nur die geladen, die man zum Fllen der Trefferliste bentigt und ein paar mehr auf Vorrat, sodass flssig geblttert werden kann. Wird noch weiter geblttert, holt das System den nchsten Block von 100 (das sog. Fetchlimit) Objekten aus der Datenbank. Das Fetchlimit kann im Config-Modul eingestellt werden. Die Trefferliste zeigt 10 (einstellbar im "Config"-Modul) Datenstze der Treffermenge. Sie dient der Navigation innerhalb der Treffermenge und bietet einen schnellen berblick. Beim ersten Aufruf eines Moduls wird normalerweise eine initiale Suche durchgefhrt, welche die Trefferliste fllt und auf den ersten Satz positioniert. Dieses Verhalten lsst sich jedoch in der Modulverwaltung ndern, was bei Tabellen mit sehr vielen Stzen anzuraten ist. Man kann nach Spalten auf-/absteigend sortieren, indem Sie auf den Spaltentitel klicken. Die Sortierspalte ist farblich hervorgehoben und hat ein "+" oder "-" vorangestellt. Im Config-Modus lsst sich benutzerdefiniert einstellen, welche Felder in welcher Reihenfolge und Breite angezeigt werden sollen. Diese Information wird im Layout-Information-File (LIF) gespeichert. Klicken Sie auf eine Zeile der Trefferliste, wird dieser Satz im Detail dargestellt und kann editiert werden (sofern Sie die Editierberechtigung haben und zustzlich noch ein paar weitere Bedingungen erfllt sind). Vor jeder Zeile steht ein ">" und es kann folgendermaen per Tastatur selektiert werden: "Esc-4" positioniert den Cursor auf den markierten Satz. "Esc-5" positioniert den Cursor auf den ersten nicht markierten Satz. ">" und "Return" selektiert den Satz. "Tab" positioniert den Cursor auf den nchsten Satz. "Shift-Tab" positioniert den Cursor auf den vorhergehenden Satz.

Die Trefferliste lsst sich zuklappen oder erweitern (indirekt durch Zuklappen des Detailbereiches). Die Lnge der erweiterten Trefferliste wird im "Config"-Modul eingestellt. In der Trefferliste kann seiten- und satzweise geblttert werden. Man kann in der Trefferliste nach Zeilennummer und Suchbegriff positionieren. Trefferlisten knnen noch weitere Statusinformationen durch die Zeilenfarbe signalisieren.

Bedienelemente

54

5.7 Common-Bereich

Der Common-Bereich im Kundenstamm

Der Common-Bereich ist ein Bereich unter der Trefferliste und ber dem Register. Er zeigt besonders wichtige Felder des gewhlten Datensatzes an, unabhngig davon, welches Register gerade ausgewhlt ist. Mchten Sie die Kundennummer z. B. immer im Blick haben, egal ob sonst das Adress- oder Memo-Register angewhlt ist. Im Config-Modus kann jeder Benutzer die Befllung des Common-Bereiches fr sich einstellen. Dazu positioniert er die gewnschten Felder oder Buttons ins Register "_common". Module, die ber keine Register verfgen, wie z. B. der generische Positionseditor, haben alle Elemente im Common-Bereich.

5.8 Detailbereich

Der Detail-Bereich im Projektmanagement

Im Detailbereich werden die Datenelemente des markierten Satzes dargestellt. Zustzlich finden sich hier die weiteren Elemente, welche das Metamodell fr das Modul bereithlt. Dies knnen Buttons, Plugins, Parameteroder Modul-Felder sein. Zur weiteren Untergliederung der u. U. zahlreichen Elemente dient die Register-Leiste. Register werden im Config-Modus verwaltet, angelegt, gelscht, umsortiert und mit Elementen befllt. Die Elementdefinitionen stammen aus dem Modell. Es kann nichts an der Oberflche gezeigt werden, was nicht zuerst im Modell definiert wurde.

Bedienelemente

55

Welche Elemente an welcher Position erscheinen, legt das LIF fest. Es gibt 2 Ebenen von LIFs: Benutzer und Mandant. In dieser Reihenfolge wird das speziellste gesucht und angewendet. LIFs bringen Formatieroptionen mit ins Spiel. Beispielsweise kann Elementen die "class" gesetzt werden, welche ber das Stylesheet Farbe und andere Eigenschaften steuert. Auch der Fluss der Elemente kann im LIF beeinflusst werden. Zusammen mit den globalen Layout-Einstellungen im "Config"-Modul erzeugt die Layout-Engine eine dynamische Oberflche (mittels floating Block-Level Elementen).

Derselbe Detail-Bereich bei breiterem Fenster

Elemente werden von ihr immer relativ positioniert. Die tatschliche Anordnung ergibt sich im Browser, abhngig von der Fenstergre. Die Darstellung in obiger Abbildung wurde alleine durch Breiterziehen des Browser-Fensters erzielt. Die Layout-Engine gehrt neben der Repository-Technik mit zu den ltesten Bereichen des Systems. In den spten 90er Jahren, als Desktop-Applikationen aktuell waren, erzeugte sie schon OpenStep View-Hierarchien aus dem Datenmodell. Ohne sich um HTML kmmern zu mssen und ohne sich in Details zu verzetteln, gelingt mit der LIF-Technik ein ansprechendes Layout, dessen Look-and-Feel durch zentrale Parameter und Stylesheets gesteuert wird. Dies geschieht in Echtzeit whrend des Gesprchs, ist sofort sichtbar und einsatzfhig.

5.9 System-Register

Inhalt des System-Registers

Das Register "System" bietet dem normalen Benutzer Statistik-Felder (wer hat wann den Satz zuletzt gendert?) und generische Funktionen. Natrlich kann man die Felder im Config-Modus auch anders verteilen. Dem Administrator stehen weitere Werkzeuge zur Verfgung. In dem Temp-Script-Feld knnen IntarScripts eingegeben und ausgefhrt werden, z. B. um Daten zu reparieren. Es kann aber auch direkt ins System eingegriffen werden, Variablen abgefragt bzw. gesetzt werden, Methoden knnen aufgerufen werden usw. Wer sich im intern in IntarS auskennt, kann hier alles machen. Auen herum ist eine Skriptverwaltung aufgebaut. Man

Bedienelemente

56

kann Tempscripts laden, speichern, auflisten, editieren und ausfhren. Weitere Buttons untersttzen den Administrator, indem sie Skript-Rmpfe generieren, die kontextbezogen bereits die verfgbaren Felder enthalten.

5.10 Felder
Allgemein
Alle Felder, die ein Modul darstellen kann, sind in der Tabelle, die dem Modul zugeordnet ist, im Meta-Daten-Repository hinterlegt und in ihren Eigenschaften festgelegt. Der Begriff "Tabelle" geht dabei ber die Datenbanktabelle hinaus. Vielmehr ist es ein Container, der Felder verschiedener Art, darunter auch Datenbankfelder, enthlt. Es gibt aber auch Tabellen im Repository, die gar keine Datenbankfelder enthalten. Die Datenbankstruktur wird aus dem Repository abgeleitet und vom System angelegt und gepflegt, wenn man etwas im Repository editiert. Feldeigenschaften im Repository umfassen u. a. den Feldtyp, Datentyp, Werteliste, Initialisierungswert, Schlsseleigenschaften, Hinweise fr Suchen und Beschreibung, Flags fr geschtzt, sichtbar und kopierfhig, Pflichteingabe, Oberflchenname und Dokumentation in verschiedenen Sprachen, Relation, Referenz (Wiederverwendung von Feldgruppen), Skript zur Ermittlung des Feldwertes oder zur Ausfhrung einer Funktion oder Druckausgabe. Zur Laufzeit knnen manche Eigenschaften dynamisch umgesteuert werden. Das geschieht in Skripts, die sich in Events einhngen. So knnen kontextabhngig Elemente ein- und ausgeblendet, sowie gesperrt und entsperrt werden. Felder knnen im Meta-Datenmodell erlaubt werden. Pro Gruppe (Rolle) steuert ein Flag, ob das Feld fr die Gruppe vorhanden ist oder nicht.

Datenfelder
Die meisten Felder entsprechen einem Attribut einer Datenbanktabelle. Eine objektrelationale Mapping-Technik (ORM) sorgt dafr, dass die Datenbankinhalte ins System, an die Oberflche und auch wieder zurck kommen. Es gibt verschiedene Typen von Datenfeldern: Character, Memo, Money, Integer, Date, Datetime, Float und Bool. Entsprechend ihrem Typ verhalten sie sich unterschiedlich. Numerische Felder haben eine eingebaute Taschenrechnerfunktion. Geben Sie z. B. in einem Money-Feld =100 * 1,19 ein und drcken die Taste "Return", wird daraus ein 119,00 Datumsfelder beinhalten ebenfalls Rechenmglichkeiten. Steht in einem Datumsfeld z. B. 27.09.2006 und Sie schreiben "+2w" ("plus 2 Wochen") dahinter, macht das System nach der Bettigung der Taste "Return" daraus ein 11.10.2006 Das Datum kann in einer Vielzahl von Formaten eingegeben werden. Das Jahr ist immer optional und kann 2oder 4-stellig sein. Hier die verschiedenen Mglichkeiten: TT.MM.YYYY TT.MM.YY TT.MM TTMMYYYY TTMMYY TTMM WW t = Tagesdatum n = Jetzt (now), Tagesdatum mit Uhrzeit fr Datetime-Felder

Bedienelemente
Rechenmglichkeit: [bestehendes Datum]{+,-}[%i][{m,y,q,w}][{f,l}] anzahl; nix -> 1 month,year,quarter,week; nix -> day; f = first, l = last; nix -> exakt;

57

Tagesdatum mit Offset; %i =

Gibt man in einem Datumsfeld einen Punkt (".") ein und drckt die "Return"-Taste, wird auf den Kalender verzweigt, in welchem man die bereits eingetragenen Termine sieht. So kann man sich ein geeignetes Datum heraussuchen, das nicht in Konflikt mit anderen Terminen steht.

Memofelder
Memofelder bieten bis zu 64 KB Eingabetext. Man kann darin problemlos editieren. Allerdings ist es fr anspruchsvollere Editiervorgnge anzuraten, den Text in einen Editor herauszukopieren, dort zu bearbeiten und dann wieder einzufgen. Ein "$$t" im Memofeld wird beim Speichern zum aktuellen Tagesdatum mit Uhrzeit.

Parameterfelder
Parameterfelder haben keine Entsprechung in der Datenbank. Sie dienen der Parameterbergabe an Funktionen. Skripte knnen auf ihre Inhalte zugreifen. Ansonsten haben Parameterfelder alle Oberflchen-Eigenschaften normaler Felder. Parameterfelder finden sich beispielsweise im "System"-Register eines jeden Moduls zur Verwaltung der Temp-Scripte.

Gescriptete Felder
Diese haben ebenfalls keine Entsprechung in der Datenbank. Ihr Inhalt, wie er an der Oberflche zu sehen ist, wird dynamisch mit einem Skript ermittelt. So z. B. das Feld "Saldo" in Auftragsposition, das die Disposituation darstellt: %*.artikelnum.saldo Erklrung: die Relation zum Artikelstamm ber die Artikelnummer wird verfolgt und von dort der Saldo geholt (flattened Relationship). Ist die Ermittlung des Rckgabewertes aufwndiger und werden mehr Skript-Zeilen bentigt, wird der Rckgabewert mit der Variablen $_rv zurckgegeben: if %*.text_artikel,eq,J $_rv,=,"<span class="descrArea3">Text</span> else if %*.lagerfaehig,eq,J if %*.stl_vorhanden,eq,J $_rv,=,"<span class="descrArea3">Fertigung</span> else $_rv,=,"<span class="descrArea3">physischer Artikel</span> endif endif endif

Informationsfelder
Diese selten verwendeten Felder zeigen einen Wert aus dem Inneren des Systems an. Es sind reine Anzeigefelder ohne Bezug zu einem Datensatz.

Bedienelemente

58

5.11 Buttons

verschiedene Buttons

Buttons lsen eine Verarbeitung aus, wenn man sie anklickt. Zuerst werden die Bildschirm-Eingabe-Daten zum Server geschickt, dann validiert und anschlieend evtl. die Verarbeitung durchgefhrt. Buttons knnen mit einem Tastatur-Shortcut versehen sein. Man kann Buttons auch auslsen, indem man die "Tabulator"-Taste bettigt und dann die "Return"-Taste drckt. Alle Buttons in IntarS sehen gleich aus, was ber das zentrale Stylesheet gesteuert wird. Positioniert man mit der Maus auf einen Button, wird dieser farblich hervorgehoben. Steht der Mauszeiger mindestens 2 Sekunden lang auf einer Schaltflche still, erscheint eine kleine Erklrung, was der Button auslst. Buttons werden wie Felder in der Layout-Konfigurations-Sicht platziert und im Meta-Datenmodell berechtigt. Meist liegt hinter einem Button ein Script, in dem die Verarbeitung implementiert ist. Kleine Skripte knnen auch direkt im Meta-Datenmodell am Button hinterlegt werden. Grere liegen an der laut Konvention dafr vorgesehenen Stelle im Filesystem und der Pfad dorthin wird im Meta-Datenmodell hinterlegt. Manche Buttons werden kontextabhngig aktiv/inaktiv gesteuert bzw. ein-/ausgeblendet.

Bedienelemente

59

5.12 Tastaturkrzel
Firefox 2.x
Ab Firefox 2.0 hat sich die Tastaturbelegung gendert. Will man wie gewohnt weiter mit der "Alt"-Taste arbeiten, muss er folgendermaen umkonfiguriert werden: 1. 2. 3. Geben Sie about:config in die Adressleiste ein und drcken Sie Return. Filtern Sie nach "contentAccess". Doppelklicken Sie auf den verbliebenen Listeneintrag und geben Sie "4" ein (statt dem Defaultwert "5").

Die wichtigsten Tastatur-Krzel im berblick _ Zuklappen: "Alt-6" << Seite zurck: "Alt-a" >> Seite weiter: "Alt-g" - Satz zurck: "Alt-w" + Satz weiter: "Alt-e" Suchen: "Alt-f" ZuGe "zuletzt genderte": "Alt-h" "ESC" und
"1" Combi-Suchfeld / Kommandofeld "2" numerisches Positionierfeld "3" alphanumerisches Positionierfeld "4" selektierter Satz in Trefferliste "5" erster unselektierter Satz in Trefferliste

Zurck: "Alt-q" Duplizieren (Dupl): "Alt-k" Loeschen: "Alt-r" Sichern: "Alt-s" Merken: "Alt-d" Undo: "Alt-z" Akt: "Alt-5" Feld weiter: "Tab"

Bedienelemente

60

Feld zurck: "Shift-Tab" Daten an Server senden: "Return"


Weitere Tastaturkrzel knnen Sie modulbezogen herausfinden, indem Sie den Mauszeiger auf einen Button platzieren und den Tooltipp beachten.

die wichtigsten Tastenkombinationen Windows


[Tab] = nchstes Feld / Oberflchenelement [Shift][Tab] = vorheriges Feld / Oberflchenelement [Strg] + [a] = Alles Auswhlen (all) [Strg] + [c] = Auswahl kopieren (copy) [Strg] + [d] = Auswahl aufheben (deselect) [Strg] + [i] = Auswahl umkehren (invert) [Strg] + [p] = Drucken (Print) [Strg] + [v] = Einfgen (Paste) [Strg] + [x] = Ausschneiden (Cut) [Strg] + [z] = rckgngig machen (Undo) [Strg] + [rechts] = ein Wort weiter nach rechts [Strg] + [links] = ein Wort weiter nach links [Strg] + [Shift] + [rechts] = ein Wort nach rechts markieren [Strg] + [Shift] + [links] = ein Wort nach links markieren [Strg] + [Tab] = vorwrts zwischen geffneten Fenstern innerhalb eines Programmes wechseln [Strg] + [Shift] + [Tab] = rckwrts zwischen geffneten Fenstern innerhalb eines Programmes wechseln [Alt] + [Tab] = zwischen offenen Tasks/Programmen umschalten [Alt] + [Shift] + [Tab] = rckwrts zwischen offenen Tasks/Programmen umschalten

Firefox
(s. auch http://support.mozilla.com/de/kb/Keyboard+shortcuts?style_mode=inproduct) [Strg] + [t] = neues leeres Tab [Strg] + [w] = Tab schlieen [Strg] + [+] = Schrift grer [Strg] + [-] = Schrift kleiner [Strg] + [0] = Schrift normal F5 = Seite neu laden F6 = Cursor in Adressleiste positionieren F11 = Vollbild an/aus

Oberflche einrichten

61

6 Oberflche einrichten
6.1 Konzept
Die Bedienoberflche in IntarS ist nicht fest programmiert, sondern kann frei konfiguriert werden. Das Meta-Datenmodell gibt den Vorrat an Oberflchenelementen (Buttons, Felder, Plugins etc.) vor, aus welchem man sich bedienen kann. Jedes Modul bentigt eine Oberflchenkonfiguration. Technisch wird diese in sog. LIFs gespeichert. Ein LIF enthlt die Informationen, welche Spalten in welcher Reihenfolge und Breite die Auswahlliste enthlt. Auerdem ist im LIF definiert, welche Register der Detailbereich in welcher Reihenfolge anzeigt und welche Oberflchenelemente in welcher Reihenfolge in den Registern liegen. Darberhinaus kann ein LIF noch Steuercodes enthalten, welche die Darstellung beeinflussen (z.B. <br> fr einen Zeilenumbruch). Mit einem komfortablen und sehr effizient zu handhabenden grafischen Editor wird das Layout eingestellt. Es wird lediglich vorgegeben, welche Elemente wie gruppiert angezeigt werden sollen sowie bei Bedarf ein paar Steuerinformationen platziert. Den Rest bernimmt das regelbasierende Layoutengine. Im "Config"-Modul werden systemweite Regeln und Geometrievorgaben eingestellt. Diese knnen mit LIF-Steueranweisungen im Bedarfsfall im Modul abgendert werden. Das tatschliche Erscheinungsbild schlielich ist im CSS-Stylesheet definiert. Den Rahmen fr das Oberflchen-Rendering bildet das Template (.htmlwod-Dateien). Die meisten Module haben das default-Template. Die Oberflche passt sich automatisch der Fenstergre an, indem die Elemente dynamisch flieen. Die Vorteile der LIF-Technik sind: konsistentes Layout zentral zu beeinflussen (CSS, Regeln) flexibel (Steueranweisungen, Regeln berschreibbar) sehr effizient, keine Pixel- und HTML-Tftelei Aufgabenbereiche und einzelne Benutzer haben ein optimal angepasstes Bild In der Benutzerverwaltung (s. dort) kann bestimmt werden, ob ein Benutzer ein eigenes Layout haben darf oder das eines anderen Benutzers im Read-Only-Zugriff verwendet. Der Administrator besitzt immer ein eigenes Layout, es ist das Default-Layout des Systems. Der Inhalt eines LIFs ist in IntarS in subversion-freundlichen Textdateien abgelegt.

Oberflche einrichten

62

6.2 Config-Modus

Der C-Button

Mit dem "C"-Button bzw. der Tastenkombination "Alt-o" gelangen Sie in den Config-Modus eines Moduls. Nur Benutzer, die ein eigenes LIF haben drfen, haben diesen Button zur Verfgung! Klicken Sie darauf, erhalten Sie folgende Ansicht, hnlich folgender Abbildung:

Im Config-Modus

Es sind folgende Dinge zu sehen: Ganz oben links steht der Modulname, sodass Sie jederzeit wissen, welches Modul Sie gerade konfigurieren. In der nchsten Zeile sind eine Reihe von Buttons, mit welchen Sie verschiedene Config-Aktivitten auswhlen knnen. "Liste" zeigt die Trefferliste. "Detail" zeigt die Detailsicht mit den Registern. "LIF" ffnet das LIF, das frei editierbar ist. Sie knnen zwischen LIFs kopieren, aus verschiedenen Quellen laden und speichern. Dies drfen jedoch nur Administratoren. "Preview" zeigt das Ergebnis der Konfigurations-Bemhungen vorab, ohne es dauerhaft zu speichern. "Fertig!" speichert die momentane Konfiguration und kehrt zur normalen Arbeitsansicht zurck. "abbrechen" verwirft die bislang gettigten Konfigurationsaktionen. Schlielich kommen, je nach gewhlter Ansicht ("Liste", "Detail", "LIF"), unterschiedliche Editier-Werkzeuge (s. folgende Kapitel).

Oberflche einrichten

63

Der Config-Modus merkt sich den Zustand, in welchem er zuletzt verlassen wurde. Im Detailmodus wird versucht, das im Modul gerade aktive Register auszuwhlen. Der Config-Modus ist weitgehend mit Tastatur bedienbar. Das System teilt Ihnen die Tasten-Kombinationen ber den Tooltipp mit, wenn sie den Mauszeiger auf den Button positionieren.

6.3 Trefferliste einstellen

Trefferliste einstellen

Klickt man im Config-Modus auf "Liste", zeigt sich ein Bild hnlich wie in obiger Abbildung zu sehen. Die ersten zwei Zeilen sind gleich geblieben. Darunter sehen Sie nun zwei Listen. Links die eingeblendeten und in der Trefferliste ("Eingeblendet") sichtbaren Spalten, rechts die verbliebenen gem Meta-Datenmodell. Um weitere Spalten einzublenden, werden sie aus der Vorratsliste ("Ausgeblendet") mittels des "< < < <"-Buttons in die linke Liste geholt. Umgekehrt werden mit dem "> > > >"-Button Spalten aus der Trefferliste entfernt. Sie erscheinen dann rechts in der Vorratsliste wieder. Man kann in den Listen jeweils mehrere Spalten markieren und auf einmal ein-/ausblenden. Den Einfgepunkt neu einzublendender Spalten markiert man in der linken Liste durch Anklicken einer Zeile, vor welcher eingefgt werden soll. Die Namen sind die Oberflchennamen in der eingestellten Sprache des angemeldeten Benutzers. Dahinter steht in runden Klammern der interne dbName des Elements. In der rechten Spalte steht danach in eckigen Klammern der Inhalt des momentan markierten Datensatzes fr das jeweilige Element. In der linken Spalte der aktiven Elemente steht hinter dem dbName die Breite. Steht sie in Klammern, ist es die vom System vorgeschlagene, unvernderte Breite in Pixeln. Abgenderte Breiten stehen mit Doppelpunkt abgetrennt dahinter. Man kann die Spaltenbreite ndern, indem man das gewnschten Element markiert, im Feld "Breite verndern" die gewnschte Breite eingibt und die "Return"-Taste drckt. Unsinnige Angaben werden dabei vom System auf Maximal- bzw. Minimal-Werte korrigiert.

Oberflche einrichten

64

Die Reihenfolge der eingeblendeten Spalten kann beeinflusst werden, indem ein Element markiert wird und mit den "---"/"+++"-Buttons unter "Reihenfolge verndern" nach unten/oben verschoben wird. Alternativ kann man die neue Position in das Eingabefeld eingegeben. Dieses befindet sich zwischen dem "---"- und "+++"-Button. Besttigen Sie mit der "Return"-Taste. Neben der absoluten Position (Zeilennr.) kann auch eine relative Position mit vorangestelltem "+" oder "-" angegeben werden.

6.4 Detailbereich einstellen


Hier wird der Detailbereich eines Moduls eingestellt. Dieser gliedert sich in Register. In den Registern liegen die Elemente aus dem Meta-Datenmodell und Steueranweisungen. Die Sicht unterteilt sich grob in drei Spalten: links die Register, in der Mitte die Elemente, welche im Register liegen und rechts der Vorrat von Elementen und Steueranweisungen, die positioniert werden knnen.

Registerverwaltung
Ein Register wird editierbar, indem man es anklickt. Es hat drei Felder, die durch "|" getrennt sind: "a" bedeutet "automatisch gerendertes Register". Das zweite Feld ist die Sortiernummer. Sie beeinflusst, in welcher Reihenfolge die Register dargestellt werden. Das dritte Feld ist der Registername, wie er auch auf der Oberflche erscheint und ggf. in die eingestellte Sprache des angemeldeten Benutzers bersetzt wird. Hinter einem ausgewhlten Resister befindet sich der "L" Button, mit dem das Register gelscht werden kann. Es wird dabei nur das Register gelscht, keine Daten oder Felder. Alles, was in diesem Register war, steht weiterhin auf der rechten Seite im Vorrat zur Verfgung. Neben den "a"-Registern gibt es feste Register, die nicht gelscht oder umbenannt werden knnen. Dies sind: _common: der Bereich, der ber den Registern liegt und immer zu sehen ist. _suchabfr: der Bereich hinter den Suchbuttons in der Suchenleiste; hier gehren hufig bentigte Buttons hin.

Unter den vorhandenen Registern liegt das Feld fr die Neuanlage. Die a|nn|xxxx-Syntax muss dabei eingehalten werden. Die farbigen Buttons Class=1 bis 6 fgen eine Steueranweisung vor dem ausgewhlten Element ein, womit dieses genau so eingefrbt wird. Die Farb-Klassen werden im zentralen Stylesheet ...Resources/Aprica_template.css definiert. Der "Zeilenumbruch"-Button (Alt-x) darunter fgt einen Umbruch vor dem ausgewhlten Element ein. Weitere Formatieranweisungen befinden sich rechts in der Vorratsspalte; von dort knnen sie nach links ins gewhlte Register geholt werden.

Felder im Register
Hier ist der Inhalt des gewhlten Registers zu sehen. Hier steht nochmal der Name des Registers. Beim Eintritt in den Config-Modus versucht das System, das momentan aktive Register des Moduls fr die Verwaltung auszuwhlen, sodass man direkt ndern kann. Die Zeilen in der Liste haben eine vorangestellte Zeilennummer als Anhaltspunkt beim Positionieren (Reihenfolge ndern). Dahinter kommt der Oberflchenname, dann der interne dbName und schlielich der momentane Inhalt des Elements. Man entfernt Elemente aus dem Register, indem man sie markiert (Mehrfachauswahl wird untersttzt) und auf den ">>>>"-Button klickt. Alternativ kann man auch die Tastenkombination "Alt-r" drcken. Die Felder werden nicht gelscht, sondern erscheinen nun nicht mehr an der Oberflche. Ebenso werden keine Daten gelscht. Unterhalb der Liste befinden sich zwei Buttons ("---" und "+++") und ein Eingabefeld, um die Reihenfolge der Elemente zu ndern. Durch Eingabe einer absoluten Zeilennummer wird das gewhlte Element dorthin platziert. Eine relative Angabe mit "+" oder "-" verschiebt das Element.

Oberflche einrichten

65

Ganz unten gibt es ein Feld, um die markierte, editierbare Steueranweisung zu ndern. Es gibt editierbare Steueranweisungen, z. B. <zeilen...>. Markiert man eine solche und klickt "edit" oder drckt die Tastenkombination "Alt-e", wird sie in das Feld gestellt und der Cursor darauf positioniert. Nun kann man die Parameter ndern und mit der "Return"-Taste bernehmen. Das letzte Element der Liste heit "<Ende>". Es kann nicht entfernt oder verschoben werden. Es ist dazu da, Elemente ans Ende zu platzieren. Stellt man den Cursor als Einfgemarke darauf, wird es vor "<Ende>" und hinter allen anderen Elementen eingefgt. Um etwas einzufgen, muss es in der rechten Liste markiert werden und mit dem "<<<<"-Button oder der Tastenkombination "Alt-a" nach links geholt werden.

Verfgbare Felder und Steueranweisungen


Diese Liste enthlt alles, was vom Meta-Datenmodell her definiert und fr das der momentane Benutzer berechtigt ist, zuzglich einer Reihe von Steueranweisungen (auch "tags" genannt). Die Steueranweisungen erkennt man an der "<...>" Markierung. Sie stehen immer oben. Flags ber der Liste ermglichen das Filtern dieser. GUI - Sortiert nach guiName; wird es angeklickt, wird nach dem Oberflchennamen sortiert. Aus "GUI" wird dann "DB". Entsprechend wird auch die Darstellung der Zeilen umgestellt. Der Name, nach dem sortiert wird, steht links in "Felder und Steueranweisungen". DB - Sortiert nach "dbName". "DB" wird abwechselnd mit "GUI" angezeigt, je nachdem, nach was sortiert werden soll. T - Zeigt Tags. Wenn die Tags nicht von Interesse sind, da man sich auf die Felder konzentrieren will, kann man sie hiermit ausblenden und anschlieend wieder einblenden. B - Zeigt Buttons. Wenn die Buttons im Moment nicht von Interesse sind, kann man sie hier ausblenden und im Anschluss wieder einblenden. F - Zeigt Felder. Klickt man dieses Flag an, sieht man nur noch Buttons und Plugins. P - Zeigt Parameterfelder. Interessiert man sich nur fr die Datenbankfelder, werden hiermit die Parameterfelder weggeblendet. Mit einem nochmaligen Klick darauf werden die Parameterfelder wieder eingeblendet. V - Zeigt die verwendeten Elemente. U - "Used" zeigt benutzte Elemente. Will man Elemente nicht sehen, die benutzt wurden, kann man sie hier abschalten. Alternativ erkennt man in Benutzung befindliche Elemente auch an dem "*" hinter dem ersten Namen. A - Aktualisiert die Anzeige.

Beim Auswhlen der ein-/auszublendenden Elemente kann man recht zgig mit der Tastatur arbeiten. Steht der Fokus auf einer Liste und drckt man einen Buchstaben, springt der Cursor auf das erste Element, das mit diesem Buchstaben anfngt. Wiederholtes Drcken desselben Buchstabens positioniert jeweils einen Satz weiter. Folglich kann man mit der Taste "<" auf die Tags positionieren. Weiterhin kann mit den Pfeiltasten auf/ab und Seite auf/ab in der Liste gescrolled werden, ohne die Maus einzusetzen. Zum Umschalten zwischen den Listen knnen Sie den Toggle-Button "<->" oder die Tastenkombination "Alt-t" verwenden. Man positioniert in der linken Spalte auf das Einfgeziel und drckt die Tastenkombination "Alt-t". Dann navigiert man in der rechten Spalte zum gewnschten Element und drckt die Kombination "Alt-a". Anschlieend navigiert man zum nchsten gewnschten Element und drckt wieder die Tastenkombination "Alt-a". Danach drckt man "Alt-t", sucht sich den neuen Einfgepunkt, whlt ein Element als Einfgepunkt aus, drckt "Alt-t", whlt Element aus, drckt "Alt-a", usw. So schafft man es sehr schnell, die Oberflche einzurichten, ohne sich der Maus bedienen zu mssen. Das geht wesentlich schneller, als das optisch schnere, aber umstndliche Ajax-Konzept

Oberflche einrichten
wie z. B. in Sugar-CRM.

66

In der Mitte, zwischen den beiden Listen, gibt es noch einen "Kopieren"-Button. Er wirkt hnlich wie der ">>>>" Button, belsst die Elemente aber in der linken Liste. Sie werden an das Ende der rechten Liste kopiert. Von dort kann man sie gemeinsam erneut an anderer Stelle zustzlich einfgen. Zum Umplatzieren einer Feldgruppe entfernt man zuerst diese, greift sie am Ende der rechten Liste wieder auf und fgt sie erneut ein. IntarS wird mit einem sinnvoll vordefinierten Layout ausgeliefert. Es empfiehlt sich, dieses erst zu verndern, wenn man wei, was man erreichen will. Nur dass es ungewhnlich aussieht, ist keine Begrndung. Hier ein paar Grundregeln: Wichtige Felder nach oben. Verwenden Sie anfangs keine Tags, allenfalls "Zeilenumbruch". Nicht verknsteln; im Wesentlichen soll die Layoutarbeit dem System berlassen bleiben. Beim Aufruf eines Datensatzes wird der Cursor vom System auf das erste offene Feld positioniert. Daher sollte das am hufigsten editierte Feld ganz nach oben platziert werden. Fgen Sie vor Memo-Feldern einen "Zeilenumbruch" ein. Bringen Sie die Felder in die Reihenfolge, in der die Daten erfasst werden, da Sie dann bequem mit der "Tabulator"-Taste arbeiten knnen. Lassen Sie es sein, das optische Layout eines Beleges oder einer vertrauten anderen Anwendung nachbauen zu wollen! Sparen Sie Platz! Freie Bildschirmflchen nehmen Flche weg, da Sie scrollen oder blttern mssen, um die andere Felder zu sehen. Das System erzeugt ein neues LIF, wenn es keines findet und geht dabei nach einer Relevanzabschtzung aufgrund der in der Tabelle enthaltenen Daten vor, wohin und ob es Felder platziert.

Oberflche einrichten

67

6.5 Formatieroptionen
Es stehen die im Folgenden beschriebenen Tags bzw. Formatier-Elemente zur Verfgung. Zum tieferen Verstndis ist die Kenntnis der korrelierenden systemweiten Geometrieeinstellungen fr die Layoutengine von Vorteil. Die Tags dienen dazu, dem Layoutengine punktuell Hinweise zu geben. Sie sollen sparsam eingesetzt werden. Mitnichten soll versucht werden, damit gegen das System zu arbeiten. Ein normales Datenelement besteht aus bis zu drei Teilen: Deskriptor: Feldname Edit: Eingabefeld Bezeichnung: bei Relationen ein aus den Descriptor-Feldern zusammengesetzter beschreibender Text

Diese drei Bereiche knnen von den Steueranweisungen gezielt beeinflusst werden.

<ESC x>
setzt fr das folgende Element ein Escape-Sprungziel.

<bezWidth x>
setzt fr die folgenden Elemente die Bezeichnungsbreite. Die Bezeichnung ist der beschreibende Text hinter Relationen.

<bezWidthd>
setzt die Bezeichnungsbreite zurck auf Systemdefault.

<block x> <endblock>


einen Block der angegebenen Breite beginnen/beenden.

<descrWidthd>
setzt die Breite des Deskriptors auf default zurck.

<descrWidth x>
setzt die Breite des Deskriptors auf den Wert x.

<editWidth x>
setzt die Editierbreite des Folgeelmentes auf den Wert x. Das ist die Lnge des Eingabefeldes und wird im Normalfall vom System aufgrund der Stellenanzahl automatisch ermittelt.

<guiName x>
berschreibt fr das folgende Element den Deskriptor mit dem Text x.

<html x>
fgt einen HTML-Code ein. Hierbei ist oberste Vorsicht geboten.

<namedIcon width=... height=... dbName=... [descr] [bez]>


Bild einfgen: dbName + Wert des Feldes mit "_" verbunden; wird als Name einer GIF-Datei interpretiert; descr = Descriptor mit anzeigen; bez = bei NamedValues Klartext mit anzeigen.

Oberflche einrichten

68

<nodescr>
Deskriptor fr das Folgeelement abschalten. Ohne Deskriptor wird das Element entsprechend krzer. Nach einer Eingewhnungszeit verzichten Anwender zugunsten von mehr Datenelementen oft auf Deskriptoren.

<pidimg width=... height=... >


Bild zum Datensatz als klickbares Thumbnail einfgen.

<pw>
als Passwortfeld darstellen.

<raster x>
Rasterbreite x setzen.

<rasterd>
Rasterbreite auf default zurcksetzen.

<tab>
setzt ein leeres Element von einer Rasterbreite ein.

<text x bla, fasel>


x Rastereinheiten eigener konstanter Text.

<width x>
Gesamtbreite des nchsten Elements bersteuern.

<zeilen x>
Anzahl Zeilen des folgenden Memo-Feldes festlegen.

6.6 Layout direkt verwalten


Durch Klick auf den "LIF"-Button ffnet sich ein Editierbereich, in dem das LIF direkt in einem Memo-Feld editiert werden kann.

Oberflche einrichten

69

LIF direkt editieren

Oben befinden sich Buttons zum "laden" und "speichern". ber dem Memofeld wird der Pfad angezeigt, von dem aus zuletzt geladen wurde. Im Memofeld selbst kann editiert werden. Ist man fertig, klickt man auf den "speichern"-Button, wenn das Ergebnis erhaltenswert ist. Statt im Memo-Feld zu editieren, kann es sich fr komplexere Funktionen anbieten, einen externen Text-Editor mit Suchen/Ersetzen-Funktionen zu verwenden (z. B. notepad++). Im Systembereich kann der Administrator mit den Buttons "copy Lif" und "paste Lif" Layouteinstellungen zwischen Modulen, Benutzern und Mandanten austauschen.

CRM u. Warenwirtschaft

70

7 CRM u. Warenwirtschaft
7.1 Was ist eine Warenwirtschaft
CRM oder Warenwirtschaft?
IntarS bringt eine Warenwirtschaft mit. Damit unterscheidet es sich von anderen reinen CRM-Produkten. Wenn ber die CRM-Funktionalitten Kunden gewonnen wurden, mchte man nahtlos weiterarbeiten und Auftrge abwickeln. Umgekehrt will man in der Auftragsabwicklung auf die Kommunikationshistorie und den "Charakter" des Kunden Zugriff haben.

Grundlagen
Warenwirtschaft wird oft synonym verwendet fr ERP, Unternehmenssoftware, Auftragsverwaltung. Es ist das elektronische Modell der Wertschpfungsprozesse eines Unternehmens. Typischerweise werden Waren verkauft. Diese mssen auch eingekauft oder hergestellt und ggf. gelagert werden. Damit ein Unternehmen ttig wird, bedarf es eines Auftrages. Dieser wird vom Kunden erteilt und evtl. mittels einer Auftragsbesttigung belegt. Vorher will der Kunde jedoch noch ein Angebot oder mehrere Angebote bekommen und er whlt dann eines aus, welches zum Auftrag werden soll. Der Auftrag wird geplant. Es werden bentigte Waren beschafft oder produziert, sofern sie nicht am Lager liegen. Dann wird geliefert: entweder alles auf einmal oder als Teil- oder Sammellieferung, wenn mehrere Auftrge auf einmal geliefert werden. Der Lieferschein wird der Lieferung beigefgt. Er ist gleichzeitig der Beleg fr die Lagerentnahme. Schlielich werden die gelieferten Waren und Dienstleistungen in Rechnung gestellt. Auch hier kann eine Teiloder Sammelrechnung erstellt werden. Der Rechnungsbetrag erhht die Forderung gegenber dem Kunden. Schickt der Kunde Waren zurck und wird dies akzeptiert, macht man dies ber Storno. Dieser bucht die Ware wieder ins Lager und verringert die Forderung gegenber dem Kunden. Lsst man dem Kunden etwas im Preis nach, ohne dass Ware zurckgeschickt wird, geschiet das ber eine Gutschrift. Vom Kunden kommen dann hoffentlich die Zahlungseingnge, welche die Forderungen begleichen. Funktioniert das nicht reibungslos, kommen das Mahnwesen und ggf. Kreditlimit und Liefersperre zum Einsatz. Die Basis des Bestellwesens sind die Bezugsquellen. Dort steht, welcher Lieferant welche Ware zu welchen Preisen und sonstigen Konditionen (Lieferzeit, Liefertreue, Qualitt, etc.) liefern kann. Aufgabe des Disponenten ist es, die bentigte Ware zu mglichst gnstigen Konditionen in ausreichender Menge zu beschaffen. Er tut dies mittels Bestellungen, wobei er auf die Bezugsquellen zurckgreift. Liefert der Lieferant, wird aus der Bestellung eine Eingangsrechnung. Auch hier kann es zu Teil- und Sammellieferungen kommen, so dass eine Eingangsrechnung aus Teilen verschiedener Bestellungen bestehen kann. In der Eingangsrechnung kann ein/e abweichender Preis und/oder Liefermenge erfasst werden. Die Eingangsrechnung wirkt lagerbestandserhhend. Zu diesen, eigentlich recht einfachen, Vorgngen kommen dann Sonder- und Hilfsvorgnge wie Inventur, Rcklieferungen an Lieferanten, Lagerumbuchungen, Porto und Versand, auslndische Kunden mit/ohne UStID aus EG oder Drittland, Korrekturvorgnge, Provisionsabrechnungen, nicht lagerfhige Artikel (z.B. Dienstleistungen), verschiedene Umsatzsteuerstze,... Aus den Bewegungsdaten werden laufend verdichtete Informationen fr Statistiken gewonnen. Die Warenwirtschaft dient auch als Auskunftsssytem. Es sollte damit ein Konzept fr Wissensmanagement implementiert werden, damit das Wissen nicht nur in den Kpfen der Mitarbeiter vorhanden ist. Die Ablauforganisation eines Unternehmens wird im Workflow abgebildet. Er sollte widerspiegeln, welche Verarbeitungsvorgnge anfallen, welche Breite oder Bedeutung sie einnehmen, wie detailliert sie ausgestaltet sein mssen, wie restriktiv oder flexibel sie sein sollen, wie die Vorgnge zusammenhngen und aufeinander aufbauen, welche Revisions-, Dokumentations- und Sicherheits-Bedrfnisse jeweils bestehen.

CRM u. Warenwirtschaft

71

Einfacher Workflow in IntarS


Angebote gibt es als individuelle Angebote, die nur einmal verwendet werden und Rahmen-Angebote, die immer wieder als Vorlagen zum Einsatz kommen. Bei der Erstellung eines Angebots kann auf ein anderes Bezug genommen und dessen Positionen hineinkopiert werden. Ein Angebot kann optionale und Alternativpositionen enthalten. Will der Kunde mehrere Angebote unterbreitet bekommen, speichert man sich die verschiedenen Versionen anstatt alles in einem Angebot zu ndern. So kann man auf alte Angebote zurckgreifen, falls der Kunde sich doch fr eine frhere Offerte entscheidet. Wird aus einem Angebot nichts und kann es auch nicht als Vorlage fr sptere Angebote dienen, kann man es manuell auf erledigt setzen. Ansonsten steht das gesamte CRM-Instrumentarium zur Verfgung (z. B. Wiedervorlage, Kontakte), um aus dem Angebot irgendwann einen Auftrag zu machen. Auftrge knnen frei erfasst oder aus Angeboten zusammengestellt werden. Man kann dabei aus den Artikelstmmen oder Angebotspositionen fr den Kunden suchen. Das Angebot verndert sich dabei nicht. Mit Erfassen eines Auftrages erhht sich der Kundenauftragsbestand fr die Artikel in den Auftragspositionen. Auftrge werden von Lieferscheinen abgearbeitet. Man kann Lieferscheine bzw. deren Positionen auch frei erfassen, im Allgemeinen bezieht man sich jedoch auf Auftragspositionen. Dies bewirkt, dass die Teilmenge in den Auftragspositionen (und damit der Kundenauftragsbestand) reduziert wird. Wenn man berliefert, wird sie sogar negativ. Ein Auftrag, dessen Teilmengen alle kleiner oder gleich Null geworden sind, wird vom System auf erledigt gesetzt. Es knnen keine weiteren Lieferscheinpositionen mehr daraus abgeleitet werden. Er verschwindet dann auch aus bestimmten Ansichten. Will man einen Auftrag nicht oder nicht mehr vollstndig ausliefern, kann man ihn manuell auf erledigt setzen. Die Teilmengen bleiben dabei zur Dokumentation stehen, zhlen aber nicht mehr zum Auftragsbestand und der Status wird auf "erledigt" gesetzt. Solange ein Auftrag nicht komplett erledigt (entweder durch komplette Lieferung oder manuelles "erledigt"-setzen) ist, steht sein Status auf teil-erledigt. Wurde noch gar nichts geliefert, ist er noch offen. Ein offener Auftrag kann nach Belieben editiert werden. Sobald er teilerledigt ist, ist er gesperrt. Werden jedoch alle Lieferscheinpositionen gelscht, die den Auftrag betreffen, ist er wieder offen. Lieferscheine werden von Rechnungen abgearbeitet. Man kann Rechnungen bzw. deren Positionen auch frei erfassen, im Allgemeinen bezieht man sich jedoch auf Lieferscheinpositionen. Lieferscheine wirken direkt lagerbestandsreduzierend ohne extra Lagerbuchung. Sobald ein Lieferschein erzeugt/erfasst wurde, gelten die Teile als aus dem Lager entnommen. Auch ein Lieferschein kann auf erledigt gesetzt werden, z. B. wegen Fehlerfassung. Dann sind alle Positionen zu lschen und anschlieend der Kopf auf erledigt zu setzen. In IntarS knnen Belege nicht gelscht werden. Will man einen Lieferschein nicht komplett berechnen, kann man ihn auf erledigt setzen. Seine Lagerbestandswirksamkeit bleibt davon unberhrt. Sobald etwas von einem Lieferschein in einer Rechnung berechnet wurde, ist er teilerledigt. Wurde alles berechnet, ist er komplett erledigt. Solange nichts berechnet wurde, ist er offen und kann frei editiert werden. Lscht man alle Rechnungspositionen, die auf ihn verweisen, geht er wieder in den offenen Zustand. Rechnungen knnen frei erfasst werden oder durch bernahme von Lieferscheinpositionen, die berechnet werden sollen. Weil eine Rechnung nicht lagerbestandsmindernd wirkt, kann man nur sog. Service-Artikel direkt in die Rechnung einbringen. Solange eine Rechnung nicht gebucht ist, ist sie frei editierbar. Eine Rechnung kann nicht auf erledigt gesetzt werden. Sie wird vielmehr gebucht und erhlt danach, hoffentlich, Zahlungseingnge. Gebuchte Rechnungen zhlen zum Umsatz und beeinflussen Provisionen. Unter bestimmten Umstnden kann das Buchen rckgngig gemacht werden. Hat man sich vertan, lscht man alle Positionen aus der Rechnung, schreibt in den Betreff eine Erklrung und bucht die leere Rechnung. Lschen kann man sie nicht, die Rechnungsnummer muss dokumentiert sein. Der Standardablauf sieht so aus, dass es eine einfache Beziehung Auftrag - Lieferschein - Rechnung gibt. Mit jeweils einem Klick kann der Folgebeleg erzeugt und damit der aktuelle Beleg auf komplett erledigt gesetzt werden.

CRM u. Warenwirtschaft

72

7.2 Artikelstamm

Der Artikelstamm

Der Artikelstamm (auch Teilestamm) ist neben dem Kundenstamm die wichtigste Stammdatentabelle. Hier ist hinterlegt, was das Unternehmen verkaufen kann. Ein Artikel hat eine eindeutige Artikelnummer, verschieden lange Textfelder in verschiedenen Sprachen zur Beschreibung, einen Preis sowie weitere Eigenschaften, die im Umgang mit ihm fr das Unternehmen relevant sind, z. B. Gre, Gewicht, Farbe, Ausfhrung etc. Dazu kommen Eigenschaften fr die betriebswirtschaftliche Behandlung. Dazu gehren Umsatzsteuersatz, Warentarifnummer, Erlskonten usw. Hat man viele Artikel, kann man sie in Artikelgruppen gliedern, evtl. in Haupt- und Untergruppen oder eine Hierarchie oder mehrere Hierarchien. Ein Artikel hat weiterhin ein Memofeld fr einfaches Wissensmanagement. Hier kann formlos alles eingetragen werden, was wissenswert ist. Fr weitergehende Informationen kommt das Dokumentenmanagement zum Einsatz. Eine Sammlung von Steuerungs-Kennzeichen definiert den grundstzlichen Charakter des Artikels, u. a. ob er lagerfhig, verkaufsfhig, ein Service-Artikel oder nur ein Textartikel ist. Diese Kennzeichen steuern in anderen Teilen der Warenwirtschaft, unter welchen Umstnden der Artikel sichtbar ist und verwendet werden darf bzw. wie behandelt wird. Dazu kommen Einkaufsinformationen fr die Beschaffung, Statistikfelder (durchschnittlicher EK, min/max EK, Absatz/Umsatz in lfd. und Vorjahr), bersichten fr Verwendung in Bewegungsdaten und Plugins (letzte Bestellungen), Lagerbestnde, Bestell- und Auftragsbestand. Ist ein Artikel einmal verwendet worden, kann er nicht mehr gelscht werden. Um zu sehen, wo er verwendet wurde, gibt es ein Verwendungsprfungsplugin. Man kann ihn aber inaktiv setzen, um seine weitere Verwendung zu verhindern. Natrlich kann man ihn auch wieder aktiv setzen und damit wiederbeleben. Ist das Bestellwesen installiert, hat ein Artikel Bezugsquellen, in denen hinterlegt ist, welcher Lieferant zu welchen Konditionen diesen Artikel liefert. Der Lagerbestand wird beeinflusst von Inventurbuchungen, manuellen Bestandsbuchungen, Lieferscheinen, Stornos und Wareneingngen.

CRM u. Warenwirtschaft

73

7.3 Hilfstabellen

Hier geht's zu den Hilfstabellen

Zu den Hilfstabellen zhlen MWSt-Stze, Skontoprofil, Warengruppen, Lnder, Whrungen, Lager-Orte etc. Sie sind teilweise schon vorab versorgt. Sie sollten aber vor Erfassen der Artikel- und Kundendaten nach den Erfordernissen des eigenen Unternehmens angepasst werden. Ihre Inhalte werden ber Relationen aus den hherwertigen Stammdaten sowie Bewegungsdaten referenziert.

CRM u. Warenwirtschaft

74

7.4 Kunden

Kundenstamm

In der Kundentabelle liegen alle Kunden, Lieferanten, Interessenten-Adressen etc. Sie ist neben dem Artikelstamm die wichtigste Stammdatentabelle. Ein Kundenstammsatz enthlt neben Adressinformationen (Haupt-, Liefer-, Rechnungsadresse) Konditionen, klassifizierende Merkmale, betriebswirtschaftliche Eigenschaften, Statistikdaten, sowie ein groes Memofeld fr einfaches CRM. Fr weitergehendes CRM ist der eingebaute Kontaktmanager mit seinen Akten, Aufgaben, Terminen, Wiedervorlage und Recherche vorgesehen. Vom Kundenstammsatz aus kommt man mittels bersichten und Plugins zu allen Verwendungen im Bewegungsdatenbereich (offene Auftrge, Rechnungen, Lieferscheine, Angebote). Ein Kunde kann mehrere Ansprechpartner und Zusatzadressen haben. Er ist normalerweise einem Benutzer fest zugeordnet, der fr ihn zustndig ist (Betreuer) und evtl. Provision bekommt. Der Kunde ist ein mglicher Ausgangspunkt fr Vorgnge wie neuer Auftrag, neue Rechnung u.v.m. Es wird dann jeweils der ganze Kundenkontext mitgenommen. Der Kunde ist eingebunden ins Dokumentenmanagement. Man kann ihm beliebige Dokumente als Anhnge zuordnen. Ergnzend werden ihm intern erzeugte Dokumente (Rechnungen, Anschreiben, Auftragsbesttigungen etc.) automatisch als PDF angehngt. Seine E-Mails knnen importiert und zugeordnet werden. Er kann per E-Mail, Fax oder SMS kontaktiert werden. Kontaktvorgnge werden im Kontaktmanager protokolliert und knnen dort weiterbearbeitet werden. So kann aus einer Notiz eine Aufgabe oder ein Termin werden. Hier kommt dann die eingebaute Groupware mit ins Spiel. Zum CRM gehrt die Mglichkeit, Stichworte anzulegen und Kunden beliebig zuzuordnen.

CRM u. Warenwirtschaft

75

7.5 Angebot
Angebote haben eine Bindungsfrist, ein Thema (Betreff), einen einleitenden Text und in den Positionen neben den normalen Artikeln noch Textpositionen und Alternativpositionen. Die Reihenfolge der Positionen kann ber eine Sortiernummer beeinflusst werden, unabhngig von der Erfassungsreihenfolge. Es empfiehlt sich, einen Vorrat von Rahmenangeboten zu erfassen. Bei Bedarf knnen dann daraus mit einem Klick konkrete Angebote erzeugt werden, bei welchen ggf. nur noch Details gendert werden mssen. Aus einem Angebot knnen auch immer wieder direkt Auftrge erzeugt werden. Angebote knnen per E-Mail gesendet werden. Sind diesem Anlagen hinterlegt, ffnet sich ein Zwischenbild, in dem die mitzuschickenden Anlagen ausgewhlt werden knnen.

7.6 Auftrag
Auftragskopf
Wie alle Belege bernimmt ein Auftragskopf die Adress- und Konditions-Daten des Kunden in Kopie. Sie knnen dann fallbezogen abgendert werden. Ein Auftrag kann mit einem Klick aus einem Angebot erzeugt, durch bernahme von Angebotspositionen zusammengesetzt, durch bernahme oder Eingabe von Artikeln frei erfasst oder aus einer Kombination von alledem erstellt werden. Whrend des Editierens wird das Zahlenwerk laufend aktuell durchgerechnet. Das ist bei allen Belegen so. Welche Zahlen relevant sind, hngt vom Kontext ab, z. B. Endkunde oder gewerblicher Kunde, Inland, EG, Ausland, mit/ohne UStID. Betrge werden intern mit hherer Genauigkeit gefhrt, um Rundungsdifferenzen gering zu halten. Auch die Betrge im Artikelstamm haben daher mehr als zwei Nachkommastellen. Auf Ausdrucken werden nur zwei Dezimalstellen dargestellt. Offene Auftrge erscheinen im gleichnamigen Plugin auf der Startseite, von wo aus sie aufgerufen und bearbeitet werden knnen. Hierfr mssen jedoch die entsprechenden Voraussetzungen erfllt sein. Die Artikel, welche verkauft werden sollen, werden in Auftragspositionen erfasst.

Auftragspositionen
Es gibt mehrere Mglichkeiten, Auftragspositionen zu erzeugen. Klicken Sie auf "Neu" und geben Sie den Artikel ein. bernehmen Sie die gewnschte/n Position/en aus den Angebotspositionen. bernehmen Sie die gewnschte/n Position/en aus dem Artikelstamm.

Beim Erfassen der Positionen kann man sich der Suchwerkzeuge bedienen. Gibt man im Feld der Artikelnummer einen Punkt (".") an, wird der String bis dahin als Suchstring interpretiert und es erscheint eine Liste mit den Treffern. Die Suche bercksichtigt dabei die Informationen aus dem Metadaten-Modell, welche Felder in welcher Reihenfolge durchsucht werden sollen. In mehreren Schritten wird zunehmend unschrfer gesucht bis eine gewisse Trefferanzahl, die sich steuern lsst, erreicht ist. Daneben gibt es eine Historie der 20 zuletzt aufgerufenen Artikelstmme, sowie die persnliche Zwischenablage, in der man sich beliebig viele Artikel merken kann. Aus all diesen Nachschlagefunktionen kann bequem mit der Tastatur bernommen und so der Auftrag schnell komplettiert werden. In der Auftragsposition gibt man in der Anzahl an, wieviel von dem Artikel verkauft werden soll. Daneben gibt es die Teilanzahl. Sie besagt, wieviel noch zu liefern ist. Am Anfang ist sie genauso gro wie die Anzahl. Wird der Auftrag abgearbeitet, verringert sich die Teilanzahl bis auf 0. Eine Auftragsposition mit Teilanzahl 0 gilt als erledigt. Soll aus irgendeinem Grund eine Auftragsposition nicht oder nicht mehr weiter abgearbeitet werden, kann sie manuell auf "erledigt" gesetzt werden. Eine Auftragsposition wird immer durch Lieferscheine abgearbeitet.

CRM u. Warenwirtschaft

76

Die noch offene Teilanzahl zhlt zum Kundenauftragsbestand. Er ist im Artikelstamm zu sehen und spielt eine wichtige Rolle in der Disposition, indem er als Bedarf den Saldo reduziert. Es ist Aufgabe der Disposition, den Kundenauftragsbedarf zu befriedigen und Artikel fr die Auftragsposition zu reservieren. Die reservierte Anzahl in der Auftragsposition kann geliefert werden. Wie weit reserviert ist, kann im Reservierungsgrad abgelesen werden. Erst wenn der Reservierungsgrad grer als 0 ist, kann etwas geliefert und somit der Auftrag abgearbeitet werden. Das System versucht, schon bei Erfassung der Auftragsposition automatisch zu reservieren und bedient sich dabei des verfgbaren Bestandes. Dieser errechnet sich aus dem physischen Lagerbestand minus dem reservierten Bestand. Reicht der verfgbare Bestand nicht aus, kann nicht automatisch komplett reserviert werden. Die Auftragspositionen treten miteinander in Konkurrenz um Material und ein Disponent muss entscheiden, wer wieviel bekommt. Durch entsprechend gepflegte Priorittsregeln kann das System auch automatisch entscheiden. Wird im Config-Modul die Disposition ausgeschaltet, vereinfacht sich der Ablauf derart, dass immer automatisch zu 100 Prozent reserviert wird. Die im nchsten Abschnitt beschriebenen Dispositionsfunktionen entfallen in diesem Fall.

Disposition
Disposition kann unter verschiedenen Blickwinkeln erfolgen. Es kann auf Artikelstammebene disponiert werden. Dort gibt es ein Plugin, das alle Auftragspositionen zeigt, die um den Artikel konkurrieren. Hier kann umverteilt werden. Man kann auch den Button fr automatische Verteilung anklicken. Auftragspositionsbezogene Disposition: innerhalb einer Auftragsposition kann Material zugeteilt bzw. weggenommen werden. Im "Home"-Modul gibt es ein Plugin, das alle zuteilungsfhigen Auftrge mit ihrem aktuellen Reservierungsgrad zeigt. Von da aus knnen die Auftrge aufgerufen und disponiert werden. Es gibt auch einen Button, um das System automatisch alle verfgbaren Artikel auf alle wartenden Auftragspositionen verteilen zu lassen. Nur lagerfhige Artikel nehmen an der Disposition teil. Nicht lagerfhige Artikel (z. B. Dienstleistungen oder Gebhren) werden automatisch immer komplett reserviert. Sie sind unbeschrnkt verfgbar.

Preise
In der Auftragsposition erfolgt die Preisfindung. Der Preis ist im Artikelstamm hinterlegt. Sonderpreise pro Kunde, Menge, Zeitraum etc. lassen sich in den Spezialpreisen verwalten. Zustzlich kann noch Rabatt gewhrt werden.

CRM u. Warenwirtschaft

77

7.7 Lieferschein
Lieferscheine reprsentieren die Warenbewegung Richtung Kunde. Wird mit Mehrlager-Verfahren gearbeitet, enthlt der Lieferschein auch die Information, von welchem Lager die Ware entnommen wird. Sie sollte dann auch tatschlich von dort entnommen werden, sonst kommt es zu Inventur-Differenzen. Das Lager wird in allen Belegen mitgefhrt und aus dem Benutzerstammsatz vorbelegt. Liefern Sie vorab nur einen Teil eines Auftrages, wird auf dem Ausdruck des Lieferscheines angedruckt, welche Menge noch offen ist. Ein Lieferschein kann aus beliebigen, nicht erledigten Auftragspositionen vom selben Lager fr denselben Kunden zusammengestellt werden. Jede Position eines Beleges hat einen "Lebenslauf". Darin stehen die Relationen zu allen Vorgngerbelegen. In einer Rechnungsposition ist somit hinterlegt, aus welchem Angebot, Auftrag oder Lieferschein sie hervorgeht. Ein Beleg aktualisiert immer seinen Vorgngerbeleg, indem er dessen Teilmenge (offene, noch nicht abgearbeitete Menge) reduziert.

7.8 Rechnung
Rechnungen bauen im Allgemeinen auf Lieferscheinen auf. Was geliefert wurde, wird berechnet. Man kann jedoch auch freie Rechnungspositionen erfassen. Als Besonderheit in IntarS kann eine Projektposition abgerechnet werden. Das ist besonders interessant fr Unternehmen, die projektbezogen arbeiten und nach Aufwand fakturieren. Man legt geschickterweise fr jeden Stammkunden ein Wartungsprojekt an und darin pro Monat eine Projektposition, in der die Zeiterfassung vorgenommen wird. Dann kann man am Monatsende mit einem Klick diese Projektposition in eine Rechnungsposition bernehmen mit exakter Zeit und Ttigkeitsbeschreibung. Gebuchte Rechnungen begrnden Forderungen. Jeder Kunde in IntarS hat ein Kundenkonto, auf welchem Rechnungen mit Gutschriften und Stornos sowie Zahlungsein- und ausgngen saldiert werden. Man hat in IntarS also jederzeit einen berblick ber die wirtschaftliche Situation. Mit dem Rechnungswesen kommen Kostenbelege, Abschreibungen und BWA hinzu. Dennoch ist IntarS keine Buchhaltungs-Software, sondern vielmehr ein Werkzeug ohne jegliche (steuer)rechtliche Relevanz. Ebenso kann man mit Bleistift und Papier oder mit Excel rechnen und es nach Belieben ndern oder wieder lschen. Die richtige Buchhaltung sollte extern von einem Steuerberater oder Buchhaltungsbro gemacht werden. Sie wissen, worauf sie achten mssen, sind erfahren im Umgang mit Steuerprfungen, haben eine entsprechende Berufshaftpflicht. Eine richtige Buchhaltung nach den GOB unterliegt strengen Restriktionen. IntarS soll die Geschftsvorflle mit all ihren Unregelmigkeiten abwickeln und am Monatsende eine Liste fr den Steuerberater exportieren, der sie dann in eine makellose Buchhaltung schreibt oder importiert.

CRM u. Warenwirtschaft

78

7.9 Mahnung
Eine Mahnung, auch Zahlungserinnerung genannt, ist die bestimmte und eindeutige Aufforderung des Glubigers an den Schuldner, die geschuldete Leistung zu erbringen. Die Mahnung ist (neben Bestehen eines flligen Anspruchs und Nichtleistung durch den Schuldner) Voraussetzung fr den Verzug des Schuldners ( 286 BGB). So wird es gemacht: 1. 2. 3. Legen Sie ein Mahnprofil mit Fristen, Gebhren und Texten an (Bild 1). Ordnen Sie das Mahnprofil dem Kunden zu (Bild 2). Jetzt legen Sie einen Mahnlauf an. Dazu geben Sie, nachdem Sie einen neuen Mahnlauf erstellt haben, das Datum ein, fr welches der Mahnlauf ausgefhrt werden soll und sichern den neuen Datensatz (Bild 3 Schritt 1). Klicken Sie nun auf den Button "Mahnvorschlge erzeugen". Das System sucht daraufhin alle Rechnungen, die angemahnt werden knnen, und erstellt fr diese Mahnvorschlge Positionen des Mahnlaufes (Bild 3 Schritt 2). Zur Kontrolle wird ein Protokoll erstellt und angezeigt. Nun knnen Sie die Vorschlge lschen, die nicht angemahnt werden sollen, evtl. Gutschriften erstellen oder Skonti als Zahlungseingnge erfassen, um Rechnungen auszugleichen (Bild 3 Schritt 3). Solange ein Mahnlauf nicht verarbeitet ist, knnen die Mahnvorschlge jederzeit neu erzeugt werden, wobei die aktuelle Zahlungssituation bercksichtigt wird. Wenn Sie den Button "Mahnvorschlag verarbeiten" klicken, werden fr die verbliebenen Mahnvorschlge Mahnungen als Anschreiben erstellt und die Rechnungen aktualisiert (Bild 3 Schritt 4). Die so erzeugten Anschreiben knnen nachbearbeitet werden. Der Button "Mahnungen drucken" druckt alle Mahnungen (Anschreiben) des Mahnlaufes (Bild 3 Schritt 5). Natrlich knnen die Anschreiben auch individuell gedruckt, per E-Mail versendet und gefaxt werden.

4.

5.

6.

7.

8. 9.

Bild 1: Ein Mahnprofil anlegen

CRM u. Warenwirtschaft

79

Bild 2: Ein Mahnprofil einem Kunden zuordnen

Bild 3: Die Mahnungen erzeugen, bearbeiten und drucken

CRM u. Warenwirtschaft

80

7.10 Storno
Stornos erstellt man, um gleichzeitig Ware vom Kunden in das Lager zurckzunehmen und ihm auf seinem Kundenkonto einen Betrag gut zu schreiben. Man nennt es auch Warengutschrift. In anderen Branchen bedeutet Storno die exakte Umkehr eines Geschftsvorfalles. Das ist in IntarS nicht der Fall. Zwar gibt es einen Button "Storno" an der Rechnung, dieser erzeugt jedoch einen spiegelbildichen Stornobeleg zur Rechnung. Man kann diesen aber abweichend bearbeiten und z. B. nur einen Teil der Waren zurcknehmen oder nur einen Teil des Preises nachlassen. Stornos werden gern fr Teststellungen oder Miete verwendet. Dem Kunden wird eine Anlage gegen eine Gebhr zum Testen fr eine bestimmte Zeit berlassen. Dazu wird sie ihm per Rechnung verkauft. Behlt er sie nach Ablauf der Zeit, bezahlt er die Rechnung. Andernfalls schickt er sie zurck und bekommt den Rechnungsbetrag abzglich einer Wiedereinlagerungs-/Nutzungsgebhr gutgeschrieben. Dazu wird dann ein Storno erzeugt. Auf dem Kundenkonto verbleibt die Gebhr als Saldo und wird hoffentlich von einem Zahlungseingang in gleicher Hhe ausgeglichen.

7.11 Gutschrift
Gutschriften sind rein betragsmige Belege. Es findet keine Warenbewegung statt. Sie werden eingesetzt, um z. B. aufgrund begrndeter Mngelrgen dem Kunden einen Nachlass zu gewhren. Gutschriften reduzieren die Forderungen auf dem Kundenkonto. Weist das Kundenkonto dauerhaft ein Guthaben aus, wird man es mit einem Zahlungsausgang ausgleichen mssen, wenn sich keine zuknftigen Forderungen absehen lassen. Wie Rechnungen, Eingangsrechnungen und Stornos werden Gutschriften gebucht, um sie festzuschreiben. Davor sind sie frei editierbar. Gutschriften verringern wie Stornos Umsatz und ggf. Provision. In IntarS knnen Buchungen von Belegen auch wieder rckgngig gemacht werden, solange sie nicht ber eine Fibu-Schnittstelle nach auen gelangt sind. Das ist eine gute Sache, um Korrekturen auszufhren, wie sie eben im Geschftsleben unvermeidlich sind. Zum Beispiel: ein Kunde will die Rechnung gendert haben (andere Texte, zurck-/vordatieren, Position rausnehmen und in nchste Rechnung aufnehmen, Betrag reduzieren etc.). Statt dann eine aufwndige Rckabwicklung mit Gutschrift und erneuter Rechnung zu machen, kann auf "Buchen rckgngig" geklickt, die nderung vorgenommen, erneut gebucht werden, ohne Belegnummern zu verbrauchen. Die alten Ausdrucke kommen in den Aktenvernichter. Das ist unternehmerische Freiheit mit freier Software. Der "Buchen rckgngig"-Button ist an Sonderberechtigungen geknpft. Ein normaler Benutzer sieht ihn nicht.

CRM u. Warenwirtschaft

81

7.12 Bestellung

Eine offene Bestellung

IntarS untersttzt verschiedene Bestellverfahren. Welches das richtige ist, hngt vom Artikel ab. Generell sollte man sich mit C-Artikeln nicht weiter aufhalten und am besten einen langfristigen Lieferanten haben, der das ganze Sortiment unproblematisch auf Abruf liefert. Bei schwer zu beschaffenden Artikeln greifen die klassischen Bestellverfahren nicht, hier zhlen Beziehungen, Verhandlungsgeschick, Kenntnis von Ersatzartikeln und Marktkenntnis. Das SRM (Supplier Relationship Managment) untersttzt dabei. Weil Lieferanten in IntarS im Kundenstamm (Flag "Lieferant") gefhrt werden, kommt das CRM als SRM zum Einsatz. Bei allen anderen Artikeln befindet man sich im klassischen Zielkonflikt zwischen Kapitalbindung im Lager, Mengenrabatt, Wertverlust durch Alterung, Risiko von Preisschwankungen und Verfgbarkeit. In engen Mrkten spielen zustzlich spekulatorische Aspekte eine Rolle (Erlangung eines Monopols fr einen Artikel). Artikel, die sich bestndig verkaufen (z. B. Verbrauchsmaterial), knnen auf Vorrat beschafft werden, insbesondere wenn sie nicht verderblich sind. Selten bentigte Artikel werden mglichst erst dann beschafft, wenn sie von einem Kunden bestellt wurden. Ebenso teure Artikel und solche, die man problemlos schnell bekommt. Interessant wird es bei Artikeln, bei welchen ein Kufermarkt besteht. Hier kann es sich lohnen, bei jeder Bestellung den gerade gnstigsten Anbieter zu ermitteln. Die damit verbundene Arbeit muss mindestens von der erzielten Einsparung gedeckt sein. Gibt es wenig Schwankungen, ist es meist am besten, einmal den besten Anbieter zu ermitteln und dann als Hauptlieferanten einzutragen und nur in Ausnahmefllen auf einen anderen auszuweichen. Informationen bezglich der Anbietersituation werden in den Bezugsquellen hinterlegt. Der Saldo eines Artikels gibt Auskunft darber, was bestellt werden sollte. Er zeigt die Differenz zwischen Deckern (Lagerbestnde, Bestellbestand, Produktionsauftrge) und Bedarfen (Kundenauftragsbestand, Sekundrbedarfe, Mindestbestand). Bestellungen knnen auf vielfltige Weise von verschiedenen Punkten aus erzeugt werden. Klicken Sie im Artikelstamm auf den Button "bestellen". Sofern er einen negativen Saldo (Bedarfe bersteigen Decker) und Hauptlieferanten hat, wird eine bestehende noch offene Bestellung des Hauptlieferanten dieses Artikels gesucht. Falls keine gefunden wird, wird eine angelegt. Darin wird eine neue Position erzeugt bzw. eine bereits bestehende ber denselben Artikel erhht. Als Bestell-/Erhhungsmenge wird der Saldo genommen. Auch aus der Bezugsquelle heraus kann mit einem Klick die bentigte Menge bestellt werden. Es wird der Lieferant der Bezugsquelle genommen und nach einer offenen Bestellung von ihm gesucht.

CRM u. Warenwirtschaft
Falls noch keine vorhanden ist, wird eine angelegt. Darin wird eine neue Position erzeugt bzw. eine bereits bestehende ber denselben Artikel erhht. Als Bestell-/Erhhungsmenge wird der Saldo genommen. Bestellungen knnen auch frei erfasst werden. Hat man im Kopf den Lieferanten angegeben, kann in den Positionen gesucht werden. Dafr stehen verschiedene Nachschlagefunktionen zur Verfgung: Artikel des Lieferanten mit Bedarf Artikel des Lieferanten Artikel mit Bedarf freie Artikelsuche

82

Sobald eine Bestellposition existiert, zhlt sie automatisch zum Bestellbestand. Dies ist so gewollt, da so verhindert wird, den Artikel nochmals zu bestellen. Eine neue (offene) Bestellung erscheint im entsprechenden Plugin im "Home"-Modul (unter EK). Der nchste Schritt ist, die Bestellung zu drucken, faxen oder mailen. Evtl. wird auch telefonisch bestellt. Um zu dokumentieren, dass die Bestellung bestellt ist, klickt man auf den Button "bestellen". Daraufhin wird ein Zeitstempel gesetzt. Die Bestellung erscheint im Plugin "bestellte Bestellungen" und ist nicht mehr editierbar. Fr Ausnahmeflle kann der Vorgang mit "bestellen rckgngig" zurckgenommen werden. Bestellte Bestellungen unterliegen der Liefertermin-berwachung. Ist ein solcher eingetragen, wird die Bestellung rot angezeigt, sobald er berschritten ist. Wird die bestellte Ware angeliefert, geht es weiter mit der Eingangsrechnung. Erlischt das Interesse an der Bestellung bzw. an einzelnen Positionen oder kann der Lieferant doch nicht liefern, kann dies mit dem "erledigt" Button auf Positions- oder Kopfebene festgehalten werden. Ansonsten werden Bestellungen durch Wareneingnge (Eingangsrechnungen) abgearbeitet.

7.13 Disposition
Mit Disposition in einer Warenwirtschaft meint man die mengenmige Einteilung von Auftrgen mit aktuellen Leistungsanforderungen und die terminierte Zuweisung zu den verfgbaren Ressourcen. Konkret sieht das so aus, dass Kundenauftrgen, die evtl. in Konkurrenz zueinander stehen, Artikel zugeteilt werden (reserviert). Ist der Artikel nicht am Lager, muss er entweder beschafft, produziert oder durch einen anderen Artikel ersatzweise gedeckt werden. Die Disposition muss sich also auch darum kmmern, was in welcher Menge zu welchen Konditionen bei welchem Lieferant bestellt wird. Die wichtigste Information bezglich der Leistungsanforderung ist dabei der Saldo der Decker und Bedarfe eines Artikels. Auf eine zeitliche Staffelung (Teile-Konto) wird in der Standardversion von IntarS aus Vereinfachungsgrnden verzichtet. Lsst man sich die Artikel nach Saldo absteigend sortiert anzeigen, hat man auf einen Blick den Arbeitsvorrat der Disposition. Der Saldo eines Artikels wird vom System immer aktuell gehalten, indem er bei jeder nderung, die ihn beeinflusst, neu berechnet wird (Lagerbewegung, Auftragserfassung, Bestellerfassung etc.).

CRM u. Warenwirtschaft

83

7.14 Eingangsrechnung

Eingangsrechnungsposition mit Preisabweichung

Eingangsrechnungen leiten sich aus Bestellungen ab. Normalerweise erwartet man, dass das, was bestellt wurde, auch geliefert wird zu den Preisen, die bei der Bestellung vereinbart wurden. So sollte es in den meisten Fllen korrekt sein, wenn die Eingangsrechnung 1:1 aus einer Bestellung erzeugt wird. Genau dafr gibt es einen entsprechenden Button in der Bestellung. Erlangt der Disponent Kenntnis von einem Wareneingang (da die Ware auf dem Hof abgeladen wird, durch ein Liefer-Avis oder Warenbegleitzettel), muss zunchst die zugrundeliegende Bestellung gefunden werden. Es knnen auch mehrere sein. Aufgrund dessen, dass es ein Plugin "offene bestellte Bestellungen" gibt, sollte dies einfach sein. Man kann natrlich auch im Bestellmodul suchen. In der Bestellung klickt man dann auf "Eingangsrechnung". Die Eingangsrechnung wird erzeugt und erledigt gleichzeitig die Bestellung. Man vergleicht sie mit dem tatschlichen Wareneingang mengen- und wertmig. Eventuelle Abweichungen werden in der Eingangsrechnung eingetragen. Mindermengen lassen die Bestellmenge wieder aufleben und ihren Status auf teil-erledigt ndern. Ebenso, wenn Positionen berhaupt nicht geliefert wurden. Diese lscht man aus der Eingangsrechnung heraus. Treten zu groe Preisabweichungen auf (Kriterien einstellbar), wird die Eingangsrechnung vom System rot markiert und kann nicht gebucht werden. Erst wenn die Preisabweichung mit Grund, Zeitstempel und User akzeptiert oder vom Lieferanten berichtigt wurde, verschwindet das Kennzeichen und es kann gebucht werden. Nur gebuchte Eingangsrechnungen drfen zur Zahlung angewiesen werden. Ungeachtet von Preisabweichungen wirkt eine Eingangsrechnungsposition immer lagerbestandserhhend fr ihren Artikel mit ihrer Menge. Es ist keine extra Lagerbuchung mehr notwendig. Erzeugt man eine Eingangsrechnung aus einer teil-erledigten Bestellung, wird sie ber die verbleibenden Teilmengen gebildet. So arbeiten unter Umstnden mehrere Eingangsrechnungen sukzessive eine Bestellung ab bis sie erledigt ist. Stellt sich heraus, dass fr eine offene oder teil-erledigte Bestellung keine Ware mehr kommt (Lieferant pleite, Ware nicht mehr lieferbar...), kann die Bestellung auch manuell auf erledigt gesetzt werden. Damit erscheint sie nicht mehr in den Plugins und bersichten offener Bestellungen und zhlt auch nicht mehr zum Bestellbestand. Eine Eingangsrechnung kann auch aus mehrere Bestellungen oder Teilen davon erzeugt werden. Dies kann notwendig sein, wenn der Lieferant eine Sammellieferung mit Waren aus mehreren Bestellungen sendet. Dann erzeugt man Eingangsrechnungspositionen, indem man die gelieferten Bestellpositionen aus der Bestellung sucht. Beim Buchen der Eingangsrechnung werden auch die Statistikfelder der Artikelstmme versorgt (EK-Preis max/min, Durchschnitt). Um EK-Preise vergleichen zu knnen, werden sie auf die Hauswhrung umgerechnet und so in den Statistiken abgestellt.

CRM u. Warenwirtschaft

84

7.15 Lager und Inventur

Lager- und Saldosicht im Artikelstamm

IntarS untersttzt Mehrlagerverwaltung. Allerdings knnen nicht beliebig viele Lager angelegt werden. Im Standard ist die Anzahl der Lager auf 6 begrenzt und die Lagerbestnde werden direkt im Artikelstamm gefhrt. Dieses Modell ist ein Kompromiss zwischen der Flexibilitt einer unbeschrnkten Mehrlagerverwaltung und Performance, bersichtlichkeit, Komplexitt, sowie Overhead bei Bearbeitungsvorgngen. Natrlich kann auch mit nur einem Lager gearbeitet werden. Dies ist die Einstellung bei Auslieferung der Software. Das Default-Lager ist am Benutzerstammsatz hinterlegt. Hier sollte das eingetragen werden, welches am hufigsten verwendet wird. Aus dem Benutzerstammsatz wird es in alle Belege vorbelegt, kann aber jeweils fallbezogen abgendert werden. Die hufigsten Lagerbewegungen sind Wareneingnge vom Lieferanten und Warenausgnge zum Kunden. In IntarS ist es so, dass dafr keine extra Lagerbewegungen erfasst werden mssen. Vielmehr wirken die Positionen der Belege direkt als lagerbestandswirksame Transaktionen. Fr Umlagerungen, Verschrottung und temporre Entnahme, z. B. zur Ansicht, werden jedoch Lagerbewegungen erforderlich.

hier wurde gerade der Lagerbestand erfasst

Inventur ist immer ein schwieriges Thema. Eigentlich mssten alle Belege verbucht sein, der Betrieb ruhen und dann Inventur gemacht werden. Das ist aber nicht immer praktikabel. Daher bietet IntarS eine laufende Inventurmglichkeit fr jedes Lager. Man kann jederzeit den vorgefundenen Lagerbestand eines Artikels erfassen. Dabei hlt das System den Zeitpunkt, den alten Bestand und die resultierende Inventurdifferenz fest. Es wird dann ein Inventurbuchungssatz geschrieben. Alle folgenden Buchungen bauen dann auf diesem neuen Bestand auf. Werden anschlieend Belege mit einem lteren Wirksamkeitszeitpunkt ins System gebracht, beeinflussen sie den Lagerbestand nicht mehr, sondern nur noch die Inventurdifferenz im folgenden Inventursatz. Kommt doch mal etwas Unvorhergesehenes dazwischen (Stromausfall, Hardwaredefekt, fehlerhafte Scripts, Vernderungen direkt per SQL), kann es mit dem Lagerbestands-Reorg im Artikelstamm wieder neu durchgerechnet werden. Das System geht dabei zurck bis zum neuesten Inventursatz, nimmt dessen Lagerbestand und saldiert dann alle zeitlich folgenden Bewegungen darauf und ermittelt so den neuen rechnerischen Lagerbestand.

CRM u. Warenwirtschaft

85

7.16 Preise

Spezialpreis fr einen Kunden

IntarS bietet standardmig ein einfaches Modell zur Preisfindung. Es gibt primr im Artikelstamm den Verkaufspreis. Dieser wird verwendet, wenn sonst nichts bekannt ist. Im Script "_rabatt_staffel.script" knnen systemweit Rabatte fr Staffelmengen hinterlegt werden. Man kann jedoch fr spezielle Kunden, Artikel, Mengen und Zeitrume Spezialpreise definieren, die dann vom System verwendet werden. Die Preisfindung in der Auftragsposition vermerkt, wie der Preis zustande kam. Weiterfhrende Preisfindungen (weitere Rabatte, Verbands-, Listen-, Kundenpreise, Preise fr Artikelkombinationen, umsatzabhngige Preise, Staffeln nach Artikelgruppen uvm.) werden in individuellen Skripten abgehandelt. Zustndig ist das Script "_subroutinen.script" und dort die Subroutine "preisErmitteln". Da hier alles mglich ist, gehen Sie bitte mit uester Vorsicht damit um. Es sollte mit endlichem Aufwand nachvollziehbar sein, wie ein Preis zustande kommt. Wenn der Preis sich so kompliziert berechnet, dass der Kunde jedesmal berrascht wird, ist nichts gewonnen. Je aufwndiger die Preisfindung, desto hher ist die Fehlerquote, auch bei den eigenen Mitarbeitern. Es sollte auch eine Preiserhhung berschaubar bleiben und evtl. eine Preisliste gedruckt werden knnen. Im Polstermbelbereich ist es z. B. so, dass oft nur fr einzelne Beispiele einer Konfiguration ein Preis genannt werden kann. Der vom System ermittelte Preis und Rabatt kann jeweils in Angebot, Auftrag, Lieferschein oder Rechnung nochmal manuell abgendert werden, sofern der Benutzer die Berechtigung dazu besitzt. Es bleibt immer die Mglichkeit bestehen, Nachlass- oder Zuschlagspositionen zu erfassen. Preise werden intern mit hherer Genauigkeit gefhrt. Das erffnet die Mglichkeit, optische Preis wie 9,99 mit/ohne MWSt. zu erreichen und verringert die Problematik der Rundungsdifferenz. Umstze werden nach den drei Umsatzsteuerstzen gruppiert. Jede Position eines Beleges enthlt das gesamte Zahlwerk in Haus- und Fremdwhrung, sowie mit den Umsatzsteuerstzen und -betrgen. Angezeigt bzw. weiterverarbeitet wird das, was aus dem Kontext heraus davon anzuwenden ist.

CRM u. Warenwirtschaft

86

Aus Preis und dem mittleren EK wird in jeder Belegposition der Rohgewinn (Deckungsbeitrag 1) berechnet. Dieser dient als Anhaltspunkt fr Preisverhandlungen.

7.17 Projektmanagement
Die Arbeit an und in Projekten gehrt fest zum beruflichen Alltag. Projektarbeit unterscheidet sich vom "normalen" Tagesgeschft. Projekte haben hufig eine definierte Zielvorgabe, sind zeitlich begrenzt, haben ein limitiertes Budget und eine spezifische Organisation. Projekte sind in der Regel einmalig. Das heit, dass zwar bestimmte Aufgaben eines Unternehmens fter vorkommen und hnlich sein knnen, sich aber bezogen auf die Rahmenbedingungen unterscheiden. Gehen Sie folgendermaen vor: 1. 2. 3. 4. 5. 6. Legen Sie ein Projekt an und ordnen sie diesem Projekt einen Kunden zu (Bild 1). Geben Sie das Startdatum und die geplanten Stunden im Register "Controlling" an. Legen Sie neue Projektpositionen an, indem Sie auf "neue Projektpos." klicken. Erfassen Sie im Projektmanagement die Vorgnge (Bild 2). Klicken Sie auf den Button "Start Arbeit", um eine neue Zeiterfassung zu starten. Klicken Sie auf den Button "Stop Arbeit", um die Zeiterfassung zu stoppen. Bitte geben Sie im Kommentar an, was sie getan haben. ber den Button "Zusatz anfgen" knnen zustzlich Texte, Informationen etc. an den Projektvorgang anfgt werden. Diese werden dann mit Datum und Zeit erfasst. Im Register "Context" knnen Sie Einstellungen wie Stundensatz (ein entsprechender Artikel muss dazu im Artikelstamm erfasst worden sein), Termin, Prioritt oder auch den Grad der Bearbeitung eintragen. Desweiteren knnen Sie hier Notizen erfassen (Bild 3). Die erstellten Projektpositionen knnen in die Rechnungspositionen bernommen werden.

7.

8.

9.

Bild 1: Ein Projekt anlegen.

CRM u. Warenwirtschaft

87

Bild 2: Projektmanagement

Bild 3: Projektcontext

CRM u. Warenwirtschaft

88

7.18 CRM
Kundenbeziehungsmanagement oder Kundenpflege (CRM, engl. Customer Relationship Management) bezeichnet die Dokumentation und Verwaltung von Kundenbeziehungen. Die Ziele sind Neukundengewinnung, Bestandskundenpflege und Kundenrckgewinnung.

Neukundengewinnung
Bevor man Kunden hat, bentigt man zuerst Adressen. Diese erhlt man aus verschiedenen Quellen: Visitenkarten auf Messen und Veranstaltungen sammeln, Lektre einschlgiger Zeitungen oder Zeitschriften, gelbe Seiten, Adresshndler, IHK, Internet etc. Interessenten melden sich aber auch von selbst (sog. passiver Vertrieb). Die Adressen werden in IntarS eingepflegt bzw. ber das Import-Modul eingelesen. Diese neuen Adressen werden zunchst gegliedert, indem ihnen Stichworte zugeordnet werden. Damit dokumentiert man, woher die Adresse kam, fr welche Produkte sich der Kunde interessiert, wie lukrativ er ist, welches Potential er hat usw.; eben alles, worauf es bei der weiteren Steuerung der Vertriebsaktivitten ankommt. Im volltextsuchfhigen Memofeld einer jeden Adresse knnen smtliche Informationen unstrukturiert abgelegt werden, die man ber die Adresse hat. Hat man noch weitere Unterlagen zur Adresse, knnen diese ber das Dokumentenmanagement eingebracht und zugeordnet werden. Beziehungen zwischen Adressen werden ebenfalls ber Zuordnungen dokumentiert. Regelmig werden die neuen Adressen entsprechend der vorgenommenen Gruppierung einer ersten Kontaktaufnahme unterzogen. Das kann ein Telefonat, E-Mail, Fax, Anschreiben o. . sein. IntarS untersttzt alle diese Kommunikationsformen. Inhalt und Kontext der Kommunikation werden dabei in einer Akte festgehalten, welche der betroffenen Adresse fest zugeordnet ist. Im Verlauf der Kundenbeziehung wird es zu weiteren Kommunikationsvorgngen kommen, die entweder eine bestehende Akte erweitern oder eine neue hinzufgen. So ist lckenlos dokumentiert, mit welchem Ergebnis etwas zu einem bestimmten Zeitpunkt kommuniziert wurde. Eine Kommunikation kann auch vom Kunden initiiert werden, z. B. durch einen Anruf oder eine E-Mail. Diese werden auch in IntarS dokumentiert. Bei einem Anruf wird mit einem Klick eine Telefonnotiz erzeugt und das Gesprch darin notiert. Sie erscheint im Plugin auf der Startseite des zugehrigen Kundenbetreuers. Dann klickt er darauf und kann sie bearbeiten. Gibt es nichts zu tun, setzt dieser den Status auf "erledigt". Aus der Notiz kann eine Aufgabe, ein Termin oder eine Wiedervorlage gemacht werden und taucht entsprechend in anderen Plugins und/oder im Kalender auf. Davon unabhngig sollten Sie sich berlegen, wie Sie vorgehen mchten. Hier gibt es je nach Branche und Unternehmen unterschiedliche Verfahren. IntarS schreibt nichts vor, sondern bietet Werkzeuge an, ein Verfahren zu implementieren. Die Werkzeuge heien Recherche, Stichworte, Akten, Wiedervorlage, Termine, Verteilerlisten und Anschreiben (auch per Fax oder E-Mail). Ein denkbares Verfahren ist, dass eine Adresse die Stadien "neu", "Erstkontakt", "Interessent", "Prsentation", "Angebot" und "Kunde" durchluft. Jederzeit kann es eine Abzweigung in Richtung "kein Interesse" geben. Diese Zustnde dokumentiert man durch die Zuordnung ebensolcher Stichwrter. IntarS bietet Funktionen, nach Stichwrtern und Kombinationen von Stichwrtern zu suchen und zu recherchieren. Mit weiteren Stichwrtern kann man bei Bedarf dokumentieren fr welches Gebiet, welche Produkte, Kulturkreise oder Budgets die Adresse wichtig ist. Auderdem ist in dem Verfahren festgelegt, was mit den Adressen, die einen bestimmten Zustand haben, geschehen soll. Beispielsweise knnte es so sein, dass allen Erstkontakten ein Anschreiben geschickt wird. Wer nach zwei Wochen nicht oder negativ reagiert hat, wird zu den Adressen aussortiert, welche "kein Interesse" haben. Die zwei Wochen berwacht man mit Wiedervorlage. Es lassen sich auch Plugins anlegen, die alle Adressen zeigen, welche momentan fr eine bestimmte Aktion in Frage kommen. Wer positiv reagiert, aber nicht gleich konkret etwas bestellt, wird zum "Interessent". Fr Interessenten sind weitere Aktionen jeweils wieder mit Zeithorizont vorgesehen. Dies sind typischerweise Beratungsgesprche oder die Zusendung detaillierter Unterlagen. Sobald ein "Interessent" etwas gekauft hat, wird er zum "Kunden". Es ist ein guter Gedanke, das gesamte Kundengewinnungsverfahren samt Arbeitsanweisungen zu dokumentieren und im System in das Dokumentenmanagment abzulegen. Prsentationen wird man bei Interessenten machen, bei denen es um ein greres Volumen geht. Man hatte schon einiges im Vorfeld miteinander zu tun und hat dies auch dokumentiert, kann man sich bei der Prsentation auf den Interessenten einstellen. Entscheidet sich der

CRM u. Warenwirtschaft

89

Interessent nicht schon bei der Prsentation fr das Produkt, wird man ihm ein oder mehrere Angebote ausarbeiten. Um ein mglichst mageschneidertes Angebot erstellen zu knnen, greift man auf all die Informationen zurck, die man bisher gesammelt hat und welche in Form von Akten an der Adresse hngen. Hat er auch nach mehreren Angeboten oder einigen Monaten nicht unterschrieben, wird man ihn leider doch unter "kein Interesse" ablegen mssen. Gelegentlich kann per Recherche berprft werden, welche Interessenten in welcher Phase aus welchem Grund verloren wurden, um doch noch einmal nachzuhaken. Vor allem, wenn mittlerweile Ereignisse eingetreten sind, die eine neue Situation ergeben.

Bestandskundenpflege
Weil IntarS eine angeschlossene integrierte Warenwirtschaft hat, geht es nahtlos ber. Befinden Sie sich in einem Kundenstammsatz, haben Sie alle Informationen zu diesem Kunden komplett beieinander: die vollstndige Historie, umfassende Kommunikationen, alle Geschftsvorflle, Angebote, Auftrge, Rechnungen und Zahlungen. Ruft der Kunde an, sind Sie sofort im Bilde und knnen fundiert mitreden. So wie man einen Neukundengewinnungsplan hat, sollte man auch einen Bestandskundenpflegeplan erstellen. berlegen Sie sich, welche Aktionen (Newsletter, Gutscheine, Produktinformationen, Boni, Geschenke, Anschreiben...) fr welche Kunden vorgesehen sind. Beispielsweise sollen alle Kunden, die Produkt A bezogen haben, informiert werden, dass es ein verbessertes Nachfolgeprodukt A1 gibt. Oder es erhalten alle Kunden, deren Umsatz in den letzten sechs Monaten deutlich gefallen ist, einen Gutschein. A-Kunden bekommen an Weihnachten z. B. ein Geschenk. Das Mittel, die Zielgruppe fr eine Aktion zu identifizieren, ist die Recherche.

7.19 Recherche
Recherche bedeutet, in mehreren aufeinander aufbauenden Suchschritten eine Ergebnismenge von Kunden zu ermitteln, z. B. um diesen einen Brief zu schicken. Man geht dabei wie folgt vor: 1. 2. 3. 4. 5. Planen Sie die Recherche sorgfltig, seien Sie sich im Klaren darber, welche Kunden Sie suchen. Rufen Sie das Modul "Kunde" auf und klicken Sie auf das Register "Recherche". Lschen Sie bitte zuerst die letzte Recherche ("R lschen") (1). Diese wird der Recherche hinzugefgt ("R dazu") (2). In beliebig vielen weiteren Schritten knnen Sie weitere Suchvorgnge durchgefhren. Das Ergebnis knnen Sie der Recherche hinzugefgen ("R dazu"), aus ihr entfernen ("R weg") oder mit der bestehenden Recherche ("R und") verknpfen (3). Einzelne ausgewhlte Stze knnen Sie manuell der Recherche hinzugefgen oder aus ihr entfernen (4). Aus einer Recherche knnen Sie eine Verteilerliste erzeugen ("R Verteilerliste"), die wiederum als Datenquelle fr Anschreiben dienen kann (6). Sie knnen auch allen recherchierten Kunden ein (neues) Stichwort zuordnen, um sie spter leichter identifizieren zu knnen. Kunden, die sich in der Recherche-Menge befinden, werden blau dargestellt. Mit dem Button "Recherchierte" (5) knnen Sie die Anzeige auf die Recherche-Menge eingeschrnken.

6.

7.

8.

9.

CRM u. Warenwirtschaft

90

Recherche

Jeder Benutzer hat seine eigene Recherche-Ergebnismenge, die auch nach dem Abmelden erhalten bleibt. Technisch ist dies als Datenbanktabelle pro Benutzer realisiert, welche die recherchierten Kundennummern enthlt. Wieviele Kunden sich in der Recherche-Menge befinden, wird als "Anzahl recherchierte" angezeigt. Kunden aus Verteilerlisten knnen ebenfalls der Recherche-Menge hinzugefgt werden.

Stichwort-Recherche
Ordnen Sie Stichworte dem Kunden zu, um sie zu klassifizieren und mit Eigenschaften zu versehen. Nach diesen Stichworten kann ebenfalls recherchiert werden. Angenommen, man mchte alle Kunden, die bei den Grillparties 2009 und 2010 dabei waren, dabei aber die Familienmitglieder ausnehmen und von den verbliebenen nur die Hundehalter ermitteln. Gehen Sie folgendermaen vor: 1. Rufen Sie zunchst das Modul "Stichworte" auf; evtl. mit Hilfe des Buttons "zu den Stichworten" im Modul "Kunde". Lschen Sie bitte zuerst die letzte Recherche (Stichwort-Recherche), indem Sie auf "Recherche lschen" klicken. Markieren Sie "Grillparty 2009" und klicken auf "dazu". Markieren Sie "Grillparty 2010" und klicken auf "dazu". Markieren Sie "Familie" und klicken Sie anschlieend auf "weg". Markieren Sie "Hundehalter" und klicken auf "und". Beachten Sie, wie sich die "Anzahl recherchierte" verndert. Klicken Sie nun auf "Kunden anzeigen".

2.

3. 4. 5. 6. 7. 8.

Mit einem Klick auf "Kunden anzeigen" wird eine Suche im Kundenmodul durchgefhrt. Das Ergebnis kann in der Kunden-Recherche weiterverwendet werden. Stichwort- und Kundenrecherche sind zwei verschiedene, von einander unabhngige Recherchen.

CRM u. Warenwirtschaft

91

Stichwort-Recherche

Ein weiteres Beispiel:


Sie mchten alle Kunden ermittel, die keinen Hund halten. 1. Rufen Sie das Modul "Stichworte" auf; evtl. mit Hilfe des Buttons "zu den Stichworten" im Modul "Kunden". Lschen Sie die letzte Recherche (Stichwort-Recherche), indem Sie auf "Recherche lschen" klicken. Klicken Sie auf "alle". Markieren Sie "Hundehalter" und klicken anschlieend auf "weg". Klicken Sie nun auf "Kunden anzeigen".

2. 3. 4. 5.

Systemeinstellungen

92

8 Systemeinstellungen
8.1 Config-Modul

Das Config-Modul

Im Config-Modul knnen Administratoren systemweit Einstellungen vornehmen. Diese gliedern sich in die Bereiche:

Globale Steuerung Schlssel, Aktives Profil


Der primre Schlssel des Konfigurations-Profils. Es knnen mehrere Profile angelegt werden. Um eines zu aktivieren, verwenden Sie den Button "aktivieren". So kann leicht die Konfiguration gendert (z. B. Produktivbetrieb, Testbetrieb) bzw. nderungen protokolliert werden.

Schnellstart
Die Anwendung startet schneller, wenn einige ressourcenverbrauchende Features, z. B. BLZ/Ktoprfung und Fontmetriken von Unicode-Zeichenstzen, abgeschaltet werden. Meist kann darauf verzichtet und dieses Flag markiert werden.

SessionTimeOut
Gibt die Default-Inaktivitts-Zeit in Sekunden an, nach der eine Session vom System gelscht wird. Im Benutzerprofil kann eine davon abweichende Zeit fr den jeweiligen Benutzer hinterlegt werden.

verify Delete
Erfordert die Besttigung einer Rckfrage vor dem Lschen.

keine Disposition
Schaltet alle Dispositionsfunktionen aus, was den Workflow vereinfacht, aber zu negativen Lagerbestnden fhren kann.

Max. Anzahl Login Fehlversuche


Hier kann eine maximale Anzahl an Login-Fehlversuchen festgelegt werden. Standardmig ist "0" angegeben, was bedeutet, dass es keine Begrenzung gibt.

Insertionpoint
Hier wird festgelegt, an welcher Stelle eine neu angelegte Position angeordnet wird.

Systemeinstellungen

93

XHTML rendern
Oberflche wird mit XHTML anstatt HTML dargestellt.

nur https
Sicheres Protokoll zur bermittlung von Daten.

Fetch Limit
Stellt die Anzahl der Datenstze ein, die standardmig mit einem Suchaufruf maximal gelesen werden. Dieser sog. Arbeitsvorrat sollte nicht zu gro, wegen Performanceeinbuen, und nicht zu klein sein, sodass man beim Blttern nicht zu oft nach-fetchen muss.

Anzahl Berechtigungsgr.
Stellt die Anzahl der Berechtigungsgruppen ein. Wenn nichts anderes eingegeben wurde, sind es standardmig 10 Gruppen.

thumbCmd Linux
Das Shell Kommando, um aus einem Bild ein Thumbnail zu erzeugen; unter Linux: /usr/bin/convert -resize 100x100 "%@" "%@"

thumbCmd Windows
Das Shell Kommando, um aus einem Bild ein Thumbnail zu erzeugen; unter Windows z. B.: c:/Programme/ThumbNailer/thumb7n /h /f "%@" "%@" /n! /o 3 /s 100 100 /r 0

Produktname
Wird im Hilfe-System und beim Web-Publishing anstelle von $ {product} eingesetzt.

Logging Log Feldwert-nderungen


Wenn es aktiv ist, werden smtliche Editiervorgnge, die durch Feldnderungen im Browser hervorgerufen werden, geloggt. Dies hilft herauszufinden, warum ein Satz durch Anklicken als gendert erscheint. Hufige Quellen ungewnschter nderungen sind Zeilenumbrche in einzeiligen Feldern (wird vom Browser abgeschnitten), unmotivierte Umformatierungen in Memo-Feldern durch den Browser (einfgen bzw. entfernen von 0xA, 0xD), ungltige Werte in Feldern mit Auswahllisten (Feldinhalt wird gelscht). Sollte nur zu Debuggingzwecken eingeschaltet werden, da es viel Log-Output erzeugt.

log actions
Steuert, dass alle Benutzer-Interaktionen mitgelogged werden. Erzeugt viele Daten. Im Falle eines Fehlers kann aber nachvollzogen werden, was davor geschah.

log ScriptNames
Logt den Start und das Ende von Skripten, mit Name und Verschachtelungstiefe.

SQL debug
Logt alle Befehle der Datenbank mit, erzeugt aber viel Output. Jedoch kann man genau sehen, welche Befehle die Datenbank erhielt.

Systemeinstellungen

94

ORB debug Stack


Gibt bei executeSQL auch den Stack aus.

Druck Direkt-Druck
Schaltet den Direkt-Druck ein/aus. Direkt-Druck gibt in bestimmten Situtationen (z. B. Pick-Etiketten) den Druck direkt ohne Vorschau auf einen Drucker aus. Das kann hier fr Testzwecke unterbunden werden.

abw. Druckdatum ...


Wird hier etwas angegeben, wird es in Queries als Druckdatum ausgegeben, sonst wird das Tagesdatum gedruckt.

Fonts immer embededden gs path


Voller Pfad zum Ghostscript, falls nicht im $PATH. Ghostscript wird in bestimmten Fllen bentigt, um PDF fr Drucker aufzubereiten (PDF nach PS, Fontembedding).

allgemeiner Futext
Hier kann ein Text eingegeben werden, der auf allen Belegen am Ende der Seite angedruckt werden soll.

Kommunikation Server
Name des Servers intern und extern. Es kann hier auch eingestellt werden, wie das interne Subnetz beginnt. Manche Funktionen drfen nur von Benutzern aus dem internen Subnetz ausgefhrt werden. IntarS kann die IP-Adresse eines Benutzers daraufhin abprfen.

Mail
Einstellungen, wie ein Mail-Server fr ausgehende E-Mails erreicht werden kann sowie das Directory, um E-Mails im .eml-Format ins Dokumentenmanagement zu importieren. Unter Linux wird mglichst "mutt" verwendet, unter Windows der freie "blat".

Fax
Einstellungen, wie ein Fax-Gateway fr ausgehende Faxe erreicht werden kann. Unter Linux geht es mit dem "sendfax", unter Windows kann der GFI-Faxmaker angesprochen werden.

SMS
Einstellungen, wie ein SMS-Gateway erreicht werden kann, z. B. Team-Msg oder SMS77.

Layout
Dies sind zentrale Einstellungen, um das Verhalten der regelbasierenden Layoutengine fr die Oberflche zu steuern. Bevor Sie hier etwas ndern, sollten Sie das Konzept verstanden und Erfahrungen mit der Oberflche gesammelt haben.

Raster
Gibt an, wieviel Pixel eine Rastereinheit hat.

Systemeinstellungen

95

Short Fields
Bewirkt, dass auch Felder > 50 Zeichen nicht lnger angezeigt werden.

max col. width


Maximale Breite einer Spalte in der Trefferliste in Buchstaben.

rows on page
Gibt an, wieviele Zeilen pro Seite in der Trefferliste zu sehen sind, wenn diese Standardgre hat.

rows on page long


Gibt an, wieviele Zeilen pro Seite in der Trefferliste zu sehen sind, wenn diese Maximalgre hat.

rows on page poseditor


Gibt an, wieviele Zeilen pro Seite in der Editierliste des PBWOPosEditor zu sehen sind.

Bez Width Raster


Steuert die Breite der Bezeichnung hinter einer Relation in Rastereinheiten.

Descr Width Raster


Standardbreite der Felddescriptoren in Rastereinheiten.

Edit Width Raster


Breite des Editierbereiches in Rastereinheiten.

Kein Sytem-Tab
Wenn eingeschaltet, haben normale User kein "System"-Register. Im "System"-Register liegen z. B. die Felder letztes nderungsdatum/User, Anlagedatum/User sowie einige Buttons und Werkzeuge fr Administratoren.

max. Anz. Spalten


Legt fest, wieviele Spalten die Trefferliste maximal umfassen soll.

mit Bild-Filnamen
Bild-Dateinamen in Hilfe anzeigen.

Minimize Tableview
Wenn angehakt, wird, wenn eine Zeile angeklickt wurde, die Tabelle ausgeblendet.

Decimal Point
Ist es angehakt, erscheint ".", sonst ",".

my IntarS
Hier werden die Firmenstammdaten eingetragen. Sie werden standardmig am Ende von Belegen angedruckt. Auch ein abweichender Name fr das Firmenlogo (default: logo.jpg) kann hier eingetragen werden. Des Weiteren sind hier Datev-Zugangsdaten hinterlegt, sofern die Datev-Schnittstelle verwendet wird.

db
Dies ist die Stelle, um Datenbank-Zugangsdaten anzugeben. Fr standardmig 4 Datenbanken knnen Server, User und Passwort angegeben werden. Mssen noch mehr Datenbanken angesprochen werden, lassen sich die Zugnge problemlos vermehren. Trgt man nichts ein, wird als Server "localhost", User "root", Passwort "root" und DB-Name "aprica2_000230" angenommen.

Systemeinstellungen

96

8.2 Module verwalten

Die Modulverwaltung

Anwendersicht
Ein Modul in IntarS ist synonym zu den Begriffen "Maske", "Bildschirm", "Programm" oder "Dynpro" aus anderen Systemen. Es ist eine logische Einheit fr eine in sich geschlossene Bearbeitung. Bei der Arbeit mit IntarS befindet man sich immer in genau einem Modul. Alle Module finden sich im Hauptmen. Das gerade aktive Modul zeichnet den Bildschirminhalt und nimmt die Benutzerinteraktionen entgegen.

Technik
Technisch ist ein Modul in IntarS nicht ein ausprogrammiertes Stck Code, sondern benennt lediglich eine Klasse, von der eine Instanz zur Laufzeit die Kernfunktionen des Moduls liefert und die von PBWOEditor erben muss. Die Instanzen werden erst bei Bedarf erzeugt. Da sie berwiegend der Klasse PBWOEditor angehren, haben sie alle dasselbe Codesegment, was Hauptspeicher spart. Die Moduldefinition ist eine leichtgewichtige, performante Reprsentation. Instantiierte Module leben innerhalb einer Session, die wiederum pro Benutzeranmeldung erzeugt wird und bei zu langer (einstellbarer) Inaktivitt automatisch beendet wird, wobei der Speicher wieder freigegeben wird. Diese Technik trgt dazu bei, dass IntarS mit wenig Systemressourcen auskommt und sehr performant luft.

Verwaltung
Die Modul-Verwaltung obliegt den Administratoren. In IntarS wird ein Modul gebildet, indem festgelegt wird, von welcher Klasse es zur Laufzeit eine Instanz sein soll. Optional knnen ein abweichendes Template fr die Oberflche und eine Tabelle aus dem Meta-Datenmodell hinzukommen. Auerdem kann man einstellen, unter welcher Unterrubrik das Modul im Men erscheinen soll, mit welchem Krzel man es per Tastatur aufrufen will, wie es an der Oberflche heien soll sowie ein paar weitere Steuerungsflags. Module werden in der Datenbank verwaltet. Module knnen mit Berechtigungen (rollenbasierendes Berechtigungsmodell) versehen werden. Ein Modul muss auf der Klasse PBWOEditor oder einer ihrer Subclasses basieren. PBWOEditor ist auch die Default-Klasse, die verwendet wird, wenn nichts anderes angegeben ist. Wer kann, kann auch fr ganz individuelle Module eigene Klassen in ObjC programmieren. In IntarS ist z.B. das Kalender-Modul ein solches. Nach dem Verwalten der Module muss die Anwendung neu gestartet werden.

Systemeinstellungen

97

PBWOEditor
Diese Klasse ist das Arbeitspferd in IntarS. PBWOEditor stellt sicher, dass das Modul vom Laufzeitsystem verwendet werden kann (Men, Oberflche, Aufruf, Suchen, Berechtigungen, elementare Events, Navigation). Die Oberflche eines Moduls bestimmt sich nach seinem Template (htmlwod File). Benennt man kein spezielles Template, wird ein Template gesucht, das genauso heit wie das Modul. Wird keines gefunden, wird das Default-Template verwendet. 90% aller Module tun dies. Ein Template enthlt das HTML-Gerst mit variablen Elementen, deren Inhalt sich ber die Bindings zur Laufzeit bestimmt. Das ist das Prinzip von WebObjects und auch anderer Template-Systeme, wie z.B. ClearSilver. PBWOEditor kann eine Tabelle kennen (abstract oder real), aufbauend darauf eine reichhaltige Verwaltungsoberflche anbieten und die Infrastruktur des Frameworks nutzen. 90% aller Module verwalten eine Tabelle, nur wenige Spezialmodule wie z.B. LoginUser, Doku oder Kalender tun dies nicht. PBWOEditor bedient auch alle Events, um sein Verhalten anzupassen. Typischerweise wird man diese Klasse nehmen (indem man nichts Abweichendes eintrgt), wenn man ein neues Modul definiert. Man erstellt im Meta-Datenmodell eine neue Tabelle und legt in der Modulverwaltung ein neues Modul an, um die Tabelle zu verwalten.

PBWOViewer
Dies ist eine Subclass von PBWOEditor, die nur Daten zeigt, aber nichts ndern oder lschen kann. Da man mehrere Module auf dieselbe Tabelle aufsetzen kann, ist es mglich, gleichzeitig ein Verwaltungs- und Anzeige-Modul zu haben, die verschieden berechtigt werden knnen.

8.3 Meta-Datenmodell verwalten

Ausschnitt aus der Modellverwaltung

Das Meta-Datenmodell (auch Repository oder DataDictionary) ist ein zentraler Bestandteil von IntarS. Daraus leiten sich die Datenbankstruktur, Oberflchen-Elemente und Constraints ab. Wie alles in IntarS ist es frei verwaltbar. Da es so gro ist, wird es ber Datenbanktabellen verwaltet. Fr IntarS und verteilte Entwicklung mit Subversion wird es zustzlich in einem Textfile "Mandant.idm" gespeichert. Nach Editierungen in der Modulverwaltung muss es daher mit dem Button "DB to IDM" exportiert werden. Von IntarS wird das exportierte Modell beim Start geladen und interpretiert. Zur Beschleunigung spterer Startvorgnge wird ein binres Archiv des Modells geschrieben. Ist so ein Archiv vorhanden, wird dieses verwendet. Hat aber das exportierte Textfile

Systemeinstellungen
(*.idm) ein neueres Datum, wird das Archiv verworfen und neu erstellt.

98

Das Metadatenmodell strukturiert sich in Tabellen (Master) und Attribute (Detail). Obwohl diese Begriffe aus dem Datenbankbereich entlehnt sind, mssen sie abstrakter verstanden werden, eher im Sinne des Entity-Relationship Modells. Eine Tabelle ist eigentlich nur eine Sammlung von Attributen. Tabellen, die tatschliche Datenbanktabellen erzeugen sollen, werden als "real" tables definiert, das andere sind "abstract" tables. Standard-Tabellen sollten von Mandanten nicht verndert, allenfalls erweitert werden. Sie enthalten hauptschlich Systemdaten wie z. B. das Modell selbst, die Module, Benutzer etc. Eine unsachgeme nderung wrde die Systemintegritt gefhrden. Zustzliche Felder hinzuzufgen ist jedoch nicht kritisch. Unter dem Dach einer Tabelle werden deren Attribute verwaltet. Dies knnen sein:

TVCSelObj - Normale Felder


Ziel-Typ "TVCSelObj" (TableViewController selected Object ist Datenquelle). Der Name TableViewController ist historisch bedingt. In der Vergangenheit, als IntarS unter NeXTSTEP, dann OpenStep als Desktop-Anwendung lief, gab es eine Klasse namens "NSTableView" im AppKit. Damit erstellte man Tabellen fr die grafische Oberflche. Im Zuge des Umbaus auf WebApplicationServer-Architektur wird diese Klasse seit dem Jahr 2001 von Methoden des PBWOEditor nachgebildet. Dieser Feldtyp ist der hufigste. Er reprsentiert ein Datenbankfeld, wenn das Datenbank-Flag aktiv ist. Einzustellen gibt es den Datentyp, Lnge, Nachkommastellen, evtl. Primrschlsseltyp, Constraints (Pflichtfeld, duplizierbar, sichtbar, geschtzt), Hints (Combi-Suchfeld, Bezeichnung). Jedes Feld hat zwei Dokumentationen, auf deutsch und englisch. Die Eigenschaften im einzelnen:

Datenbankname
Interner Name des Attributes. Hierber kann es in Skripten eindeutig innerhalb der Tabelle adressiert werden. Liegt das Feld in der Datenbank, heit es auch dort so. Der Datenbankname muss kleingeschrieben sein und sich an die Konventionen fr Feldnamen in MySQL halten. Auch in IntarS gibt es Konventionen: bu_.... fr Buttons p_... fr Parameterfelder po_... fr Plugins masterkey zwingend fr eine Master-Detail Relation

Oberflchenname
So heit das Feld an der Oberflche. Oberflchenname1 ist fr die englische bersetzung. Der Oberflchenname unterliegt keinen Beschrnkungen und kann frei gendert werden.

Reference
Wird hier der Name einer abstract table eingetragen, wird das Attribut zur Laufzeit durch die Attribute der abstract table ersetzt. Diese kann brigens wieder Referenzen auf weitere abstract tables haben usw. Es wird rekursiv aufgelst.

Relation
Dient dazu, eine Relation zu einer anderen Tabelle herzustellen. Das Attribut enthlt dann den Fremdschlssel. ber das Framework kommt die Logik hinzu, dass der PBWOEditor einen Link zum Zieldatensatz, Validierung und Nachschlagefunktion beisteuert. In IntarS haben alle Tabellen einen Primrschlssel, der nur aus einem Feld besteht. Es gibt keine zusammengesetzten Schlssel. Somit kann man eine Relation zu einer anderen Tabelle immer ber ein einziges Attribut herstellen. Der Primrschlssel einer Tabelle sollte nur dazu dienen, einen Datensatz eindeutig zu identifizieren. Sog. sprechende Schlssel sind ein Relikt aus den Anfngen der IT.

Systemeinstellungen

99

Datentyp, Lnge, Nachkommastellen


Aus der groen Vielzahl mglicher Datenbankdatentypen wird von IntarS eine sinnvolle Untermenge zur Verwendung angeboten. Character werden in der Datenbank zu varchar. Lnge gibt die maximale Eingabelnge im Feld an. Gibt man eine Lnge grer 255 an, entsteht daraus ein Memo-Feld von 64 KB. An der Oberflche erscheint es als Textarea. Bool-Felder enthalten eine Ja/Nein-Information. An der Oberflche erscheinen sie als Hkchen, in der Datenbank als char(1) Feld mit der Reprsentation "J" fr wahr und "N" fr falsch. Datums- und Date-Time-Felder bekommen durch das Framework eine Nachschlagefunktion auf den Firmenkalender. Er wird zur Auswahl eines Termins aufgeblendet, wenn man am Ende einen "." eingibt und Return drckt. Datumsfelder fungieren auch als Rechenfelder, siehe den entsprechenden Hilfeeintrag. Float nimmt man fr alle numerischen Felder mit Nachkommastellen, Money fr solche mit zwei Nachkommastellen. Die Lnge bei float Feldern meint die mgliche Gesamtzahl der Ziffern. Fr ganzzahlige Werte steht der Integer-Datentyp zur Verfgung. Er sollte mglichst vorrangig vor dem float-Typ genommen werden, da er besonders wenig Resourcen in der Datenbank und bei der Verarbeitung in Skripten bentigt. Auch fr Primrschlssel ist der Integer-Datentyp sehr ansprechend, weil darauf effizient Indexe gebaut werden knnen. Bei Joins verbrauchen diese wenig Speicher. Insgesamt ergibt sich eine bessere Performance bzw. geringere Datenbankbelastung.

Initialisierungswert
Initialisiert das Feld mit diesem Wert, wenn ein neuer Datensatz erzeugt wird.

Combi-Suchfeld
Vergibt einen Rang, der ein Feld in die Reihenfolge der Combi-Suchfelder einreiht. Combi-Suchfelder spielen die entscheidende Rolle bei der generischen Suche. Wird im Combi-Suchfeld eines Moduls ein Suchbegriff eingegeben, wird sukzessive ber die Combisuchfelder zunehmend unschrfer gesucht bis eine akzeptable Trefferanzahl ermittelt wurde. Das System macht von sich aus Indexe auf Combisuchfelder. Memofelder werden dabei mit ihren ersten 60 Stellen indiziert.

Datenbank
Ein Feld liegt in der Datenbank. Felder, die nicht in der Datenbank liegen, mssen ihren Wert ber ein Skript, eine Expression oder vom Modul beschaffen.

Bezeichnung
Vergibt einen Rang, der ein Feld in die Reihenfolge der Bezeichnungs-Felder einreiht. IntarS zeigt fr jeden Datensatz eine Beschreibung an, die sich aus den zusammengeketteten Inhalten ausgewhlter Bezeichnungsfeldern zusammensetzt. Welche Felder und in welcher Reihenfolge das sind, kann hier festgelegt werden.

Duplicate
Das Feld wird beim Duplizieren mitkopiert. Auch beim Anlegen einer neuen Position werden Feldinhalte vom Kopf auf die Position kopiert, wenn die Felder gleich heien und das Duplicate-Flag gesetzt ist.

Pflicht
Dieses Feld ist immer ein Pflichtfeld. Ist es auf dem Bildschirm zu sehen, muss es gefllt werden. Damit man das vorher schon wei, hat es einen hervorgehobenen Deskriptor.

Systemeinstellungen

100

Geschtzt
Das Feld ist immer geschtzt. Es ist nur ein Anzeigefeld und kann nicht editiert werden.

Sichtbar
Das Feld ist prinzipiell sichtbar.

HTML
Das Feld kann html-Daten enthalten, die unescaped an die Oberflche gelangen sollen.

Schlsseltyp
Maximal ein Feld pro Tabelle kann als Primrschlssel (eindeutiger Schlssel, primary Key) definiert werden, indem man ihm hier den Schlsseltyp setzt. Primary ist ein von Hand vergebbarer Schlssel. Serial bewirkt, dass die Datenbank den Schlssel selbst fortlaufend vergibt. Dies ist vorzuziehen, wenn man nicht unbedingt einen besonders aufbereiteten Schlssel braucht.

Zielmodul
Bei Relationen kann hier ein Hinweis fr das Framework gegeben werden, mit welchem Modul der Zieldatensatz geffnet werden soll, wenn auf den Link geklickt wird.

Root
Dieses Feld oder Button sieht nur der Root, egal welche anderen Berechtigungseinstellungen vorliegen.

Ausdruck
Hier kommt ein Ausdruck, ein Skript oder der Filename eines Skripts hinein. Bei Feldern kann hierber der Wert ermittelt werden, wenn es sich nicht um ein Datenbankfeld handelt. Eine hufige Anwendung hiervon sind sog. flattened Relations: Es werden Werte aus anderen Tabellen beschafft, die ber Relationen zu erreichen sind. Bei Buttons wird hier implementiert, was passieren soll, wenn auf den Button geklickt wird. Ist das ein kleines Skript, kann es direkt komplett hier hinein geschrieben werden. Ansonsten wird das Skript an seine ordentliche Stelle im Filesystem gespeichert und sein Filename hier eingetragen. Es ist gute Konvention, das Skript so zu nennen wie der Datenbankname des Feldes. Das System unterscheidet anhand der Anzahl der Zeilen, ob nur ein Ausdruck (eine Zeile) oder ein Skript (mehr als eine Zeile) vorliegt. Hat man tatschlich nur ein einzeiliges Skript, z. B. den Aufruf einer bersicht, muss man durch Eingabe einer folgenden Kommentarzeile die Zeilenzahl auf grer eins bringen. Ist es ein Skript, das den Wert des Feldes ermittelt (nicht nur eine Expression), muss der ermittelte Rckgabewert in die Variable $_lastMethodReturnValue gestellt werden. Skripte, die als Source in diesem Feld stehen, werden zur Ausfhrungszeit unter dem Kontext des EO als Datasource ausgefhrt. Skripte, deren Sourcen in einem File liegen, werden unter dem Kontext des Moduls als Datasource ausgefhrt.

Doku0
Dokumentation in deutsch/english. Erscheint bei Buttons als Tooltip. Klickt man in IntarS auf den Namen eines bereits aktivierten Moduls, wird die Modulhilfe angezeigt, die sich aus dem Inhalt dieser Dokumentationsfelder aufbaut. Bei Buttons gibt es noch eine Besonderheit: trgt man in der Doku einen Tastaturbefehl ein, z. B. "(Alt-x)", wird dies vom Laufzeitsystem erkannt und der Button kann mit dieser Tastenkombination ausgelst werden.

Werteliste
Gibt man hier etwas in der richtigen Syntax ein, erscheint das Feld an der Oberflche als Dropdown-Liste. Die richtige Syntax sieht so aus: intern|GUI deutsch|GUI english intern ist der interne Wert, wie er in der Datenbank gespeichert und in Skripten abgefragt wird. GUI deutsch ist der Wert wie er an der Oberflche erscheint und ist frei verwaltbar. GUI english ist optional und erscheint fr Benutzer, die in ihrem Stammsatz eine andere als die deutsche Sprache eingestellt haben.

Systemeinstellungen

101

Vor dem exzessiven Gebrauch von Dropdownlisten muss gewarnt werden. Sie haben einige Nachteile: Sie knnen nicht ohne weiteres vom Anwender erweitert werden Sie werden als ganzes im HTML bertragen Steht der Cursor auf einem Drop-Down Feld, empfngt das System keinen Submit Wird ein Drop-Down Feld als erstes Feld auf die Seite platziert, steht der Cursor erstmal dort und es kann leicht passieren, dass man versehentlich einen anderen Eintrag auswhlt ohne es zu wollen. Enthlt ein Feld (z. B. durch eine Schnittstelle versorgt) einen Wert, der nicht in der Auswahlliste enthalten ist, wird der Feldinhalt vom Browser gelscht und der Satz wird als editiert dargestellt.

Statt Auswahllisten ist es oft besser, eine Hilfstabelle und eine Relation dort hin zu bauen. Auswahllisten machen dann Sinn, wenn es nur wenige Werte auszuwhlen gibt und diese sich voraussichtlich nicht ndern.

Feldeigenschaften
Viele der Feldeigenschaften lassen sich zur Laufzeit im Anwendungskontext durch Skripte dynamisch umsteuern. Jedes Attribut, das seinen Inhalt an die Oberflche bringt, tut dies ber ein zwischengeschaltetes Verbindungsobjekt, eine sog. Association. Das Meta-Datenmodell ist statisch, es wird pro Instanz auf Application-Ebene nur einmal instanziiert. Module werden unter Bercksichtigung des jeweils angemeldeten Benutzers auf Session-Ebene instanziiert. Ein Modul, das vom PBWOEditor gesteuert wird, erzeugt dann fr jedes berechtigte Attribut seiner Tabelle eine Association, die erstmal die Eigenschaften des Attributes bernimmt, dann aber umgesteuert werden kann. Allerdings kann aus einem geschtzten Feld kein editierbares, aus einem unsichtbaren kein sichtbares gemacht werden. Der vom Meta-Datenmodell vorgegebene Freiheitsgrad kann nicht erweitert, aber eingeschrnkt werden. Oft werden z. B. Felder so gesteuert, dass sie nur beim Neuanlegen eingabefhig und nach dem ersten Speichern geschtzt sind.

Buttons
Fr einen Button sind nur dbName, guiName, Doku und vor allem der Ausdruck wichtig. In letzterem liegt das Skript oder dessen Filename und damit die Funktionalitt des Buttons. Fr Buttons, die immer aktiv sein sollen, gibt es das "always on" Flag.

Plugins
Der dbName ist der Plugin-Name. ber ihn werden die Plugin-Scripts gefunden. Jedes Plugin hat ein ..._htmlString-Script, das die Oberflche rendert. Fast jedes Plugin hat ein ..._refresh-Script, das die anzuzeigenden Daten beschafft. Buttons in Plugins rufen weitere Plugin-Scripts auf. Im Feld "Ausdruck" knnen noch Konfigurationsoptionen eingetragen werden. "refresh" sorgt dafr, dass bei jedem selObjChanged-Event die Daten fr das Plugin neu beschafft werden "clear" lscht alle Plugindaten im selObjChanged-Event "noInitialRefresh" unterdrckt auch die initiale Datenbeschaffung "dontCacheHtmlString" verhindert, dass der html-String (die fertig gerenderte Oberflche) gecached wird.

Parameterfelder
Diese fangen per Konvention mit "p_..." an. Sie liegen nicht in der Datenbank und dienen nur dazu, Werte vom Benutzer abzufragen, die dann z. B. in Skripten verwendet werden. Parameterfelder werden vom System im parmDict eines Moduls gefhrt. Der Inhalt des parmDicts wird vor dem Start eines Skripts in den lokalen Werteraum des Skripts transportiert. So kann das Script auf Parameterfelder zugreifen, als wren es seine eigenen Variablen.

Systemeinstellungen

102

TVC - Datenelemente ohne Datenbankbezug


TVC heit "Tableview Controller" und meint das Modul. Der Datenbankname eines solchen Attributs muss gleich lauten wie der Name einer Instanzvariable oder wie ein Methodenname des Objektes, welches das Modul implementiert (meist von der Klasse PBWOEditor).

8.4 Stile einrichten


Das Erscheinungsbild von IntarS wird weitgehend durch ein Cascading Stylesheet beeinflusst. Es befindet sich in /usr/GNUstep/Local/Library/Aprica2/_K_000230/Resources/Aprica_template.css und kann von entsprechend ausgebildeten Personen editiert werden. Immer beim Systemstart wird daraus das Aprica.css erzeugt, indem allgemeine in installationsabhngige URLs umgeschrieben werden. Nach einer nderung muss also IntarS neu gestartet werden. Um nderungen sichtbar zu machen, muss ggf. auch der Browser-Cache geleert werden.

8.5 Indexe verwalten

Indexverwaltung

Sinnvoll eingerichtete Indexe sind essentiell fr die gute Performance einer Datenbankanwendung. Es sind Verbesserungen bis in den Bereich von Faktor 100 mglich. Da das so wichtig ist, gibt es eine eigene Index-Verwaltung in IntarS. Hier werden manuell Indexe angelegt und Wartungsarbeiten durchgefhrt. IntarS legt schon von sich aus eine Menge Indexe an, die es aus dem Meta-Datenmodell erkennen kann: Primrschlssel, Master-Detail-Relationen und alle Kombi-Suchfelder. Weiterer Bedarf fr Indexe ergibt sich aus dem Benutzerverhalten (Detailsuche und Sortierung) und Zugriffen aus Skripten. Aufgrund dessen, dass man dies teils nicht vorab ahnen kann, untersttzt IntarS den Systemverwalter bei der Findung geeigneter Indexe, indem es Datenbankzugriffe protokolliert, die lnger als eine Sekunde dauern. Zumal IntarS auch auf fremde Datenbanken zugreifen kann (z.B. SugarCRM, OSCommerce fr Schnittstellen) und diese auch schon Indexe haben knnen, wird unterschieden zwischen vom Modell her bekannten und in der Datenbank vorgefundenen Indexen.

Systemeinstellungen

103

Beim Systemstart analysiert IntarS die Datenbank und liest Index-Informationen aus. Zusammen mit den automatischen (vom Metadatenmodell veranlassten) und manuell verwalteten Indexen wird eine Gesamtsicht aufgebaut und in die Index-Datenbanktabelle geschrieben. Diese wird dann mit obigem Index-Modul verwaltet. An Wartungs-Werkzeugen stehen hier zur Verfgung:

Create
Erstellt den Index in der Datenbank.

Drop
Droppt den Index in der Datenbank. Dabei werden keine Daten gelscht.

Reorg
Droppt alle Indexe und legt sie neu an. Das ist sinnvoll nach groflchigen nderungen im Modell mit mehreren automatischen Indexen oder nach dem Anlegen einer greren Zahl manueller Indexe. Wenn Indexe infolge von Datenbernahmen oder anderer Datenbank-Operationen "unbalanced" geworden sind, werden sie damit wieder in Ordnung gebracht. In den letzten Jahren sind die Datenbanken aber immer besser geworden, so dass das Problem von "unbalanced" Indexen seltener auftritt.

Create missing
Es werden die Indexe in der Datenbank erzeugt, die laut Modell vorhanden sein sollten, es jedoch nicht sind.

Indexe und Datenkbank-Performance


Im Allgemeinen hat man nur ein Feld in der Feldliste. Dies macht den Index universeller verwendbar und ist meist ausreichend. Erstellt man zuviele Indexe, werden Update-Operationen langsamer. In SQL-Statements oder in Qualifiern mssen die am strksten einschrnkenden Bedingungen als erste genannt werden. Bei besonders komplizierten Statements kann es notwendig sein, dem Optimizer Hinweise zu geben, welchen Index er nehmen soll (s. MySQL Doku). Desweiteren kann man sich mit "explain" von MySQL zeigen lassen, welche Indexe verwendet werden und was das an Performance kostet. Es macht nur Sinn, Spalten zu indizieren, die eine groe Variabilitt besitzen. Flags oder Auswahllisten-Felder zu indizieren, bringt nichts. Ist ein Performanceproblem mit Indexen nicht mehr in den Griff zu bekommen, bleibt nichts anderes brig, als die Tabelle vertikal oder horizontal zu teilen. Vertikal bedeutet, dass man die Spalten auf verschiedenen Tabellen verteilt (Twin-Segmente). Horizontal hingegen, dass man einen Teil der Datenstze in eine andere Tabelle auslagert (z.B. alte Stze archiviert). In der MySQL-Konfiguration my.cnf kann noch die Resourcenzuteilung verndert werden. Stellt man nmlich zu wenig Hauptspeicher zur Verfgung, kann der beste Index nichts ausrichten. Fr IntarS darf brigens nur der Datenbanktyp MyIsam verwendet werden. Wer sicher ist, kein Unicode zu bentigen, kann versuchen, statt UTF8 Latin1 einzusetzen, das bringt auch nochmal etwas Performance. Schlielich sollte man eben auch beim Datenbankdesign mit Umsicht vorgehen und vorausschauend Redundanzen einbauen, um Zugriffe zu sparen. Denn der schnellste Zugriff ist der, der nicht stattfinden muss. Dem IntarS zu Grunde liegende Framework bietet eine gute Untersttzung, die Redundanzen konsistent zu halten. Zu guter Letzt kommt es noch auf den Datentyp an, wie effektiv ein Index ist. Bestens geeignet sind Integer-, Datums- und Datetime-Felder.

Systemeinstellungen

104

8.6 Wertelisten verwalten


Die Dropdown-Listen werden im Meta-Datenmodell verwaltet (s. dort). Die entsprechende Berechtigung besitzt nur ein Administrator.

8.7 bersetzungen pflegen


IntarS ist standardmig mehrsprachig ausgelegt. Die Ursprungssprache ist deutsch. Prinzipiell ist eine weitere Sprache vorgesehen, in der Auslieferungsversion Englisch. Die Fremdsprachen-Thematik begegnet Ihnen an verschiedenen Stellen. Es gibt Zielkonflikte zwischen Performance, Einfachheit der Verwaltung und Anzahl der Fremdsprachen. Zunchst einmal zu den einfach zu bersetzenden Begriffen. Dies sind die Oberflchennamen und Dokumentationen aus dem Meta-Datenmodell. Dort ist jeweils bereits ein Feld fr die Fremdsprache vorgesehen. Diese bersetzungen sind zentral. Sie bentigen wenig Speicher und Overhead. Auerdem werden jene einmalig beim Start der Session eines fremdsprachigen Benutzers ausgewertet und finden sich in den Oberflchennamen der Associations wieder. Modulnamen knnen in der Modulverwaltung bersetzt werden. Zustzliches liegt auerhalb des Modells: Textkonstanten in Meldungen und Skripten. Fr diese muss ein bersetzungs-Verzeichnis gepflegt werden. Verwenden Sie hierfr bitte das Modul "bersetzungen".

bersetzungen

Die zu bersetzenden Begriffe kommen in das Modul "bersetzungen", wenn das System versucht, einen Ausdruck zu bersetzen, jedoch keine bersetzung findet. Dies passiert, wenn ein fremdsprachiger Benutzer (Sprache im Benutzerprofil ist nicht Deutsch) sich anmeldet und im System arbeitet. bersetzte Begriffe werden wie folgt angefordert:

Systemeinstellungen

105

Im Scripting
Durch das Prefix <trans> wird on the fly bersetzt.

In ObjectiveC-Programmierung
Durch das TRANSLATION()-Macro wird on the fly bersetzt.

Hinter den Kulissen


Intern liegen die bersetzungen in einem zentralen Dictionary im Speicher. Stt das System auf einen bisher nicht bersetzten Begriff, schreibt es diesen in das Dictionary und gleichzeitig in die Datenbanktabelle, die vom Modul "bersetzungen" verwaltet wird. Hat man darin die neu aufgetauchten Begriffe bersetzt, muss der Datenbankinhalt mit dem Button "DB to Transdict" exportiert werden. Die Daten werden im SVN-freundlichen Textformat nach /usr/GNUstep/Local/Library/Aprica2/_K_000230/ExportedData/translationsm.txt geschrieben. Von dort werden sie zustzlich beim Systemstart neu geladen, um das Dictionary zu fllen. Fr bessere Performance wird das File auch binr archiviert. Dieses Archiv wird ebenso verwendet, wenn sich das zu Grunde liegende Textfile seither nicht gendert hat.

8.8 Backup
Plugin zur Datensicherung

Das Backup-Plugin

Klicken Sie auf das Modul "Home" und dann auf das Register "Service". Klicken Sie auf "Datensicherung", um die gesamte Datenbank zu sichern. Es wird ein sog. SQL-Dump erstellt. Der Dateiname enthlt Datum und Uhrzeit. Alle SQL-Dumps sind im "Backup"-Plugin zu sehen. Klicken Sie auf "Backups", um die Ansicht zu aktualisieren. Um eine Datensicherung wieder einzuspielen, klicken Sie auf "Restore" in der entsprechenden Zeile der gewnschten Sicherung im "Backup"-Plugin. Daraufhin zeigt Ihnen IntarS eine Befehlszeile an, die Sie in der Shell der Konsole ausfhren mssen (mit Copy/Paste bertragen).

Sicherung ber Netzwerkfreigabe


Die gesamte Festplatte der IntarS-Box bzw. Virtual Appliance ist ber Samba (Windows-Freigabe) als "alles" im Netzwerk freigegeben. So knnen Sie die SQL-Dumps in /usr/GNUstep/Local/Library/Aprica2/_K_000230/DataArchiv/dumps auf ein anderes Medium kopieren. Nach dem Kopieren knnen Sie die SQL-Dumps aus dem Verzeichnis lschen, wenn der Speicherplatz knapp wird. Zum Rckspeichern muss der gewnschte SQL-Dump wieder in das Verzeichnis kopiert werden. Daraufhin erscheint er wieder im "Backup"-Plugin und kann eingespielt werden. Die Dokumente aus dem Dokumenten-Verwaltungssystem von IntarS liegen im Verzeichnis /usr/GNUstep/Local/Library/Aprica2/_K_000230/Resources/documents. Sichern Sie dieses ebenfalls ber die Netzwerkfreigabe auf einem anderen Medium.

Systemeinstellungen

106

8.9 Shell-Commandos
Nur fr den Systemadministrator mit Linux-Kenntnissen!
Hier einige Shell-Commandos fr das System-Update, manuelles Stoppen und Starten. Setzen Sie diese nur ein, wenn Ihnen bewusst ist, was Sie hiermit ndern knnen. Update: export LANG=en_US.utf8 cd /usr/GNUstep/Local/Library/Aprica2/_K_000230 svn update --no-auth-cache --username anonsvn --password cd /usr/GNUstep/Local/Library/Aprica2/_GLOBAL svn update --no-auth-cache --username anonsvn --password cd /usr/GNUstep/Local/Projects/Aprica2 svn update --no-auth-cache --username anonsvn --password cd /usr/GNUstep/Local/Projects/Scripts/Aprica2 svn update --no-auth-cache --username anonsvn --password . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh cd /usr/GNUstep/Local/Projects/Aprica2 make clean make make install Manuell interaktiv starten: /usr/GNUstep/Local/Tools/apr000230.sh Control-C beendet; DB-Differenzen kontrollieren und beheben: cd /usr/GNUstep/Local/Library/Aprica2/_K_000230/Resources/temp more autoadjustDB.sql ./autoadjustDB.bat Als Daemon starten/stoppen: /etc/init.d/apr000230 stop /etc/init.d/apr000230 start

'intars' 'intars' 'intars' 'intars'

Mysql: mysql -uroot -proot -e "drop database aprica2_000230;" mysql -uroot -proot --default-character-set=utf8 -e "create database aprica2_000230;" mysql -uroot -proot --default-character-set=utf8 aprica2_000230 < /usr/GNUstep/Local/Library/Aprica2/_K_000230/DataArchiv/dumps/Sicherung_xxxxxx x.sql

Konzepte

107

9 Konzepte
9.1 Zuordnungen
In IntarS knnen Stze bestimmter wichtiger Tabllen untereinander verknpft werden. Das wird durch Zuordnungen mglich. So kann ein Beziehungsgeflecht erstellt und navigiert werden. Die Verknpfungen selbst liegen in der Datenbanktabelle "zuord2" und knnen ber ein Modul verwaltet werden. Zuordnungen werden erstellt, indem man von einem Quellobjekt aus die Zuordnungsbersicht der Zielobjekte aufruft und dort die gewnschten Objekte anklickt. Z. B. Sie mchten einem Artikelstamm eine Akte zuordnen. Klicken Sie im Artikelstamm auf den "Zuord Akte"-Button und klicken dann in der bersicht die Akte an. Einmal getroffene Zuordnungen sieht man in beiden Objekten jeweils im Zuordnungs-Plugin. Dort lassen sie sich auch wieder lschen. Hauptschlich will man aber nicht lschen, sondern navigieren. Dazu klickt man auf die gewnschte Zuordnung.

9.2 Zwischenablage
In der "Zwischenablage" knnen sich Datenstze dauerhaft gemerkt werden. Klicken Sie hierzu auf den "Merken"-Button. Mit dem Button "gemerkte" wird das "Zwischenablage"-Modul aufgerufen und die Stze werden in ihrem Verwaltungsmodul geffnet. Objekte, die nicht lnger von Interesse sind, knnen wieder aus der "Zwischenablage" gelscht werden. Um ein markiertes Objekt zu lschen, klicken Sie auf den Button "Loeschen". Dabei werden keine Daten gelscht, sie werden nur aus der "Zwischenablage" entfernt. In Nachschlagefunktionen steht die Zwischenablage der Tabelle zur Verfgung. Fr mehr Details siehe auch "Navigation".

9.3 Akten
Akten sind wie im richtigen Leben universelle Datencontainer. Sie haben einen Text, einen Besitzer, optional einen Empfnger (wenn man delegieren oder weiterleiten will), einen Termin, eine Wiedervorlage, Bearbeitungsvermerke, Prioritt, Bearbeitungsstatus, Anlagen, evt. Unterakten etc. Zu besonders wichtigen Tabellen (Kunde, Artikel) gibt es fest Relationen. In IntarS werden Akten fr CRM, Groupware, Wissensmanagement und allgemeine Informationsanreicherung anderer Objekte verwendet. So gibt es Unterarten von Akten (Termin, Kontakt, Notiz, Aufgabe, Route, Besuchsbericht ...). Diese knnen auch untereinander umgewandelt werden. So kann aus einer Notiz eine Aufgabe ein Termin eine Wiedervorlage werden. Migriert man SugarCRM nach IntarS, wird das ganze Sammelsurium von Sugar in Akten konvertiert.

Konzepte

108

9.4 Kalender

ein wenig gefllter Kalender

IntarS bietet einen Firmenkalender. Sie knnen Termine eintragen und sich in der Groupware zu organisieren. Da Termine auch Akten sind, ist er komplett ins CRM integriert. Die Eintragungen knnen nach Benutzern und Terminarten gefiltert werden. Nutzt man in Datumsfeldern in anderen Modulen die Datums-Nachschlagefunktion, tritt der Kalender in Aktion. Das hat gegenber herkmmlichen JavaScript-Kalenderpopups den Vorteil, dass man gleich alle Termine im Blick hat.

9.5 Anlagen
Wichtige Objekte in IntarS knnen Anlagen (Attachments) bekommen. Das funktioniert ber Dokument-Zuordnungen vergleichbar mit Anhngen an E-Mails. So ist das Dokumenten-Management voll integriert. Neue Dokumente werden durch Schnittstellen oder Upload eingebracht. Ein einmal importiertes Dokument kann dann beliebig oft anderen Objekten zugeordnet werden. Die Zuordnungen sind im Zuordnungen-Plugin eines Moduls zu sehen und knnen von dort aus aufgerufen werden. Anlagen an Angeboten knnen beim Mailen mitgeschickt werden.

Konzepte

109

9.6 Stichworte
Mit Stichworten strukturieren Sie den Kundenstamm. Erfassen Sie alle Themen und Eigenschaften als Stichworte, nach welchen Sie Kunden/Interessenten/Adressen gliedern mchten. Ordnen Sie dann den jeweiligen Kunden die Stichworte zu. Welche Stichworte einem Kunden zugeordnet sind, ist auf einen Blick in seinem "Stichworte"-Plugin zu sehen. Dort kann die Zuordnung auch wieder gelscht werden. Stichworte knnen in der Recherche verwendet werden, z. B. "zeige alle Kunden, die Hundehalter sind und eine Weihnachtskarte bekommen haben". Ausgehend von einem Stichwort lassen sich alle Kunden auflisten, welchen dieses zugeordnet wurde. Sie knnen beliebig viele Stichworte erfassen und auch jederzeit erweitern. Bei konsequenter Anwendung bekommt jeder Kunde mit der Zeit ein eigenes Profil, das mit einem Blick auf das "Stichworte"-Plugin zu sehen ist. Im Web 2.0 heien Stichworte "Tags".

Stichworte-Plugin

Der Kunde in der Abbildung ist ein Dienstleister, wird von Coburg betreut, hat uns per E-Mail kontaktiert, wurde auf einem Workshop angetroffen und ist Anwender. Sie knnen das natrlich auch als Freitext in das "Memo"-Feld schreiben. Mit Stichworten ist es jedoch immer exakt gleich geschrieben und kann somit ausgewertet werden.

Konzepte

110

9.7 Gemeinsame Ordner


Gemeinsame Ordner dienen der hierarchischen Gliederung von Objekten. Die Ordnerstruktur kann frei erzeugt werden. Sie kennen das evtl. aus dem Explorer (Filesystem) oder ihrem E-Mail-Programm. In die Ordner werden die Objekte der Hauptentitten durch Zuordnungen abgelegt. Die Organisationsabteilung in Ihrem Unternehmen hat ein eigenes Ablagesystem entwickelt, an dem Sie sich beim Aufbau der Ordner-Hierarchie orientieren knnen. Die Hauptentitten sind Akte, Angebot, Artikelstamm, Benutzer, Kunde, Projekt und Projektposition. Aus den Ordnern werden die Objekte durch einen Klick aufgerufen. Anmerkung: Fr nichthierarchische Gliederung stellt IntarS die Stichworte-Technik bereit. Vorgangsbezogene Gliederung erreicht man mit Zuordnung zu Akten. Allgemeine Zuordnungen ermglichen den Aufbau eines Beziehungsgeflechts abseits von Thema, Chronologie und Hierarchie.

Hierarchische Gliederung mit gemeinsamen Ordnern

Konzepte

111

9.8 Dokumentenmanagement
IntarS hat ein eingebautes Dokumentenmanagement. Ein Dokument ist eine Datei. Es kommt per Upload ins IntarS. Dafr gibt es ein "Upload"-Modul. Damit lassen sich Dokumente importieren. Oft wird ein Dokument in einem bestimmten Kontext importiert, z. B. eine technische Zeichnung zu einem Artikelstamm. Dann kann das "Upload-Modul" in diesem Kontext aufgerufen werden und es wird gleich eine Zuordnung vom betreffenden Objekt (z. B. Artikelstamm) zum neuen Dokument erstellt. Ein Dokument in IntarS ist ein Datensatz, der vom "Dokumenten"-Modul verwaltet wird. Er enthlt beschreibende Informationen zu der Datei, welche eingebracht wurde. Das File selbst liegt nach dem Upload unter einem neuen Namen in einem Archiv von IntarS. Der Zugriff erfolgt nur noch ber den Dokumenten-Datensatz. Die Datei in einem Dokument kann duch erneuten Upload im Dokumenten-Satz ausgetauscht werden.

Ein Dokument in IntarS

IntarS kann Mails importieren und als Dokumente zur Verfgung stellen. Dazu ist der Import-Pfad im "Config"-Modul einzutragen. Die E-Mails mssen darin als .eml-Files im Mime-Format vorliegen. Fr Thunderbird gibt es ein Plugin, welches dies bewerkstelligt. ffnet man ein E-Mail-Dokument, wird der lokale E-Mail-Client aufgerufen und stellt die E-Mail original inklusive ihrer Anhnge dar. Im Dokument selbst wird die Mail im Klartext (bis zu 64 KB) gespeichert, so dass die Volltextsuche ermglicht wird. IntarS erzeugt selbst Dokumente, z. B. PDF-Reprsentationen der Geschftskorrespondenz (Rechnungen, Angebote etc). Diese werden automatisch ins Dokumentenmanagement eingebracht und entsprechend zugeordnet. Alle Dokumente knnen ber Zuordnungen an beliebig viele andere Datenstze der Haupt-Entitten angehngt werden. Sie erscheinen dann dort in den Zuordnungsplugins und knnen mit einem Klick darauf aufgerufen werden.

Konzepte

112

Fr direkte Zuordnungen, die einen groen Teil aller Zuordnungen ausmachen, sind feste Relationen zu den Hauptentitten vorgesehen. Die Hauptentitten sind Akte, Angebot, Artikelstamm, Benutzer, Kunde, Projekt und Projektposition. Diese knnen auch ein Bild haben, das als Thumbnail angezeigt wird und bei Klick in einem neuen Browser-Fenster oder Tab in Originalgre angezeigt wird. Man ordnet ein Bild zu, indem man beim Upload das "Hauptbild"-Flag setzt. Nachtrglich kann das Bild gesetzt werden, indem das Dokument, welches das gewnschte Bild enthlt, in das Feld "Bild" der Hauptentitt eingetragen wird.

Verwendung obigen Dokuments als Bild in einem Kundenstammsatz

9.9 Testmodul
Spielwiese fr alles.

Konzepte

113

9.10 Wiedervorlage
Jedes Objekt in IntarS kann auf Wiedervorlage gelegt werden. Dazu gibt es den Button "auf Wiedervorlage". Wird er angeklickt, erstellt das System eine Akte vom Typ "Wiedervorlage". Dort trgt man den Wiedervorlagezeitpunkt ein. Die Akte enthlt einen Verweis auf das eigentliche Objekt. Mit einem Klick darauf wird es wieder aufgerufen. Die Wiedervorlage erscheint als solche visualisiert im Kalender. Im "Start"-Modul zeigt ein Plugin die anstehenden Wiedervorlagen fr den jeweiligen Benutzer an.

9.11 Nachschlagen
Felder, die auf eine andere Tabelle verweisen (Relationen) haben eine Nachschlage-Funktion. Mchten Sie z. B. einen neuen Auftrag erstellen und wissen die Kundennummer nicht, knnen Sie in das Kundenfeld "." eingeben und die Taste "Return" drcken. Geben Sie nicht nur einen "." ein, sondern davor noch einen Suchstring, grenzt die bersicht auf den Suchstring ein. Beispielsweise wrde "baum." alle Kunden zeigen, deren Name "baum" enthlt.

Punkt eingeben und [Return]

Es ffnet sich dann eine bersicht der Kunden, aus welcher man den Gewnschten aussucht und anklickt. Damit wird er bernommen.

Konzepte

114

die bersicht zur Auswahl eines Kunden

Eine bersicht bietet ebenfalls die Suchmglichkeit ber das Kombi-Suchfeld. Sie knnen sich der Tastatur bedienen. Einfach mit der "Tab"-Taste oder der Tastenkombination "Shift-Tab" auf den gewnschten Satz positionieren und mit der "Return"-Taste besttigen. Die Tastenkombinationen "Alt-g" und "Alt-a" blttern seitenweise vor bzw. zurck. "Alt-q" springt zurck, ohne etwas zu bernehmen. Das Nachschlagen funktioniert auch bei Datumsfeldern. In diesem Fall wird der Kalender aufgeblendet und man kann sich einen Tag heraussuchen. Idealerweise sieht man dabei die bereits vorhandenen Termine. In der bersicht knnen die Spalten, ihre Reihenfolge und Sortierung individuell angepasst werden.

Konzepte

115

9.12 Inaktiv setzen


Artikelstmme und Kunden lassen sich inaktiv setzen. Das geschieht durch Klick auf den Button "Deaktivieren" im jeweiligen Modul. Sie werden dann in der Trefferliste durchgestrichen dargestellt und lassen sich nicht mehr fr neue Vorgnge verwenden. Dies ist eine Alternative zum Lschen. Einmal verwendete Artikel oder Kunden lassen sich nicht mehr lschen. Durch Deaktivieren kann jedoch verhindert werden, dass sie weiterhin am Geschftsleben teilnehmen. Diese Deaktivierung kann auch vorbergehend sein, z. B. da ein Artikel erst nach technischer Prfung weiter verkauft werden darf. Mit "Aktivieren" lsst sich die Deaktivierung wieder rckgngig machen. Module, deren Objekte deaktiviert werden knnen, besitzen zwei Buttons: "nur aktive" und "auch inaktive". Mit diesen kann die Sichtbarkeit deaktivierter Objekte gesteuert werden.

Betrieb

116

10 Betrieb
ber die Oberflche
Im Reiter Home/Service befinden sich einige Buttons fr die hufigsten Operating-Aufgaben. manuelles Backup erstellen (das automatische luft nachts) svn update svn commit Neustart Scripts neu laden Log anzeigen Datenbank prfen und anpassen nach Modellnderungen Tempscript Console

In der Shell
In aprica_commands.txt finden Sie eine Sammlung ntzlicher Shell-Befehle fr das Operating. # Maintenance und Operating # Pfade u. Variablen mandant=000230 INTARS_OPTIONS="--GNU-Debug=NoWarn -GSWMTEnabled NO -WOHost localhost -WODebuggingEnabled NO -WOStatusDebuggingEnabled NO -WOStatusLoggingEnabled NO" INTARS_APP=/usr/GNUstep/Local/GSWApps/Aprica3.gswa/Aprica3 MANDANT_PATH=/usr/GNUstep/Local/Library/Aprica2/_K_$mandant GLOBAL_PATH=/usr/GNUstep/Local/Library/Aprica2/_GLOBAL PROJECT_PATH=/usr/GNUstep/Local/Projects/Aprica3 # update export LANG=en_US.utf8 cd $MANDANT_PATH svn update chmod a+x *.sh cd $GLOBAL_PATH svn update cd $PROJECT_PATH svn update chmod a+x *.sh # Framework compile . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh cd $PROJECT_PATH make clean make make install # PBMySQL Wrapper u. Scripts updaten (selten) cd /usr/GNUstep/Local/Projects/PBMySQL4 svn update

Betrieb
cd /usr/GNUstep/Local/Projects/Scripts/Aprica2 svn update # Manuell interaktiv starten, um Modell-Archiv zu erstellen u. DB-Unterschiede zu prfen: # mit drop Statements ################################################## $INTARS_APP -mandant $mandant -adjustDBWithDrop -n 1 $INTARS_OPTIONS # Control-C beendet; # DB-Differenzen kontrollieren und beheben: cd $MANDANT_PATH/Resources/temp more autoadjustDB.sql ./autoadjustDB.bat # Ausfhren eines Batch-Scripts: $INTARS_APP -mandant $mandant -n 99 -noModelToDB -batch _Batch/notify_wv $INTARS_OPTIONS # normaler Start im Hintergrund: DATE=`date +"%Y%m%d%H%M"` LOGPATH=/usr/GNUstep/Local/Library/Aprica2/_K_$mandant/Resources/Logs $INTARS_APP -mandant $mandant -n 1 -noModelToDB $INTARS_OPTIONS &>$LOGPATH/NSLog_1_${DATE}.txt & # 2. und weitere Instanz bei Bedarf (Skalierung durch parallele Prozesse) $INTARS_APP -mandant $mandant -n 2 -noModelToDB $INTARS_OPTIONS &>$LOGPATH/NSLog_2_${DATE}.txt &

117

# Als Daemon starten/stoppen: /etc/init.d/apr$mandant stop /etc/init.d/apr$mandant start # # # # # # # # # # # # # # # # # # # # parameters: -mandant $mandant mandanten-Nr. erforderlich -n $instance Instanz-Nr. optional; Default 1; nur Nr. 1 macht adjust db; -batch $batch_script batch_script unter Batch-User ausfhren und wieder terminieren; f. crontab -secure f. Online-Demo; gefhrliche Funktionen sind deaktiviert -db_mandant $mandant auf andere DB arbeiten -noModelToDB Modell nicht in DB schreiben; startet schneller; Modell Editierungen disabled; -adjustDBWithDrop generiert drop-Statements beim adjustDB -port $port abweichender Port; optional; --urlAppName name

Betrieb

118

# optionaler abweichender Applicationname, Default Aprica3$mandant # -loadArialUnicode # ArialUnicodeMS Fontmetriken laden; wird nur bentigt, # wenn auch mit diesem Font gedruckt werden soll # -shop # startet im Shop-Modus; Schaufenster statt Home, Anmeldung u. Session # auf Shopbetrieb eingestellt

# Mandant deinstallieren mandant=000130 MANDANT_PATH=/usr/GNUstep/Local/Library/Aprica2/_K_$mandant rm -Rf $MANDANT_PATH mysql -uroot -proot -e "drop database aprica2_$mandant;" insserv -r apr$mandant rm /etc/init.d/apr$mandant aus crontab und samba.conf rauslschen aus /etc/apache2/gsweb.conf rauslschen

Erweitern und Anpassen

119

11 Erweitern und Anpassen


11.1 Architektur

Architektur

Die Web-Anwendung IntarS besitzt eine mehrschichtige Architektur, je nach Zhlweise 3 bis 5 Schichten. Die Prsentation am Client findet mittels HTML, JavaScript und CSS im Firefox-Browser statt, der ber HTTP(S) mit dem Apache-Webserver kommuniziert. Ein kleines Apache-Modul (mod_gsweb) nimmt die HTTP-Requests entgegen, formt sie zu WORequests um, implementiert Loadbalancing, ermittelt aufgrund der Session-ID aus der URL den richtigen Applikationsserver und die Instanz und schickt dieser ber einen konfigurierbaren Port den WORequest. Jede Instanz ist ein im Hintergrund laufender Prozess, welcher die gesamte Verarbeitung durchfhrt. Das Binary des Prozesses ist eine kompilierte GSWeb-Anwendung, bestehend aus dem GSWeb-Applikationsserver und dem IntarS-Framework. GSWeb stellt die allgemeine Infrastruktur zur Verfgung (Session-Managment, Template-Parsing, Run-Loop, Foundation, Request-Handling). Das IntarS-Framework baut darauf auf und steuert einen Object-Relational Mapper, generischen Editor, IntarScript-Interpreter, Data-Repository-Technik, PDF-Erzeugung und andere Datenbank-Anwendungsfunktionalitt bei. Es ist ebenfalls in ObjectiveC geschrieben, seit 1996 fortlaufend optimiert, kompiliert und fr alle Installationen identisch (binre Wiederverwendung). Die eigentliche Geschftslogik dagegen ist pro Installation individuell. Jeder Mandant hat sein eigenes Repository, welches Datenmodell, Skripts und Layout-Informationen enthlt und vom Framework zur Laufzeit geladen und interpretiert wird. Das Repository besteht komplett aus Textdateien, die fr Subversion und Merge-Werkzeuge optimiert sind. So wird - untersttzt von Konventionen - eine formatfreie, ungeplante Wiederverwendung ermglicht und gleichzeitig die fr agile Methoden notwendige Bewegungsfreiheit garantiert. Jeder Mandant kann sein Repository frei verndern und individuelle Geschftslogik und Erweiterungen einbringen (lassen). Andere Mandanten sind davon nicht betroffen. Als letzte Schicht kommt die MySQL-Datenbank fr die persistente Datenhaltung hinzu. Die meisten CPU-Zyklen werden in kompiliertem Code verbracht, was IntarS eine herausragende Performance beschert, die man von PHP- und J2EE-Webanwendungen nicht kennt. Gleichzeitig bekommt man die Flexibilitt einer Skript-Anwendung: nderungen an Skripts werden ohne Kompilieren innerhalb krzester Zeit wirksam. Das

Erweitern und Anpassen


gemeinsame binre Framework garantiert Stabilitt und Sicherheit, da es nicht von Anwendungsfunktionalitt beeintrchtigt wird.

120

11.2 Dateien und Verzeichnisse


Das Repository
Das Repository liegt im Ordner /usr/GNUstep/Local/Library/Aprica/_K_000230. Dieser Pfad heit $MANDANTPATH. Als wesentlichste Teile enthlt er das Meta-Datenmodell und die Skripte. Der Hauptteil der Entwicklungsarbeit besteht darin, das Modell zu editieren (statischer Teil) und Skripte zu schreiben (dynamischer Teil). Smtliche System-Files des Repositories liegen in UTF8 Unicode Klartext vor mit reichlich Redundanz fr beste Lesbarkeit und Subversion-Untersttzung. Auf XML wurde verzichtet. Das Modell wird mit der Workbench oder direkt in der laufenden Anwendung mit den Modulen PBDDTables und PBDDAttribute editiert. Es liegt sowohl in Datenbanktabellen als auch (um es mit Subversion versionieren zu knnen) in einem File vor (Mandant.idm, idm = IntarS Data Modell). Die Skripte liegen nur im Filesystem. Sie werden zur Laufzeit geladen, die Imports aufgelst und systemweit vorgehalten. ndert man Skripte, gengt es, in der laufenden Anwendung auf "Scripts neu laden" zu klicken, um die nderungen zu aktivieren. Analog muss nach nderungen am Meta-Daten-Modell auf "alles neu laden" geklickt werden. Directories, die nicht unter Subversion Verwaltung stehen, legt IntarS beim ersten Start selbstndig an.

Der Inhalt des Repositories im Detail: /DataArchiv


Enthlt Datenimport/-export fr Migration sowie Datensicherungen. Das Import-Modul erstellt darin Unterdirectories fr einzelne Tabellen, wenn ein Export oder Dump durchgefhrt wird.

Indexe.txt
Die Index-Definitionen fr Datenbanktabellen. Sie werden beim Systemstart von hier geladen und in eine Datenbanktabelle geschrieben. Dort werden sie verwaltet. Nach nderungen mssen sie wieder in das File exportiert werden, um mit Subversion gemerged werden zu knnen.

Mandant.idm
Das Meta-Datenmodell des Mandanten in Subversion-freundlichem ASCII-Format. Wird von der Workbench verwaltet und beim Systemstart gelesen. Um es auch in der Anwendung mit HTML-Oberflche verwalten zu knnen, wird es in die Datenbank geschrieben. Hat man in der Anwendung das Modell editiert, ist darauf zu achten, es irgendwann wieder in dieses File zurck zu schreiben, damit es allen zur Verfgung steht und unter Subversion Kontrolle kommt. Man bekommt vom System einen entsprechenden Hinweis.

Mandant.idm.bak
Backup von Mandant.idm, wird automatisch von der Workbench angelegt.

/Resources
Hier liegen die Dokumente vom Document-Management-System. Das sind von auen (per Upload) eingebrachte sowie vom System selbst erzeugte (z. B. Rechnungen, Anschreiben als PDF). Auch das Hilfe-System ist hier zu finden, sowie das systemweite Stylesheet Aprica.css.

/Resources/Images
Enthlt Bilder fr den Webserver. Folgende fnf Namen sind vordefiniert und knnen durch eigene ersetzt werden: login_logo.jpg 400 x 120 px fr das Login-Panel logo.jpg 400 x 120 px Mandaten-Defaultlogo fr Briefkopf; im Config-Modul kann ein anderes Logo hochgeladen und verwendet werden

Erweitern und Anpassen


menu_logo.jpg 150 px breit, steht im Home-Modul links unter dem Men Unterschrift.jpg eingescannte Unterschrift, wird unter Dokumente gedruckt product_logo.jpg das Logo, welches beim ersten Aufruf der Hilfe dargestellt wird bis ein Thema angeklickt wurde.

121

/LayoutsUsers
Hier liegen pro Benutzer userspezifische Layout-Information-Files. Normalerweise kann jeder seine Oberflche selbst nach seinen Bedrfnissen einrichten. Dies kann aber in der Benutzerverwaltung berechtigt werden.

/Scripts
Enthlt die Skripte fr die Geschftslogik. Diese gliedern sich in Events und Button-Skripte. Events, auch User-Exits oder Callbacks genannt, werden vom System automatisch in bestimmten Situationen aufgerufen, wenn sie vorhanden sind. Button-Skripte werden durch Klick auf einen Button aufgerufen. Events liegen jeweils in einem Subdirectory mit dem selben Namen wie das Modul, welches wiederum meist wie die Tabelle heit, die es verwaltet. Skript-Teile, die von anderen Skripten importiert werden, beginnen mit einem "_". Man kann frei entscheiden, weitere geeignete Directory-Strukturen zu bauen, um seine Skripte zu organisieren.

config.txt
Das gerade aktive Konfigurations-Profil.

module.txt
Moduldefinitionen im Text-Format. Liegt in der Datenbank und wird dort vom "Module"-Modul verwaltet. Dieses File entsteht durch Export aus der Datenbank und dient dem Mergen mit Subversion.

mydd.archive
Binres Archiv des Meta-Datenmodells. Wird zur Beschleunigung des Startvorganges vom System automatisch erzeugt, wenn das .idm-File gendert wurde.

translationsm.txt
Enthlt bersetzungen fester Begriffe. Die Daten kommen aus dem bersetzungsmodul. Zu bersetzende Begriffe erkennt das System in IntarScript am <trans> Formatierkommando und in den Templates an den <|...|> tags. translationsm.arc ist ein binres Archiv zur Beschleunigung des Startvorgangs. Es wird vom System automatisch aktuell gehalten.

nppModel.script
Ein Dokumentationsfile, welches alle Tabellen mit allen Attributen des Meta-Datenmodells mit "label"-Statements auflistet. Dient der Untersttzung im Notepad++. Mit den Spracherweiterungen fr IntarScript listet Notepad++ in der Function List die Labels auf und man kann direkt hinspringen und so sehr schnell im Modell navigieren.

_GLOBAL
Hier finden Sie einige globale Einstellungen.

arialuni_cmap.txt und arialuni_hmtx.txt


Fontmetriken fr den Arial Unicode MS. Werden beim fast_start bersprungen (default). Sie werden bentigt, wenn man PDF mit Zeichen jenseits der Codepage 0 erzeugen will (z. B. chinesische).

Erweitern und Anpassen

122

blz5.txt und blz.lut


Files fr die Konto- und BLZ-Prfung.

Events_nur_modulevents.script
Template fr eigene Skripte. Einfach von hier an die entsprechende Stelle kopieren, umbenennen und bentigte Events ausformulieren.

stdScript0.js und stdScript1.js


Das Javascript, welches IntarS clientseitig untersttzt. Will man davon eine abweichende eigene Logik einbringen, sind diese beiden Files ins _K_000230 Directory zu kopieren und anzupassen.

systemtab.txt
Layout-Info fr den System-Reiter in den Modulen. Sollen diese anders aussehen, ist dieses File ins _K_000230-Directory zu kopieren und anzupassen.

TempScriptTemplate.txt
Ist die Basis fr das Beispiel-Script, welches pro Modul vom gleichnamigen Button im System-Reiter erzeugt wird. Will man es anders haben, ist dieses File ins _K_000230-Directory zu kopieren und anzupassen.

11.3 neue Felder anlegen


1. 2. 3. 4. 5. 6. 7. Suchen Sie die Tabelle im Modell. Erfassen Sie das Feld. Klicken Sie auf "db to idm". Klicken Sie auf "Neustart". DB-Differenzen autoadjust.bat Rufen Sie das Modul auf. Klicken Sie auf "Config" und blenden das Feld an der gewnschten Stelle ein.

Erweitern und Anpassen

123

11.4 neue Buttons erstellen


1. 2. 3. 4. 5. 6. 7. 8. 9. Schreiben Sie ein Script. Testen Sie es ber "Temp-Script". Die Tabelle erscheint im Modell. Erfassen Sie die Buttons und geben diese im Script an. Erfassen Sie, falls ntig, Parameterfelder. Klicken Sie auf "db to idm". Klicken Sie auf "Neustart". Rufen Sie das Modul auf. Klicken Sie auf "Config" und blenden Sie die Buttons sowie die evtl. vorhandenen Parameterfelder an der gewnschten Stelle ein.

11.5 neue Module erzeugen


1. 2. 3. 4. 5. 6. Erstellen Sie, falls ntig, eine neue Tabelle. Gehen Sie in die Modulverwaltung. Klicken Sie auf "Neu". Geben Sie "interner Name", "guiName" und "Unterbereich" an. Whlen Sie die Tabelle aus. Klicken Sie auf "Speichern". Klicken Sie auf "Neustart".

Erweitern und Anpassen

124

11.6 Drucken
IntarS erstellt fr Druckausgaben PDF-Dateien (von Direktansteuerung abgesehen). Die PDF-Generierung erfolgt ber das Framework ohne Umweg ber ein Zwischenformat. XSL-FO und FOP kommen ebenfalls nicht zum Einsatz. Vielmehr werden aus in IntarScript eingebetteten Druckbefehlen direkt die PDF-Operanden erzeugt. Ein IntarScript, welches PDF erzeugt, hat die Extension .cpdf (create pdf) und befindet sich im Druck-Directory. Die PDF-Erzeugung erfolgt sehr schnell und das erzeugte PDF ist von hoher Qualitt und geringer Gre. Das erzeugte PDF wird entweder ber ein Plugin im Firefox als Preview angezeigt und kann von dort gedruckt werden oder es wird als Direkt-Druck ohne Preview direkt an einen Drucker geschickt. Welcher Drucker das ist, wird in der Drucker-Konfiguration pro Arbeitsplatz und Druckerklasse festgelegt. Ein typischer Anwendungsfall sind Pick-Etiketten, die direkt im Lager auf einem Label-Drucker ausgedruckt werden. Das einfachste Druckscript sieht so aus: newPage v 100,200,l,'Hello World Es erzeugt eine neue Seite und druckt 10 mm von links und 20 mm von oben linksbndig den Text "Hello World" an. Wichtige Druckausgaben, z. B. Rechnungen, werden automatisch ins Dokumentenmanagement eingebracht und archiviert. Die Vorschau im Plugin funktioniert, indem das PDF in ein Temp-Directory kopiert wird, auf welches der Apache Webserver Zugriff hat. Dann wird ber Javascript das PDF in einem neuen Tab geladen und angezeigt. Um Druckausgaben anzupassen oder neue zu implementieren, editiert man .cpdf-Files im Druck-Directory. Fr die zur Verfgung stehenden Druck-Befehle siehe IntarScript -> Referenz.

11.7 Schnittstellen
Bsp. einer datanorm-Import Schnittstelle
// // // // // // Lieferantendaten von CD (Preislisten) importieren in vid_datanorm Bestellnummern ndern sich praktisch nicht 2 Lieferanten knnen die gleiche Vergleichsnr. haben preis = fremdek / waehrung.kurs mit upload machen und dann dokument angeben in $p_lieferant wird Lieferantennr. erwartet

$p_lieferant,=,30 gosub commonF end sub splitLine invk $line,csvFieldsWithSeparator:andEscape:,\t,"" $a1,=,$_rv if $a1.count,<,4 $artnr,=, return endif $artnr,oai,$a1,0 $bestelltext,oai,$a1,1 $fremdek,oai,$a1,2

Erweitern und Anpassen


$fremdek,=,$fremdek.dbMoneyFromGui endsub sub commonF // preConditions $lief_eo,getEOPkValue,vid_kunde,$p_lieferant if $lief_eo,!FILLED, logi "Lieferant existiert nicht end endif // waehrung des Lieferanten $w,=,$lief_eo.waehrung_pb.*eo if $w,!FILLED, logi "Waehrung des Lieferanten nicht vorhanden. end endif $kurs,=,$w.kurs if $p_document,!FILLED, logi "bitte Dokument angeben, von dem importiert werden soll logi "ggfs. Dokument zuerst uploaden markError p_document end endif $doc,getEOPkValue,document,$p_document if $doc,!FILLED, logi "Dokument fuer Import nicht gefunden. markError p_document end endif $path,spf,'%@/Ressources/documents/%@,$_MANDANTPATH,$doc.filename $file,swcof,$path if $file,!FILLED, logi $path," nicht gefunden. end endif $a,css,$file,\n autorelease $j,count,$a log 'importiere ,<int>$j,' Artikel von, $p_lieferant $newCount,=,0 $updCount,=,0 $ignoreCount,=,0 $i,=,0 foreach line,$a $i,+,1 $m,=,$i $m,m,1000 if $m,==,0 autorelease $log,spf,'%i verarbeitet von %i,$i,$j log $log endif

125

Erweitern und Anpassen

126

// jeweils spezielle Aufbereitung der Zeile gosub splitLine if $artnr,!FILLED, // war keine gueltige Zeile continuefor endif // logi 'ok $qf,spf,'artnr = '%@' and lieferante = '%@',$artnr,$p_lieferant // logi $qf $dn,getEOQf,vid_datanorm,$qf if $dn,FILLED, if $p_with_shift,eq,J %parmDict.p_eo,=,$dn execute _Application/vid_datanorm/shift_preise endif gosub dnVersorgen updat_eo $dn $updCount,+,1 else // falls es die Nr. gibt, damit Artikelstamm feststellen und // neue Vgl.Nr. dafuer erzeugen $qf,spf,'artnr = '%@' and lieferante = '',$artnr $dn,getEOQf,vid_datanorm,$qf if $dn,FILLED, // eine vgl.nr. ohne Lieferant fuer diesen Lieferanten nehmen gosub dnVersorgen updat_eo $dn $updCount,+,1 else // eine vgl.nr. eines anderen lieferanten, um artikelstamm zu bekommen $qf,spf,'artnr = '%@',$artnr $dn_other,getEOQf,vid_datanorm,$qf if $dn_other,FILLED, $dn,newEO,vid_datanorm gosub dnVersorgen $dn.masterkey,=,$dn_other.masterkey $newCount,+,1 insrt_eo $dn else $ignoreCount,+,1 endif endif endif endfor logi <int>$updCount,' Bestellnummern aktualisiert logi <int>$ignoreCount,' neue Bestellnummern ignoriert logi <int>$newCount,' neue Bestellnummern erzeugt endsub sub dnVersorgen $dn.fremdek,=,$fremdek $dn.waehrung_pb,=,$w.primaryKey

Erweitern und Anpassen


$dn.lieferante,=,$p_lieferant $dn.bestelltext,=,$bestelltext $dn.preis,=,$dn.fremdek / $kurs $dn.artnr,=,$artnr endsub

127

batch-Schnittstellen
Zeitlich gesteuert. Es werden Daten aus anderen Systemen importiert oder fr andere Systeme bereitgestellt.

SOA, XML RPC


Eingebauter leichtgewichtiger XML Parser, TCP/IP Socket Kommunikation; Beispiele:

// Umsatzsteuer-ID pruefen $ma,newArray,10 $ma,a,'DE259892620,'AB123456789012,name,ort,plz,strasse,N $server,=,"evatr.bff-online.de $uri,=,"/ $methodName,=,evatrRPC invk %application,httpPostXMLRPC:host:methodName:params:single:,$uri,$server,$ methodName,$ma,J $NSString,class,NSString invk $NSString,stringWithData:,$_rv $s,=,$_rv.stringBySubstitutingXMLEscapes log $s // ----------------------------------// Zugriff auf Jargon File $server,=,'scripts.incutio.com $uri,=,'/xmlrpc/services/jargonfile.php $methodName,=,'jargon.about invk %application,httpPostXMLRPC:host:methodName:params:single:,$uri,$server,$ methodName,nil,N $NSString,class,NSString invk $NSString,stringWithData:,$_rv log $_rv

Erweitern und Anpassen

128

11.8 Dokumentation
Die Syntax der Dokumentationssprache lehnt sich an LaTeX 2e an: \h berschrift \tt teletype-Text eine Zeile \tt* Beginn/Ende Teletype Text \ol beginnt eine ordered List; Zeilen werden als Listeneintrge dargestellt; Ende durch Leerzeile; \ul beginnt eine unordered List; Zeilen werden als Listeneintrge dargestellt; Ende durch Leerzeile; \img {Name}{title} Bild; Name ist der Filename innerhalb $GLOBALCONFIGPATH/Helpdesk/Images; Bilder sollten zwischen 700 und 850 px breit sein. \% Kommentar Folgende Variablen werden ersetzt: $ {product} wird ersetzt durch den im Config-Modul eingegebenen Produktnamen $ {mandant} wird ersetzt durch die Mandantennummer

Das funktioniert auch in Filenamen und Directorynamen. Die Dokumentationssprache kommt fr Online-Hilfe und Handbuch (PDF) gleichermaen zum Einsatz. Mit "Import" im Hilfe-Modul werden die Files neu eingelesen, indiziert und in die Datenbank gestellt. Dort knnen sie unter dem Hilfesystem gelesen werden. Sie sind durchsuchbar.

11.9 Gewhrleistung
Nimmt ein Kunde selbst Vernderungen an den Scripten oder am Meta-Datenmodell vor, erlischt zu diesem Zeitpunkt die Gewhrleistung.

Erweitern und Anpassen

129

11.10 neuer Mandant


Neuen Mandanten anlegen:
.../Local/Library/Aprica2/_K_neu lschen in Home/Service "Mandantennr. neu" eintragen, z.B. 000239 klick auf "Neuer Mandant" es wird das _K_neu Verzeichnis gefllt nennen Sie es um, z.B. _K_000239 Legen Sie eine Datenbank aprica2_000239 an und fllen Sie sie mit einem Dump. Rufen Sie die Workbench auf und testen Sie, ob Datenbank bereinstimmt, passen Sie diese ggf. an. Starten Sie den neuen Mandant und starten Sie einmalig den Apache-Dienst neu. Rufen Sie die URL auf und stellen Sie das "Config"-Modul ein.

wichtige Grafik-Dateien in Resources/Images austauschen: login_logo.jpg 400 x 120 px fr das Login-Panel logo.jpg 400 x 120 px Mandaten-Defaultlogo fr Briefkopf; im "Config"-Modul kann ein anderes Logo hochgeladen und verwendet werden menu_logo.jpg 150 px breit, erscheint im "Home"-Modul links unter dem Men Unterschrift.jpg eingescannte Unterschrift, wird unter Dokumente gedruckt product_logo.jpg das Logo, welches beim ersten Aufruf der Hilfe dargestellt wird bis ein Thema angeklickt wurde.

IntarScript

130

12 IntarScript
12.1 Konzepte
Warum eine eigene Sprache?
Es gibt doch wahrlich schon viele Programmiersprachen. Htte man da nicht eine passende finden knnen? Wir hatten ja eine gefunden: In 1996 war das ObjectiveC. Die frhen Versionen von IntarS waren ganz in ObjectiveC programmiert. Die Architektur sah so aus, dass es viel Geschftslogik gab, die auf einen stndig wachsenden Set von ntzlichen technischen Grundfunktionen zugriff. Whrend sich die Grundfunktionen zu einem Framework verdichteten, wurde die Geschftslogik stndig umgeschrieben. Sie bestand schlielich nur noch aus Listen von Funktionsaufrufen. Da lag es nahe, diese in Textfiles auszulagern und einen Interpreter zu bauen, der die Textfiles liest und die Funktionen aufruft. So ward IntarScript erschaffen. Und wir sahen, dass es gut war. Denn nderungen und Erweiterungen waren nun durch einfaches Editieren der Textfiles mglich. Es musste nichts mehr kompiliert werden. Alles komplizierte, technische war im Framework, whrend in den Textfiles, die seitdem Scripts heissen, das fachliche, betriebswirtschaftliche steht. Es gibt mittlerweile einen Namen dafr: DSL - Domain Specific Language. http://de.wikipedia.org/wiki/Domnenspezifische_Sprache IntarScript bietet DSL-Befehle fr: PDF-Erzeugung Feld- und Dialogsteuerung Datenbank-Abstraktion Eingabeverarbeitung Auswertungen, Filtern, Suchen, Import/Export Schnittstellen Batch-Verarbeitung mail, fax, Dokumentenmanagement

Technisches
IntarScript ist beeinflusst von C, ObjectiveC, bash, Ruby, Java, Perl, Basic, dBase. Man hat neben den eingebauten Befehlen direkten Zugriff auf Framework-Methoden: Application Session Module Datenmodell Benutzer Funktionalitten fr Barcode XML, XML-RPC Files Betriebssystem, Netzwerk

IntarScript

131

Die Kombination aus kompiliertem Framework und Interpreter ergibt eine Gesamtperformance, die nur wenig hinter der eines komplett kompilierten Systems zurckbleibt. Das liegt daran, dass zum einen beim Systemstart zunchst alle Scripts eingelesen, geparst und in eine Art Bytecode berfhrt werden. Und zum anderen laufen beim Interpretieren die allermeisten Taktzyklen wieder in kompiliertem Code, weil es sich wie oben geschildert im Wesentlichen um eine Liste von Funktionsaufrufen handelt. Wre das Framework dagegen ebenfalls in einer Scriptsprache implementiert (solche ERP Software Systeme gibt es auch), wre die Performance schlechter.

Aus einem Guss


Die gesamte Anwendungslogik ist in ber 1000 Scripts geschrieben. Erweiterungen und Anpassungen erfolgen nahtlos mit derselben Technik, mit der auch der Standard erschaffen wurde. Es gibt keine Flickschusterei.

Formales
Skripte sind klein und einfach. Da sie standalone leben, lsst sich unbeschwert drauflos programmieren. Variablen sind defaultmig im Scope eines Scriptes global, typenlos, und haben kurze Namen. Natrlich gibt es auch lokale Variablen und Typprfungen, aber nur, wenn man extra etwas dafr tut. Zum Programmieren gengt ein Text-Editor, z.B. Notepad++, mit dem wir auch arbeiten und fr den wir eine IntarS-Sprachdefinitionen anbieten. Als DSL (s. oben) ist IntarScript sehr effizient und erfordert wenig Schreibarbeit. IntarScript lsst dem Programmierer keinen knstlerischen Freiraum. Es gibt genau ein Statement pro Zeile und Befehle und Operanden werden suberlich mit Komma getrennt. Der Schachtelung von Ausdrcken sind Grenzen gesetzt. Als Folge sehen alle Scripts gleich aus, egal wer sie programmiert hat. Sie sind bersichtlich, man findet sich auch in fremden Scripts sofort zurecht. Namenskonventionen tragen zustzlich zur Klarheit bei. Die restriktive Syntax ist zudem ideal fr die Versionsverwaltung subversion und WinMerge.

Convention over configuration


Oder auch "coding by convention" ist ein Grundprinzip von IntarScript. Es bedeutet, dass man nichts tun muss, wenn man ein normales Modul baut. Es werden so wenig Namen wie mglich verbraucht. Defaultmssig heisst ein Modul wie die Tabelle, die es verwaltet. Scripts heissen so wie der Button, der es aufruft. Nur vom Standard abweichendes Verhalten wird implementiert, indem dafr vorgesehene Events aktiviert und mit Leben gefllt werden. Auch die Directory-Struktur ist fest vorgegeben.

Programming by Example
Neugeborene lernen sprechen, indem sie Beispiele von gesprochenem aus ihrer Umwelt aufnehmen und mit der Zeit daraus Grammatikregeln abstrahieren. Genauso lernt man, wenn man mal ehrlich ist, auch eine Programmiersprache. Ein Beispiel ist erleuchtender als hundert Seiten abstrakter Syntaxabhandlung. Mit IntarScript haben wir daher dieses Prinzip zur Tugend erhoben. Die ber 1000 Scripts mgen als Beispiele dienen. Sie lassen sich trefflich mit dem Notepad++ durchsuchen oder mit der in IntarS integrierten Scriptverwaltung. Natrlich gibt es auch eine Sprachreferenz, um die Feinheiten nachzulesen. Aber auch wir nutzen im Zweifel die Suchfunktion und copy/paste. Das geht schneller. Wenn man, vor allem am Anfang, noch nicht weiss, wonach man suchen soll, hilft einem der Button "Modulscripte" im System-Reiter eines jeden Moduls weiter. Will man nmlich wissen, wie etwas bestimmtes in einem interessanten Modul programmiert wurde, muss man nur auf "Modulscripte" klicken und bekommt die Scripts aufgelistet, derer sich das Modul bedient.

IntarScript

132

12.2 Sprachreferenz
Befehlssyntax
Es gibt drei Arten von Befehlen in IntarScript: Zuweisungsbefehle, Verarbeitungsbefehle und Codemanagementbefehle. Jeder Befehl kommt in eine Zeile. Die Elemente - Name, Operator und Operanden werden durch Kommata getrennt. Ein Befehl ist immer am Zeilenende zu Ende. Leerzeichen und Tabulatoren vor dem Befehl werden ignoriert. Man kann also einrcken, um Blcke und Ablaufsteuerung zu verdeutlichen.

Zuweisungsbefehle
Diese haben die Form: Ziel,Name,Operand(en). Das Ziel ist eine Variable. Der Name ist der Name des Befehls, der Operand oder die Operanden sind wiederum Variablen oder Konstanten oder Ausdrcke. Der einfachste Zuweisungsbefehl heit "=", z. B.: $a,=,$b weist der Variable $a den Wert aus $b zu. Es gibt jedoch auch komplexere Zuweisungsbefehle, z. B.: $a,getEOsQSoa,vid_lager,$q,$soa beschafft ein Array von EnterpriseObjects aus der Datenbanktabelle "vid_lager" unter Anwendung des Qualifiers $q und des Sortorderarrays $soa (serverside sort). Ein Bespiel: $a1,=,'12 $a2,=,'23 $a3,=,'10 $ziel,spf,'%@ kg %@ Liter %@ Stck,$a1,$a2,$a3 Der Inhalt von $ziel wrde dann wie folgt aussehen: 12 kg 23 Liter 10 Stck

Verarbeitungsbefehle
Diese haben die Form: Name[{' '|','|'\t'}Operand[,Operand...]]. Der Name ist der Name des Befehls, der Operand oder die Operanden sind Variablen oder Konstanten oder Ausdrcke, z. B.: logi "Hello World gibt den String "Hello World" interaktiv (auf der Oberflche) aus. Zwischen Befehl und erstem Operand steht genau ein Leerzeichen oder ein Komma oder ein Tab. Man beachte dass am Ende kein Anfhrungszeichen steht, da der Befehl und damit der String am Zeilenende aufhrt.

Codemanagementbefehle import Skriptname


Damit werden die Befehle eines anderen Scripts importiert. Der Skriptname ist der Pfadname des Skripts relativ zum /Script- Verzeichnis. Die Extension ist wegzulassen. Zur Unterscheidung von normalen Scripts beginnt der Name von importierten Scripts mit einem "_". Enthlt der Skriptname die Zeichenkette "$mandant", wird diese vor dem Laden zur Mandantennummer expandiert. Der Import geschieht einmalig beim Start der Anwendung bzw. jeweils beim Neuladen der Skripte. Diese Technik ist zur Wiederverwendung kleinerer, unkritischer Codesequenzen gedacht. Zu beachten ist die enge Verflechtung mit dem importierenden Skript. Eine strkere Kapselung erhlt man mit dem "execute" Befehl. Import ist vergleichbar mit der #include Compiler-Directive in C. Z. B.: import _hilfslinien

IntarScript

133

subscript:Skriptname
Hiermit kann man mehrere Skripte in einer Skript-Datei unterbringen. Normalerweise hat man ein Skript pro Datei. Bei vielen kleinen Skripten ist dies unbersichtlich und mhsam. Dann schreibt man mit subscript:Skriptname ... end die Skripte zusammen in eine Datei. Sie werden vom System unter diesem hier angegebenen Skriptnamen gefunden und nicht mehr wie sonst ber den Dateinamen. Events-Skripte werden normalerweise so implementiert. Z. B.: subScript:didUpdate import _peo_durchrechnen end

#eo Variable Tabellenname


Deklariert, dass die Variable ein EO der angegebenen Tabelle enthalten muss. Diese Information nutzt der Interpreter, um feststellen zu knnen, ob mit gltigen Attributnamen darauf zugegriffen wird. Bei ungltigen wird zur Laufzeit ein Namechecking-Fehler geloggt.

#warning text
Damit schreibt man eine Warnung in das Script, die beim Laden des Scripts ausgegeben wird. Auf die Ausfhrung hat das keinen Einfluss. Warnungen dienen der Kommunikation zwischen Entwicklern und als Notizblock.

Kommentare
Kommentare werden mit // fr einzelne Zeilen und /*....*/ mehrere Zeilen analog C angegeben. Bsp.: // das ist ein Kommentar // hier ein eingerckter /* alle Befehle hier drin sind auskommentiert */

label Name
Damit wird ein Label fr die Function-List des Notepad++ gesetzt. Es dient dazu, diese Stelle beim Editieren schnell anspringen zu knnen. Zur Ausfhrungszeit haben labels keine Bedeutung. Neben labels werden auch subScript: und Subroutinen in der Function-List angezeigt. Voraussetzung ist die IntarScript-Erweiterung fr den Notpad++. Man kann sie kostenlos herunterladen bei http://sourceforge.net/projects/intars.

Notation von Operanden {Formatierung}Ausdruck{Data-Option}


Einem Operanden kann man eine oder mehrere optionale Formatierung(en) voranstellen. Formatierungen knnen kombiniert werden. Sie werden nach Auswertung des eigentlichen Ausdrucks angewendet. So kann z. B. mit <int> das Ergebnis ganzzahlig gemacht werden. Der Ausdruck des Operanden kann eine Konstante, eine einfache Variable oder ein zusammengesetzter Ausdruck sein. Konstanten werden einfach hingeschrieben. Ohne ein vorangestelltes Anfhrungszeichen wird die Zeichenkette bis zum nchsten Leerzeichen oder Komma als Konstante interpretiert. Ein vorangestelltes einzelnes Anfhrungszeichen interpretiert die folgende Zeichenkette bis zum ersten Komma als Konstante.

IntarScript

134

Will man Kommata in einer solchen Konstante angeben, geschieht dies mit <comma>. Ein vorangestelltes doppeltes Anfhrungszeichen interpretiert die folgende Zeichenkette bis zum Zeilenende als Konstante. Mehrzeilige Konstanten werden mit dem "ml"-Zuweisungsbefehl definiert. logi "Hello, World Variablen bestehen aus einem Namen und vorangestelltem Kennzeichen "%" oder "$". Das Kennzeichen besagt, wo die Variable ist. "$"-Variablen leben im Variablenraum des Skripts. Sie werden dort erzeugt und vergehen auch wieder mit dem Ende des Skripts. Variablen, die mit "$l_" beginnen, sind zustzlich noch lokal in ihrer Subroutine, in der sie zum ersten Mal genannt werden. Dagegen leben Variablen mit Prefix "%" auerhalb des Skripts. Das Skript fragt dazu seine Datasource. Variablen knnen gelesen und gesetzt werden, z. B.: $a,=,1 der Script-Variablen $a wird der konstante Werte 1 zugewiesen. %parmDict.p_abc,=,xyz in das parmDict der Datasource wird unter dem Schlssel "p_abc" der konstante String "xyz" geschrieben. Variablen knnen ber den sog. Keypath benannt werden. Ein Keypath ist die Verkettung von Namen mit Punkten. Diese Syntax wurde in C zur Navigation von Datenstrukturen ersonnen. In SQL ist sie ebenfalls bekannt, um Felder in Tabellen anzusprechen. Heute ist die Keypath-Notation vor allem durch Java bekannt geworden. Sie ist mittlerweile Allgemeingut in allen modernen Sprachen. Ein Keypath wird Element fr Element abgearbeitet, indem das erste Element nach dem Namen des zweiten gefragt wird. Das Ergebnis dieser Frage wird wiederum nach dem Namen des dritten gefragt usw. Als Besonderheit in IntarScript knnen Keypath-Elemente wiederum Variablen sein. Daraus ergeben sich sehr viele Mglichkeiten, z. B.: $qrs.$tuv.wxy $qrs wird nach dem Wert gefragt, der in $tuw steht; das dabei erhaltene Objekt wird nach "wxy" gefragt. $abc.def$ghi $abc wird nach dem Wert gefragt, dessen Name mit "def" beginnt und mit dem Wert endet, der in $ghi enthalten ist.

Ausdrcke
Zusammengesetzte Ausdrcke werden aus Ausdrcken gebildet, die mit den Grundrechenarten (+,-,*,/), der Modulo-Division (m) und Klammern verknpft werden, z. B.: (($a + $b) / $c) Zu beachten sind die Leerzeichen zwischen Operatoren und Ausdrcken. Sie sind notwendig. Die Data-Option ist eine Spezialitt von EOs (EnterpriseObjects). Man kann mit ".*eo" das EO anstatt seines foreignkeys beschaffen. Mit ".*bez" wird die Oberflchenbezeichnung des internen Werts einer Werteliste besorgt. Z. B.: $ap.artikelnum.*eo besorgt den Artikelstamm des $ap, wenn $ap ein EO und artikelnum eine Relation zum Artikelstamm ist. Ohne das ".*eo" wrde nur die Artikelnummer geliefert. Data-Optionen werden immer am Ende angegeben. Relationen innerhalb des Keypaths werden von IntarScript von selbst aufgelst. Mit .*eo wird nur gesteuert, ob am Ende des Keypaths auch noch das EO geholt werden soll.

Alle Formatieroptionen
<date> <week> <month> <monthName> <yw> <year> <yy> guiDate machen Kalenderwoche Monat 2-stellig Monat Abkrzung Jahr/Kalenderwoche Jahr 4-stellig Jahr 2-stellig

IntarScript
<wdayn> <int> <floor> <ceil> <intnd> <money> <f1> <f3> <f1nd> <f2nd> <f3nd> <uc> <lc> <strNN> <strsNN> <stlNN> Wochenname kurz integer floor() ceil() integer no decimalpoint 2 NK 1 NK 3 NK 1 NK no decimalpoint 2 NK no decimalpoint 3 NK no decimalpoint uppercase lowercase rechtsbndig, Moneyformat, auf Laenge NN mit Spaces gefllt rechtsbndig, string, auf Laenge NN mit Spaces gefllt linksbndig, string, auf Laenge NN mit Spaces gefllt

135

<trans> bersetzen in Sprache, die mit dem "lang"-Befehl gesetzt wurde <tri> translation inline; String enthlt bersetzungen, mit "|" getrennt; fallback auf <trans> <trim..> <round2> <round1> ' " abschneiden auf 2 NK runden auf 1 NK runden wrtlich bis zum nchsten Komma wrtlich bis zum Zeilenende

Alle Zuweisungsbefehle

Ziel,=,op1 dem Ziel wird der Operand op1 zugewiesen Ziel,=:,op1 Ziel muss ein Feld eines EOs sein; =: weist dem Ziel den Operand op1 zu, formatiert ihn aber dabei gemss dem Datentyp des PBDDAttribute, welches das EO Feld beschreibt. (Texte werden auf Attributlaenge gekuerzt, numerische Werte werden laut Kommastellenangaben gerundet.) Ziel,*,op1 Ziel wird mit dem Wert von op1 multipliziert Ziel,/,op1 Ziel wird durch den Wert von op1 geteilt Ziel,-,op1 Der Wert von op1 wird von Ziel abgezogen Ziel,+,op1 Der Wert von op1 wird auf Ziel aufaddiert Ziel,m,op1 Ziel wird durch op1 geteilt und der Rest wiederum dem Ziel zugewiesen (Modulo-Division) Ziel,spf,formatstring,op1[,...] entspricht der sprintf() in C; baut einen Ergebnisstring in Ziel zusammen, indem in die Platzhalter des formatstring die Operanden der Reihe nach eingesetzt werden.

IntarScript
Platzhalter werden mit %@ (String) und %...i (Integer) notiert. Ist ein Operand ein Array, werden die Inhalte des Arrays der Reihe nach eingesetzt. Ziel,ml,op1[\n...] ... \end multiline; liefert in Ziel ein Array von Zeilen bis \end lookupBegin op1 [lookupFS op1] dummy,colKey1[,colKey...] rowKey,wert1[,wert...] .... lookupEnd eine Lookup-Tabelle namens op1 definieren; sie enthlt Zeilen, die durch \n getrennt sind und Spalten, die durch \t getrennt sind. mit lookupFS kann ein anderer Spaltentrenner definiert werden. z. B. lookupFS | Ziel,lookup,lookupTableName,rowKey,colKey auf eine Lookup-Tabelle zugreifen; es wird der Wert im Schnittpunkt von rowKey und colKey zurckgegeben. matrixBegin op1 [lookupFS op1] wert1[,wert...] ... matrixEnd eine matrix namens op1 definieren sie enthlt Zeilen, die durch \n getrennt sind und Spalten, die durch \t getrennt sind. Zugriff auf die erste Zeile: $zeile,oai,$op1,0 Zugriff auf den ersten Wert in der Zeile: $s,oai,$zeile,0 Ziel,a,... append String(s) bzw. addObject(s) (in Array) oder addEntries (in Dictionary) Ziel,au,... addUniq (in Array) Ziel,cat,... concatenate Operanden zu einem String Ziel,ah,... addHex (an MutableData; jew. ein Byte in Hex-notation;) Ziel,ss,string,von,laenge Substring aus string von, laenge; laenge=e -> bis ende; Anfang bei 0 Ziel,find,string,suchstring,{start,option} suchstring in string ab Position start suchen; liefert position innerhalb string oder -1 falls nicht gefunden; option: ci = case insensitive Ziel,newEO,entityName erzeugt neues EO zur Tabelle entityName Ziel,newArray,count erzeugt neues MutableArray

136

IntarScript
Ziel,newArrayE,op1... erzeugt neues MutableArray aus den aufgezhlten Elementen ist ein Operand ein Array, werden dessen Elemente verwendet newFile,filename erzeugt neue NSFileHandle Ziel,newDict,count erzeugt neues MutableDictionary Ziel,newData,count erzeugt neues MutableData Ziel,newString,count erzeugt einen MutableString Ziel,count,o liefert die Anzahl Elemente im Array oder Dictionary bzw. Lenge eines Strings Ziel,oai,Array,index liefert das Objekt am index in Array Ziel,ofk,Dictionary,key liefert das Objekt fr den key aus Dictionary Ziel,allk,Dictionary liefert allKeys des Dictionary Ziel,allv,Dictionary liefert allValues des Dictionary Ziel,css,string,Separator Zerteilt den String string an den Stellen, wo Separator vorkommt und liefert ein Array von Teilstrings in Ziel (componentsSeparatedByString) Ziel,cjs,array,Joinstring verkettet die Strings in array mit Joinstring und legt das Ergebnis in Ziel ab (componentsJoinedByString) Ziel,cai,string,index liefert das Zeichen am Index index von string als String Ziel,modul,modulName liefert das Modul namens modulName Ziel,swcof,filename stringWithContentsOfFile Ziel,attributes,filename liefert die file-attributes als dictionary NSFileSize NSFileModificationDate NSFileType Ziel,class,className NSClassFromString Ziel,nowFormat,format [[NSCalendarDate date]descriptionWithCalendarFormat:format] Ziel,d+,amount,interval addiert auf Ziel die Anzahl amount von interval auf interval = {y,m,d,w,wd,H,M,S} w=week, wd=workday Ziel,d-,amount,interval zieht von Ziel die Anzahl amount von interval ab Ziel,dd,nd_1,nd_2 liefert als Ergebnis die Differenz nd_1 - nd_2 in Sekunden nd_1 und nd_2 mssen Format normalizedDate haben;

137

IntarScript

138

DB Zusweisungs-Befehle
Ziel,tableNamed,tableName liefert die PBDDTable mit dem Namen tableName aus dem Datenmodell Ziel,soaFrom,op1[,...] erzeugt ein SortOrderArray; op1... sind die Feldnamen mit angehngtem... :d descending :a ascending :an ascending numeric :n numeric :dn descending numeric Ziel,q,qualifierformat macht einen Qualifier aus dem String qualifierformat; Ein Qualifier dient dazu, die where-clause eines SQL-Statements zu erzeugen. Er ist eine objektorientierte, rekursive Beschreibung des gewnschten Suchergebnisses. Qualifier werden als Parameter bei vielen Befehlen bergeben, die Ergebnismengen liefern. Ziel,qand,array macht einen AND-Qualifier aus den Qualifiern in array Ziel,qor,array macht einen OR-Qualifier aus den Qualifiern in array Ziel,allq macht einen all-qualifier Ziel,nothingq macht einen nothing-qualifier Ziel,setFetchCond,qualifier,entityName[,soa[,limit]] bereitet eine Cursor-Verarbeitung vor; entspricht "open currsor..." in anderen Umgebungen; qualifier qualifiziert die Stze, entityName bezeichnet die Tabelle, soa ist ein SortOrderArray und legt die Sortierung fest, limit legt eine Grenze fest wie viele Stze max. gelesen werden liefert ein PBFetchRequest; Bsp.: $pbfr,setFetchCond,qualifier,entityName,soa,[,limit] if $pbfr,FILLED, $eo,=,$pbfr.nextEO while $eo,FILLED, ... Verarbeitung $eo,=,$pbfr.nextEO endwhile endif Ziel,getEOPkValue,entityName,pkValue liefert einzelnes EO der Tabelle entityName mit dem primary Key pkValue Ziel,getEOsQ,entityName,Qualifier liefert ein Array von EOs aus der Tabelle entityName, qualifiziert durch Qualifier Ziel,getEOsQf,entityName,Qualifierformat liefert ein Array von EOs aus der Tabelle entityName, qualifiziert durch Qualifierformat Ziel,getEOQ,entityName,Qualifier liefert ein einzeles EO aus der Tabelle entityName, qualifiziert durch

IntarScript

139

Qualifier Ziel,getEOQf,entityName,Qualifierformat liefert ein einzeles EO aus der Tabelle entityName, qualifiziert durch Qualifierformat Ziel,getEOsQSoa,entityName,Qualifier,sortorderArray liefert ein Array von EOs aus der Tabelle entityName, qualifiziert durch Qualifier und sortiert nach sortorderArray (serverside sort) Ziel,singleValueSQL,sql liefert einen einzelnen Wert als Auswertung des sql Ziel,singleRecordSQL,sql liefert ein einzelnes Dictionary als Auswertung des sql Ziel,arraySQL,sql liefert ein Array of Dictionaries als Auswertung des sql Ziel,arraySQLs,sql liefert ein Array of Strings als Auswertung des sql

Alle Verarbeitungsbefehle DB Operationen


sql op1 fuehrt das SQL Kommando in op1 aus; updat_eo eo update eo DB Grundoperation update; schreibt genderte Werte in eo in den korrespondierenden Datenbanksatz zurck. delet_eo eo delete eo DB Grundoperation delete; lscht den korrespondierenden Datenbanksatz insrt_eo eo insert eo DB Grundoperation insert; erzeugt einen neuen Datenbanksatz, der die Werte des eo enthlt; dbnr i Datenbanknr auf i setzen; gilt fr alle folgenden Operationen innerhalb der Request-Response Loop; 0 setzt auf normale DB des Mandanten;

Foundation
roai Array,Index ioai Array,Index,o sort Array,soa rao op1 rofk Dictionary,key invk target,m[,parm...] removed das Objekt am Index in Array inserted das Objekt o am Index in Array sortiert Array gem SortOrderArray soa removed alle Objekte aus der Collection op1 (Array oder Dictionary) removed das Objekt fr den key aus Dictionary ruft die Methode m am Zielobjekt target auf und bergibt Parameter; liefert den Returnwert der Methode in $_rv; 'nil' als parameter wird erkannt: invk $r,selector:,nil Systemkommando ausfuehren script-Sprache abweichend von User-Sprache setzen; z. B. fr Druck ausl. Kunden wirkt sich auf <trans> aus

system op1 lang op1

IntarScript
wtf op1,path[,enc] Unicode, ASCII); default ist UTF8 Schreibt den String op1 in die Datei path mit encoding (CP1252, ISOLatin1, ISOLatin2,

140

Modul-Steuerung
suchexternal modul,q fieldOn op,... fhrt Suchexternal mit Qualifier q aus enabled die Felder op,.... in datasource, wenn sonst nichts dagegen spricht versteht Wildcard '*' fieldOff op,... disabled die Felder op,... versteht Wildcard '*' markError op,... setzt die Felder op,... auf Status "Fehler" allFieldsOn alle Felder aufmachen, wenn sonst nichts dagegen spricht allFieldsOff alle Felder zumachen fieldInvisible op,... Felder verschwinden lassen; Wildcard '*' fieldVisible op,... Felder anzeigen; Wildcard '*' allFieldsVisible alle Felder sichtbar, wenn sonst nichts dagegen spricht registerInvisible op,... Register verschwinden lassen registerVisible alle Register anzeigen optionStd vl Valuelist vl auf Modell-Standard zurcksetzen optionAdd vl,val,bez0,bez1 der Valuelist vl eine Option hinzufgen optionRem vl,val der Valuelist vl die Option val entfernen createButton on|off aktiviert/deaktiviert den jeweiligen Button deleteButton on|off duplicateButton on|off say clear Scratchpad lschen say x,y,{l,r},value,... value(s) an x,y in Scratchpad schreiben sayw x,y,{l,r},w,value,... value(s) an x,y in Breite w in Scratchpad schreiben

Drucken
newPDF dann darauf; render neues PDF erstellen; alle Folgebefehle beziehen sich

PDF selbst rendern u. in file schreiben; Application rendert dann nicht mehr embedFonts nach rendern in file fonts embedden previewPDF PDF im Preview anzeigen finalizePDF PDF rendern und in File schreiben und im Preview anzeigen pages setzt maximale Anzahl Seiten, die ein PDF lang werden darf; default 1000; newPage neue Seite; mind. einmal erforderlich; default DinA 4 Hochformat newPageQuer DIN A 4 Querformat newPageA5Quer DIN A 5 Querformat newPageWH 2100,1300 frei definierbare Seite, z. B. f. Umschlge, Etiketten alle Abmessungen sind in 1/10 mm spx op1 select Page op1; Seite festelegen, auf die Kommandos angewandt werden

IntarScript
spl scale op1 select Page last; auf letzte Seite; Skalierung festlegen; 1 = 1mm, 10 = 1/10 mm wirkt auf alle folgenden Koordinaten und Abmessungen f op1,[op2] Font, Size s op1 font-size lc op1 line color in sw lcrgb op1,op2,op3 line color in rgb 0...100 lc255 op1,op2,op3 line color in rgb 0...255 lc# op1 line color in rgb hexwert XXXXXX lw op1 line width lsn linesytle normal (durchgezogen) ub underline begin ue underline end ls x1,x2 linestyle gestrichelt: x1 durchgezogen, x2 luecke fc op1 fill color in sw fcrgb op1,op2,op3 fill color in rgb 0...100 fc255 op1,op2,op3 fill color in rgb 0...255 fc# op1 fill color in rgb hexwert XXXXXX rf x,y,w,h rahmen filled rl x,y,w,h rahmen leer kf x,y,r kreis filled; mittelpunkt, Radius kl x,y,r kreis leer; mittelpunkt, Radius l x,y,o,l Linie; o = {x,y} -> waagrecht/senkrecht; l = laenge wenn x = 'a' -> append mode lvb x1,y1,x2,y2 2 pt. verbinden; mit current lineWidth u. grayStroke v x,y,o,op1,... Value; o = {l,r,c,dxxx} -> Links-/Rechtsbndig/Zentriert/Gedreht; op1,... werden mit space verknpft; dxxx = Drehung um xxx Grad; impliziert linksbndig; wenn x = 'a' -> append mode center nur in Aprica; vc x,y,o,op1,... v compact, wie v, aber ohne space zwischen den aufgezhlten operanden vw x,y,o,w,op1,... v width, wie v, aber zustzlich Maximalbreite w als weiterer Parameter b x,y,w,1,o,op1,... Box, die mit Flietext gefllt wird; o = {l,r,b}; c = Center; op1..n werden mit space verknpft; bf x,y,w,1,o Folgebox; druckt das, was in vorherige Box nicht reingepasst hat. Der frhere h-Parameter ist moeglichst mit "1" anzugeben Flietext kann Inline-Kommandos "f" und "s" zur Formatierung beinhalten. Die Kommandos mssen in einer Zeile fr sich stehen. .inline f Helvetica-Bold .inline s 12 g x,y,w,op1 Grafik; im jpeg-Format; wird proportional auf Breite w skaliert; op1 = abs. Pfad wenn mit / beginnend, sonst Bildname relativ zum PDF-Image Path y ist untere Kante gh x,y,h,op1 Grafik; im jpeg-Format; wird proportional auf Hhe h skaliert, sonst wie g-Kommando ? ... Druck im lineprinter Modus ?b ... Druck bold im lineprinter Modus Steuerung ber diese Variablen: $?line

141

IntarScript
$?size $?leftMargin $?topMargin $?cr $?font

142

Programmfluss:
import op1 anderes Script an dieser Stelle importieren; debug, nodebug debugging ein/aus; im debugmodus wird jedes statement gelogged; log op1 Operand op1 loggen logi op1 Operand op1 an Oberflche als Meldung ausgeben if op1,[!]op,op2[,..] Bedingte Ausfhrung: op1 wird mit dem Vergleichsoperator op mit op2 und evt. weiteren Operanden verglichen op = {eq,ne,==,=,>,<,>=,<=,FILLED,FILLEDNUM, exists,contains,like,prefix,suffix,in} ! negiert den Vergleich eq,ne vergleichen Strings ==,=,>,<,>=,<= vergleichen numerisch FILLED testet jedes Objekt, egal welcher Klasse auf gefllt; FILLEDNUM testet zustzlich auf ungleich "0"; op2 ist bei FILLED und FILLEDNUM ohne Funktion, das Komma muss aber sein exists testet, ob es ein File namens op1 gibt contains testet, ob op1 (NSString/NSDictionary/NSArray/NSSet) einen der Operanden enthlt; ist ein Operand ein Array, wird sein Inhalt getestet; like macht einen Vergleich mit WildCards: "*" und "?" prefix,suffix testen, ob op1 den pre-/suffix op2 hat in prft, ob op1 mit op2 oder einem der folgenden Operanden bereinstimmt; op2 und folgende drfen NSArrays sein; es wird der Vergleich mit jedem Element der Arrays durchgefhrt; else else endif ende des letzten offenen if-Blocks while op1,op,op2 while-Schleife; Argumente wie bei if continue zum while-Statement springen break while-Schleife abbrechen endwhile Ende der letzten offenen while-Schleife foreach op1,op2[,op3] Iterator; op1=Name of current Objekt, op2=Array,

IntarScript

143

op3=Name optionaler Index; endfor Ende der letzten offenen foreach-Schleife continuefor zum endfor springen breakfor hinter das endfor springen end Programmende; optional gosub op1[,op2...] Unterprogramm aufrufen mit optionaler Parameterbergabe sub name Beginn Unterprogramm; bergebene Parameter heissen $l_p1,$l_p2,... endsub Ende Unterprogramm return Unterprogramm verlassen; optional execute op1[,op2,...] anderes Script namens op1 aufrufen mit optionaler Parameterbergabe; gleiches parmdict, gleicher datasource; evtl. Ergebnis in $scriptRC, alle Variablen in $_rv der erste parameter wird als p_eo uebergeben; alle weiteren als p_1, p_2, ... executeString op1,op2 anderes Script, das in op2 liegt, mit Name op1 aufrufen; gleiches parmdict, gleicher datasource; evtl. Ergebnis in $scriptRC, alle Variablen in $_rv execute_inl op1 anderes Script inline ausfuehren mit derselben datasource u. parmdict; script wird nur im scriptDictAnalyzed gesucht; varDict des gerufenen Scripts kommt in $_rv zurureck; gesamten Variablenraum in %parmdict uebergeben und wieder zurueckholen autorelease nicht mehr bentigten Speicher zwischendurch freigeben; dies erfolgt sonst nach jeweils 3000 verarbeiteten Statements automatisch;

Dialogverarbeitung
diaConfirm meldung[,Ablehnung,Besttigung] gibt meldung in einer Alertbox aus mit zwei Buttons fr Besttigung oder Ablehnung; Ergebnis in $_rv; J = besttigt; N = abgelehnt; ACHTUNG: diaConfirm ist nicht dafr geeignet, will... Events zu unterbrechen. ACHTUNG: funktioniert nur in Skripten, die direkt aufgerufen wurden. Skripte, die mit execute aus einem anderen Skript aufgerufen werden, drfen keine diaConfirm-Befehle ausfhren, da sonst der Aufrufstack zerstrt wird. diaAlert meldung gibt eine Alertbox aus mit Nachricht meldung, die ausschlielich besttigt werden kann;

IntarScript

144

Environment
folgende Variablen werden schon vorab vom System gesetzt: $_globalCfgPath, $_GLOBALCONFIGPATH $NEXT_ROOT/Local/Library/$Appname $_mandantPath, $_MANDANTPATH MANDANTPATH $_user $_actionName $_app $_today $_rv angemeldeter Benuzter zuletzt aufgerufene Aktion bei Attribute-Buttons Applikationsname Datum im dbFormat Returnvalue des letzten invk-Befehls und des expression-scripts von attributen und des ganzen Variablenraumes eines aufgerufenen Scripts Rckgabewert, von "will..." Event-Scripts; wenn "N" geliefert wird, wird dies als Ablehnung durch das Event-Script gewertet; Filemanager

$scriptRC

$_myFM $_lastFont $_lastSize $_path

der zuletzt gesetzte Font Gre des zuletzt verwendeten Font kompletter Pfad, in welches das PDF geschrieben wird $_path_back_slash dito mit backslashes $_name Name des PDF $_fn_ext Filename u. extension des PDF-Files $_url URL des erzeugten PDF $_ts current tempName (Filename des PDF in temp-Directory) %parmDict MutableDictionary in der datasource zur freien Verwendung; z. B. fr Parameterbergabe an andere Scripts; was sich im parmDict befindet, wird vor dem Start eines in dessen Variablenraum gestellt; Datasource, i. a. das Modul oder Plugin; Objekt, unter dessen

Scripts %datasource Kontrolle

das Script abluft %session die Session %session.ueo User-EO; ... .vorname .nachname %session.parmDict MutableDictionary zur freien Verwendung; bleibt fr die Dauer der Session erhalten; %session.pbpdf das momentane PDF %session.pbpdf.currentFontName %session.pbpdf.currentSize %session.pbpdf.restString %session.pbpdf.pdfPath %application die Application / Instanz %application.currentPDFVorgang Form-Name des PDFs und Nummer des Belegs; wird fr PDF-Archiv verwendet; %application.mandant die Mandanten-nr. ohne _K_ %application.myDD

IntarScript
das Data-Dictionary / Modell %application.parmDict MutableDictionary zur freien Verwendung; wird in jedem Request-Response-Zyklus wieder geleert; %application.staticDict MutableDictionary zur freien Verwendung; wird nie geleert; %application.now Systemzeit als normalized Date

145

Namenskonventionen
Environment, Systemvariablen: _... lokale Variablen in subroutines: l_... a,a1Array allgemein maMutable Array mdMutable Dictionary sString allgemein i,jInteger allgemein dDictionary eo EO kKey p_Parameter allgemein qQualifier qfQualifierformat ..fFormatstring allgemein sqlSql Befehl vValue bu_...Button po_...Plugin Object

Konstanten
\n "\n \t "\t \r\n "\r\n newLine newLine tab tab windows cr lf windows cr lf

IntarScript

146

12.3 Tutorial
12.3.1 berblick

Wir bauen einen Pizza-Service

Szenario
Als bungsbeispiel soll eine Pizza-Stammdatenverwaltung fr einen Pizza-Express erstellt werden. Eine Pizza hat eine Nummer, einen Namen, eine Gre, einen Preis (abhngig von Gre) und einen Belag.

Vorgehensweise
Zunchst wird die Pizza-Tabelle in der Workbench modelliert, indem die Tabelle neu angelegt und mit Feldern versehen wird. Dann wird die Datenbank angepasst. Nach Neustart von IntarS wird ein Pizza-Modul zur Verwaltung der neuen Pizza-Tabelle angelegt. Nach einem weiteren Neustart ist das Modul verfgbar. Nun erfassen Sie erste Testdaten und passen die Oberflche im "Config"-Modus an. Beim Arbeiten stellt man fest, was sinnvolle Feldvorbelegungen sind, Pflichtfelder, evtl. noch fehlende Felder, wie man suchen will (Kombi-Suchfelder markieren und Indexe) und wie die Bezeichnung der Objekte sein soll (Descri-Felder). Diese Erkenntnisse modelliert man in der Workbench nach, passt ggf. die Datenbank an. Das Verhalten eines Moduls wird mit Event-Skripten angepasst: Feldsteuerung, Farben und Reaktion auf Eingaben (Vorbelegungen, Prfungen).

12.3.2 neue Tabelle


Pizza-Tabelle
Eine Pizza besitzt auf alle Flle eine Nummer, einen Namen, einen Preis (je nach Gre) und einen Belag. Da sie in der Datenbank gehalten wird, ist es eine "real"-Table. Auf die Pizza-Nummer will man Einfluss nehmen knnen, sie soll nicht automatisch vergeben werden. Nummer ist ein Integer-Feld, Name ein Character, Preise vom Typ Money und der Belag ein Memofeld. Das gelingt folgendermaen:

IntarScript

147

Workbench starten _K_000230/Start_WB.bat

Neue Tabelle anlegen


Klicken Sie auf "neu" im oberen (Tabellen-)Bereich, geben Sie in die 3 Felder ein: "R", "pizza", "Pizza". Besttigen Sie mit der "Return"-Taste.

neue real Table

Whlen Sie unten ein leeres Register, doppelklicken Sie die in der oberen Liste die neue pizza-Tabelle

in Register legen

Legen Sie auf die gleiche Weise die abstrakte "_Vorrat"-Tabelle auf ein anderes Register, markieren Sie das "_vid_general"-Attribut und klicken Sie auf "c" (Copy). Danach klicken Sie auf das Register mit der pizza-Tabelle und klicken auf "v" (Paste). Damit haben Sie eine Sammlung von Standard-Elementen aufgenommen.

IntarScript

148

aus Vorrat _vid_general holen

Attribute hinzufgen
Nun erzeugen Sie das primary Key-Feld "Pizza-Nummer". Klicken Sie dazu im unteren Bereich auf "neu". Es entsteht ein neues Attribut namens "newattribute"; berschreiben Sie den dbName mit "nummer" und drcken die "Return"-Taste. Mit der "Tab"-Taste springen Sie zum guiName und geben "Pizza-Nummer" ein. Mit "Tab" gelangen Sie zum Datentyp. Mit "i" whlen Sie "Integer" aus und besttigen Sie mit "Return". Geben Sie im groen Feld "Doku0" eine kurze Erklrung ein (z. B. "Nummer der Pizza, unter der sie bestellt und angeboten wird"). Da dies der Primrschlssel werden soll, geben Sie im Feld Schl ein "P" ein und drcken "Return".

neues Feld

Verfahren Sie mit den Feldern "pizzaname", "belag", "preis_gross" und "preis_klein" analog. Whlen Sie sinnvolle Datentypen, guiNamen. Drcken Sie immer die "Return"-Tasten bzw. klicken Sie auf "OK" nach einer nderung. Speichern Sie gelegentlich.

Datenbank anpassen
Nun muss die Datenbankstruktur an das neue Modell angepasst werden. Konkret muss die Tabelle "pizza" erzeugt werden. In anderen Systemen msste jetzt ein SQL-Script erstellt werden. Bei IntarS erledigt das die Workbench fr Sie. Gehen Sie dazu bitte folgendermaen vor: 1. 2. Klicken Sie auf "Speichern". Klicken Sie auf "Check".

IntarScript
3. 4. 5. 6. 7. 8. 9. Klicken Sie auf "DB". Klicken Sie auf "Login". Klicken Sie auf "Schema aus DB ermitteln". Klicken Sie auf "Vergleich DB vs. Modell". Markieren Sie die Unterschiede. Klicken Sie auf "DB anpassen". Kontrollieren Sie das erzeugte SQL.

149

10. Klicken Sie auf "Run".

DB anpassen

12.3.3 neues Modul


berblick
Das genderte Modell wird durch Neustart der Anwendung aktiviert. Dann ist die neue Tabelle in IntarS bekannt. Um etwas damit anfangen zu knnen, bentigen Sie jedoch noch ein Modul. Erzeugen Sie ein Modul, indem Sie im "Module"-Modul ein neues Modul anlegen, einen Namen vergeben, einen Platz im Men zuweisen und festlegen, welche Tabelle das Modul verwalten soll. Auf diese Weise werden Sie ein "Pizza"-Modul erstellen. Nach Neustart ist das neue "Pizza"-Modul im Men verfgbar und Sie knnen damit arbeiten, Erfahrungen sammeln, die Oberflche einrichten und weiterfhrende Funktionalitten entwickeln.

Schritt fr Schritt

IntarScript

150

1. Anwendung neu starten


Die Anwendung wird neu gestartet, indem man das "startAprica2_K_000230.bat"-DOS-Fenster schliet und anschlieend die Anwendung wie gewohnt neu startet. Unter Linux geben Sie die Shell-Befehle /etc/init.d/apr000230 stop /etc/init.d/apr000230 start ein. Dasselbe gilt, wenn die Anwendung als "Virtual Appliance" luft.

2. "Module"-Modul aufrufen
Melden Sie sich als Administrator an und geben Sie im "Home"-Modul im Feld "gehe zu" "modul" ein und drcken Sie die "Return"-Taste. Alternativ finden Sie das "Module"-Modul unter dem Modul "Home" im "System"-Men.

Module Suchen

3. Neues Pizza-Modul anlegen


Es sollte sich das Modul-Verwaltungsmodul zeigen. Klicken Sie dort auf "Neu" (1). Als internen Namen vergeben Sie "pizza" (2), als GUI Name "Pizza" (3). Im Unter-Bereich geben Sie "Stamm" (4) ein und bei "Entity Name" whlen Sie die "Pizza"-Tabelle (5) aus. Speichern Sie nun, indem Sie auf "Sichern" (6) klicken oder die Tastenkombination "Alt-s" verwenden. Anschlieend wird mit dem Button "DB to Module.txt" (7) die neue Modulkonfiguration erzeugt.

Module verwalten

IntarScript

151

4. Neustart
Um die im vorherigen Schritt erzeugte Modulkonfiguration zu aktivieren, muss die Anwendung neu gestartet werden.

5. Das "Pizza"-Modul aufrufen


Danach ist das neue "Pizza"-Modul (2) im Men (1) verfgbar und kann durch Anklicken aufgerufen werden.

Modul ffnen

6. Oberflche einrichten
Beim ersten Aufruf werden die Oberflchenelemente automatisch vom Framework regelbasierend angeordnet. Schlsselfelder und Pflichtfelder werden z. B. vor die restlichen Felder gestellt. Das sieht dann so aus:

Ohne Oberflchen-Einstellung

Dieses Layout kann manuell angepasst werden. Sie knnen dies im "Config"-Modus tun, indem Sie auf "C" klicken oder die Tastenkombination "Alt-o" verwenden.

IntarScript

152

Oberflcheneinstellung-Detailsicht

Hier sehen Sie links die vorhandenen Register mit den dazu gehrenden Oberflchenelementen. Auf der rechten Seite werden alle Felder und Steuerelemente angezeigt.

Reihenfolge der Felder verndern


Markieren Sie "Pizzaname" (siehe Oberflcheneinstellung-Detailsicht > p) und drcken Sie den Button "nach oben" (a). Damit wird der Pizzaname um eine Stelle nach oben verschoben. Analog verschiebt ihn ein Klick auf den Button "nach unten" (b) eine Position nach unten. Geben Sie in das Feld (c) 003 ein, um den Pizzaname direkt auf Position 3 zu schieben.

Felder einfgen oder ausblenden


Markieren Sie "Pizzaname" und drcken anschlieend "in Register aufnehmen" [<<<<<<] (d) oder verwenden Sie die Tastenkombination "Alt-a". Der Pizzaname wandert nach links ins Register. Er erscheint damit auf der Oberflche. Analog wird er durch Klick auf "aus Register entfernen" [>>>>>>] (e) oder der Tastenkombination "Alt-r" aus dem Register und damit von der Oberflche entfernt.

Umbruch einfgen
Markieren Sie links "Pizzaname" und klicken anschlieend auf "Zeilenumbruch" oder verwenden die Tastenkombination "Alt-x", um einen Umbruch vor "Pizzaname" einzufgen. Dies bewirkt, dass "Pizzaname" in einer neuen Zeile links steht.

Felder farblich markieren


Markieren Sie "Pizzaname" (p) und klicken Sie auf <class=1> (f), um diesen Rot zu markieren.

IntarScript

153

Auswahlliste Spalten einstellen (Spaltenbreite, Reihenfolge)


Klicken Sie auf "Liste" (g), markieren Sie "Bearbeiter" und klicken Sie auf ">>>>>", um ihn aus der Liste zu entfernen. Markieren Sie "Pizzaname", geben Sie in das Spaltenbreitenfeld unten ("markierte Steueranweisung ndern") 200 ein und drcken Sie die "Return"-Taste. Damit haben Sie die Spalte auf 200 Pixel Breite konfiguriert. Gelegentlich knnen Sie "Preview" klicken, um sich anzeigen zu lassen, wie es aussehen wrde. Sind Sie mit dem Ergebnis zufrieden, klicken Sie auf "Fertig!" oder verwenden die Tastenkombination "Alt-s". Sie knnen den "Config"-Modus jederzeit wieder aufrufen. Nachdem die Oberflche angepasst wurde, sieht das Ergebnis wie folgt aus:

Nach der Oberflchen Einstellung

12.3.4 Daten erfassen


berblick
Nachdem Sie die Tabelle "Pizza" mit den zugehrigen Attributen angelegt haben, mssen die Pizzen manuell in das System eingegeben werden.

Schritt fr Schritt 1. Daten erfassen


Um die Pizzen zu erfassen, klicken Sie auf "Neu" oder verwenden die Tastenkombination "Alt-n" und fllen die entsprechenden Felder aus. Positionieren Sie den Cursor dabei mit der "Tab"-Taste weiter. Mit "Sichern" (oder der Tastenkombination "Alt-s") wird der neue Satz dauerhaft in der Datenbank gespeichert. Geben Sie bei "Pizza-Nummer" "1", bei "Pizzaname" "Pizza Salami", bei "Preis_gross" "5,10", bei "Pizza_klein" "3,10" und bei "Belag" "mit Salami" ein. Erfassen Sie nun bei "Pizza-Nummer" "2", bei "Pizzaname" "Pizza Tonno", bei "Preis_gross" "6,10", bei "Pizza_klein" "3,60" und bei "Belag" "mit Thunfisch und Zwiebeln". Geben Sie bei "Pizza-Nummer" "3", bei "Pizzaname" "Pizza Italia", bei "Preis_gross" "6,60", bei "Pizza_klein" "4,00" und bei "Belag" "mit Spinat, Paprika, Mozzarella" ein.

IntarScript

154

Daten erfassen

2. Daten bearbeiten
Wenn Sie einige Pizzen erfasst haben, sind diese in der Auswahlliste zu sehen. Sind es mehr als 10, werden die Buttons fr seitenweises blttern aktiv. Um eine bereits erfasste Pizza nachtrglich zu ndern, klicken Sie diese in der Auswahlliste an. Der Datensatz erscheint daraufhin in der Detailsicht, der Cursor steht auf dem ersten editierbaren Feld. ndern Sie nun ein Detail an der Pizza (z. B. "Preis klein") und drcken Sie die "Return"-Taste. Daraufhin erscheint ein blinkendes Warnzeichen, welches signalisiert, dass ungespeicherte nderungen vorliegen. Gleichzeitig wurden Buttons deaktiviert, die in diesem Stadium nicht sinnvoll sind. Klicken Sie auf "Speichern" (oder verwenden die Tastenkombination "Alt-s"), um die nderung zu sichern. Das Warnzeichen verschwindet, die nderung wird dauerhaft gespeichert und die deaktivierten Buttons werden wieder aktiv.

3. Lschen
Whlen Sie eine Pizza aus und klicken Sie auf "Lschen" (oder verwenden die Tastenkombination "Alt-r"). Besttigen Sie die Sicherheitsabfrage. Daraufhin verschwindet die gewhlte Pizza aus der Trefferliste. Es wird automatisch auf die nchste positioniert. Die gelschte Pizza ist dauerhaft entfernt, es gibt keine Mglichkeit, sie wiederherzustellen. Lschen Sie daher nur, wenn Sie sich sicher sind, dass Sie diese nicht mehr bentigen. Sie knnen diese jedoch neu erfassen.

4. weitere Buttons
Positionieren Sie den Mauszeiger auf die anderen Buttons und lesen Sie die Tooltipps. Machen Sie sich mit den Druck- und Export-Mglichkeiten vertraut.

IntarScript

155

12.3.5 Verfeinerungen
berblick
Beim Verwenden des Moduls sind Ihnen evtl. ein paar Verbesserungs-Ideen eingefallen. So ist es mglich, Pizzen ohne Name zu erfassen. Beim nachtrglichen ndern ist es mhsam, durch wiederholte Tabulatorsprnge auf ein weiter unten stehendes Feld zu gelangen. Wenn Sie versucht haben, Pizzen nach Name zu suchen, wurde nichts gefunden. Alle Pizzanamen fangen mit "Pizza" an, daher wre es optimal, wenn der Name schon so initialisiert ist. Auf diese Ideen wren Sie ohne die Benutzung des Moduls nur mit entsprechender Erfahrung gekommen. Diesem Umstand wird die iterative Vorgehensweise gerecht. In kurz aufeinanderfolgenden Design-Implementierung-Testzyklen entwickelt sich die Software bedarfsgerecht. IntarS ist fr iterative Vorgehensweise optimiert.

Schritt fr Schritt 1. Vorbelegungen


Bei der Datenerfassung fllt auf, dass alle Pizzen mit "Pizza" und Belag immer mit "mit" anfangen. Deshalb ist es sinnvoll, die Felder "Pizzaname" mit "Pizza" und "Belag" mit "mit" zu belegen. Dies erreicht man, indem in der Workbench der Initialwert fr diese Felder hinterlegt wird. Dazu rufen Sie in der Workbech die Tabelle "Pizza" (1) auf, gehen zum Feld "pizzaname" (2)und geben in die Eigenschaft "initial" "Pizza" (3) ein. Anschlieend "OK" und "speichern". Nach dem gleichen Prinzip verfahren Sie auch fr den Belag.

Vorbelegung

2. ESC-Sprungziele
Sie knnen Eingabefelder im Modul mit einem Sprungziel versehen, um wiederholtes Tabbing zu sparen. Ein Sprungziel wird angesprochen durch die "ESC"-Taste und eine anschlieende Folgetaste. Um z. B. das Eingabefeld "Belag" mit einem Sprungziel zu versehen, fgen Sie im "Config"-Modus das Tag "<ESC a>" vor dem Belag ein. An der Oberflche wird das Sprungziel angezeigt. Der Belag heit jetzt "Belag (ESC-a)". Drcken Sie die "ESC"-Taste und danach "a", so wird der Cursor in das Eingabefeld "Belag" positioniert.

IntarScript

156

Sprungzeile definieren

3. Pflichtfelder
Um zu bestimmen, dass alle Pizzen zwingend einen Pizzanamen bekommen, muss das Feld als Pflichtfeld markiert werden. Dazu whlen Sie in der Workbench die Tabelle "Pizza", darin das Feld "pizzaname" und tragen in das Feld "pfl" ein "J" (JA) ein. Anschlieend "OK" und "speichern". Damit ist "Pizzaname" bei der Dateneingabe ein Pflichtfeld. Fhren Sie gleiche Vorgehensweise bei "Pizza-Nummer", "Preis gross" und "Preis klein" durch. Die Pflichtfelder werden in der Anwendung Fett dargestellt.

IntarScript

157

Pflichtfeld

4. Suchen Kombisuchfelder:

Kombisuchfeld

Damit eine Pizza auch bequem ber das Kombi-Suchfeld nach Name gesucht werden kann, muss dieser dafr markiert werden. Das ist in der Workbench mglich. Rufen Sie in der Workbench die Tabelle "Pizza" (1) und darin das Feld "Pizzaname" (2) auf und setzen den Wert von "CS" auf 2 (3). Beim Feld "Nummer" setzen Sie CS auf 1. Damit wird erreicht, dass bei einer Eingabe im Kombi-Suchfeld zuerst nach Nummer und dann nach Name gesucht wird.

IntarScript

158

Kombisuchfeld WB

Anhang

159

13 Anhang
13.1 FAQ
Welche Directories sind wichtig und wofr?
MANDANTPATH ${NEXT_ROOT}/Local/Library/Aprica2/_K_000230; enthlt das gesamte Repository GLOBALCONFIGPATH ${NEXT_ROOT}/Local/Library/Aprica2/_GLOBAL; enthlt globale Defaultfiles; Source des Frameworks ${NEXT_ROOT}/Local/Projects/Aprica3; enthlt das PB.project, welches zum kompilieren geffnet werden muss. ${NEXT_ROOT}/Local/Library/Aprica2/_K_000230/Scripts enthlt alle Skripte der Geschftslogik. ${NEXT_ROOT}/Local/Library/Aprica2/_K_000230/Druck

Wie finde ich diese schnell?


Speichern Sie sie als Favoriten.

Wie und wann mache ich ein SVN-Update?


Drcken Sie die rechte Maustaste auf dem Directory, welches upgedated werden soll und whlen Sie "SVN-Update" aus. Wenn Sie sich nicht sicher sind, machen Sie auf den gesamten MANDANTPATH ein "SVN-Update". Auerdem machen Sie dies auf den GLOBALCONFIGPATH und den Source des Frameworks. Sie sollten ein Update ausfhren, bevor Sie selbst das Programmieren beginnen. Schlieen Sie bitte vorher die Workbench und den Editor, um zu vermeiden, dass Sie anschlieend veraltete Versionen speichern.

Was kann dabei fehlschlagen und was ist dann jeweils zu tun?
Beim Update kann es zu Konflikten kommen, wenn ein File an derselben Stelle lokal und von einen anderem verndert wurde. In diesem Fall mssen die Konflikte aufgelst werden: 1. 2. 3. 4. 5. 6. 7. 8. In der Liste vom SVN doppelklicken Sie auf die Zeile mit dem Conflict. Es ffnet sich eine Merge-Anwendung. Navigieren Sie zum ersten Conflict und whlen eine der vier Mglichkeiten aus. Positionieren Sie zum nchsten Conflict. Machen Sie dies so lange, bis alle aufgelst wurden. Speichern Sie. Klicken Sie auf das Icon "resolved". Schlieen Sie die Merge-Anwendung. Speichern Sie nochmal, falls ntig. Bearbeiten Sie die weiteren Files mit Conflict wie eben beschrieben.

Beachten Sie bitte, dass beim Kopieren von Directories, ein .svn-Directory anschlieend gelscht wird. Es gehen sonst beide Directories auf dasselbe SVN-Directory und beeintrchtigen sich gegenseitig. Sie bentigen eine Verbindung zu einem externen SVN-Server (Firewall, Netzwerk) und eine gltige Anmeldeinformation, sodass SVN etwas tun kann. Unter TortoiseSVN/Settings/Saved Data/Authentication Data/clear knnen evtl. gespeicherte und nicht mehr gltige Anmeldeinformationen gelscht werden. Probleme gibt es auerdem, wenn Sie .svn-Directories manuell gelscht haben. In diesem Fall mssen Sie das entries-File im bergeordneten Directory mit dem Editor korrigieren.

Anhang

160

Wie und wann mache ich SVN-Commit?


Klicken Sie mit der rechten Maustaste auf das gewnschte Directory und whlen Sie "SVN-Commit" aus. Nach jeder abgeschlossenen und getesteten Bearbeitung sollten Sie ein "SVN-Commit" durchgefhren, sodass Ihre Arbeit auf dem Server landet.

Was kann dabei missglcken und was ist dann jeweils zu tun?
Sie haben keine Verbindung zum Server. Sie besitzen keine ausreichende Berechtigung. Auf den Server wurde zwischenzeitlich von jemand anderem committed. Es muss erst ein "SVN-Update" gemacht werden. Sie haben vergessen, im Kommentarfeld etwas einzutragen. Der Server verweigert dann den Commit. Wenn Sie manuell .svn-Directories gelscht haben, mssen Sie das entries-File im bergeordneten Directory mit dem Editor korrigieren. Rekursive Deletes verursachen Probleme. Am besten von unten hocharbeiten. Sind von einem Commit noch Locks gesetzt, mssen Sie zuerst ein "SVN clean" machen. Dies wird Ihnen aber mitgeteilt.

Wie kann ich weitere Informationen aus dem System entlocken?


"Config"-Modul: hier gibt es einige Flags, um den Log-Ouptput zu erhhen. "debug"-Befehl in Scripting: von debug bis enddebug werden alle Statements mit ihren Parametern gelogged. "log"-Befehl in Scripting: es knnen gezielt Informationen ausgegeben werden; sie landen dann im Log. "logi"-Befehl: hnlich wie "log"-Befehl, wird aber auch interaktiv am Bildschirm ausgegeben. Im Temp-Script eines jeden Moduls knnen Sie Script-Befehle eingeben, um den Zustand des Systems zu untersuchen und Informationen auszugeben.

Wo finde ich Hilfe?


Online-Hilfe mit dem "Hilfe"-Button; dort ist auch dieses FAQ enthalten Modul-Hilfe: Klicken Sie hierzu das Modul ein zweites Mal an Handbuch (PDF) Kommentare der Skripte Kommentare in den Sourcen des Frameworks Zu den WebObjects Klassen in: ProjectBuilder/Frameworks/Foundation/...

Wie finde ich heraus, wie ein/e Feld/Modul/Tabelle heit?


Durch einen Klick auf den "C"-Button bzw. die Tastenkombination "Alt-o" gelangen Sie in den "Config"-Modus. Dort sehen Sie die internen Namen aller Bildschirmelemente. In der Vorratsliste rechts kann nach Gui-Name sortiert werden. Bitte beachten Sie, dass Sie die Berechtigung dazu besitzen mssen. Rufen Sie ein Modul auf, klicken auf das "System"-Register und dann auf "dbNames". Im "System"-Register wird aber auch der interne "Modul Name" und der "Tabellenname" angezeigt.

Anhang
Rufen Sie die Workbench auf und suchen Sie nach guiName.

161

Wie finde ich heraus, welches File ich editieren muss?


Soll ein Event programmiert werden, ist das Events.script im Moduldirectory zu editieren. Das Moduldirectory heit in den allermeisten Fllen so wie die Tabelle, welche vom Modul verwaltet wird. Handelt es sich um das Script eines Buttons, muss zunchst der Button in der Workbench gefunden werden (s. vorherigen Punkt). Steht in seinem Expression-Feld nichts, heit das Script so wie der Button und liegt in dem Scriptdirectory, welches wie die Tabelle heit. Sonst steht der Name des Skripts in dem Expression-Feld. Endet der Name auf .cpdf, ist es ein Druck-Script und findet sich im Druck-Verzeichnis. Bei sehr kleinen Skripten steht das Skript auch komplett im Expression-Feld und wird dann auch dort editiert. Neben dem Expressionfeld liegt ein "Open"-Button, der das zu editierende Scriptfile ffnet. Skripte eines Plugins befinden sich alle als subScripts in einem Skript-File. Dieses heit wie das Plugin.

Was ist ein EnterpriseObject (EO)?


Ein EO enthlt die Daten eines Datensatzes aus einer Datenbanktabelle. Man kann auf die Daten ber die Namen der Attribute zugreifen. Man kann Relationen verfolgen und die Bezeichnungen von Dropdown-Feldern abrufen. Verndert man die Daten, kann das EO feststellen, was verndert wurde und die nderungen auch wieder rckgngig machen. EOs liefern auerdem die Informationen ber Tabelle und Attribute wie sie im Modell definiert wurden. EOs entstehen, indem man sie aus der Datenbank beschafft. Sie werden dabei durch den Object-Relational-Mapper erzeugt. Man kann ein EO auch selbst erzeugen, mit Daten versehen und in die Datenbank schreiben. EOs sind die Datenobjekte, welche im PBWOEditor in der Trefferliste liegen und als selObj bearbeitet werden.

Was kann ich alles mit einem EO machen?


Sie knnen ein EO lesen, verndern, erzeugen, insert, updaten und entfernen. Beispiel: $a,getEOsQSoa,vid_lager,$q,$soa beschafft ein Array von EnterpriseObjects aus der Datenbanktabelle "vid_lager" unter Anwendung des Qualifiers $q und des Sortorderarrays $soa (serverside sort). $eo,=,$a.firstObject $eo.preis1,=,10.5 updat_eo $eo dem ersten EO aus dem Array wird als preis1 10,50 gesetzt und dann wird das EO in die Datenbank zurckgeschrieben. delet_eo $eo das EO wird gelscht.

Was ist ein Qualifier und wozu braucht man ihn?


Ein Qualifier ist die objektorientierte Beschreibung einer Treffermenge analog der where-Clause eines SQL-Statements. Qualifier dienen dazu, der Datenbank zu beschreiben, welche Eigenschaften EOs haben sollen, die man aus der Datenbank holen will.

Effizienter Umgang mit dem Editor Notepad++


Verwenden Sie Tastenkombinationen, um schneller arbeiten zu knnen. F2: Markierung setzen und hinspringen F3: Schnellsuche, verwendet letzten Suchstring

Anhang

162

Ctrl-F: Sucht in Datei Ctrl-H Sucht in Dateien und ersetzt durch gewnschten Ausdruck Ctrl-M: Markiert identische Strings Doppel-Klick: Markiert nur das Wort 3-fach-Klick: Markiert die ganze Zeile

Was mache ich, wenn die Anwendung ein vllig unerklrliches Verhalten zeigt?
Cleanen Sie das Framework und builden Sie es neu.

Welche Bedeutung hat mutable (z. b. MutableString , MutableArray)?


Mutable vor einem Datentyp bedeutet, dass dieser Datentyp nderbar ist. In ein MutableArray und MutableDictionary knnen weitere Objekte eingefgt werden und bestehende entfernt werden. Ein MutableString kann mit appendString: verlngert werden.

Was ist ein rufendes Modul?


Das ist das Modul, aus welchem Sie zu dem gekommen sind, in dem Sie sich gerade befinden. Z. B.: Sie befinden sich gerade im Modul "Kunde". Sie mchten fr diesen Kunden ein neues Angebot erstellen. Klicken Sie dazu auf den Button "neues Angebot". Jetzt knnen Sie sehen, dass Sie aus dem Modul "Kunde" in das Modul "Angebot" gelangt sind. Das Modul "Kunde" ist nun das rufende Modul.

13.2 Begriffserklrung
Applikationsinstanz
Konfiguration eines IntarS-Prozesses. Zur Skalierung kann IntarS in mehreren parallelen Instanzen betrieben werden.

Array
Datenstruktur zur Speicherung von Objekten unter einer Index-Nummer.

Association
Beziehung zwischen zwei Objekten

batch
Zeitlich gesteuerte Hintergrundverarbeitung von Scripts.

Binary
Das ausfhrbare, kompilierte Programm.

Bookmark
Lesezeichen im Internet

Bool-Feld
Es sind nur zwei Werte mglich, zum Beispiel J/N

Browser
Programm zum Betrachten von Webseiten, Daten und Dokumenten

Anhang

163

Button
Schaltflche, die bei Aktivierung ein Script ausfhrt

Character
Datentyp, der ein Zeichen aufnehmen kann; bzw. SQL-Datentyp zur Speicherung kurzer Strings.

Client
Programm, das Daten vom Server bezieht, z. B. E-Mail-Programm

Community
Gemeinschaft

Cookies
Eintrge zum Informationsaustausch, wird im Internet oftmals verwendet

Copy-Paste
Kopieren und Einfgen, z. B. ber die Tastenkombination Ctrl-C/Ctrl-V

Cross-Site Scripting
Ausnutzung von Sicherheitslcken in Webanwendungen

Date
Datentyp, speichert Datum und Uhrzeit

Debian Linux
Betriebssystem unter Linux

Decker
stellt Material zur Vefgung zur Deckung von Material-Bedarfen

default
Standard

Derivat
Computerprogramm, das von einem anderen Programm abgeleitet oder dessen Entwicklung abgespalten wurde

Deskriptor
Beschreibung

DHCP
vergibt IP-Adressen automatisch im Netzwerk

Dictionary
assoziatives Array; Datenstruktur zur Speicherung von Objekten unter einem String.

Directories
Verzeichnisse

Anhang

164

Dump
- bei einem Programmfehler in eine Datei geschriebenes Speicherabbild - Datenexport einer Datenbank

Encoding
Zeichencodierung

Entitt
ein eindeutig zu bestimmendes Objekt, dem Informationen zugeordnet werden

Entity-Name
Tabellenname

Fetch-Limit
stellt die Anzahl der Datenstze ein, die standardmig mit einem Suchaufruf maximal gelesen werden.

Filename
Dateiname

Filesystem
Dateisystem, Ablageorganisation auf dem Datentrger des Computers

Firefox
Browser von Mozilla

Float
Gleitkommazahl, Fliekommazahl

Formatierung
bezeichnet bei Datenspeicherungen alle Prozesse, durch die ein Speichermedium zur Aufnahme von Daten vorbereitet wird

Framework
"Rahmenstruktur"

GUI
Oberflche

Host
Computer, der Dienste in einem Rechnernetz zur Verfgung stellt

Implementierung
Umsetzung bestimmter Strukturen und Arbeitsablufe im System unter Bercksichtigung von Rahmenbedingungen, Regeln und Vorgaben

insert
Daten einfgen

Anhang

165

Installer
Programm, das Software auf PC installiert

Integer
Datentyp, speichert ganzzahlige Werte

IP
Internet Protokoll

Iteration
kontinuierliche Verbesserung in kleinen Schritten

kompilieren
Programmcode in ausfhrbare Datei bersetzen

konsistent
widerspruchsfrei innerhalb einer Datenbank

korrelieren
in Wechselwirkung stehen

Layout-Engine
Erzeugt das XHTML zur grafischen Darstellung der Oberflche

LIF
Layout-Information-File: definiert, welche Register im Detailbereich in welcher Reihenfolge angezeigt werden und welche Elemente in welcher Reihenfolge in den Registern liegen (-> Oberflchenkonfiguration)

Loadbalancer
Lastverteilung des Servers auf mehrere Hosts im Netzwerk

Kommandozeileninterpreter
Programm, das eine Zeile Text einliest, diesen als Kommando/Befehl interpretiert und an das Betriebssystem weitergibt

Memo
Datenfeldtyp, erlaubt Eingabe lngerer Texte

Metadatenmodell
Daten, die Informationen ber andere Daten enthalten. Bei diesen Daten handelt es sich um grere Datensammlungen

Metainformation
siehe Metadatenmodell

Metamodell
siehe Metadatenmodell

Anhang

166

Modul
Baustein, Baugruppe des Softwaresystems

MySQL-Server
Datenbankmanagementsystem, mit dem Daten in Tabellen gespeichert, gendert, gelscht und abgefragt werden

Notation
Benennung in Form von symbolischen Zeichen, z. B. Datumsnotation (YYYY-MM-DD) oder Zeitnotation (hh:mm:ss)

on the fly
Verzicht auf dauerhaftes Speichern von Daten im Speicher

OpenSource
Quelltext ffentlich zugnglich, Lizenz frdert Weiterentwicklung

Output
Datenaussto eines Programms

Overhead
Daten, die nicht primr zu den "Nutzdaten" zhlen, sondern als Zusatzinformation zu bermittlung oder Speicherung bentigt werden

Parser
bersetzt Befehlsfolgen in Maschinensprache oder von Maschinensprache in natrliche Sprache

PDF-Viewer
Programm, um Dateien im PDF-Format lesen/anschauen zu knnen

Performance
Systemleistung

PHP
Scriptsprache

Plugin
Computerprogramm, das sich in Softwareprodukt "einklinkt" und dessen Funktion erweitert, bei IntarS zum Beispiel Wiedervorlageliste, anstehende Termine oder Aufgabenliste.

Popup
pltzlich erscheinendes Fenster

Port
Schnittstelle

Query
Abfragen

Anhang

167

Read-Only-Zugriff
Zugriff, um etwas lesen zu knnen. Es ist hier nicht mglich, etwas neu anzulegen, zu ndern,...

Redundanz
Darstellung von Information mit mehr Daten als ntig. Dient der Performancesteigerung und Robustheit gegen Datenverlust.

Refresh
Auffrischung von Informationen

Registry
Datenbank, in der Systemeinstellungen und Informationen ber Hard- und Software aufgefhrt sind

Rendering
Umsetzung

Repository
Synonym fr DataDictionary oder Meta-Datenmodell. Verzeichnis zur Speicherung und Beschreibung digitaler Objekte

Restore
Datenwiederherstellung

Session
Sitzung; Datenstruktur, die alle benutzerbezogenen Zustandsdaten zwischen An- und Abmelden eines Benutzers hlt.

Session-ID
wird vom Server zu Beginn einer Session erzeugt und an den Client bertragen, um ihn im weiteren Verlauf eindeutig identifizieren zu knnen

Session-Hijacking
Angriff auf Verbindung zwischen zwei Computern

Session-Timeout
Sitzung abgelaufen

Shell
Befehlsinterpreter

Shortcut
Tastenkombination

Shutdown
Herunterfahren oder Ausschalten des PCs

Anhang

168

Stringfunktion
Zeichenfolge

Stylesheet
Formatvorlage

Subselect
Unterabfragen

SQL Insertion
Angriffsmethode, bei der SQL in Textfelder geschrieben wird.

tabbed Browsing
mehrere Register in einem Browserfenster, die am Rand der Darstellungsflche angezeigt werden

tag
Stichwort

Timestamp
Zeitstempel, ordnet einem Ereignis einen eindeutigen Zeitpunkt zu

Thumbnail
Vorschaubild

Thunderbird
E-Mail-Programm von Mozilla

Tool-Tipp
Beschreibung, die dem Benutzer zu einem Element angezeigt wird, sofern der Mauszeiger mindestens 2 Sekunden ber dem Element steht

Update
Aktualisierung

URL
Adresse im Internet, die zu einem Bild, einer Homepage oder einem Programm fhrt, sobald sie angeklickt wird

User
Benutzer

Validierung
Prfen von Benutzereingaben

Virtual Appliance
Vorinstallierte Anwendung

Anhang

169

Virtual Image
Virtuelles Speicherabbild

Virtual Machine
Virtueller Computer

Where-Condition
Where-Bedingung

Wordstar
eines der ersten Textverarbeitungsprogramme

workflow
Arbeitsablauf

13.3 GPL
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

Anhang

170

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow.

GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

Anhang

171

In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

Anhang

172

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY
11. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

Anhang

173

13.4 GFDL
GNU Free Documentation License
Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS


This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

Anhang

174

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

Anhang

175

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. Modified Version, as the publisher.

F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. and required Cover Texts given in the

Anhang

176

M. Delete any section Entitled "Endorsements". Such a section

may not be included in the Modified Version. or to conflict in title with any Invariant

N. Do not retitle any existing section to be Entitled "Endorsements" Section. O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS


A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

Anhang

177

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE


The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.