Zusatzfelder

Produktlinien: Expert
Module: Leistung & CRM
Erstellt: 30.01.2004, Änderung: 11.04.2017
Default Rückgabewert im Abschnitt OCL eingefügt.
Mehr ansehen

Die Liste der vorhandenen Felder in Vertec wird durch das Modell vorgegeben und kann nicht geändert werden. Da es jedoch vorkommt, dass Sie auf Daten noch zusätzliche Informationen ablegen wollen (z.B. Auftragswahrscheinlichkeit auf Projekt), gibt es Zusatzfelder.

Zusatzfelder definieren

Zusatzfelder werden im Ordner Einstellungen - Zusatzfelder verwaltet. Jedes Zusatzfeld basiert auf einer Zusatzfeldklasse. Wenn Sie ein neues Zusatzfeld erzeugen müssen, klicken Sie mit der rechten Maustaste auf den Ordner und wählen Sie Neu - Zusatzfeldklasse.

NameÜber diesen Namen kann auf das Zusatzfeld zugegriffen werden. Siehe dazu den Abschnitt Zugriff auf Zusatzfelder weiter unten in diesem Artikel.
BezeichnungGeben Sie hier an, unter welcher Bezeichnung das Zusatzfeld auf der Oberfläche erscheinen soll. Wenn Sie hier nichts angeben, wird auf der Oberfläche der Name angezeigt.
Feld-Typ

Zusatzfelder können typisierte Werte mit entsprechenden Auswahlmöglichkeiten und Einga-bekontrollen enthalten. Folgende Werte-Typen sind für Zusatzfelder verfügbar:

  • Zeichen: Normale Zeichenkette. Bestehende Zusatzfelder haben diesen Typ.
  • Wahr,Falsch: bool'scher Wert. Wird als Checkbox dargestellt.
  • Ganzzahl: ganzzahliger Wert (integer).
  • Minuten: Minutenwert. Formatierung gemäss Systemeinstellung Anzeige Minuten.
  • Festkomma: Zahl mit Dezimalstellen.
  • Datum: Zusatzfelder vom Typ Datum werden mit einem Auswahldialog (Datepicker) angezeigt.
  • Text: Textdaten beliebiger Länge (länger als 256). Wird in Memofeld dargestellt.
  • Bild: Bild-Daten, z.B. Gif, Jpeg, Bitmap. Um ein Bild zuzuordnen, klicken Sie mit der rechten Maustaste ins Zusatzfeld und wählen Sie Bild laden....
  • Objekt: Zuordnung eines Vertec Objekts. Zuordnung via Drag and Drop oder mittels eines geeigneten Auswahl-Typs (siehe unten).
  • Auswahl: Auswahlfeld, ermöglicht Auswahl aus vordefinierter Werteliste. Auswahlmöglichkeiten werden durch Kommas abgetrennt in Expression angegeben. Intern als Ganzzahl (integer) gespeichert. Darstellung als Combo.
Auswahltyp, Expression

Neben dem Feldtyp kann noch ein Auswahltyp und eine optionale Expression angegeben werden. Die Bedeutung von Expression hängt vom gewählten Feldtyp und Auswahltyp ab. Verfügbare Auswahltypen sind:

  • Keine: Für den Feldtyp Auswahl. Für einfache Listenauswahlen gedacht. Als Expression wird die Liste von Hand definiert, nach folgendem Muster: "Möglichkeit 1", "Möglichkeit 2", "Variante 3"
  • Objektauswahl: Für Feldtyp Objekt (alle Apps) und Zeichen (nur Classic App). Auswahldialog zum Auswählen eines Objekts in Vertec. Die Liste der Objekte im Auswahldialog wird mittels der Expression berechnet. Zur Verfügung stehen die Objekte, die mit der Basis-Klasse verbunden sind. Sollten Sie unabhängig der Basis-Klasse auf alle Objekte zugreifen müssen, verwenden Sie die Expression <klasse>.allInstances. z.B.: Projekt.allInstances
  • Adressenauswahl: Für Feldtyp Objekt (alle Apps) und Zeichen (nur Classic App). Spezielle Auswahlmethode für Adressen-Objekte. Zeigt einen Adressen-Suchdialog an. Ohne Expression.
  • Vertec Ordner: Für Feldtyp Objekt (alle Apps) und Zeichen (nur Classic App). Spezielle Auswahlmethode für Vertec Ordner. Die Expression gibt den Inhaltstyp der anzuzeigenden Ordner an.
  • Fileauswahl: Für Feldtyp Zeichen. Zeigt den normalen Dateibrowser von Windows an, im Feld wird der ausgewählte Pfad gespeichert. Ohne Expression.
  • Ordnerauswahl: Für Feldtyp Zeichen. Zeigt den Ordnerbrowser von Windows an, im Feld wird der ausgewählte Pfad gespeichert. Ohne Expression.
  • Via Extension: Nur Classic App. Für alle Feldtypen. In der Expression wird die Extension und die aufzurufende Methode angegeben.
AnordnungHier können Sie angeben, in welcher Reihenfolge die Zusatzfelder auf der Oberfläche erscheinen sollen.
KlassenGibt an, wo und für welchen Datentyp das Zusatzfeld erscheinen soll. Wählen Sie den entsprechenden Typen aus dem Dialog aus, indem Sie auf die drei Punkte klicken.
SichtbarkeitZusatzfelder, welche intern für Berechnungen verwendet werden, können auf der Oberfläche ausgeblendet werden.
BedingungDie Sichtbarkeit kann durch eine OCL Expression gesteuert werden. Das Resultat dieser OCL Expression muss ein Wahr/Falsch-Wert (Boolean) sein. Ist das Resultat wahr, wird das Zusatzfeld angezeigt.

    Die Zusatzfelder erscheinen in der Einzelansicht der entsprechenden Einträge auf der Seite Weitere Info:

    Ausserdem können sie auch via Customizing an einem anderen Ort platziert werden (ausser Classic App).

    Zugriff auf Zusatzfelder

    Sie können diese Zusatzfelder auch in Listen anzeigen, in Word-Berichten verwenden oder in einem Expression-Ordner danach filtern, indem Sie via OCL darauf zugreifen. Auch die Abfrage via SQL-Ordner ist möglich.

    SQL

    Über SQL kann auf die verschiedenen Zusatzfelder folgendermassen zugegriffen werden:

    Zusatzfeld-typAusdruck SQL (Datenbankfeld)Where-Ausdruck

    Zeichen

    WertWert like "Aha%"

    Wahr, Falsch

    WertBoolean

    WertBoolean<>0 (für wahr)
    WertBoolean<>1 (für falsch)

    Ganzzahl

    WertIntegerWertInteger >= 1000

    Minuten

    WertIntegerWertInteger >= 1000

    Festkommazahl

    WertCurrencyWertCurrency = 1350

    Datum

    WertDatumWertDatum = "15.03.2012"

    Text

    WertBlobWertBlob containing 'Newsletter' (Firebird)
    WertBlob like "%Newsletter%"

    Bild

    WertBlobWertBlob <> "" (für: es ist ein Bild zugeordnet)

    Objekt

    WertObject

    WertObject in (SELECT bold_id from Tabelle where wert like "%AHA%")

    Auswahl

    WertInteger

    WertInteger=0
    (Reihenfolge gleich wie bei der Auswahl auf der Oberfläche: 0=erster Eintrag, 1=zweiter Eintrag, ...)

    Detaillierte Beschreibung und Beispiele finden Sie im Artikel SQL-Expressions für SQL-Ordner.

    OCL

    Über OCL kann auf die verschiedenen Zusatzfelder folgendermassen zugegriffen werden:

    • zusatzfeldAsString(name): liefert den Wert eines Zusatzfeldes unabhängig von dessen Typ als Stringwert.
    • Abhängig vom Typ wird das Feld folgendermassen abgefragt:

      Zusatzfeld-typ

      Operator

      Default Rückgabewert (wenn noch nichts explizit gesetzt wurde)

      Zeichen

      zusatzfeld

      Leerstring

      Wahr, Falsch

      zusatzfeldbool

      Falsch

      Ganzzahl

      zusatzfeldint

      0

      Minuten

      zusatzfeldint

      0

      Festkommazahl

      zusatzfeldcurr

      0.00

      Datum

      zusatzfelddate

      NULL

      Text

      zusatzfeldblob

      NULL

      Bild

      zusatzfeldblob

      NULL

      Objekt

      zusatzfeldobj (siehe Tipps weiter unten)

      NULL

      Auswahl

      zusatzfeldint (gibt Position der Auswahl zurück)
      zusatzfeldasstring (gibt den Auswahltext zurück)

      0
      Erster Wert der Liste

      Beispiel: Alle Adressen, die als ABC-Adressen gekennzeichnet sind (Wahr,Falsch-Zusatzfeld "ABC-Adresse" auf Adresseintrag):

      adresseintrag->select(zusatzfeldbool('ABC-Adresse'))

    XML (Customizing)

    Zusatzfelder können via Customizing auch in Listen und in den Seiten platziert werden. Dabei gilt folgende Matrix zur Auswahl des Steuerelementes:

    Feld-TypAuswahl-TypSteuerelementBeispiel
    ZeichenAdresseAddressReferenceBox<AddressReferenceBox Label="Adresse" ValueExpression="zusatzfeldobj('ZeichenAdresse')" />
    ZeichenFilePathBox<PathBox Label="File" ValueExpression="zusatzfeld('File')" SelectType="FileOpen" />
    ZeichenPfadPathBox<PathBox Label="Pfad" ValueExpression="zusatzfeld('Pfad')" SelectType="Folder" />
    ZeichenTextBox<TextBox Label="Zeichen" ValueExpression="zusatzfeld('Zeichen')" />
    Wahr, FalschCheckBox<CheckBox Label="Wahr, Falsch" ValueExpression="zusatzfeldbool('WahrFalsch')" />
    GanzzahlTextBox<TextBox Label="Ganzzahl" ValueExpression="zusatzfeldint('Ganzzahl')" />
    MinutenTextBox<TextBox Label="Minuten" ValueExpression="zusatzfeldint('Minuten')" Converter="Minutes" />
    FestkommazahlTextBox<TextBox Label="Festkommazahl" ValueExpression="zusatzfeldcurr('Festkommazahl')" />
    DatumDatePicker<DatePicker Label="Datum" ValueExpression="zusatzfelddate('Datum')" />
    TextTextArea<TextArea Label="Text" ValueExpression="zusatzfeldblob('Text')" Lines="4" />
    BildImage<Image Label="Bild" ValueExpression="zusatzfeldblob('Bild')" Height="150" />
    ObjektAdresseAddressReferenceBox<AddressReferenceBox Label="Adresse" ValueExpression="zusatzfeldobj('ObjektAdresse')" />
    ObjektVertec OrdnerTreeReferenceBox<TreeReferenceBox Label="Ordner" ValueExpression="zusatzfeldobj('ObjektOrdner')" BrowseClass="Container" SelectFilter="AbstractOrdner" />
    ObjektAdditionalFieldComboBox<AdditionalFieldComboBox Label="Objekt" ValueExpression="zusatzfeldobj('Objekt')" />
    AuswahlAdditionalFieldComboBox<AdditionalFieldComboBox Label="Auswahl" ValueExpression="zusatzfeldint('Auswahl')" />

    Unterschied zwischen typenabhängiger und typenunabhängiger Abfrage

    In den meisten Fällen kommt das auf der Oberfläche auf dasselbe heraus, da schlussendlich meist ein String dargestellt wird.

    Unterschied gibt vor allem bei Auswahl-Zusatzfeldern. Diese sind intern als Integer Zusatzfelder implementiert. Das bedeutet, dass die Expression zusatzfeldint(name) eine Zahl liefert. Wenn der Text der Auswahl angezeigt werden soll, dann sollte die expression zusatzfeldasstring(name) verwendet werden.

    Ebenso liefern die typspezifischen OCL Operatoren NULL Werte, falls das Zusatzfeld den Wert NULL hat. Dies stellt aber in den meisten Fällen kein Problem dar, da NULL Werte als Leerstrings dargestellt werden. Falls ein NULL Wert Probleme macht, kann dies durch Verwendung von zusatzfeldAsString vermieden werden.

    Tipps zum Umgang mit zusatzfeldobj

    Der Operator zusatzfeldObj zum Abfragen von Objekt-Zusatzfeldern kann zu Fehlern führen, wenn er in einer OCL Expression auf einer Liste von Objekten angewendet wird. Die Fehlermeldung lautet:

    TBoldObjectList.AddElement: Element not a TBoldObject

    Beispiel: Objektzusatzfeld 'Niederlassung' auf Projektbearbeiter. Zeigt z.B. auf eine Adresse.

    offeneLeistungen.bearbeiter.zusatzfeldobj('Niederlassung')->asset->size

    sollte die Anzahl verschiedener Niederlassungen in einer Leistungliste angeben. Gibt aber den obigen Fehler.

    Lösung:

    offeneLeistungen.bearbeiter->collect(zusatzfeldObj('Niederlassung')->oclasType
    (UserEintrag))->asset->size

    Erklärung:

    Die Anwendung von zusatzfeldObj auf eine Liste entspricht einer impliziten "collect" operation. Diese schlägt fehl, weil zusatzfeldObj nicht direkt das verknüpfte Objekt sondern das Verknüpfungfeld liefert.

    Eine Typumwandlung auf einen kompatiblen Objekttyp (den eigentlichen Typ des Objekts oder UserEintrag) behebt das Problem. Damit die Typumwandlung stattfinden kann, muss die collect Operation explizit formuliert werden.