Pflichtfelder

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:

  1. Öffne das gewünschte Modul (z. B. Vorgänge).

  2. Drücke Strg + Shift + F2.

  3. Das Fenster „Feldinformationen“ erscheint.

  4. 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:

  1. Imports
    → Lädt die Concept-Office-Tools

    import System.Windows.Forms import System.Drawing import Sc.Tools
  2. Definition der Hauptfunktion

    def run(form): # Code hier
  3. 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.