Inhaltsverzeichnis
Schnittstelle 8201: Personal-Infomails erzeugen und Outbox senden
Dokumentiert / statisch geprüft: 2026-10-02. Statisch dokumentiert; Nutzerprüfung offen. Keine Schnittstelle ausgeführt.
Identität und Quellenstand
eProgramm.InfoMailVersonden = 8201. Aktive feste Registrierung → cProgramme.InfoMailSenden (E,P). Registrierung und erreichbare Quellen geprüft; installierte Binärdateien ungeprüft. 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.
Empfänger, Fachwerte und HTML
Kein Parameter/File. BASE→cInfoMails.Senden→UserListeInfoMail(), je Benutzer INFOMAIL_PersonenInfo(@UserID)→MailToOutbox. UserListeInfoMail nutzt Programm12004 direkt oder per Gruppe, ersetzt Benutzer durch Vertreter falls gesetzt und wählt aktive tblUser. Mail darf leer sein; nur DBNull wird ausgeschlossen.
RechtePersonen ermittelt alle Personen für aktive Admins, ansonsten Standardrecht2 oder0 bei SEC_AutoDenyAccess/Restriktionsart1, Vertreter-/Gruppen-/Benutzereinschränkungen mit Prio und maximalem Recht. Geprüfte Zweige: ParamArt0 alle,10 Filiale,11 Abteilung,12 Hierarchie,20 Filiale/Abteilung,22 Hierarchie/Abteilung,30 Filialgruppen,31 PEP-Gruppe,40 Person. Kein Update fachlicher Rechte-/Personentabellen.
Saldo = SUM(BerechneteZeiten.TagesSaldo) bis SQL-gestern, ohne Personen.KorrekturSaldo oder LaufenderSaldo-Grenze. Offene Anträge zählt unbearbeitete aller Tage. Wochenwarnungen aus CStatus0/Meldung mit Codes8/14. Wochenzeit/negative Fehlerzahl liefert SQL, VB zeigt sie nicht an. HTML zeigt Personalnummer, Name, Saldo0.0, Antrags-/Warnzählung als '#' (0 leer), Rahmen fett und Maxverletzung rot. Namen ungeescaped. VB-Wochenstart Monday vs SQL-DATEPART abhängig DATEFIRST können unterschiedliche Zeiträume ergeben.
Queue und weitere Wirkung
MailToOutbox schreibt Dokumente und Outbox in eigener Transaktion, Body Encoding.Default; @@IDENTITY statt SCOPE_IDENTITY kann bei Triggern fremde ID liefern. Kein Anhanginsert für diesen Aufruf. Enqueuefehler zeigt Dialog, wird nicht an Aufrufer als fataler Fehler zurückgegeben.
Nach einer Sekunde SendOutbox(AlleMails), also auch bereits vorhandene fremde Queuearten, nicht nur erzeugte Infomails. Versandbool ignoriert. Shared cInfoMails.Senden hat kein Return; BASE ignoriert dieses False und kann Fehlerfrei melden. GenerateAntragInfo ist auskommentiert: dessen ANTRAG_AntragslisteSub ist hier KEIN erreichbarer Aufruf. Keine Berechnung, vorhandene Salden/Status vorausgesetzt.
SMTP-Vertrag und Wiederholung
cMail.SendOutbox wählt TOP1 ohne ORDER BY oder Claim/Lock. Nur mStatus>0 und mDelayUntil<SQLGETDATE; MAILART=-1 akzeptiert alle Arten. Leere Queue ergibt True, ein Versandfehler macht den Gesamtlauf False. SMTP-Erfolg setzt mSent=GETDATE,mStatus=0; Fehler erhöht Status und verschiebt um 2/5/10/30 Minuten. Ab Status12 liefert CASE ohne ELSE NULL für mDelayUntil: Auftrag wird nicht mehr ausgewählt. Bei vorgegebenem Status19 führt nächster Fehler zu20 und UPDATE Outbox SET mStatus=-1 OHNE WHERE – alle Aufträge betroffen.
Kein atomarer Vertrag zwischen SMTP und SQL. Nach erfolgreichem SMTP, aber fehlgeschlagenem Statuswrite sind Doppelversände möglich; konkurrierende Worker können denselben TOP1-Auftrag versenden. Keine Mail tatsächlich gesendet.
SMTP-Absender stammt aus globalen MAIL_FROM/MAIL_FROM_NAME; Outbox.mFrom/mFromName dienen ReplyTo. Testadresse überschreibt nur To, nicht CC. Adressen werden an Komma/Semikolon/Leerzeichen getrennt; die CC-Schleife verwendet fehlerhaft jeweils den kompletten mCc statt des einzelnen Elements. Mehrfach-CC kann dadurch scheitern.
Body aus Dokumente.Daten wird mit Encoding.Default in String verwandelt. GetDocumentFromDb setzt den ByRef-Bytepuffer bei fehlender Zeile/abgefangenem Fehler nicht zurück; da der Puffer über Queuezeilen weiterlebt, kann der vorige Body erneut verwendet werden. Anhanglesen setzt seine Liste zurück, kann aber nach abgefangenem Fehler unvollständig bleiben. HTML-Aufbereitung bricht am letzten '>' ab; nachfolgender Klartext kann fehlen. Anhänge werden als application/octet-stream aus MemoryStream hinzugefügt. MAIL_USEMAIL/Signatur/Verzögerungseinstellung sind keine hier nachgewiesenen Gates; SQL-Befehle verwenden Standardtimeout.
Einstellungen und gemeinsame Nebenwirkungen
Gemeinsames Profil: BASE (interne Referenz).
| Beziehung | Schlüssel / Variable | Default | Einflussweg | Wirkung | Beleg |
|---|---|---|---|---|---|
| 8201-S001 | MAIL_SMTP_SERVER / MAIL_SMTPServer | „“ | cMail.SendMail | SMTP-Ziel | MAIL,ZW |
| 8201-S002 | MAIL_USER / MAIL_User | (Wert bewusst nicht dokumentiert) | cMail.SendMail | Anmeldungsname | MAIL,ZW |
| 8201-S003 | MAIL_PASS / MAIL_Pass | (Wert bewusst nicht dokumentiert) | cMail.SendMail | Entschlüsseltes Passwort; Wert nicht veröffentlichen | MAIL,ZW |
| 8201-S004 | MAIL_USEDEFAULTCREDENTIALS / MAIL_UseDefaultCredentials | False | cMail.SendMail | Windows-/Standardcredentials statt NetworkCredential | MAIL,ZW |
| 8201-S005 | MAIL_SSL / MAIL_SSL | True | cMail.SendMail | EnableSsl | MAIL,ZW |
| 8201-S006 | MAIL_TESTADRESSE / MAIL_TestAdresse | (Wert bewusst nicht dokumentiert) | cMail.SendMail | Überschreibt nur To, nicht CC | MAIL,ZW |
| 8201-S007 | MAIL_FROM / MAIL_From | „“ | cMail.SendMail | SMTP-Absender | MAIL,ZW |
| 8201-S008 | MAIL_FROM_NAME / MAIL_FromName | „“ | cMail.SendMail | Anzeigename | MAIL,ZW |
| 8201-S009 | SEC_AutoDenyAccess / SEC_AutoDenyAccess | False | SQL RechtePersonen→GetEinstellungZw | Standardrecht, Restriktions-/Vertreterdurchläufe; SQL liest Rohwert unabhängig VB-Validierung | RIGHTS,ZW |
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 |
|---|---|---|---|---|---|
| 8201-D001 | Outbox.ID | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D002 | Outbox.mStatus | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D003 | Outbox.mDelayUntil | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D004 | Outbox.MailArt | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D005 | Outbox.mFrom | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D006 | Outbox.mFromName | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D007 | Outbox.mTo | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D008 | Outbox.mCc | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D009 | Outbox.mBodyID | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D010 | Outbox.mSubject | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D011 | Outbox.mBodyHtml | SELECT | TOP1 sendbarer Auftrag | mStatus>0, Delay<SQLGETDATE, MAILART/-1; ohne Order/Lock | |
| 8201-D012 | Outbox.mSent | UPDATE | Erfolg oder Wiederholungsstatus | Erfolg mStatus0; Fehler Status+1 und Staffelverzögerung | |
| 8201-D013 | Outbox.mStatus | UPDATE | Erfolg oder Wiederholungsstatus | Erfolg mStatus0; Fehler Status+1 und Staffelverzögerung | |
| 8201-D014 | Outbox.mDelayUntil | UPDATE | Erfolg oder Wiederholungsstatus | Erfolg mStatus0; Fehler Status+1 und Staffelverzögerung | |
| 8201-D015 | Outbox.mStatus | UPDATE | Abbruch nach Status20 | UPDATE ohne WHERE setzt alle Outboxzeilen auf -1 | |
| 8201-D016 | Dokumente.ID | SELECT | Body und Anhangbytes | Body ID=mBodyID; Anhänge per Join | MAIL,DOC |
| 8201-D017 | Dokumente.oFilename | SELECT | Body und Anhangbytes | Body ID=mBodyID; Anhänge per Join | MAIL,DOC |
| 8201-D018 | Dokumente.Daten | SELECT | Body und Anhangbytes | Body ID=mBodyID; Anhänge per Join | MAIL,DOC |
| 8201-D019 | OutboxAttachment.OutboxID | SELECT | Anhänge zum Auftrag | Fehler kann nur Teilmenge ergeben | |
| 8201-D020 | OutboxAttachment.DokumenteID | SELECT | Anhänge zum Auftrag | Fehler kann nur Teilmenge ergeben | |
| 8201-D021 | tblUser.UserID | SELECT | UserListeInfoMail Empfänger; Vertretung/Rechte | Programm12004, aktive Empfänger, Mail nichtDBNULL (Leerwert nicht ausgeschlossen) | USERS,RIGHTS |
| 8201-D022 | tblUser.Vertreter | SELECT | UserListeInfoMail Empfänger; Vertretung/Rechte | Programm12004, aktive Empfänger, Mail nichtDBNULL (Leerwert nicht ausgeschlossen) | USERS,RIGHTS |
| 8201-D023 | tblUser.Aktiv | SELECT | UserListeInfoMail Empfänger; Vertretung/Rechte | Programm12004, aktive Empfänger, Mail nichtDBNULL (Leerwert nicht ausgeschlossen) | USERS,RIGHTS |
| 8201-D024 | tblUser.Mail | SELECT | UserListeInfoMail Empfänger; Vertretung/Rechte | Programm12004, aktive Empfänger, Mail nichtDBNULL (Leerwert nicht ausgeschlossen) | USERS,RIGHTS |
| 8201-D025 | tblUser.NameShown | SELECT | UserListeInfoMail Empfänger; Vertretung/Rechte | Programm12004, aktive Empfänger, Mail nichtDBNULL (Leerwert nicht ausgeschlossen) | USERS,RIGHTS |
| 8201-D026 | qUserProgrammRechte.Programm | SELECT | Empfängerkandidaten | Direkter oder Gruppen-Eintrag12004; Admin allein ohne Eintrag nicht automatischer Empfänger | USERS |
| 8201-D027 | qUserProgrammRechte.UserID | SELECT | Empfängerkandidaten | Direkter oder Gruppen-Eintrag12004; Admin allein ohne Eintrag nicht automatischer Empfänger | USERS |
| 8201-D028 | qUserProgrammRechte.UserGroupID | SELECT | Empfängerkandidaten | Direkter oder Gruppen-Eintrag12004; Admin allein ohne Eintrag nicht automatischer Empfänger | USERS |
| 8201-D029 | UserInGroups.UserID | SELECT | Gruppenkandidaten und Einschränkungs-Fallback | Programm12004/0 im Rechtepfad | USERS,RIGHTS |
| 8201-D030 | UserInGroups.UserGroupID | SELECT | Gruppenkandidaten und Einschränkungs-Fallback | Programm12004/0 im Rechtepfad | USERS,RIGHTS |
| 8201-D031 | UserInGroups.Filiale | SELECT | Gruppenkandidaten und Einschränkungs-Fallback | Programm12004/0 im Rechtepfad | USERS,RIGHTS |
| 8201-D032 | UserInGroups.Abteilung | SELECT | Gruppenkandidaten und Einschränkungs-Fallback | Programm12004/0 im Rechtepfad | USERS,RIGHTS |
| 8201-D033 | UserInGroups.Gruppe | SELECT | Gruppenkandidaten und Einschränkungs-Fallback | Programm12004/0 im Rechtepfad | USERS,RIGHTS |
| 8201-D034 | UserInGroups.Person | SELECT | Gruppenkandidaten und Einschränkungs-Fallback | Programm12004/0 im Rechtepfad | USERS,RIGHTS |
| 8201-D035 | ProgrammEinschraenkung.Einschraenkung | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D036 | ProgrammEinschraenkung.ParamArt | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D037 | ProgrammEinschraenkung.Wert1 | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D038 | ProgrammEinschraenkung.Wert2 | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D039 | ProgrammEinschraenkung.Wert3 | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D040 | ProgrammEinschraenkung.Wert4 | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D041 | ProgrammEinschraenkung.Prio | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D042 | ProgrammEinschraenkung.UserID | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D043 | ProgrammEinschraenkung.UserGroupID | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D044 | ProgrammEinschraenkung.Programm | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D045 | ProgrammEinschraenkung.Art | SELECT | Personenrechte mit priorisierten Regeln | Repräsentierte Benutzer sowie Gruppen-/Benutzerrechte; XArt-Argument nicht genutzt | RIGHTS |
| 8201-D046 | Personen.PersonID | SELECT | Berechtigte Personalzeilen/HTML | RechtePersonen(12004,user,-1,SQLNow,SQLNow,0), Recht>0 | PERSON,RIGHTS |
| 8201-D047 | Personen.Nachname | SELECT | Berechtigte Personalzeilen/HTML | RechtePersonen(12004,user,-1,SQLNow,SQLNow,0), Recht>0 | PERSON,RIGHTS |
| 8201-D048 | Personen.Vorname | SELECT | Berechtigte Personalzeilen/HTML | RechtePersonen(12004,user,-1,SQLNow,SQLNow,0), Recht>0 | PERSON,RIGHTS |
| 8201-D049 | Personen.PersonID | SELECT | Adminrechte alle Personen | Aktiver Admin; kein genereller Personen-Aktivfilter | RIGHTS |
| 8201-D050 | ITORGA.PersonenStammID | SELECT | Organisations-Einschränkungen | Gültigkeit pro Regel; nicht jeder Regeltyp nutzt gleiche bis-Spalte | RIGHTS |
| 8201-D051 | ITORGA.Filiale | SELECT | Organisations-Einschränkungen | Gültigkeit pro Regel; nicht jeder Regeltyp nutzt gleiche bis-Spalte | RIGHTS |
| 8201-D052 | ITORGA.Abteilung | SELECT | Organisations-Einschränkungen | Gültigkeit pro Regel; nicht jeder Regeltyp nutzt gleiche bis-Spalte | RIGHTS |
| 8201-D053 | ITORGA.Hierarchiestufe | SELECT | Organisations-Einschränkungen | Gültigkeit pro Regel; nicht jeder Regeltyp nutzt gleiche bis-Spalte | RIGHTS |
| 8201-D054 | ITORGA.von | SELECT | Organisations-Einschränkungen | Gültigkeit pro Regel; nicht jeder Regeltyp nutzt gleiche bis-Spalte | RIGHTS |
| 8201-D055 | ITORGA.bis | SELECT | Organisations-Einschränkungen | Gültigkeit pro Regel; nicht jeder Regeltyp nutzt gleiche bis-Spalte | RIGHTS |
| 8201-D056 | ITORGA.bis2 | SELECT | Organisations-Einschränkungen | Gültigkeit pro Regel; nicht jeder Regeltyp nutzt gleiche bis-Spalte | RIGHTS |
| 8201-D057 | ITPEP.PersonenStammID | SELECT | Gruppen-Einschränkungen | Regel31 und Gültigkeit | RIGHTS |
| 8201-D058 | ITPEP.PepGruppe | SELECT | Gruppen-Einschränkungen | Regel31 und Gültigkeit | RIGHTS |
| 8201-D059 | ITPEP.von | SELECT | Gruppen-Einschränkungen | Regel31 und Gültigkeit | RIGHTS |
| 8201-D060 | ITPEP.bis2 | SELECT | Gruppen-Einschränkungen | Regel31 und Gültigkeit | RIGHTS |
| 8201-D061 | PepGruppen.ID | SELECT | Filialgruppen-Einschränkung | Regel30 | RIGHTS |
| 8201-D062 | PepGruppen.Filiale | SELECT | Filialgruppen-Einschränkung | Regel30 | RIGHTS |
| 8201-D063 | BerechneteZeiten.Person | SELECT | Saldo bis gestern; Wochenzeit zusätzlich geliefert, nicht dargestellt | SQL-GETDATE/DATEPART; kein KorrekturSaldo/LaufenderSaldofilter im Infomailsaldo | PERSON |
| 8201-D064 | BerechneteZeiten.Datum | SELECT | Saldo bis gestern; Wochenzeit zusätzlich geliefert, nicht dargestellt | SQL-GETDATE/DATEPART; kein KorrekturSaldo/LaufenderSaldofilter im Infomailsaldo | PERSON |
| 8201-D065 | BerechneteZeiten.TagesSaldo | SELECT | Saldo bis gestern; Wochenzeit zusätzlich geliefert, nicht dargestellt | SQL-GETDATE/DATEPART; kein KorrekturSaldo/LaufenderSaldofilter im Infomailsaldo | PERSON |
| 8201-D066 | BerechneteZeiten.Anwesend | SELECT | Saldo bis gestern; Wochenzeit zusätzlich geliefert, nicht dargestellt | SQL-GETDATE/DATEPART; kein KorrekturSaldo/LaufenderSaldofilter im Infomailsaldo | PERSON |
| 8201-D067 | CStatus.PersonenStammID | SELECT | Wochenwarnungen | CStatus0 und Meldungnichtleer, fnVarcharToList Codes8/14; negativeFehlerzahl ungenutzt | PERSON |
| 8201-D068 | CStatus.Datum | SELECT | Wochenwarnungen | CStatus0 und Meldungnichtleer, fnVarcharToList Codes8/14; negativeFehlerzahl ungenutzt | PERSON |
| 8201-D069 | CStatus.CStatus | SELECT | Wochenwarnungen | CStatus0 und Meldungnichtleer, fnVarcharToList Codes8/14; negativeFehlerzahl ungenutzt | PERSON |
| 8201-D070 | CStatus.Meldung | SELECT | Wochenwarnungen | CStatus0 und Meldungnichtleer, fnVarcharToList Codes8/14; negativeFehlerzahl ungenutzt | PERSON |
| 8201-D071 | Anträge.PersonID | SELECT | Offene Anträge | tsBearbeitungNULL, kein Datumsfilter | PERSON |
| 8201-D072 | Anträge.tsBearbeitung | SELECT | Offene Anträge | tsBearbeitungNULL, kein Datumsfilter | PERSON |
| 8201-D073 | Dokumente.oFilename | INSERT | Infomailbody im MailToOutbox-Transaktionsblock | MAIL_BODY; Encoding.Default Bytes, fnUserID; @@IDENTITY statt SCOPE_IDENTITY | |
| 8201-D074 | Dokumente.fileSize | INSERT | Infomailbody im MailToOutbox-Transaktionsblock | MAIL_BODY; Encoding.Default Bytes, fnUserID; @@IDENTITY statt SCOPE_IDENTITY | |
| 8201-D075 | Dokumente.Daten | INSERT | Infomailbody im MailToOutbox-Transaktionsblock | MAIL_BODY; Encoding.Default Bytes, fnUserID; @@IDENTITY statt SCOPE_IDENTITY | |
| 8201-D076 | Dokumente.UserID | INSERT | Infomailbody im MailToOutbox-Transaktionsblock | MAIL_BODY; Encoding.Default Bytes, fnUserID; @@IDENTITY statt SCOPE_IDENTITY | |
| 8201-D077 | Dokumente.ts | INSERT | Infomailbody im MailToOutbox-Transaktionsblock | MAIL_BODY; Encoding.Default Bytes, fnUserID; @@IDENTITY statt SCOPE_IDENTITY | |
| 8201-D078 | Outbox.mTo | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D079 | Outbox.mCc | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D080 | Outbox.mFrom | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D081 | Outbox.mSubject | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D082 | Outbox.mBodyID | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D083 | Outbox.mBodyHtml | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D084 | Outbox.mDelayUntil | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D085 | Outbox.mStatus | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D086 | Outbox.mSize | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D087 | Outbox.RefArt | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D088 | Outbox.RefID | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D089 | Outbox.MailArt | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D090 | Outbox.UserID | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D091 | Outbox.ts | INSERT | PEP4 Infomail in Queue | HTMLTrue,Status1,MailArt0,RefArt/RefID0,keine Anhänge; Delay SQLNow | |
| 8201-D092 | tblUser.UserID | SELECT | fnUserID bei Queueinsert | MINUserID für RIGHT(SUSER_NAME(),25), sonst0 | USER |
| 8201-D093 | tblUser.Name | SELECT | fnUserID bei Queueinsert | MINUserID für RIGHT(SUSER_NAME(),25), sonst0 | USER |
| 8201-D094 | EinstellungenZw.Einstellung | SELECT | SQL-Rohwert SEC_AutoDenyAccess | GetEinstellungZw; kein VB-Validierungshash in Rechte-UDF | RIGHTS |
| 8201-D095 | EinstellungenZw.Wert | SELECT | SQL-Rohwert SEC_AutoDenyAccess | GetEinstellungZw; kein VB-Validierungshash in Rechte-UDF | RIGHTS |
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). Externe Betriebs-/Schemaabweichungen sind nicht durch die statische Analyse ausgeschlossen.
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/Programme/cProgramme.vb |
| INFO | PEP4/cKommunikation/cInfoMail.vb |
| MAIL, BASE:MAIL | PEP4/cKommunikation/cMail.vb |
| DOC, BASE:DOC | PEP4/cHilfsprogramme/cDocument.vb |
| FN | PEP4/cTools/cFn.vb |
| USERS | Sqlfiles/PEP4Functions/UserListeInfoMail.sql |
| PERSON | Sqlfiles/PEP4Functions/INFOMAIL_PersonenInfo.sql |
| RIGHTS | Sqlfiles/PEP4Functions/RechtePersonen.sql |
| LIST | Sqlfiles/PEP4Functions/fnVarcharToList.sql |
| USER, BASE:USER | Sqlfiles/PEP4Functions/fnUserId.sql |
| ZW, BASE:SET | PEP4/ZW/Einstellungen/cEinstellungenZw.vb |
| BASE:BASE | PEP4/cSchnittstellen/Programme/Schnittstellen/cSchnitt_Basis.vb |
| BASE:API | PEP4/cSchnittstellen/cApiCall.vb |
| BASE:LOG | PEP4/cTools/cInfoTools.vb |
| BASE:INIT | PEP4/ZW/Einstellungen/cSetting.vb |
Siehe auch: Übersicht der Schnittstellen. Keine Ausführung oder Codekorrektur.