Source: projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-itshop-productnode-jobcreate-and-dbqueueinsert-db-evidence.md

> Source: projects/identity-management/oim-kb-update/sandbox-db/2026-04-27-itshop-productnode-jobcreate-and-dbqueueinsert-db-evidence.md

Sandbox DB Evidence — IT Shop ProductNode + JobCreate + DBQueue insert selection (2026-04-27)

This note captures live OneIM sandbox DB evidence (SELECT-only) for:

Evidence 1: ShoppingRack DBQueue task config (QBMDBQueueTask)

Rows where UID_Task LIKE 'QER-K-ShoppingRack%':


UID_Task                           ProcedureName                  IsBulkEnabled BulkLimit CountParameter IsWithoutTransaction IsNoGenProcIDCheck ChangeLimit ExecutionDelaySeconds CustomWeight
--------                           -------------                  ------------- --------- -------------- -------------------- ------------------ ----------- --------------------- ------------
QER-K-ShoppingRack-All             QER_ZITShopCheckStructure               True         0              1                False              False        3000                     0         0,00
QER-K-ShoppingRackCheckDecision    QER_ZITShopCheckDecision                True         0              1                False               True        3000                     0         0,00
QER-K-ShoppingRackCheckValid       QER_ZITShopCheckValid                   True         0              1                False               True        3000                     0         0,00
QER-K-ShoppingRackCheckWaiting     QER_ZITShopCheckWaiting                 True         0              1                False              False        3000                     0         0,00
QER-K-ShoppingRackMakeDecisionCD   QER_ZITShopMakeDecisionCD               True         0              1                False              False        3000                     0         0,00
QER-K-ShoppingRackMakeDecisionEX   QER_ZITShopMakeDecisionEX               True         0              1                False              False        3000                     0         0,00
QER-K-ShoppingRackMakeDecisionRI   QER_ZITShopMakeDecisionRI               True         0              1                False              False        3000                     0         0,00
QER-K-ShoppingRackMakeDecisionSB   QER_ZITShopMakeDecisionSB               True         0              1                False              False        3000                     0         0,00
QER-K-ShoppingRackMakeDecisionWC   QER_ZITShopMakeDecisionWC               True         0              1                 True              False        3000                     0         0,00
QER-K-ShoppingRackMemberDel        QER_ZITShopMemberDelete                 True         0              2                False              False        3000                     0         0,00
QER-K-ShoppingRackMethod           QER_ZITShopCheckMethodBO                True         0              1                False              False        3000                     0         0,00
QER-K-ShoppingRackPersonHasObject  QER_ZITShopPersonHasObjectFill          True         0              1                False              False        3000                     0         0,00
QER-K-ShoppingRackProductNode      QER_ZITShopCheckMethodPR                True         0              1                False              False        3000                     0         0,00
QER-K-ShoppingRackPWODecisionMaker QER_ZITShopDecisionMakerFill           False         0              0                False              False        3000                     0         0,00
QER-K-ShoppingRackPWOHelperPWO     QER_ZITShopHelperFill                   True         0              1                False               True        3000                     0         0,00
QER-K-ShoppingRackPWOHelperPWO-Cfg QER_ZITShopHelperFill_Cfg               True         0              1                False               True        3000                     0         0,00
QER-K-ShoppingRackPWOHelperPWO-Del QER_ZITShopHelperFill_Delete           False         0              0                 True               True           0                     0         0,00
QER-K-ShoppingRackPWOHelperPWO-Rec QER_ZITShopHelperFill_Recalc           False         0              0                False               True           0                     0         0,00

Evidence 2: QER_PITShopProductNodeCreate_b calls QBM_PJobCreate_HOUpdate

Snippet around QBM_PJobCreate_HOUpdate (shows HOUpdate + then direct UPDATE ITShopOrg ... UID_AccProduct):

eClauseOrg = concat('UID_ITShopOrg = '''
 , bu.UID1 , '''') , @BasisObjectKey = dbo.QBM_FCVElementToObjectKey1('ITShopOrg', 'UID_ITShopOrg', bu.UID1) , @uid_AccProduct = bu.UID2 from @ElementBufferJob
 bu where bu.ElementIndex = @ElementIndex exec QBM_PJobCreate_HOUpdate 'ITShopOrg', @whereclauseOrg, @GenProcID , @ObjectKeysAffected = default , @p1 =
 'uid_ACCProduct' , @v1 = @uid_accproduct , @BasisObjectKey = @BasisObjectKey , @isToFreezeOnError = 1 , @Retries = 2  select @SQLCmd = concat('update ITShopOrg set UID_AccProduct = '''
, @uid_ACCProduct, ''' where ', @WhereClauseOrg) exec sp_executesql @SQLCmd select @ElementIndex += 1 end   END TRY BEGIN CATCH exec QBM_PSessionErrorAdd
 default declare @Rethrow varchar(1000) = dbo.QBM_FGISessionErrorRethrow() RAISERROR (@Rethrow, 18, 1) WITH NOWAIT END CATCH  ende: exec QBM_PSessionContextSet
 'GenProcID', @GenProcID_R exec QBM_PSessionContextSet 'XUser', @XUser_R    select top 1 @uid_OrgPR = s.UID_OrgPR from #Struktur s return end

Snippet around BaseTreeHasObject (product node ↔ object key placement wiring):

flüssig aber Pferd und Apotheke
						and not exists ( select top 1 1 
										from '
 , bu.UID1  , ' e
										where e.UID_Org = s.uid_OrgPR
										and e.' , bu.UID2 , ' =  s.RightTablePKValue
								)
			',    '					
			insert into BaseTreeHasObject (UID_BaseTreeHasObject, UID_Org, ObjectKey
									, InheritInfo, XObjectKey
								)
				-- 35301 die Bildung des Wertes muß exakt so sein wie in QER_PBasetreeHsObject_PostProc
				select dbo.QBM_FCVStringToGUIDMAll(null, s.UID_OrgPR, s.ObjectKeyElement) , s.UID_OrgPR , s.ObjectKeyElement 
									, '
 , @StringQERFGIBitPatternInheritInfo_Direct , ', dbo.QBM_FCVElementToObjectKey1(''BaseTreeHasObject'', ''UID_BaseTreeHasObject'', dbo.QBM_FCVStringToGUIDMAll(null, s.UID_OrgPR, s.ObjectKeyElement))
					from #struktur s
					where s.MiddleBaseName = '''
 , bu.UID1  , '''
					  and s.CreatePRNode = 1
					   and s.RemoveThePRNode = 0
					   -- eigentlich überflüssig aber Pferd und Apotheke
					   and Not exists (select top 1 1
											from BaseTreeHasObject bho
											where bho.UID_Org = s.UID_OrgPR
											and bho.ObjectKey = s.ObjectKeyElement
										)
	'
 ) from @ElementBufferFall4 bu where bu.ElementIndex = @ElementIndex     exec sp_executesql @SQLCmd if @IsSimulationMode = 1 begin select @SQLCmd = concat
('
		declare @SimulationModeBuffer QBM_YTriggerOperation

		insert into @SimulationModeBuffer (operation, BaseObjectType, ColumnName, Objectkey, OldValue) 
						select ''I'', ''ITShopOrg'', '''', 
									dbo.QBM_FCVElementToObjectKey1(''ITShopOrg'',

Evidence 3: QER_TIBaseTree uses UID_OrgRoot='QER-V-ITShopOrg' gating

Snippet around the IT Shop OrgRoot marker:

ect, genprocid
) select x.uid, null, @GenProcID from ( select i.uid_org as uid from inserted i       ) as x exec QBM_PDBQueueInsert_Bulk 'QER-K-BaseTreeCollectionF', 
@DBQueueElements_03  declare @DBQueueElements_05 QBM_YDBQueueRaw insert into @DBQueueElements_05 (object, subobject, genprocid) select x.uid, null, @GenProcID
 from ( select i.uid_org as uid from inserted i where i.uid_orgroot = 'QER-V-ITShopOrg' and i.itshopinfo in ('SC', 'SH', 'BO', 'PR')  ) as x exec QBM_PDBQueueInsert_Bulk
 'QER-K-ShoppingRack-All', @DBQueueElements_05  if exists (select top 1 1 from inserted i where i.ITShopInfo > ' ' and i.UID_OrgRoot not in ('QER-V-ITShopOrg'
, 'QER-V-ITShopSrc') ) begin  raiserror('#LDS#Cannot set IT Shop information, because role class is not suitable for IT Shop.|', 18, 2) with nowait end
 if exists (select top 1 1 from inserted i left outer join BaseTree p on i.UID_ParentOrg = p.UID_Org and i.UID_OrgRoot = p.UID_OrgRoot where i.UID_ParentOrg
 > ' ' and p.UID_Org is null ) begin raiserror( '#LDS#Cannot insert node, because predecessor does not exist in the same role class.|', 18, 2) with nowait
 end  insert into BaseTreecollection (uid_org, uid_parentorg) select x.uid_org, x.uid_parentorg from ( select i.UID_Org as UID_Org, i.UID_Org as UID_ParentOrg
 from inserted i join OrgRoot r on i.UID_OrgRoot = r.UID_OrgRoot union select i.UID_Org, c.UID_ParentOrg from BaseTreeCollection c join inserted i on c.UID_Org
 = i.UID_ParentOrg join OrgRoot r on i.UID_OrgRoot = r.UID_OrgRoot where i.IsCutNode = 0 and r.IsTopDown = 1 and i.UID_ParentOrg > ' ' ) as x where not
 exists (select top 1 1 from BaseTreecollection bc where bc.uid_org = x.uid_org and bc.uid_parentorg = x.uid_parentorg ) declare @DBQueueElements_06 QBM_YDBQueueRaw
 insert into @DBQueueElements_06 (Object, SubObject, GenProcID) select x.uid, null, @GenProcID from ( select i.UID_Org as uid from inserted i   ) as x 
exec QBM_PDBQueueInsert_Bulk 'QER-K-AllForOneOrg', @DBQueueElements_06 declare @DBQueueElements_07 QBM_YDBQueueRaw insert into @DBQueueElements_07 (object
, subobject, genprocid) select x.uid, null, @GenProcID from ( select uid_personHead as uid from inserted where uid_personHea

Evidence 4: ADS_TUAdsGroup chooses Single vs Bulk insert by load threshold

Snippet around QBM_PDBQueueInsert_Single (shows conditional ...Single vs ...Bulk):

ocID from (  select distinct top (@LoadLimit) aig.uid_ADSAccount
 as uid from @GroupsChanged g join adsAccountInADSGroup aig on g.Parameter1 = aig.uid_ADSGroup and aig.XOrigin > 0  ) as x select @LoadSumme = @@ROWCOUNT
 if @debugSwitch > 0 begin print 'Accounts zugewiesen, @LoadSumme ' + str(@LoadSumme) end if @LoadSumme >= @loadlimit begin exec QBM_PDBQueueInsert_Single
 'QBM-K-CommonReCalculate', 'ADS-K-ADSAccountInADSGroup', '', @genprocid end else begin exec QBM_PDBQueueInsert_Bulk 'ADS-K-ADSAccountInADSGroup', @DBQueueElements_01
 end       if @LoadSumme < @LoadLimit begin declare @DBQueueElements_02 QBM_YDBQueueRaw insert into @DBQueueElements_02 (object, subobject, genprocid) 
select x.uid, null, @GenProcID from ( select top (@LoadLimit) u.UID_ADSAccount as uid from @GroupsChanged g join BaseTreeHasObject bho on g.Parameter2 
 = bho.ObjectKey join PersonInBaseTree pho on bho.UID_Org = pho.UID_Org join ADSAccount u on u.UID_Person = pho.UID_Person union select top (@LoadLimit
) u.UID_ADSAccount as uid from @GroupsChanged g join BaseTreeHasObject bho on g.Parameter2  = bho.ObjectKey join HelperPersonOrg pho on bho.UID_Org = pho.UID_Org
 join ADSAccount u on u.UID_Person = pho.UID_Person union select top (@LoadLimit) u.UID_ADSAccount as uid from @GroupsChanged g join ESetHasEntitlement
 ehe on g.Parameter2  = ehe.Entitlement join PersonHasESet phe on phe.UID_ESet = ehe.UID_ESet join ADSAccount u on u.UID_Person = phe.UID_Person ) as x
 select @LoadSumme += @@ROWCOUNT end  if @debugSwitch > 0 begin print 'Accounts irgendwie geerbt, @LoadSumme ' + str(@LoadSumme) end  if @LoadSumme >= 
@loadlimit begin exec QBM_PDBQueueInsert_Single 'QBM-K-CommonReCalculate', 'ADS-K-ADSAccountInADSGroup', '', @genprocid end else begin exec QBM_PDBQueueInsert_Bulk
 'ADS-K-ADSAccountInADSGroup', @DBQueueElements_02 end    declare @DBQueueElements_03 QBM_YDBQueueRaw insert into @DBQueueElements_03 (object, subobject
, genprocid) select x.uid, null, @GenProcID from (  sel

Notes / Interpretation (sandbox-specific)