New-SqlWhereForBreadcrumb #
ÜBERSICHT #
Erzeugt eine SQL-WHERE-Bedingung aus drei Breadcrumb-Listen (UND, ODER, NICHT) für den EULANDA-Merkmalbaum.
SYNTAX #
New-SqlWhereForBreadcrumb [-TableName] <string> [[-AndPathList] <string[]>] [[-OrPathList]
<string[]>] [[-NotPathList] <string[]>] [-Conn] <__ComObject> [[-IdExpression] <string>]
[[-SchemaName] <string>] [[-DatabaseName] <string>] [-Pretty] [-IgnoreMissingPath]
[[-TableAlias] <string>] [<CommonParameters>]
BESCHREIBUNG #
Die Funktion nimmt drei Listen mit Breadcrumb-Pfaden (UND / ODER / NICHT) und löst diese gegen den EULANDA-Merkmalbaum auf.
Pro Breadcrumb-Pfad wird der zugehörige Merkmalknoten ermittelt. Danach werden alle untergeordneten Endknoten (MerkmalTyp 1 und 2) eingesammelt. Für diese Endknoten gilt:
- Wenn SqlBedingung gefüllt ist, wird diese Bedingung direkt als SQL-Prädikat verwendet.
- Sonst wird ein Merkmalelement-Prädikat erzeugt:
IN (SELECT ObjektID FROM WHERE KopfID IN (…))
Aus den Prädikaten wird die Logik aufgebaut:
- UND: alle Prädikate müssen zutreffen
- ODER: mindestens eins der Prädikate muss zutreffen
- NICHT: keines der Prädikate darf zutreffen (NOT ( … OR … ))
PARAMETER #
-TableName #
Type: string
Tabellenname im EULANDA-Merkmalbaum, z.B. ‘Adresse’, ‘Artikel’, ‘Rechnung’.
-AndPathList #
Type: string[]
Default: @()
Liste von Breadcrumb-Pfaden, die als UND verknüpft werden.
-OrPathList #
Type: string[]
Default: @()
Liste von Breadcrumb-Pfaden, die als ODER-Gruppe verknüpft werden.
-NotPathList #
Type: string[]
Default: @()
Liste von Breadcrumb-Pfaden, die als NICHT-Gruppe verknüpft werden.
-Conn #
Type: __ComObject
Offene ADODB-Verbindung zur EULANDA-Datenbank.
-IdExpression #
Type: string
Default: 'id'
SQL-Ausdruck für das Objekt-ID-Feld im Kontext der späteren Abfrage. Default ist ‘id’, aber auch mit Prefix wie ‘a.Id’ wäre möglich.
-SchemaName #
Type: string
Default: 'dbo'
Schema für Merkmal- und Merkmalelement-Tabelle. Default ‘dbo’.
-DatabaseName #
Type: string
Default: ''
Optionaler Datenbankname für die Qualifizierung der Tabellen. Wenn leer, wird versucht den Katalognamen aus der ADO-ConnectionString zu lesen. Wenn das nicht klappt, wird ohne Datenbankpräfix gearbeitet.
-Pretty #
Type: switch
Formatiert die Ausgabe mit Zeilenumbrüchen und Einrückung.
-IgnoreMissingPath #
Type: switch
Wenn gesetzt, werden nicht auflösbare Pfade still übersprungen (sonst Throw).
AUSGABEN #
string
SQL-WHERE-Bedingung (ohne führendes WHERE).
BEISPIELE #
# Gleiche Logik, aber mit Alias in deiner späteren Abfrage
$where = New-SqlWhereForBreadcrumb -TableName 'Adresse' -AndPathList '\ADRESSEN\A' -Conn $conn -IdExpression 'a.Id'
# Erstellt eine SQL-WHERE-Klausel aus Breadcrumb-Pfaden mit AND-, OR- und NOT-Logik
$udl = 'C:\Config\Database.udl'
$conn = Get-ConnByUdl -Udl $udl
$andPathList = @(
'\Products\Active'
)
$orPathList = @(
'\Products\New',
'\Products\Extensions\Deprecated'
)
$notPathList = @(
'\Products\Legacy'
)
$where = New-SqlWhereForBreadcrumb `
-TableName 'Address' `
-AndPathList $andPathList `
-OrPathList $orPathList `
-NotPathList $notPathList `
-Conn $conn `
-IdExpression 'Id' `
-Pretty
$sql = "SELECT * FROM Address WHERE $where"
HINWEISE #
Der Merkmalbaum ist hierarchisch aufgebaut. Jeder Merkmalknoten besitzt einen eindeutigen Pfad (Breadcrumb), der seine Position im Baum beschreibt und zur eindeutigen Adressierung verwendet wird.