Ziel
Dieser Artikel beschreibt, wie in Concept Office eigene Pflichtfelder über sogenannte BOO-Skripte definiert werden können.
BOO-Skripte ermöglichen es, Formularfelder in Modulen (z. B. Vorgänge, Kontakte, Artikel usw.) individuell zu steuern – etwa als Pflichtfeld, automatisch vorbelegt oder abhängig von Bedingungen.
Grundprinzip
BOO-Skripte werden in Python-ähnlicher Syntax geschrieben und beim Öffnen eines Formulars automatisch ausgeführt.
Sie erlauben Zugriff auf alle sichtbaren Steuerelemente eines Formulars, z. B.:
| Feldtyp | Beispielname im Skript | Beschreibung |
|---|---|---|
| Textfeld | txtVorgangsTitel |
Eingabefeld für Text |
| Checkbox | chkIstKunde |
Kontrollkästchen |
| Kombifeld | cmbLand |
Auswahlfeld |
| MultiSelect | scmKategorien |
Mehrfachauswahl |
| Datum | dtpDatum |
Datumsfeld |
Ablageort und Dateibenennung
BOO-Skripte liegen zentral in der Netzwerkfreigabe des Systems:
\\SERVERNAME\CO8\Scripts\
Jedes Skript wird nach dem Formularnamen (Form) benannt, in dem es wirken soll.
Beispiel:
| Modul | Formularname | Dateiname |
|---|---|---|
| Vorgänge | AuftraegeForm |
AuftraegeForm.boo |
| Kontakte | KontakteForm |
KontakteForm.boo |
| Artikel | ArtikelForm |
ArtikelForm.boo |
Vorbereitung: Richtige Feldnamen ermitteln
Bevor das Skript erstellt wird, muss bekannt sein, wie das Feld im Formular intern heißt.
So findest du den Namen:
-
Öffne das gewünschte Modul (z. B. Vorgänge).
-
Drücke Strg + Shift + F2.
-
Das Fenster „Feldinformationen“ erscheint.
-
Suche dort nach den Zeilen:
form: 'AuftraegeForm' field Name: 'txtVorgangsTitel' DataField: 'auftragskoepfe.vorgangstitel'→ Wichtig sind:
-
Form: bestimmt den Dateinamen der BOO-Datei
-
Name: ist der interne Feldname (z. B.
txtVorgangsTitel)
-
Skriptaufbau im Detail
Ein BOO-Skript besteht grundsätzlich aus drei Abschnitten:
-
Imports
→ Lädt die Concept-Office-Toolsimport System.Windows.Forms import System.Drawing import Sc.Tools -
Definition der Hauptfunktion
def run(form): # Code hier -
Eventsteuerung / Validierung
→ z. B. Aktionen beim Speichern oder bei Feldänderung
Beispiel: Pflichtfeld „Vorgangstitel“ im Modul Vorgänge
Vollständiger Code:
import System.Windows.Forms import System.Drawing import Sc.Tools def run(form): # Vorgangstitel als Pflichtfeld markieren form.txtVorgangsTitel.SetCheckInputRequired() # Beim Speichern prüfen, ob das Feld ausgefüllt ist (form cast EntityForm).Saving += do(sender, e): if form.txtVorgangsTitel.Text.Trim() == '': ScMsgBox.Show('Bitte geben Sie einen Vorgangstitel ein.', ScMsgBoxStyle.OkOnly, false, '', '', '', '', '', '', null, ScMsgBoxDefaultResult.LastResult, false, false, null, null) e.Cancel = true form.txtVorgangsTitel.SetCheckInputRequired()
Ergebnis im Formular:
Wenn der Benutzer einen Vorgang speichern möchte, ohne einen Vorgangstitel zu vergeben, erscheint folgende Meldung:
Funktionsweise
| Codezeile | Erklärung |
|---|---|
form.txtVorgangsTitel.SetCheckInputRequired() |
Markiert das Feld als Pflichtfeld (rote Markierung) |
(form cast EntityForm).Saving |
Wird beim Speichern des Datensatzes aufgerufen |
if form.txtVorgangsTitel.Text.Trim() == '' |
Prüft, ob das Feld leer ist |
ScMsgBox.Show(...) |
Zeigt eine Meldung im Office-Stil an |
e.Cancel = true |
Verhindert das Speichern, bis das Feld ausgefüllt wurde |
Weitere Beispiele
1️⃣ Pflichtfeld nur bei bestimmten Bedingungen
if form.cmbVorgangsart.Text == 'Angebot': form.txtVorgangsTitel.SetCheckInputRequired()
2️⃣ Mehrere Pflichtfelder kombinieren
if form.txtVorgangsTitel.Text == '' or form.cmbVerkaeufer.Text == '': ScMsgBox.Show('Bitte Vorgangstitel und Verkäufer angeben.', ScMsgBoxStyle.OkOnly, false, '', '', '', '', '', '', null, ScMsgBoxDefaultResult.LastResult, false, false, null, null) e.Cancel = true
Fehlersuche
Wenn beim Laden des Skripts ein Fehler auftritt, erscheint in Concept Office eine Script Error-Meldung wie z. B.:
System.MissingFieldException: Das Feld "Sc.Co.Gui.AuftraegeForm.txtVorgangsTitel" wurde nicht gefunden.
Das bedeutet:
-
Der Feldname im Skript stimmt nicht mit dem internen Namen überein.
✅ Lösung: Feldinfo mit Strg + Shift + F2 erneut prüfen.
Best Practices
-
Immer eine BOO-Datei pro Formular.
-
Namen exakt nach der Feldinfo übernehmen (Groß-/Kleinschreibung beachten!).
-
Skripte nur im zentralen CO-Freigabeordner ablegen (
\\SERVER\CO8\Scripts). -
Änderungen im Skript werden beim nächsten Formularstart wirksam (kein Neustart des Servers erforderlich).
-
Vor komplexeren Prüfungen: erst mit einfachen Pflichtfeldern beginnen.
Zusammenfassung
| Schritt | Beschreibung |
|---|---|
| 1 | Formular öffnen und mit Strg + Shift + F2 Feldnamen ermitteln |
| 2 | Im Ordner \\CO8\Scripts\ eine Datei <Formularname>.boo anlegen |
| 3 | BOO-Skript mit Imports, def run(form) und Pflichtfeldlogik schreiben |
| 4 | Skript speichern und Formular testen |
| 5 | Bei Fehlermeldungen Feldname überprüfen |
Ergebnis
Mit diesem Vorgehen können beliebige Felder in Concept Office zu Pflichtfeldern erklärt werden – flexibel, modulspezifisch und ohne Programmierung im Backend.
Die Skripte werden beim Laden der Formulare automatisch ausgeführt und garantieren eine saubere, standardisierte Datenpflege direkt im System.