Kurzinfos (Bands) #
Kurzinfos sind kleine HTML-Panels, die neben der Eingabemaske eines Datensatzes eingeblendet werden. Sie zeigen kontextbezogene Informationen — etwa die letzten Aufträge einer Adresse, Lagerbestände eines Artikels oder Statistiken.
Jede Kurzinfo ist ein HTML-Template mit eingebetteter SQL-Abfrage. EULANDA führt die Query aus, füllt die Platzhalter im Template und zeigt das Ergebnis im eingebetteten Browser an.
Wo werden Kurzinfos definiert? #
Kurzinfos sind in der SQL-Registry unter \OBJECTS\BANDS\ gespeichert. Jeder Schlüssel entspricht einer Kurzinfo:
\OBJECTS\BANDS\
├── cnsoft.Adresse.Auftraege
├── cnsoft.Adresse.Stat.Einfach
├── cnsoft.Artikel.Bestellungen
├── cnsoft.Auftrag.Positionen
├── cnsoft.Rechnung.Mwst
└── ... (108 Bänder insgesamt)
Die Namenskonvention ist <vendor>.<Dokumenttyp>.<Funktion>, wobei cnsoft der Standard-Vendor ist.
Aufbau einer Kurzinfo #
Jede Kurzinfo besteht aus Metadaten und einem HTML-Template (DATA-Feld).
Metadaten #
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Context | String | Dokumenttyp, bei dem die Kurzinfo angezeigt wird (z.B. DOC.Eulanda.Adresse) |
Title | String | Überschrift — entweder Klartext oder Ressourcen-Referenz (z.B. :1011@1067) |
Type | String | Immer "1" für HTML-Kurzinfos |
Feature | String | Feature-Gate — die Kurzinfo erscheint nur, wenn das Feature lizenziert ist |
MaxRows | DWORD | Maximale Anzahl der angezeigten Zeilen (begrenzt die SQL-Query über $$TOPCLAUSE$$) |
DesignedLang | String | Sprache des Templates (für die automatische Übersetzung) |
HideIfEmpty | DWORD | 1 = Band verbergen, wenn die Query keine Daten liefert |
Das DATA-Feld (HTML-Template) #
Das DATA-Feld enthält das komplette Template bestehend aus einem <CNXHEAD>-Block (SQL und Steuerlogik) und dem HTML-Markup:
<CNXHEAD>
<query Name="af">
SELECT $$TOPCLAUSE$$ af.id, af.Kopfnummer,
Datum = dbo.cnf_DatumKurz(af.Datum),
af.VkBrutto, af.Waehrung
FROM $$SCHEMA$$.Auftrag af $$LOCKHINT$$
WHERE af.AdresseId = $$input.id$$
ORDER BY af.Datum DESC
</query>
<logic>
REPEAT AuftragItems WITH af
</logic>
</CNXHEAD>
<TABLE data-sortable="true" data-copyable="true">
<THEAD>
<TR>
<TH align="right" data-sort-type="numeric">Nummer</TH>
<TH align="right" data-sort-type="date">Datum</TH>
<TH align="right" data-sort-type="numeric">VK Brutto</TH>
</TR>
</THEAD>
<TBODY>
<TR cnxid="AuftragItems">
<TD><A HREF="eulanda://./DOC/Eulanda.Auftrag/$$af.id$$">$$af.Kopfnummer$$</A></TD>
<TD align="right" data-sort="$$FDyyyy-mm-dd:af.Datum$$">$$FDdd.mm.yy:af.Datum$$</TD>
<TD align="right">$$FF0.00:af.VkBrutto$$ $$af.Waehrung$$</TD>
</TR>
</TBODY>
</TABLE>
CNXHEAD: SQL und Steuerlogik #
Der <CNXHEAD>-Block wird von EULANDA verarbeitet und nicht an den Browser ausgeliefert. Er enthält zwei Elemente:
QUERY — SQL-Abfragen #
<query Name="queryname">
SELECT ... FROM $$SCHEMA$$.Tabelle WHERE id = $$input.id$$
</query>
Ein Template kann mehrere Queries enthalten. Der Name dient als Präfix für die Datenbindung im HTML-Teil ($$queryname.Spalte$$).
Bei SQL-Statements mit Sonderzeichen (z.B. <, >) muss der Query-Text in <![CDATA[...]]> eingeschlossen werden:
<query Name="warnung"><![CDATA[
SELECT Warnung FROM $$SCHEMA$$.Adresse
WHERE id = $$input.id$$ AND ISNULL(Warnung,'') <> ''
]]></query>
LOGIC — Steuerlogik #
Die <logic>-Sektion steuert, welche HTML-Elemente angezeigt werden und wie Daten gebunden werden:
| Anweisung | Beschreibung |
|---|---|
REPEAT id WITH queryname | Wiederholt das HTML-Element mit cnxid="id" für jede Ergebniszeile |
SET element.Visible = EMPTY queryname | Element sichtbar, wenn Query leer ist |
SET element.Visible = NOT EMPTY queryname | Element sichtbar, wenn Query Ergebnisse hat |
<logic>
SET Hinweis.Visible = EMPTY af
SET Daten.Visible = NOT EMPTY af
REPEAT AuftragItems WITH af
</logic>
Platzhalter im Template #
Im HTML-Teil werden Platzhalter durch die Query-Ergebnisse ersetzt:
Feldwerte #
| Syntax | Beschreibung |
|---|---|
$$queryname.Spalte$$ | Rohwert eines Feldes |
$$FF#,##0.00:queryname.Spalte$$ | Zahl formatiert (Format Float) |
$$FDdd.mm.yy:queryname.Spalte$$ | Datum formatiert (Format Date) |
Die Formatangabe nach FF bzw. FD folgt der VB-Syntax:
| Format | Beispiel | Ergebnis |
|---|---|---|
$$FF#,##0.00:feld$$ | 1234.5 | 1.234,50 |
$$FF0.00:feld$$ | 1234.5 | 1234,50 |
$$FF#,###0:feld$$ | 1234 | 1.234 |
$$FDdd.mm.yy:feld$$ | 2026-03-12 | 12.03.26 |
$$FDdd.mm.yyyy:feld$$ | 2026-03-12 | 12.03.2026 |
$$FDyyyy-mm-dd:feld$$ | 2026-03-12 | 2026-03-12 |
System-Platzhalter #
| Platzhalter | Beschreibung |
|---|---|
$$input.id$$ | ID des aktuell angezeigten Datensatzes |
$$SCHEMA$$ | Datenbank-Schema (typisch: dbo) |
$$TOPCLAUSE$$ | Wird durch TOP n ersetzt, wobei n dem MaxRows-Wert entspricht |
$$LOCKHINT$$ | Lock-Hint für Queries (z.B. WITH (NOLOCK)) |
Datenbindung im HTML #
Das Attribut cnxid markiert HTML-Elemente für die Datenbindung:
<!-- Wird für jede Zeile der Query "af" wiederholt -->
<TR cnxid="AuftragItems">
<TD>$$af.Kopfnummer$$</TD>
</TR>
Links auf Datensätze verwenden das eulanda://-Protokoll mit der ID aus der Query:
<A HREF="eulanda://./DOC/Eulanda.Auftrag/$$af.id$$">$$af.Kopfnummer$$</A>
Typen von Kurzinfos #
Datenlisten #
Der häufigste Typ — eine Tabelle mit Zeilen aus einer SQL-Query. Beispiele: Aufträge einer Adresse, Positionen eines Auftrags, Bestellungen eines Artikels.
<TABLE data-sortable="true" data-copyable="true">
<THEAD><TR><TH>...</TH></TR></THEAD>
<TBODY><TR cnxid="Items">...</TR></TBODY>
</TABLE>
Statistiken #
Feste Zeitraum-Vergleiche (Monat, Vormonat, Jahr, Vorjahr). Die Zeilen haben eine vorgegebene Reihenfolge und sind deshalb nicht sortierbar, aber kopierbar:
<TABLE data-copyable="true">
<THEAD>
<TR><TH>Zeitraum</TH><TH>Umsatz</TH><TH>Ertrag</TH></TR>
</THEAD>
<TBODY>
<TR><TH>Monat</TH><TD>$$FF#,###0.00:stat1.VkNetto_AktuellerMonat$$</TD>...</TR>
<TR><TH>Vormonat</TH><TD>$$FF#,###0.00:stat1.VkNetto_VorMonat$$</TD>...</TR>
<TR><TH>Jahr</TH><TD>$$FF#,###0.00:stat1.VkNetto_AktuellesJahr$$</TD>...</TR>
<TR><TH>Vorjahr</TH><TD>$$FF#,###0.00:stat1.VkNetto_VorJahr$$</TD>...</TR>
</TBODY>
</TABLE>
Warnungen #
Textblock ohne Tabelle. Verwendet die CSS-Klasse bandmessage:
<DIV class="bandmessage" cnxid="WarnungItems">
<p>$$Warnung.Warnung$$</p>
</DIV>
Bilder #
Zeigt das Artikelbild über das eulanda://-Protokoll:
<img src="eulanda://./DOC/Eulanda.Artikel/$$bild.id$$/DEFAULT.JPG?w=$$session.bands.imgwidth$$&h=$$session.bands.imgheight$$">
Formulare #
Interaktive Bänder mit Eingabefeldern und Buttons, z.B. für Zahlungseingänge. Diese laden zusätzliches JavaScript und können Aktionen auf dem Host auslösen:
<input id="eZeBetrag" value="$$FF#,##0.00:qu.Saldo$$">
<button onclick="AuftragZe.clickSave($$input.id$$)">Zahlung Buchen</button>
Interaktive Features (infopanel.js) #
Die Bibliothek infopanel.js erweitert Kurzinfo-Tabellen um Sortierung, Kopieren und Action-Buttons. Die Features werden über Data-Attribute am <TABLE>-Element aktiviert.
TABLE-Attribute #
| Attribut | Beschreibung |
|---|---|
data-sortable="true" | Spaltenüberschriften werden klickbar — ein Klick sortiert die Tabelle |
data-copyable="true" | Zeigt einen Kopier-Button im Band-Header |
data-action="ActionName" | Zeigt einen Action-Button, der eine EULANDA-Action ausführt |
Sortierung #
Die Spaltenüberschriften (<TH>) steuern das Sortierverhalten:
<TH data-sort-type="numeric">Menge</TH>
<TH data-sort-type="date">Datum</TH>
<TH data-sort-type="text">Name</TH>
<TH data-sort-type="none">Aktionen</TH>
| Sortiertyp | Verhalten |
|---|---|
text | Alphabetisch (Standard, wenn kein Typ angegeben) |
numeric | Numerisch — erkennt deutsche Zahlenformate (Tausenderpunkt, Dezimalkomma) |
date | Datumssortierung |
none | Spalte nicht sortierbar |
Bei formatierten Datumswerten muss ein data-sort-Attribut am <TD> den Sortierwert im ISO-Format liefern:
<TD data-sort="$$FDyyyy-mm-dd:af.Datum$$">$$FDdd.mm.yy:af.Datum$$</TD>
Kopieren #
Der Kopier-Button überträgt die Tabelle Tab-separiert in die Zwischenablage — direkt in Excel einfügbar.
Action-Button #
Ruft eine in der SQL-Registry definierte Action auf (\OBJECTS\ACTIONS\):
<TABLE data-action="cnsoft.Artikel.Export">
Kurzinfos einbinden #
Kurzinfos können auch in den statischen Seiten, wie der EULANDA-Startseite per JavaScript eingebunden werden. Die Funktion addMenuCurrentBand aus forms.js rendert ein Band für den aktuellen Datensatz:
currentMenu = g("mnuClientRight");
currentId = urlId;
addMenuCurrentBand("INFO", "Aufträge", "cnsoft.Adresse.Auftraege");
addMenuCurrentBand("INFO", "Statistik", "cnsoft.Adresse.Stat.Einfach");
addMenuCurrentBand("INFO", "Kontakte", "cnsoft.Adresse.Kontakt");
| Funktion | Beschreibung |
|---|---|
addMenuBand(Category, Caption, BandName, params) | Band mit expliziten Parametern rendern |
addMenuCurrentBand(Category, Caption, BandName) | Band für currentId rendern |
Die Kurzinfos erscheinen typischerweise in der rechten Spalte (mnuClientRight) der Detailansicht.
Benutzer-Overrides (UserVar) #
Benutzer können einzelne Metadaten einer Kurzinfo überschreiben, ohne das Template zu ändern. Dazu wird ein Unterschlüssel UserVar angelegt:
\OBJECTS\BANDS\cnsoft.Adresse.Auftraege\
├── Context = "DOC.Eulanda.Adresse"
├── MaxRows = 5
└── UserVar\
└── MaxRows = 10 ← Benutzer sieht 10 statt 5 Zeilen
Übersicht der Kurzinfos nach Dokumenttyp #
Adresse #
| Kurzinfo | Funktion |
|---|---|
cnsoft.Adresse.Auftraege | Letzte Aufträge der Adresse |
cnsoft.Adresse.Stat.Einfach | Umsatzstatistik (Monat/Jahr/Vorjahr) |
cnsoft.Adresse.Kontakt | Kontaktpersonen |
cnsoft.Adresse.Kreditlinie | Kreditlimit und Auslastung |
cnsoft.Adresse.Referenzen | Referenznummern (Debitor, Kreditor) |
cnsoft.Adresse.Namenstypen | Zusätzliche Namensfelder |
cnsoft.Adresse.Warnung | Warnhinweis (falls vorhanden) |
cnsoft.Adresse.Search | Suchfunktion |
Artikel #
| Kurzinfo | Funktion |
|---|---|
cnsoft.Artikel.Bestellungen | Offene Bestellungen |
cnsoft.Artikel.LagerDetails | Lagerbestand nach Lagerort |
cnsoft.Artikel.Quelle | Lieferquellen |
cnsoft.Artikel.KundenArtNummer | Kundenartikelnummern |
cnsoft.Artikel.Stat.Einfach | Umsatzstatistik |
cnsoft.Artikel.ArtikelPaket | Stückliste / Paketinhalt |
cnsoft.Artikel.Referenzen | Referenznummern (EAN, Hersteller) |
cnsoft.Artikel.Chargen | Chargen-Verwaltung |
cnsoft.Artikel.Warnung | Warnhinweis |
Auftrag #
| Kurzinfo | Funktion |
|---|---|
cnsoft.Auftrag.Positionen | Auftragspositionen |
cnsoft.Auftrag.Angebote | Zugehörige Angebote |
cnsoft.Auftrag.Lieferscheine | Erzeugte Lieferscheine |
cnsoft.Auftrag.Rechnungen | Erzeugte Rechnungen |
cnsoft.Auftrag.KrAuftrag | Zugehörige Bestellungen |
cnsoft.Auftrag.Mwst | MwSt-Aufstellung |
cnsoft.Auftrag.ZE | Zahlungseingänge (Vorkasse) |
cnsoft.Auftrag.Warnung | Warnhinweis |
Weitere Dokumenttypen #
| Dokumenttyp | Kurzinfos |
|---|---|
| Angebot | Positionen, Aufträge, Lieferscheine, Rechnungen, MwSt, Warnung |
| Rechnung | Positionen, Aufträge, Lieferscheine, MwSt |
| Lieferschein | Aufträge, Rechnungen, Pakete |
| Bestellung (KrAuftrag) | Positionen, Aufträge |
| Startseite (Common) | Aktive Vorgänge, Letzte Aufträge, Geburtstage, Druckserver, Statistiken |
Positions-Kurzinfos #
Wenn ein Benutzer eine einzelne Position markiert, erscheinen positionsbezogene Kurzinfos:
| Kurzinfo | Funktion |
|---|---|
cnsoft.*.Bild | Artikelbild der Position |
cnsoft.*.Positionen | Untergeordnete Positionen |
cnsoft.*.Titel | Positionstext / Langtext |
Statistik-Bänder (Startseite) #
Die cnsoft.Common.Stat.*-Bänder zeigen Unternehmenskennzahlen auf der Startseite:
| Kurzinfo | Funktion |
|---|---|
cnsoft.Common.Stat.Einfach | Gesamtumsatz (Monat/Jahr) |
cnsoft.Common.Stat.Vergleich.Vorjahre | Jahresvergleich |
cnsoft.Common.Stat.AdresseGr | Umsatz nach Adressgruppe |
cnsoft.Common.Stat.WarenGr | Umsatz nach Warengruppe |
cnsoft.Common.Stat.Land | Umsatz nach Land |
cnsoft.Common.Stat.Vertreter | Umsatz nach Vertreter |
cnsoft.Common.Stat.Hersteller | Umsatz nach Hersteller |
cnsoft.Common.Stat.Monate | Monatliche Entwicklung |