Source: projects/identity-management/knowledge-base/oim-it-shop-structure-and-availability.md

> Source: projects/identity-management/knowledge-base/oim-it-shop-structure-and-availability.md

OIM IT Shop (DB) — Struktur & Shop-Verfügbarkeit

Ziel: DB-nahe, sandbox-verifizierte Sicht darauf, wie der IT Shop in One Identity Manager 10 (QER) strukturiert ist und wodurch Entitlements/Service Items im Shop sichtbar werden.

Source Priority / Provenance

1. Live sandbox DB (OneIM)im.sandbox.local (SQL Server 2022). Beobachtungen/Queries: 2026-04-27.

2. Sandbox host install/MDK material — u.a.:

3. Vendor docs — Links + Access-Date unten (noch zu ergänzen/zu verifizieren).

1) ITShopOrg ist ein View auf BaseTree

Live DB evidence

Praktische Konsequenz:

2) ITShopInfo ist ein BaseTree-Feld (Codes)

Live DB evidence (Auszug): Im Sandbox-Baum kommen u.a. diese Codes vor:

Live DB snapshot (2026-04-27): Im IT-Shop-Teilbaum (UID_OrgRoot='QER-V-ITShopOrg') sind aktuell:

Trigger/Validation evidence

Details + Belege (live DB + install media):

3) Shop-Struktur (Sandbox Snapshot)

Live DB evidence (2026-04-27): In der Sandbox existieren aktuell 123 BaseTree-Knoten mit UID_OrgRoot='QER-V-ITShopOrg', davon 113 Product Nodes (ITShopInfo='PR') mit gesetztem UID_AccProduct.

Beobachtetes Muster:

SC (Shopping Center) Hinweis: Shipped QER-Prozeduren/Trigger referenzieren ITShopInfo='SC' explizit als “shopping center” (z.B. Shop-Move und Strukturprüfung), auch wenn im Live-Baum der Sandbox aktuell keine SC-Knoten existieren. Evidence: projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-itshopinfo-sc-shopping-center-db-evidence.md.

4) “Shop availability” = Flags + Platzierung + (oft) DBQueue/Procs

In der DB tauchen zwei große Mechanismen auf:

0) Der generische Mechanismus hinter ITShopOrgHas* (wichtig für Troubleshooting)

Live DB evidence (sandbox 2026-04-27): Für viele Entitlement-Typen existiert ein konsistentes Pattern:

Aktueller Sandbox-Status (nur IT-Shop-Subtree gezählt):

Beleg (aktuelle Snapshot-Zahlen): projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-itshopinfo-validation-and-qer-itshop-config-db-evidence.md.

ESet (System Roles) Hinweis (Sandbox Snapshot 2026-04-27):

A) Requestable “Reuse” Objects (QERReuse) + AccProduct

Live DB evidence

Zusatzbeobachtung (Sandbox):

B) “Direct entitlement tables” mit IsForITShop / IsITShopOnly

Live DB evidence

Spalten mit IT-Shop-Flags existieren u.a. in:

Hinweis (Sandbox 2026-04-27): BaseTreeHasADSGroup existiert und hat 385 Rows, davon 194 im IT-Shop-Teilbaum (BaseTree.UID_OrgRoot='QER-V-ITShopOrg'). Die View ITShopOrgHasADSGroup enthält ebenfalls 194 Rows (Placement-Evidence).

Wichtiges Detail (Sandbox 2026-04-27): Nach erfolgter Publikation enthält BaseTreeHasADSGroup in dieser Umgebung pro AD-Gruppe typischerweise zwei Links innerhalb des IT-Shop-Teilbaums:

Evidenz: projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-basetreehasadsgroup-pr-links-and-basetreehasobject-evidence.md.

Configuration Parameter: QER\ITShop\AutoPublish\ADSGroup (Auto-Veröffentlichung vs. manuelle Publikation)

Live DB evidence (DialogConfigParm)

In dieser Sandbox ist Auto-Publish für ADSGroup derzeit deaktiviert:

Zusatzbeobachtungen (wichtig für “supported path”):

Das passt konsistent zu den Beobachtungen (Sandbox 2026-04-27):

Flag enforcement (Trigger/Procs)

Live DB evidence

C) Platzierung von Service Items im IT Shop (Sandbox-Befund)

Live DB evidence

Interpretation (sandbox-spezifisch): In diesem Environment scheint die “Zuordnung Produkt ↔ IT Shop Product Node” primär über BaseTree (PR-Knoten + UID_AccProduct) und “BaseTreeHas<EntitlementType>” Tabellen zu laufen; AccProductInBaseTree wirkt aktuell wie eine ungenutzte/legacy Mapping-Tabelle.

Cross-reference (live DB, 2026-04-27): projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-service-categories-and-accproductinbasetree-db-evidence.md und projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-accproductinbasetree-views-and-trigger-hooks-db-evidence.md.

5) Welche Entitlement-Typen sind “IT-Shop enabled”? → BaseTreeAssign

Live DB evidence

dbo.BaseTreeAssign wirkt wie die “Feature-Matrix”, welche Objekt-/Entitlement-Typen grundsätzlich in Rollen/Organisationen (und damit auch IT Shop) unterstützt werden:

Wichtiges Detail (Sandbox-Schema): BaseTreeAssign enthält nicht direkt TableName, sondern UID_DialogTableElement / UID_DialogTableMN, die in dieser Umgebung auf dbo.DialogTable.UID_DialogTable zeigen. Das ist der stabile Join, um die “Entitlement-Tabelle” und die zugehörige BaseTreeHas<type>-MN-Tabelle zu ermitteln:

SELECT dt.TableName, dtmn.TableName AS MNTable, bta.IsITShopEnabled, bta.IsReusePossible
FROM dbo.BaseTreeAssign bta
JOIN dbo.DialogTable dt ON dt.UID_DialogTable = bta.UID_DialogTableElement
LEFT JOIN dbo.DialogTable dtmn ON dtmn.UID_DialogTable = bta.UID_DialogTableMN
WHERE bta.IsITShopEnabled = 1
ORDER BY dt.TableName;

Cross-reference (live DB evidence, 2026-04-27): projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-it-shop-enabled-types-and-availability-joins-db-evidence.md.

6) Product node creation: QER_PITShopProductNodeCreate(_b)

Live DB evidence

Konkrete Mechanik (aus QER_PITShopProductNodeCreate_b + BaseTreeAssign)

In dieser Sandbox wirkt die “Shop-Verfügbarkeit” (pro Entitlement-Typ) als Kette:

1. BaseTreeAssign.IsITShopEnabled=1 bestimmt, welche Entitlement-Tabellen überhaupt über ITShopOrg/Rollen/Org-Strukturen zuweisbar sind *und* welche MN-Tabelle (BaseTreeHas<type>) verwendet wird (z.B. ADSGroupBaseTreeHasADSGroup).

2. Wenn ein Entitlement einem BO-Shelf zugewiesen ist (Eintrag in BaseTreeHas<type> mit UID_Org=<BO shelf UID>), sorgt die ShoppingRack/NodeCheck-Logik für PR-Knoten:

3. ITShopOrg.UID_AccProduct wird (für PR-Knoten) über QBM_PJobCreate_HOUpdate gesetzt, basierend auf UID_ACCProduct, das aus dem Entitlement-Datensatz gelesen wird (z.B. ADSGroup.UID_AccProduct).

4. Änderungen an AccProduct.UID_AccProductGroup/UID_PWODecisionMethod führen über Trigger (QER_TUAccProduct) zu QER-K-ShoppingRackProductNode DBQueue-Tasks, die PR-Knoten “refreshen”.

Cross-reference (DB + host evidence, 2026-04-27):

Implikation für AutoPublish/Supported Paths:

7) DBQueue / ShoppingRack Tasks (Troubleshooting Entry Point)

Live DB evidence

In dbo.QBMDBQueueTask existieren u.a. folgende Tasks, die im IT-Shop-Kontext auffallen:

Zusatz (live DB evidence, 2026-04-27): In dieser Sandbox sind die meisten QER-K-ShoppingRack* Tasks als bulk-enabled modelliert (QBMDBQueueTask.IsBulkEnabled=1), und Trigger/Prozeduren entscheiden je nach “Load” auch zwischen QBM_PDBQueueInsert_Bulk und QBM_PDBQueueInsert_Single (z.B. ADS_TUAdsGroup).

Hinweis (Sandbox-DB-Schema): QBMDBQueueTask ist primär über UID_Task (z.B. QER-K-ShoppingRack-All) + ProcedureName modelliert; eine separate “TaskName”-Spalte gibt es hier nicht. Für ein Queue-Status-Signal eignet sich z.B. QBM_VDBQueueContent (Aggregat/Metric pro UID_Task).

Zusätzliche Live-Evidence (Task-Details + Reihenfolge): QER-K-ShoppingRackProductNode (QER_ZITShopCheckMethodPR) hat ein eingebautes QueryForRecalculate (… where itshopinfo = N'PR') und ist in dbo.QBMDBQueueTaskDepend u.a. von QER-K-AccProductGroupCollection und QER-K-ShoppingRackMethod abhängig.

Service-Category-Relevanz (shipped SQL, sandbox host): QER_ZITShopCheckMethodPR ruft QER_FTMethodForPRNode auf, welches BaseTree.UID_PWODecisionMethod für PR-Knoten über eine Prioritätskette füllt — u.a. via AccProduct.UID_PWODecisionMethod und über die AccProductGroup Parent-Chain (QER_VACCProductGroupCollection). D.h. AccProductGroup ist in diesem Environment weniger “Availability Gate”, aber kann Entscheidungsmethode/Approval-Logik beeinflussen.

Live DB evidence (sandbox 2026-04-27): Von 16 existierenden PR-Nodes haben 7 AccProduct.UID_AccProductGroup = NULL, aber trotzdem einen PR-Knoten (und BaseTree.UID_PWODecisionMethod ist für alle 16 gesetzt). Details: projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-service-categories-and-preprocessor-gates-db-evidence.md.

Cross-reference: DBQueue insert procedures, current OneIM 10 negative SlotNumber meanings, and QBM_PJobCreate* object-layer job creation are now tracked in DBQueue and Object Layer Jobs. For 9.3+ / V10 troubleshooting, prefer that note and the One Identity 10.0 Configuration Guide over older training-slide slot-control examples.

Wenn Shop-Knoten oder Shop-Zuordnungen “hängen”, ist das ein guter Startpunkt:

1. DialogDBQueue nach UID_Task LIKE '%ShoppingRack%' / %ITShop%

2. Passende Prozeduren aus QER_ZITShop* prüfen

3. Trigger auf BaseTree (QER_TIBaseTree, QER_TUBaseTree) berücksichtigen

8) Minimale Sequenz: ein synced ADSGroup im IT Shop publikieren (DB-Ebene)

Live DB evidence (2026-04-27, Claude run)

Vollständige Analyse basierend auf ADS_TUAdsGroup Trigger, QER_PIsForITShopFlagCheck Prozedur, ITShopOrgHasADSGroup View-Definition und Spalten-Schema aller beteiligten Tabellen.

Details + konkrete SQL-Statements in projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-adsgroup-publish-sequence-db-evidence.md.

Supported (Object-Layer) Einstiegspunkt: ITShopOrg via SDK ScriptSamples

Neben der “DB-Ebene” (direkte DML nur zum Verständnis) gibt es shipped SDK-Beispiele, die den supported Weg über die Object Layer / Entity API zeigen:

Das Create-Sample erzeugt (in einer Object-Layer Transaction) einen Shop (ITShopInfo='SH') plus Customer-Node (ITShopInfo='CU') und setzt dabei u.a.:

UID_OrgRoot='QER-V-ITShopOrg', Ident_Org=<shopName>, UID_ParentITShopOrg=<shopUID>.

AccProduct — Minimum INSERT

Nur 2 Spalten sind NOT NULL ohne Default:

Alle 55 anderen Spalten nullable oder mit Default ((0)). Ident_AccProduct ist nullable

aber praktisch nötig (Anzeigename). UID_AccProductGroup optional (nullable).

BaseTreeHasADSGroup — Minimum INSERT

Required (NOT NULL):

<Key><T>ITShopOrgHasADSGroup</T><P>{UID_ADSGroup}</P><P>{UID_ITShopOrg}</P></Key>.

Nicht-IT-Shop-Zuweisungen nutzen entsprechend andere View-Table-Namen wie OrgHasADSGroup oder DepartmentHasADSGroup.

ITShopOrgHasADSGroup

View über BaseTreeHasADSGroup gefiltert auf BaseTree.UID_OrgRoot='QER-V-ITShopOrg'.

Zeigt sofort nach dem INSERT in BaseTreeHasADSGroup (wenn UID_Org im IT-Shop-Teilbaum).

ADS_TUAdsGroup — relevante Abschnitte

mit Child-Tables ADSAccountInADSGroup|ADSMachineInADSGroup auf.

um vorhandene PR-Knoten auf das neue AccProduct zu aktualisieren.

QER_PIsForITShopFlagCheck — Validierungsregeln

Schlägt fehl wenn:

1. IsForITShop=0, IsITShopOnly=0 UND ADSGroup ist via BaseTreeHasADSGroup einem

IT-Shop-Knoten (XObjectKey LIKE '<Key><T>ITShop___</T>%') mit XOrigin>0 zugeordnet.

2. IsForITShop=1, IsITShopOnly=1 UND ADSGroup ist auch einem Nicht-IT-Shop-Knoten zugeordnet.

3. Kinder (ADSAccountInADSGroup, ADSMachineInADSGroup) existieren mit XOrigin>0 und

IsITShopOnly=1 auf der Gruppe.

4. Ressourcen werden auf “Package”/ESet-Ebene außerhalb des IT Shop verwendet: ESetHasEntitlement + BaseTreeHasESet zeigen einen Assignment-Pfad auf BaseTree.UID_OrgRoot NOT IN ('QER-V-ITShopOrg', 'QER-V-ITShopSrc'), während IsITShopOnly=1 gesetzt werden soll.

5. IsForITShop=1, IsITShopOnly=1 soll gesetzt werden, aber es existieren Assignments zu System Roles (ESetHasEntitlement) deren ESet.IsITShopOnly = 0 ist.

Kein Fehler wenn noch keine BaseTreeHasADSGroup-Einträge existieren → IsForITShop=1 ist

before der Shelf-Zuweisung setzbar.

Seeded Sandbox BO-Regale (live DB, 2026-04-27)

RegalUID_OrgAccProductGroup
Sandbox ApplicationsSBX-ITS-5C7F1AC9D4A34DBBB23EA107B77C18SBX-APG-18479F84C2374DD3B31FD4DDE8B45A
Sandbox Business RolesSBX-ITS-415A0CE25B8545DB907EDB55A4CB82SBX-APG-B36C891B92E94E0DB8A579C8483B6A
Sandbox Distribution ListsSBX-ITS-4266537524A5448A8C9E3484608D8ASBX-APG-50DA5741B2744380A37CB4105D189B
Sandbox System Role BundlesSBX-ITS-E4B74F41569A487580B4C65E73AA86SBX-APG-528C6FE7956945E3B5830F6858649C

5-Schritte-Sequenz (direkte DML, nur zum Verständnis)

SchrittSQL-ZielTrigger-Folge
1. INSERT AccProductUID + XObjectKey + Ident_AccProduct + UID_AccProductGroupTrigger auf AccProduct; kein IT-Shop-Effekt
2. UPDATE ADSGroup SET UID_AccProductLink zum neuen AccProductADS_TUAdsGroupQBM_PJobCreate_HOUpdate_B (kein Effekt, noch kein PR-Node)
3. UPDATE ADSGroup SET IsForITShop=1IT-Shop-FlagADS_TUAdsGroupQER_PIsForITShopFlagCheck (passiert ohne Fehler, da noch kein BaseTreeHasADSGroup)
4. INSERT BaseTreeHasADSGroup (BO-Regal)Shelf-ZuweisungInsert-Trigger; ITShopOrgHasADSGroup zeigt Eintrag sofort
5. DBQueue QER-K-ShoppingRack-All / QER-K-ShoppingRackProductNodeQER_PITShopProductNodeCreate_b erzeugt PR-Node + BaseTreeHasObject

Reihenfolge-Constraints:

Angewandter Sandbox-Stand: AD-Shop-Katalog veröffentlicht (2026-04-27)

Evidence: projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-ad-shop-itshop-publication.md

Ergebnis im v10-Sandbox-DB-Stand:

Objekt/RelationCountHinweis
Catalog-backed AccProduct service items97Marker [OIM-SANDBOX-SEED:ad-shop-seeding:v1]
ADSGroup mit IsForITShop=197IsITShopOnly=0, weil v1 nicht exklusiv über IT Shop vergeben werden soll
ADSGroup.UID_AccProduct Links971 Service Item pro gesyncter AD-Gruppe
BaseTreeHasADSGroup Shelf-Zuweisungen97Auf vier Sandbox-BO-Regale verteilt
ITShopOrg Product Nodes (ITShopInfo='PR')97Durch Product-Node-Verarbeitung nach Commit erzeugt

Verteilung der Product Nodes:

RegalPR-Knoten
Sandbox Applications75
Sandbox Business Roles9
Sandbox System Role Bundles10
Sandbox Distribution Lists3

Approval Policy:

Wichtige Korrektur aus diesem Lauf: Die v10-Sandbox-AccProduct Tabelle hat keine Spalte ServiceItem.

Die produktrelevanten Informationen liegen in Ident_AccProduct, Description, ArticleCode/OrderNumber,

UID_AccProductGroup, UID_PWODecisionMethod, und den Metadata-Feldern CustomProperty01..03.

Open Questions / Next Experiments

Vendor docs (to verify + cite)