Source: projects/identity-management/knowledge-base/oim-consolidated-knowledge-map.md

> Source: projects/identity-management/knowledge-base/oim-consolidated-knowledge-map.md

One Identity Manager Consolidated Knowledge Map

This page is the human-readable entry point for the One Identity Manager research in this workspace. It connects the findings from:

Use this page as a map. Use the linked evidence notes for exact procedure text, query output, and generated indexes.

Source Priority

PrioritySourceHow to use it
1Live sandbox DBBest source for what is installed and active in this V10 sandbox.
2Installed shipped SQL, MDK, SDK, decompiled assembliesBest source for shipped behavior and object-layer implementation mechanics.
3Web Portal / API Server projectBest source for frontend action names, generated endpoint clients, and portal flow.
4Vendor docs and release notesBest source for supported concepts, version boundaries, and configuration semantics.
5Training slides/PDFsUseful background, but re-check version-specific claims against V10 DB/docs.

OneIM Processing Stack

Web Portal / Manager / API client
  -> API Server generated endpoint or object-layer call
  -> Object layer entity/customizer method or event
  -> DB write, object save, process generation, or method side effect
  -> SQL triggers and shipped procedures
  -> DBQueue task and/or JobQueue process
  -> Job Service / Database Agent Service
  -> target-system provisioning, recalculation, approval, notification, or sync side effect

The main research result is that OneIM work rarely belongs to just one layer. A visible action, such as submitting a cart, approving a request, publishing a group to IT Shop, or moving a product node, crosses multiple layers.

Core Runtime Concepts

ConceptDB/object evidenceMeaning
Object layerVI.DB.dll, customizer assemblies such as QER.Customizer.dll and ATT.Customizer.dllExecutes entity methods, templates, events, save logic, process generation, and customizer behavior.
DialogMethod45 method definitions and 71 table/object assignments in the sandboxUI-visible method catalog. Important, but not the complete callable surface.
Customizer methods226 registrations in full decompile indexMethods such as MakeDecision, OrderShoppingCart, Abort, PrepareAttestations, and MoveBoard can exist outside DialogMethod.
QBMEvent353 table/event rows in sandboxEvent catalog. An event is a (table, event) pair, not a global string.
JobEventGen / JobChain400 event-to-process rows in sandboxMaps events to process generation. Check active/preprocessor state before assuming work will run.
QBM_PDBQueueInsert_*Thousands of call sites in shipped triggers/proceduresEnqueues calculation/recalculation tasks for the Database Agent Service.
QBM_PJobCreate*29 procedures in V10 sandboxCreates JobQueue work so SQL can delegate object-layer behavior to the job service.
BaseTree view tablesITShopOrg is a view over BaseTree where UID_OrgRoot='QER-V-ITShopOrg'Many role/tree concepts are view-table projections over BaseTree.

Action-to-Method Map

This table is the practical bridge from "what action happened" to "what method/event/table is involved".

User/system actionPortal/API surfaceObject-layer method/eventMain DB tablesAsync processing
Add product to cartPortalCartitem.Post, PortalCartitem.createEntitycart item creation behaviorShoppingCartItem, ShoppingCartOrder, AccProduct, ITShopOrgvalidation may trigger API/object checks before persistence
Submit cartportal_cart_submit_post / /portal/cart/submit/{uidcart}OrderShoppingCart; then request creation and approval setupShoppingCartItem, ShoppingCartOrder, PersonWantsOrgDialogProcess, JobQueue; observed HandleObjectComponent / CallMethod
Decide approvalportal_itshop_decide_postPersonWantsOrg.MakeDecisionPersonWantsOrg, approval helper/history tablesprocess generation and downstream JobQueue
Deny approvalportal_itshop_denydecision_postPersonWantsOrg.DenyDecisionPersonWantsOrgprocess generation and downstream JobQueue
Escalate approvalportal_itshop_escalate_postPersonWantsOrg.Escalate; event family includes ESCALATEPersonWantsOrgobject-layer state transition and processes
Query requesterportal_itshop_query_postPersonWantsOrg.QueryToPersonPersonWantsOrgmail/process work depending on workflow
Answer queryportal_itshop_answerquery_postPersonWantsOrg.AnswerFromPersonPersonWantsOrgapproval flow resumes through object layer
Recall decisionportal_itshop_recalldecision_postPersonWantsOrg.RecallDecisionPersonWantsOrgstate and process updates
Reset reservationportal_itshop_resetreservation_postPersonWantsOrg.ResetReservationPersonWantsOrgobject-layer state update
Move IT Shop product nodeManager/object method, ITShopOrg actionITShopOrg.MoveProductNodeBaseTree / ITShopOrgShoppingRack/product-node recalculation may follow
Move shelf/boardManager/object method, ITShopOrg actionITShopOrg.MoveBoardBaseTree / ITShopOrgShoppingRack recalculation
Remove from IT Shop boardsDialogMethod.RemoveFromITShopBoards on entitlement typesRemoveFromITShop style customizer behaviorBaseTreeHas*, entitlement table, ITShopOrgproduct-node deletion/update work
Publish AD/LDAP group to IT Shopseed/tooling or Manager publication actionNot a single method; requires service item, flags, shelf placement, product-node processingADSGroup/LDAPGroup, AccProduct, AccProductGroup, BaseTreeHasADSGroup/BaseTreeHasLDAPGroup, BaseTreeQER_PITShopProductNodeCheck / QER_PITShopProductNodeCreate_b; DBQueue ShoppingRack tasks
Create attestation casesschedule/policy actionAttestationPolicy.CreateAttestations, PrepareAttestationsattestation policy/case tablesJobQueue and DBQueue through attestation processes

HandleObject Jobs from SQL

SQL cannot directly execute the object-layer logic that handles templates, customizer methods, scripts, and process generation. The QBM_PJobCreate* procedures are the bridge.

HOCallMethod

QBM_PJobCreate_HOCallMethod, _B, and _L create HandleObject CallMethod jobs.

Runtime behavior from VI.DB.dll:

1. Read ObjectType, MethodName, WhereClause, Param1, Param2, and additional numbered parameters.

2. Load matching entities through the object layer.

3. Resolve the named method by name/parameter count or typed signature.

4. Convert string job parameters to target .NET types where possible.

5. Load object/entity parameters by object key when needed.

6. Invoke the method and save if required by method behavior or explicit job parameters.

Important methods observed in shipped SQL/decompile evidence:

MethodTypical targetInterpretation
MakeDecisionPersonWantsOrg, AttestationCaseApproval/attestation decision.
AbortPersonWantsOrg, AttestationCaseAbort request/case.
ESCALATE / Escalateapproval objectsEscalation path.
Assign, Replace, Unsubscribe, WaitingPersonWantsOrgIT Shop request state transitions.
MakeDecisionOnInsertAsyncPersonWantsOrgAsync decision logic after request insert.
PrepareAttestationsattestation policy objectsBuild attestation cases.
CompleteCasesUnderConstructionattestation case setupFinish constructed attestation cases.

Rule: a method name existing is not enough. Check target table, row state, method enablement, parameter shape, and process context.

HOFireEvent

QBM_PJobCreate_HOFireEvent, _B, and _L create HandleObject FireEvent jobs.

Runtime behavior from VI.DB.dll:

1. Read ObjectType, Eventname, WhereClause, optional StartTime, and event parameters.

2. Load matching entities read-only.

3. Generate object-layer process chains for each entity/event.

4. Add __StartTime if supplied.

5. Commit generated job chains.

The event generator looks for generated event code like Event_<EventName>. So QBMEvent is discovery metadata, but execution also needs active JobEventGen, active JobChain, and generated event code.

Common event families:

FamilyExamples
Generic object lifecycleINSERT, UPDATE, DELETE, Insert, Update, Delete, Read
AssignmentAssign, Remove, ASSIGN, REMOVE
IT Shop and approvalGRANTED, DENY, DISMISSED, ESCALATE, QUERYTOPERSON, ORDERGRANTED, ORDERREFUSED, REMEMBER_VALIDUNTIL
Target-system lifecycleDEPROVISION, UNDO DEPROVISION, HANDLEOUTSTANDING, POSTSYNC, OVERLIMIT
Service/maintenanceEXECUTE, FROZENDETECT, OVERLIMITDETECT, OVERLIMITWARNING, CHECKVERSION
Mail/reportSENDMAIL, SENDRICHMAIL, GENERATEMAIL, PREVIEWMAIL, REMIND

DBQueue Processing

DBQueue is the database-side recalculation and post-processing framework. In V10/9.3+, the Database Agent Service controls processing and slot distribution.

Important version boundary:

Live V10 procedure signatures:

ProcedurePurpose
QBM_PDBQueueInsert_SingleAdd one task/object/subobject item.
QBM_PDBQueueInsert_BulkAdd table-valued batch of QBM_YDBQueueRaw task items.
QBM_PDBQueueInsert_IntInternal insert path used by the public wrappers.
QBM_PDBQueueInsert_WaitForCompWait/dependency helper by context and GenProcID.

Usage footprint in V10 sandbox:

Object typeSingle referencesBulk references
SQL triggers375524
SQL stored procedures5597
SQL scalar functions13

Negative slot numbers in V10 include more than older notes. Examples:

SlotMeaning
-1Synchronization is running for the object target system.
-3JobQueue entries still exist for the object to calculate.
-4Prerequisite DBQueue tasks still exist.
-23Deadlock during processing.
-24Runtime error during processing.
-25Delta calculation overloaded.

IT Shop Structure

ITShopOrg is not a base table. It is a view over BaseTree filtered by UID_OrgRoot='QER-V-ITShopOrg'.

ITShopInfoMeaning in sandboxNotes
SCShopping CenterReferenced by shipped SQL; not currently present in the live sandbox tree.
SHShop rootSandbox has Identity & Access Lifecycle.
BOBoard/shelfDirect children under the shop root in this sandbox.
PRProduct nodeUsually has BaseTree.UID_AccProduct.
CUCustomer nodeSpecial validation; cannot freely change once customer assignments exist.

Important constraints:

Making an Entitlement Requestable

The proven sandbox pattern for direct entitlement tables such as ADSGroup and LDAPGroup is:

Entitlement row exists from sync
  -> create/link AccProduct
  -> set entitlement.UID_AccProduct
  -> set entitlement.IsForITShop = 1
  -> keep IsITShopOnly depending on assignment policy
  -> insert BaseTreeHas<EntitlementType> link to a BO shelf
  -> DBQueue/ShoppingRack creates PR product node
  -> BaseTreeHas<EntitlementType> gains PR-node link too

For the sandbox AD and LDAP seeds, we intentionally used IsITShopOnly = 0 so direct assignment and IT Shop request paths can both be compared.

AD Group Publication Result

Object/relationCountMeaning
Catalog AccProduct rows97One service item per synced AD group.
ADSGroup.IsForITShop=197Published to IT Shop.
ADSGroup.IsITShopOnly=097Direct assignment remains possible.
BO shelf links97Initial shelf placement.
PR product nodes97Generated after product-node processing.

LDAP Group Publication Result

Object/relationCountMeaning
OpenDJ containers16Project-owned subtree under ou=oim-managed,dc=ldap,dc=com.
OpenDJ LDAP groups41Empty groupOfNames entitlement groups.
Project-created LDAP accounts0Accounts must be provisioned by OneIM account definitions.
Synced LDAPGroup rows41After user-triggered LDAP sync.
LDAP AccProduct rows41One service item per LDAP group.
LDAPGroup.IsForITShop=141Published to IT Shop.
LDAPGroup.IsITShopOnly=041Direct assignment remains possible.
BO placement links41Shelf placement through BaseTreeHasLDAPGroup.
PR placement links41Product-node links after processing.

LDAP shelves:

ShelfGroups
Sandbox LDAP Applications20
Sandbox LDAP Platform Access6
Sandbox LDAP Business Roles6
Sandbox LDAP Access Bundles5
Sandbox LDAP Distribution Lists4

Web Portal and API Server Findings

The Web Portal project under C:/Dev/IdentityManager.Imx/imxweb is an Angular/Nx frontend workspace. The backend API Server implementation is deployed separately; the frontend uses generated API clients.

Important generated endpoint correlations:

Endpoint/client conceptDB/object concept
PortalShopServiceitemsAccProduct, AccProductGroup, ITShopOrg visibility context.
PortalCartitemShoppingCartItem, ShoppingCartOrder, PersonWantsOrg, AccProduct, ITShopOrg.
PortalItshopCartshopping cart state and ITShopOrg.
PortalItshopApproveRequestsPersonWantsOrg approval state.
PortalServicecategoriesAccProductGroup and approval-policy/category metadata.

Confirmed runtime paths:

Client methodHTTP path
imx_sessions_get('portal')/imx/sessions/{appId}
imx_login_post('portal', ...)/imx/login/{appId}
portal_shop_serviceitems_get/portal/shop/serviceitems
portal_cartitem_post/portal/cartitem
portal_cartitem_delete/portal/cartitem/{UID_ShoppingCartItem}
portal_cart_submit_post/portal/cart/submit/{uidcart}

The controlled cart-submit trace proved:

Decompiled Method and Event Surface

Full decompile/index coverage:

MetricCount
Assembly candidates1,348
Decompiled managed assemblies1,260
Decompiled .cs files scanned145,636
Lines scanned19,245,184
Method/function registrations226
Custom-generated event registrations28
Call/generate sites228
Event_* references26

High-value customizer findings:

TargetMethods/eventsWhat this means
PersonWantsOrgAbort, MakeDecision, Escalate, Unsubscribe, DirectDecision, RecallDecision, CancelOrder, Prolongate, Reserve, ResetReservation, QueryToPerson, AnswerFromPerson, FillOrder, Replace, Assign, Waiting, MakeDecisionOnInsertAsyncRequest approval/order actions are state-machine methods. Do not mutate request state directly in SQL.
PersonWantsOrg eventsGranted, Dismissed, OrderGranted, OrderRefused, Aborted, Canceled, Escalate, Direct, Recall, Deny, RecallQueryEvents are generated from workflow state changes and process generation.
ITShopOrgMoveProductNode, MoveProducts, MoveBoard, MoveShop, DeleteBoardMethod legality depends on ITShopInfo (PR, BO, SH).
ITShopProductCustomizerRemoveFromITShopRemoving products from shelves is object-layer behavior, not just deleting a relation row.
AttestationCaseReserve, ResetReservation, Abort, Escalate, CancelAttestation, MakeDecision, DirectDecision, RecallDecision, query/answer methodsAttestation approval is structurally similar to IT Shop approval.
AttestationPolicy / groupCreateAttestations, PrepareAttestations, CompleteCasesUnderConstructionSQL delegates heavy attestation setup/completion through object-layer jobs.

Database Relation Index

The decompile index was joined with live DB metadata. The generated evidence index now connects:

Relation counts:

Relation typeCount
DialogMethod table/object relations71
QBMEvent rows353
JobEventGen rows400
QBMDBQueueTask rows337
SQL modules with JobCreate/DBQueue references1,134
Triggers with JobCreate/DBQueue references918
Parent tables with those triggers268
Extracted concrete HOCallMethod calls120
Extracted concrete HOFireEvent calls72
Extracted DBQueue insert call sites6,004

Practical Troubleshooting Patterns

A product does not show in Web Portal

Check in this order:

1. Entitlement row exists and is not marked for deletion.

2. IsForITShop = 1.

3. UID_AccProduct points to a valid AccProduct.

4. AccProduct.IsInActive = 0.

5. AccProduct.IsToHideFromITShop = 0.

6. Entitlement has a BO shelf link in BaseTreeHas<type>.

7. Corresponding ITShopOrgHas<type> view sees the relation.

8. PR product node exists under the BO shelf.

9. There is also a PR-node BaseTreeHas<type> link after processing.

10. DBQueue has no stuck ShoppingRack/ProductNode tasks.

11. Portal requestability is checked for the current user and permissions, not globally.

A request action fails or does nothing

Check:

1. Was the action invoked through API/object layer or direct SQL?

2. Is the object in a state where the method is enabled?

3. Does DialogMethod expose it for the UI, or is it customizer-only?

4. If SQL used HOCallMethod, do parameter count/types match?

5. Does the method have ChangesExternalState, NeedsSaving, or state-machine guards?

6. Was a GenProcID generated and can it be followed into DialogProcess and JobQueue?

A fired event does not generate work

Check:

1. Does (DialogTable.TableName, QBMEvent.EventName) exist?

2. Does JobEventGen map it to a JobChain?

3. Is JobChain.NoGenerate = 0?

4. Is the chain or table deactivated by preprocessor?

5. Does generated runtime event code exist, typically Event_<EventName>?

6. Did the process generation context include required parameters?

DBQueue seems stuck

Check:

1. DialogDBQueue and QBMDBQueueCurrent for task/object/subobject.

2. Negative slot number and V10 meaning.

3. QBMDBQueueTask procedure and dependencies.

4. Whether synchronization is running for the same target system (-1 scenario).

5. Remaining JobQueue entries for the object (-3 scenario).

6. Runtime/deadlock/overload slots (-23, -24, -25).

7. Database Agent Service health.

Safe Implementation Rules for Agents

Key Evidence Pages

TopicEvidence
DBQueue and QBM_PJobCreateprojects/identity-management/knowledge-base/oim-dbqueue-and-object-layer-jobs.md
IT Shop DB structureprojects/identity-management/knowledge-base/oim-it-shop-structure-and-availability.md
Web Portal/API Serverprojects/identity-management/knowledge-base/oim-web-portal-api-server-project.md
Decompiled method/event surfaceprojects/identity-management/oim-kb-update/local-app/2026-04-27-oim-decompiled-method-event-evidence.md
Full decompile indexprojects/identity-management/oim-kb-update/local-app/2026-04-27-oim-full-decompile-index-evidence.md
DB trigger/method/event relationsprojects/identity-management/oim-kb-update/sandbox-db/2026-04-27-oim-db-trigger-method-event-relations.md
Web Portal endpoint mapprojects/identity-management/oim-kb-update/local-app/2026-04-27-webportal-endpoint-map-evidence.md
Cart submit traceprojects/identity-management/oim-kb-update/sandbox-db/2026-04-27-webportal-cart-submit-snapshots.md
Product node creationprojects/identity-management/oim-kb-update/sandbox-host/2026-04-27-itshop-productnodecheck-and-prnodecreate-shipped-sql-evidence.md
LDAP Shop seed/publicationprojects/identity-management/ldap-shop-seeding/README.md
AD Shop seed/publicationprojects/identity-management/ad-shop-seeding/README.md

Open Work