Inhaltsverzeichnis
Schnittstelle 3521: WebZerf2 — Benutzer und persönliche Daten veröffentlichen
Dokumentiert / statisch geprüft: 2026-10-02. Teilweise dokumentiert: lokaler Benutzer-/SQL-Datenfluss belegt; cWebData-Ausgabeformat aus externer DLL nicht aufgelöst (Q17); Nutzerprüfung offen. Keine Schnittstelle ausgeführt.
Identität und Quellenstand
eProgramm.ExportWebZerfUser = 3521. Aktive feste Registrierung → cSchnittWebZerf2.Export_User (E,P). Projekteinschluss der genannten VB-Quellen geprüft (PRJ). Active=True, InAutomatik=true, ManuellerAufruf=true, NurAufServer=false. Kennzeichen beschreiben Registrierung/Defaults, nicht eingerichtete Jobs; Run selbst prüft keine Serverbindung.
seegerstefan/pep4desktop, master, Commit f1d82a003b62f2658f06eaa943dc685ab219bdf3. Lokale .DS_Store-/cPep/PEP-Abweichungen nicht vermischt; Fachquellen cSchnittstellen/ZW/Sqlfiles unverändert. Kein Remote-/Installationsabgleich.
Zweck und Ablauf
Kein Eingangsfile/PFAD. Multi-Start → ResetDaten → ExportStammJSON → ExportPersonData → Multi-Ende. Reset fehlgeschlagen → beide Exporte entfallen. Nach fehlgeschlagenem Stammexport läuft Datenupload dennoch. Shared Export_User hat keinen normalen Boolean-Return und ignoriert ExportPersonen-Ergebnis → False auch nach Erfolg.
Jede Stufe BASE-Start/Ende, Server-/Dbguard wenn beide Schutzsettings gesetzt, nichtleere Kunde/Key. Synchrone HTTP-Aufrufe am sharedClient mit ersetzten AppKey/Key/Command/User-Agent-Headern. RESET_DATEN per GET /api.php?type=P&art= verlangt AntwortbeginnOK; kann entfernte Daten vor misslungenem Neuaufbau zurücksetzen, Serverwirkung nicht lokal beweisbar. HTTPstatus hier und bei den Uploads nicht ausdrücklich geprüft; OK-Text entscheidet. Keine atomare Gesamtübertragung, keine hier gesetzten SQL_TIMEOUT/HTTPtimeoutwerte (SQLdefault30s).
Benutzervertrag — UPLOAD_USERJ
Personen aktiv=1,AustrittNULL oder>GETDATE,WebZerf2=1. Kein zusätzlicher Eintritt-/InZW-/StartZW-Filter; alte unaufgerufene ExportStamm-Routine nicht als aktuellen Filtervertrag verwenden. Pro Benutzer eine kompakte JSON-Zeile mit PersonID,PinHash,WildCard,Mail und fünf WebZerf_buchung_* Flags (erstellen/listen/edit/manuell/abwesend). PinHash SHA256/UTF8, fester Salt, URL-Base64; keine Roh-PIN/Salt kopiert. Wildcard NzLong,Mail NzStr,Flags NzBoolean. Serializer ignoriertNULL, Flags werden zuvor bereits auf Boolean umgesetzt (kein globaler ZW-Rechtefallback im aktiven JSONpfad).
POST /api.php, UPLOAD_USERJ, text/plain, gzip, UTF-8 ohneBOM. Keine lokale Personen-UPDATE/INSERT-Fachwirkung aus diesem Export.
Persönliche Daten — UPLOAD_USERDATA
Drei SQL-Prozeduren, nurSELECT in lokale Temp-/Ergebnistabellen:
- webzerf_saldo: aktive, nichtausgetretene WebZerf2-Personen mit WebZerf_info_saldo=1; BerechneteZeiten bisheute → maximalerDatum-Stichtag, SUM(Tagessaldo),SUM(Urlaub). PersonID/Bezeichnung/Wert → SAL-Block.
- webzerf_planung(@DatVon,@DatBis): Personen mit Pep2-Daten im Zeitraum und ISNULL(WebZerf_info_planung,globaler Webzerf_PlanungListen)=1; Kalendercrossjoin Tage. JeTag MIN(Kommen)/MAX(Gehen), ein einzelner GanzTag-Kennzeichenstatus→Bezeichnung statt Uhrzeiten; sonst HH:mm-HH:mm, ISO-Kalenderwoche als Gruppe. Kein zusätzlicher Aktiv-/WebZerf2-Filter der Personen in dieser SP. Datum(Anzeige)/Planung → PLAN-Tabellen.
- webzerf_provision_01(@QDatVon,@QDatBis): Client schickt aktuellen Monatsbeginn/heute; SP überschreibt Ende mit Monatsultimo und ergänzt Vormonat. UmsatzVK.VKWert/VKWertNetto jePerson; PepBerechnet-Sollzeit/Feiertags-/Urlaubsabzug, Pep2-Status310/311/320 für Schule/Betriebsrat, gültige ITProvision (Kennzeichen1/3), ITORGA/ITProvisionBereiche, ProdZiel. Ziel bei Kennzeichen1=SUM(Faktor*(Sollzeit+Abzug)*0.8*Produktivitaet), sonst Faktor*32*Produktivitaet; Bruttofaktor1.19 fest. Export nur WebZerf_info_prov=1 und WebZerf2=1, kein Aktiv-/Austrittsfilter. PersonID/Gruppe/Art/Wert → PROV-Tabelle.
cWebData baut personbezogene SAL/PLAN/PROV-Blöcke, Gruppen und Spaltenformate auf. Data.GetData → UTF-8 ohneBOM, gzip, text/plain, POST UPLOAD_USERDATA. Genauer Wire-Formatter nicht im VB-Quellpaket, Projektreferenz SubProjekte/dll/cWebData.dll; Suchumfang Dateiliste+Klassensuche, keine Implementierung gefunden. Keine erfundene JSON-/CSV-Struktur für diesen zweiten Upload. Q17 benötigt Bibliotheksquelltext/Formatvertrag und API-Vertrag.
Befunde und Grenzen
⚠ Remote-Reset vor ungesichertem Ersatz, False-Sharedreturn, unterschiedliche Personenfilter je Nutzdatenblock und Provisionszeitraum bis Monatsende statt bisheute. Null-/mehrfachpassende Historiendaten und konstante Steuer-/Schulregeln fachlich testen. Lokaler SQL-Leserindex unten vollständig für die drei SPs; externe Aufnahme-/Speicherfelder und cWebData-Format unbekannt, nicht als lokale Fach-UPDATEs indizieren.
Einstellungen und gemeinsame Nebenwirkungen
Gemeinsames Profil: BASE (interne Referenz).
| Beziehung | Schlüssel / Variable | Default | Einflussweg | Wirkung | Beleg |
|---|---|---|---|---|---|
| 3521-S001 | TERMINAL_Zerf_Kunde / WebZerf_ZerfKunde | leer | Clientguard | Nichtleer erforderlich; keine Zugangswerte dokumentiert | SET,B |
| 3521-S002 | TERMINAL_Zerf_Key / WebZerf_ZerfKey | leer | HTTP X-API-KEY | Nichtleer erforderlich; Geheimnis nur als Settingname | SET,B |
| 3521-S003 | Terminal_ZerfServer / Webzerf_ZerfServer | fest codierte URL mit Leerzeichen nach https: | HTTP-Basisadresse | RESET_DATEN/UPLOAD_USERJ/UPLOAD_USERDATA | SET,B |
| 3521-S004 | SCHNITT_SEC_Server / SCHNITT_SEC_Server | leer | Serverguard | Servernameprüfung nur wenn Server UND Db nichtleer | SET,B |
| 3521-S005 | SCHNITT_SEC_Db / SCHNITT_SEC_Db | leer | DBguard | Datenbankprüfung nur mit beiden Schutzsettings | SET,B |
| 3521-S006 | Webzerf_PlanungVon / Webzerf_PlanungVon | 1.m.j | cDatumMuster → webzerf_planung | Untergrenze Planung | SET,B,PLAN |
| 3521-S007 | Webzerf_PlanungBis / Webzerf_PlanungBis | lt.m+1.j | cDatumMuster → webzerf_planung | Obergrenze Planung; tatsächlich lt, nicht lt.m-Schreibfehler erfinden | SET,B,PLAN |
| 3521-S008 | Webzerf_PlanungListen / WebZerf_PlanungListen | 0 in Client; SQL NULL→0 | GetEinstellungZw(EinstellungenZw.Wert) | Fallback für Personen.WebZerf_info_planung beiNULL | SET,PLAN,ES |
Defaults sind keine Livewerte. Melde-/Datei-/DB-Wirkungen sind nicht atomar.
Feldbeziehungen
DB-Rolle PEP4-Anmeldedatenbank, soweit nicht ausdrücklich Aprocon oder Import angegeben. Unqualifizierte Objektschemata nicht als Live-dbo-Vertrag behaupten. INSERT-Defaults/Computed-Spalten sind gesonderte Schemawirkung, kein explizites UPDATE.
| Beziehung | Tabelle.Feld | Operation | Datenfluss / Verwendung | Bedingung | Beleg |
|---|---|---|---|---|---|
| 3521-D001 | Personen.PersonID | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D002 | Personen.Pin | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D003 | Personen.WebZerf2WildCard | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D004 | Personen.Mail | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D005 | Personen.WebZerf_buchung_erstellen | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D006 | Personen.WebZerf_buchung_listen | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D007 | Personen.WebZerf_buchung_edit | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D008 | Personen.WebZerf_buchung_manuell | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D009 | Personen.WebZerf_buchung_abwesend | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D010 | Personen.aktiv | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D011 | Personen.Austritt | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D012 | Personen.WebZerf2 | SELECT | Benutzerliste→JSON/PinHash | aktiv1,AustrittNULL/zukünftig,WebZerf2=1 | B |
| 3521-D013 | Personen.PersonID | SELECT | Saldenfreigabe | InfoSaldo1 und aktuelleWebZerf2Person | SAL |
| 3521-D014 | Personen.aktiv | SELECT | Saldenfreigabe | InfoSaldo1 und aktuelleWebZerf2Person | SAL |
| 3521-D015 | Personen.Austritt | SELECT | Saldenfreigabe | InfoSaldo1 und aktuelleWebZerf2Person | SAL |
| 3521-D016 | Personen.WebZerf2 | SELECT | Saldenfreigabe | InfoSaldo1 und aktuelleWebZerf2Person | SAL |
| 3521-D017 | Personen.WebZerf_info_saldo | SELECT | Saldenfreigabe | InfoSaldo1 und aktuelleWebZerf2Person | SAL |
| 3521-D018 | BerechneteZeiten.Person | SELECT | MAXDatum,SUMTagessaldo,SUMUrlaub→SAL | Datum⇐GETDATE | SAL |
| 3521-D019 | BerechneteZeiten.Datum | SELECT | MAXDatum,SUMTagessaldo,SUMUrlaub→SAL | Datum⇐GETDATE | SAL |
| 3521-D020 | BerechneteZeiten.Tagessaldo | SELECT | MAXDatum,SUMTagessaldo,SUMUrlaub→SAL | Datum⇐GETDATE | SAL |
| 3521-D021 | BerechneteZeiten.Urlaub | SELECT | MAXDatum,SUMTagessaldo,SUMUrlaub→SAL | Datum⇐GETDATE | SAL |
| 3521-D022 | Personen.PersonID | SELECT | Planungsfreigabe, globalerFallback | keineAktiv-/WebZerf2-Bedingung | PLAN |
| 3521-D023 | Personen.WebZerf_info_planung | SELECT | Planungsfreigabe, globalerFallback | keineAktiv-/WebZerf2-Bedingung | PLAN |
| 3521-D024 | Pep2.Name | SELECT | Personenzeitraum/Tagesspanne/GanzTagstatus | Planungszeitraum | PLAN |
| 3521-D025 | Pep2.Datum | SELECT | Personenzeitraum/Tagesspanne/GanzTagstatus | Planungszeitraum | PLAN |
| 3521-D026 | Pep2.Kommen | SELECT | Personenzeitraum/Tagesspanne/GanzTagstatus | Planungszeitraum | PLAN |
| 3521-D027 | Pep2.Gehen | SELECT | Personenzeitraum/Tagesspanne/GanzTagstatus | Planungszeitraum | PLAN |
| 3521-D028 | Pep2.Status | SELECT | Personenzeitraum/Tagesspanne/GanzTagstatus | Planungszeitraum | PLAN |
| 3521-D029 | Tage.Datum | SELECT | Kalendertage auch ohne Planzeile | Planungszeitraum | PLAN |
| 3521-D030 | Kennzeichen.Kennzeichen | SELECT | Einzelner Ganztagstatus statt Zeitspanne | Pep2.Status match,GanzTag1 | PLAN |
| 3521-D031 | Kennzeichen.GanzTag | SELECT | Einzelner Ganztagstatus statt Zeitspanne | Pep2.Status match,GanzTag1 | PLAN |
| 3521-D032 | Kennzeichen.Bezeichnung | SELECT | Einzelner Ganztagstatus statt Zeitspanne | Pep2.Status match,GanzTag1 | PLAN |
| 3521-D033 | EinstellungenZw.Einstellung | SELECT | GetEinstellungZw('Webzerf_PlanungListen') | Planungsfallback | PLAN,ES |
| 3521-D034 | EinstellungenZw.Wert | SELECT | GetEinstellungZw('Webzerf_PlanungListen') | Planungsfallback | PLAN,ES |
| 3521-D035 | UmsatzVK.PersonID | SELECT | Istumsatz jePerson, Brutto/Netto | aktuell ganzerMonat plusVormonat | PROV |
| 3521-D036 | UmsatzVK.Datum | SELECT | Istumsatz jePerson, Brutto/Netto | aktuell ganzerMonat plusVormonat | PROV |
| 3521-D037 | UmsatzVK.VKWert | SELECT | Istumsatz jePerson, Brutto/Netto | aktuell ganzerMonat plusVormonat | PROV |
| 3521-D038 | UmsatzVK.VKWertNetto | SELECT | Istumsatz jePerson, Brutto/Netto | aktuell ganzerMonat plusVormonat | PROV |
| 3521-D039 | PepBerechnet.PersonID | SELECT | Zielumsatz/Sollzeit und Abzüge | Monats-/gültigeHistorien | PROV |
| 3521-D040 | PepBerechnet.Datum | SELECT | Zielumsatz/Sollzeit und Abzüge | Monats-/gültigeHistorien | PROV |
| 3521-D041 | PepBerechnet.Sollzeit | SELECT | Zielumsatz/Sollzeit und Abzüge | Monats-/gültigeHistorien | PROV |
| 3521-D042 | PepBerechnet.GutschriftFeiertag | SELECT | Zielumsatz/Sollzeit und Abzüge | Monats-/gültigeHistorien | PROV |
| 3521-D043 | PepBerechnet.GutschriftUrlaub | SELECT | Zielumsatz/Sollzeit und Abzüge | Monats-/gültigeHistorien | PROV |
| 3521-D044 | PepBerechnet.Urlaub | SELECT | Zielumsatz/Sollzeit und Abzüge | Monats-/gültigeHistorien | PROV |
| 3521-D045 | Pep2.Name | SELECT | 310SchuleZeit,311SchuleSoll,320BetriebsratZeit | person-/taggleich | PROV |
| 3521-D046 | Pep2.Datum | SELECT | 310SchuleZeit,311SchuleSoll,320BetriebsratZeit | person-/taggleich | PROV |
| 3521-D047 | Pep2.Status | SELECT | 310SchuleZeit,311SchuleSoll,320BetriebsratZeit | person-/taggleich | PROV |
| 3521-D048 | Pep2.Kommen | SELECT | 310SchuleZeit,311SchuleSoll,320BetriebsratZeit | person-/taggleich | PROV |
| 3521-D049 | Pep2.Gehen | SELECT | 310SchuleZeit,311SchuleSoll,320BetriebsratZeit | person-/taggleich | PROV |
| 3521-D050 | ITProvision.PersonenStammID | SELECT | Provisionsart1/3 | gültigeHistorie | PROV |
| 3521-D051 | ITProvision.von | SELECT | Provisionsart1/3 | gültigeHistorie | PROV |
| 3521-D052 | ITProvision.bis2 | SELECT | Provisionsart1/3 | gültigeHistorie | PROV |
| 3521-D053 | ITProvision.Kennzeichen | SELECT | Provisionsart1/3 | gültigeHistorie | PROV |
| 3521-D054 | ITORGA.PersonenStammID | SELECT | FallbackZielgruppe | gültigeHistorie | PROV |
| 3521-D055 | ITORGA.von | SELECT | FallbackZielgruppe | gültigeHistorie | PROV |
| 3521-D056 | ITORGA.bis2 | SELECT | FallbackZielgruppe | gültigeHistorie | PROV |
| 3521-D057 | ITORGA.Abteilung | SELECT | FallbackZielgruppe | gültigeHistorie | PROV |
| 3521-D058 | ITProvisionBereiche.PersonID | SELECT | Gruppen-/Faktoroverride | gültigeHistorie | PROV |
| 3521-D059 | ITProvisionBereiche.von | SELECT | Gruppen-/Faktoroverride | gültigeHistorie | PROV |
| 3521-D060 | ITProvisionBereiche.bis2 | SELECT | Gruppen-/Faktoroverride | gültigeHistorie | PROV |
| 3521-D061 | ITProvisionBereiche.PepGruppe | SELECT | Gruppen-/Faktoroverride | gültigeHistorie | PROV |
| 3521-D062 | ITProvisionBereiche.Faktor | SELECT | Gruppen-/Faktoroverride | gültigeHistorie | PROV |
| 3521-D063 | ProdZiel.PepGruppenID | SELECT | Gruppenproduktivität fürZiel | gültigeHistorie | PROV |
| 3521-D064 | ProdZiel.von | SELECT | Gruppenproduktivität fürZiel | gültigeHistorie | PROV |
| 3521-D065 | ProdZiel.bis2 | SELECT | Gruppenproduktivität fürZiel | gültigeHistorie | PROV |
| 3521-D066 | ProdZiel.Produktivitaet | SELECT | Gruppenproduktivität fürZiel | gültigeHistorie | PROV |
| 3521-D067 | Personen.PersonID | SELECT | Provisionsausgabe freigegeben | beide1,keinAktivfilter | PROV |
| 3521-D068 | Personen.WebZerf_info_prov | SELECT | Provisionsausgabe freigegeben | beide1,keinAktivfilter | PROV |
| 3521-D069 | Personen.WebZerf2 | SELECT | Provisionsausgabe freigegeben | beide1,keinAktivfilter | PROV |
Teststatus und Pflege
Keine Laufzeit-/Live-Schema-/Lieferformat-Abnahme, keine Codekorrektur. Q02 gilt für kundenspezifische Trigger/Constraints/DLLs/Jobs; weitere Grenzen siehe oben und Fragen (interne Referenz). Nicht indizierte Folgefelder einer Teilanalyse sind unbekannt, nicht wirkungslos.
Gemeinsame Nebenwirkungen BASE
Block17 ergänzt explizit5314/5315/5316/5317/5318/5319/5323/5324/5325/5326/5327/5328/6000/6006/6007/6008/6009. Alle nutzen BASE-Start/Ende;6001/6002/6003/6004/6005 verwenden LEGACY statt BASE. Fachverträge jeID, keine automatische gemeinsame Kunden-/Dateiwirkung.
Stand: 2026-10-02 · Commit f1d82a003b62f2658f06eaa943dc685ab219bdf3. Gilt ausdrücklich für Block 01: 1012, 1013, 1016, 1017, 1018, 1019, 1079, 1080, 1082, 2016 sowie Block 02: 2011, 2012, 2014, 2015, 2017, 2018, 2019, 2033, 2034, 2041 sowie Block 03: 1057, 1058, 1059, 1060, 2030, 2035, 2040, 2042, 2044 sowie Block 04: 2053, 2054, 1081, 2031, 2052 sowie Block 05: 2045, 2050 sowie Block 06: 3044, Block 08: 1010, 1011, 1015 und Block 10: 1047, 1051 sowie Block 12: 1064. 2024, 1020, 1030, 1048, 1049, 1050, 1052, 1053, 1054, 1061, 1062 und 1063 verwenden diese Basis nicht. 1078 enthält die gleichversionierten Beziehungen weiterhin in seiner Einzelbeschreibung; keine Doppelzählung für 1078. Kein Test-/Deploymentnachweis.
Block 13 ergänzt ausdrücklich 1065,1066,1068,1069,1071,1072,1074: aktive Implementierungen bzw. Hilfsinstanzen erben BASE und rufen Start/Ende auf. Bei 1074 ist AusführungEnde nur bei unbehelligtem Abschluss erreichbar; Ressourcen-/DB-/SP-Fehler können es überspringen. 1067/1070/1073 verwenden direkte LEGACY-Meldungen.
Block14 ergänzt ausdrücklich 1104,1105,1106,1108,1109,1150,1210,1214,1215,1222. Aktive Klassen/Instanzen erben BASE und starten/beenden den Lauf; ungefangene Fehler können das Ende überspringen. Nur gemeinsame Rückmeldung, keine Gesamttransaktion oder erfolgreiche Fachwirkung. 1203 hat keinen BASE-/LEGACY-Pfad.
Block15 ergänzt ausdrücklich 2025/2026/2027/2049 mit erreichbarem Instanz-Start/Ende. Die aktiven Veraltet-Stubs 2028/2029/2032/2046/2047/2048 nutzen trotz Klassenvererbung nur den direkten LEGACY-Meldepfad; keine BASE-Ausführung. 2022 hat keinen Delegate.
Reichweite und Wiederverwendung
Block16 ergänzt ausdrücklich 2051/2055/3043/3512/3513/3520/3521/3522. WebZerf2 nutzt Multi-Start/Ende mit BASE je Teilstufe; IsMultiSchnitt reduziert Dialoge, nicht Mail-/API-Wirkungen. Nach Fehlern können weitere Teilstufen starten. 3011 ohne Delegate;3031/3032/3041/3042/3060/3500 nur LEGACY.
Die ausdrücklich zugeordneten Programmregistrierungen mit ihren Implementierungen erben cSchnitt_Basis und rufen AusführungStart/AusführungEnde auf. Gemeinsam geprüfte Basisklasse/Registrierung; Mail-/Logging-/API-Details aus der dokumentierten Pilotprüfung desselben Commits wiederverwendet. Nicht automatisch auf jede zukünftige Schnittstelle übertragen: Erreichbarkeit, Overrides, Sonderpfade und Quellenstand jeweils prüfen.
Start setzt Status/Protokoll zurück. Fehlerstatus steigt nur (0→1→2). Fehlerfrei() ist True nur bei Status 0. SILENT unterdrückt die Startanzeige und beendet AusführungEnde sofort. MANUELL wird über Schlüsselinzidenz erkannt, unterdrückt direkte Mail und API-sendmail, nicht die API-Meldung selbst. MAILTO leer → MAIL_SCHNITTSTELLETO. Bei nicht lokal gefangener Exception kann der Abschluss ausfallen (besonders 1079/1082); 2016 hat einen getrennten Rückgabe-/Fehlerstatusbefund; 2017 reicht ebenfalls den Instanzstatus nicht als Shared-Rückgabe durch. 1057–1060 besitzen untypisierte Shared-Einstiege ohne Return (Nothing) und übernehmen Modul nicht; Instanz-Abschluss separat betrachten. Die acht Exporte aus Block 02/03 verwenden cSchnittExport mit Start/Ende.
Erfolg: OnSuccess; Fehlerstatus 1: OnSuccess ODER OnError; Stoppstatus 2: OnError. Mail nur nicht MANUELL und nicht SILENT; API wird sonst unabhängig vom sendmail-Schalter aufgerufen. Direkte Mail speichert Body/Outbox in eigener Transaktion (keine Fachimporttransaktion). SendOutbox(5) kann ältere fällige Schnittstellenmails versenden und deren Anhänge lesen; diese Fachpfade erzeugen selbst keine Anhänge. SMTP-Testadresse kann Zieladresse ersetzen. Mail-/API-Ergebnis ist kein verlässlicher Bestandteil von Fehlerfrei().
Einstellungen
| Beziehung | Schlüssel / Variable | Default | Einfluss | Wirkung | Beleg |
|---|---|---|---|---|---|
| BASE-S001 | MAIL_SCHNITTSTELLEONSUCCESS / MAIL_SchnittstelleOnSuccess | False | Basis | Direkte Mail bei Result 0 oder1, nicht MANUELL/SILENT | BASE:BASE, BASE:SET |
| BASE-S002 | MAIL_SCHNITTSTELLEONERROR / MAIL_SchnittstelleOnError | False | Basis | Direkte Mail bei Result 1 oder2, nicht MANUELL/SILENT | BASE:BASE, BASE:SET |
| BASE-S003 | SCHNITT_MELDUNG_SchnittstelleOnSuccess / SCHNITT_MELDUNG_SchnittstelleOnSuccess | False | Basis/API | sendmail=1 bei Result 0 oder1, nicht MANUELL/SILENT; API-Meldung sonst weiterhin sendmail=0 | BASE:BASE, BASE:SET |
| BASE-S004 | SCHNITT_MELDUNG_SchnittstelleOnError / SCHNITT_MELDUNG_SchnittstelleOnError | True | Basis/API | sendmail=1 bei Result 1 oder2, nicht MANUELL/SILENT | BASE:BASE, BASE:SET |
| BASE-S005 | MAIL_SCHNITTSTELLETO / MAIL_SchnittstelleTo | leer | Ersatz bei leerem MAILTO; Semikolonliste | BASE:MAIL, BASE:SET | |
| BASE-S006 | MAIL_SMTP_SERVER / MAIL_SMTPServer | leer | SMTP | Server für direkten Versand | BASE:MAIL, BASE:SET |
| BASE-S007 | MAIL_USER / MAIL_User | leer | SMTP | Nichtleer setzt NetworkCredential und überschreibt Defaultcredentials | BASE:MAIL, BASE:SET |
| BASE-S008 | MAIL_PASS / MAIL_Pass | leer; verschlüsselte Einstellung | SMTP | Passwort für explizite Credentials; kein Geheimnis dokumentiert | BASE:MAIL, BASE:SET |
| BASE-S009 | MAIL_USEDEFAULTCREDENTIALS / MAIL_UseDefaultCredentials | False | SMTP | SmtpClient.UseDefaultCredentials; ggf. durch MAIL_USER überschrieben | BASE:MAIL, BASE:SET |
| BASE-S010 | MAIL_SSL / MAIL_SSL | True | SMTP | SmtpClient.EnableSsl | BASE:MAIL, BASE:SET |
| BASE-S011 | MAIL_TESTADRESSE / MAIL_TestAdresse | nichtleere Testadresse im Quellcode (Wert bewusst nicht kopiert) | SMTP | Nichtleer ersetzt tatsächlichen To-Empfänger, auch wenn MAILTO gesetzt | BASE:MAIL, BASE:SET |
| BASE-S012 | MAIL_FROM / MAIL_From | leer | SMTP | Absenderadresse | BASE:MAIL, BASE:SET |
| BASE-S013 | MAIL_FROM_NAME / MAIL_FromName | leer | SMTP | Absendername | BASE:MAIL, BASE:SET |
| BASE-S014 | GLOBAL_LOGLEVEL / GLOBAL_LOGLEVEL | 50 | Logging | Persistenz bei InfoLevel>=Schwelle; Start/Erfolg51, ImportError102 | BASE:INIT, BASE:LOG, BASE:SET |
| BASE-S015 | GLOBAL_LOGLEVELEVLOG / GLOBAL_LOGLEVELEVENTLOG | 0 | Logging | Eventlog bei Level>Schwelle, Schwelle>0 und Level<200 | BASE:INIT, BASE:LOG, BASE:SET |
Datenbeziehungen
DB-Rolle Anmeldung; Logging über cInfoTools-Verbindung. Keine Geheimnisse/Livewerte. Indizes verknüpfen jede Mitglieds-ID mit diesen Beziehungen, auch wenn die Details nur einmal stehen.
| Beziehung | Tabelle.Feld | Operation | Datenfluss / Verwendung | Bedingung | Beleg |
|---|---|---|---|---|---|
| BASE-D001 | Dokumente.oFilename | INSERT | MAIL_BODY | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D002 | Dokumente.oFilesize | INSERT | Byteanzahl Body | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D003 | Dokumente.Daten | INSERT | cFn.StringToByteArray(MailBody) | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D004 | Dokumente.UserID | INSERT | dbo.fnUserId() | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D005 | Dokumente.ts | INSERT | getdate() | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D006 | Outbox.mTo | INSERT | MAILTO oder MAIL_SCHNITTSTELLETO; je Semikolonadresse | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D007 | Outbox.mCc | INSERT | leer | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D008 | Outbox.mFrom | INSERT | leer | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D009 | Outbox.mSubject | INSERT | Statusabhängiger Betreff | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D010 | Outbox.mBodyID | INSERT | ID des gespeicherten Bodys | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D011 | Outbox.mBodyHtml | INSERT | False | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D012 | Outbox.mDelayUntil | INSERT | getdate() | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D013 | Outbox.mStatus | INSERT | 1 | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D014 | Outbox.mSize | INSERT | Bodyzeichenanzahl (ohne Anhänge) | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D015 | Outbox.refArt | INSERT | 0 | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D016 | Outbox.RefID | INSERT | 0 | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D017 | Outbox.MailArt | INSERT | 5 (SchnittstellenMeldung) | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D018 | Outbox.UserID | INSERT | fnUserId() | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D019 | Outbox.ts | INSERT | getdate() | Direkte Rückmeldung aktiviert | BASE:MAIL |
| BASE-D020 | Outbox.ID | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D021 | Outbox.mFrom | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D022 | Outbox.mTo | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D023 | Outbox.mCc | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D024 | Outbox.mBodyID | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D025 | Outbox.mSubject | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D026 | Outbox.mBodyHtml | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D027 | Outbox.mStatus | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D028 | Outbox.mDelayUntil | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D029 | Outbox.MailArt | SELECT | SendOutbox(5): fällige Mails; auch frühere Outbox-Einträge derselben MailArt | Versandpfad | BASE:MAIL |
| BASE-D030 | Outbox.mSent | UPDATE | Erfolg → getdate() | Versandpfad | BASE:MAIL |
| BASE-D031 | Outbox.mStatus | UPDATE | Erfolg → 0; Fehler → +1, bei Status 20 pauschal -1 ohne WHERE | Versandpfad | BASE:MAIL |
| BASE-D032 | Outbox.mDelayUntil | UPDATE | Fehler → Staffel 2/5/10/30 Minuten; ab Status 12 CASE ohne ELSE → NULL | Versandpfad | BASE:MAIL |
| BASE-D033 | Dokumente.ID | SELECT | Body/Anhänge laden | Versandpfad | BASE:MAIL, BASE:DOC |
| BASE-D034 | Dokumente.oFilename | SELECT | Body/Anhänge laden | Versandpfad | BASE:MAIL, BASE:DOC |
| BASE-D035 | Dokumente.Daten | SELECT | Body/Anhänge laden | Versandpfad | BASE:MAIL, BASE:DOC |
| BASE-D036 | OutboxAttachment.OutBoxID | SELECT | Anhangszuordnung; diese Basisaufrufe erstellt selbst keine Anhänge | SendOutbox kann ältere Mailart-5-Einträge versenden | BASE:MAIL |
| BASE-D037 | OutboxAttachment.DokumenteID | SELECT | Anhangszuordnung; diese Basisaufrufe erstellt selbst keine Anhänge | SendOutbox kann ältere Mailart-5-Einträge versenden | BASE:MAIL |
| BASE-D038 | Pep3Log.UserID | INSERT | fnUserId() | InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich | BASE:LOG |
| BASE-D039 | Pep3Log.Datum | INSERT | getdate() | InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich | BASE:LOG |
| BASE-D040 | Pep3Log.Kurz | INSERT | Kurztext max255 | InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich | BASE:LOG |
| BASE-D041 | Pep3Log.LogText | INSERT | Protokoll | InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich | BASE:LOG |
| BASE-D042 | Pep3Log.Modul | INSERT | Modulname max50 | InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich | BASE:LOG |
| BASE-D043 | Pep3Log.InfoLevel | INSERT | Start/Erfolg=51; Importfehler=102; weitere Mail-Meldungen | InfoLevel >= GLOBAL_LOGLEVEL, DB-Logging möglich | BASE:LOG |
| BASE-D044 | tblUser.Name | SELECT | fnUserId: min(UserID) WHERE Name=RIGHT(SUSER_NAME(),25), sonst 0 | Mail-/Logpersistenz | BASE:USER |
| BASE-D045 | tblUser.UserID | SELECT | fnUserId: min(UserID) WHERE Name=RIGHT(SUSER_NAME(),25), sonst 0 | Mail-/Logpersistenz | BASE:USER |
Weitere Ausgänge und Grenzen
Logdateien unter ApplicationData/PEP/LogFiles; kontextabhängig Windows-Eventlog. Start/Erfolg InfoLevel 51, Importfehler 102; Schwellen beeinflussen Persistenz. SQL-fnUserId liest tblUser anhand RIGHT(SUSER_NAME(),25). API Send(MELDUNG) nutzt Anmeldungskontext und fest codierten Endpoint; dessen Serverimplementierung fehlt in dieser Quellenbasis (Q01).
Bekannte gemeinsame Befunde aus Pilot: Outbox-Retry bei Status 20 setzt mStatus=-1 ohne WHERE; Retry-CASE ab Status 12 ohne ELSE → NULL. Nicht korrigiert. Keine Kundendaten oder Zugangswerte übertragen.
Quellenverzeichnis
| Kürzel | Quelldatei am geprüften Commit |
|---|---|
| E | PEP4/ZW/Allgemein.vb |
| P | PEP4/cSchnittstellen/Programme/cProgramme.vb |
| PRJ | PEP4/cSchnittstellen/cSchnittstellen.vbproj |
| B | PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnittWebZerf2.vb |
| SAL | Sqlfiles/PEP4Functions/webzerf_saldo.sql |
| PLAN | Sqlfiles/PEP4Functions/webzerf_planung.sql |
| PROV | Sqlfiles/PEP4Functions/webzerf_provision_01.sql |
| ES | Sqlfiles/PEP4Functions/GetEinstellungZw.sql |
| SET, BASE:SET | PEP4/ZW/Einstellungen/cEinstellungenZw.vb |
| BASE:BASE | PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnitt_Basis.vb |
| BASE:MAIL | PEP4/cKommunikation/cMail.vb |
| BASE:API | PEP4/cSchnittstellen/cApiCall.vb |
| BASE:LOG | PEP4/cTools/cInfoTools.vb |
| BASE:INIT | PEP4/ZW/Einstellungen/cSetting.vb |
| BASE:USER | Sqlfiles/PEP4Functions/fnUserId.sql |
| BASE:DOC | PEP4/cHilfsprogramme/cDocument.vb |
Siehe auch: Übersicht der Schnittstellen. Keine Ausführung oder Codekorrektur.