dbo.QBM_PDynamicUserForPerson
Stored ProcedureSQL_STORED_PROCEDURESandbox DB
Interpretation
- Database routine. Review parameters, called procedures, DBQueue inserts, and QBM_PJobCreate helper calls before assuming side effects.
Relations
- No extracted relations.
Typed Edges
- references source dbo.QBM_FCVElementToObjectKey1 source text reference
- references source dbo.QBM_FCVElementToObjectKey2 source text reference
- references source dbo.QBM_FCVGuidToTransfer source text reference
- references source dbo.QBM_FGIModuleExists source text reference
- references source dbo.QBM_FGISessionContext source text reference
- references source dbo.QBM_FGISessionErrorRethrow source text reference
- references source dbo.QBM_PSessionContextSet source text reference
- references source dbo.QBM_PSessionErrorAdd source text reference
Complete Source
1CREATE PROCEDURE QBM_PDynamicUserForPerson(2 @UID_Person varchar(38),3 @UID_QBMProduct varchar(38),4 @UID_DialogUser varchar(38) OUTPUT5)6AS7BEGIN8 DECLARE @GenProcID varchar(38)9 DECLARE @XUser nvarchar(64) = object_name(@@procid)10 DECLARE @XDate datetime = getutcdate()11 DECLARE @SQLCmd nvarchar(max)12 DECLARE @DebugSwitch int = 013 DECLARE @Startdate datetime = getutcdate()14 DECLARE @UID_QBMProduct_Intern varchar(38) = isnull(@UID_QBMProduct,15 '##') drop TABLE16 IF EXISTS #GroupsAvailable17 CREATE TABLE #GroupsAvailable(18 UID_DialogGroup varchar(38) collate database_default primary key(UID_DialogGroup)19 ) drop TABLE20 IF EXISTS #GroupsForPerson21 CREATE TABLE #GroupsForPerson(22 UID_SingleGUID varchar(38) collate database_default primary key(UID_SingleGUID)23 )24 DECLARE @anzahlGruppen int25 DECLARE @GenProcID_R varchar(3826) = dbo.QBM_FGISessionContext(''27)28DECLARE @XUser_R nvarchar(6429) = dbo.QBM_FGISessionContext('XUser'30)31DECLARE @QBM_BaseRight varchar(3832) = 'QBM-1CA5B3F72AD35643BEDB25511BB6DBF5'33SET XACT_ABORT OFF34BEGIN TRY35 SET nocount36 ON37 SELECT @GenProcID = @GenProcID_R38 SELECT39 @SQLCmd = CONCAT('select g.UID_DialogGroup-- , gl.*40 from DialogGroup g left outer join DialogGroupInProductLimited gl on g.UID_DialogGroup = gl.UID_DialogGroup41 where gl.UID_DialogGroup is null42 -- reduktion um die Gruppen, die für Rolebased zur Verfügung stehen'43 ,44 CASE45 WHEN dbo.QBM_FGIModuleExists('QER') = 1 THEN46 '47 and g.IsRoleBasedOnly = 1'48 ELSE ''49 END,50 '51 union5253 -- die Gruppen für dieses Produkt54 select gl.UID_DialogGroup55 from DialogGroupInProductLimited gl join DialogGroup g on gl.UID_DialogGroup = g.UID_DialogGroup56 where gl.UID_DialogProduct = '''57 ,58 @UID_QBMProduct_Intern,59 '''60 -- reduktion um die Gruppen, die für Rolebased zur Verfügung stehen',61 CASE62 WHEN dbo.QBM_FGIModuleExists('QER') = 1 THEN63 '64 and g.IsRoleBasedOnly = 1'65 ELSE ''66 END,67 '68 union6970 select ''',71 @QBM_BaseRight,72 '''73 '74)75IF @DebugSwitch > 076BEGIN77 print @sqlcmd78END79INSERT INTO #GroupsAvailable(UID_DialogGroup80)81EXEC sp_executesql @SQLCmd82IF @DebugSwitch > 083BEGIN84 SELECT *85 FROM #GroupsAvailable86END87INSERT INTO #GroupsForPerson(UID_SingleGuid88)89SELECT90 DISTINCT UID_DialogGroup91FROM(92SELECT rp.UID_Org93AS94UID_AERole,95c.UID_Org,96rp.UID_DialogGroup,97rp.treelevel98FROM AERole r99JOIN BaseTreeCollectionF c100 ON c.UID_Org = r.UID_AERole101JOIN BaseTree rp102 ON rp.UID_Org = c.UID_ParentOrg103JOIN #GroupsAvailable gv104 ON rp.UID_DialogGroup = gv.UID_DialogGroup105JOIN PersonInAERole p106 ON p.UID_AERole = c.UID_Org AND p.UID_Person = @UID_Person) td107JOIN(108SELECT109 UID_Org,110 max(x.treelevel) AS maxLevel111FROM(112SELECT113 rp.UID_Org AS UID_AERole, c.UID_Org, rp.UID_DialogGroup, rp.treelevel114FROM AERole r115JOIN BaseTreeCollectionF c116 ON c.UID_Org = r.UID_AERole117JOIN BaseTree rp118 ON rp.UID_Org = c.UID_ParentOrg119JOIN #GroupsAvailable gv120 ON rp.UID_DialogGroup = gv.UID_DialogGroup121JOIN PersonInBaseTree p122 ON p.UID_Org = c.UID_Org AND p.UID_Person = @UID_Person) x123GROUP BY UID_Org) v124 ON v.UID_Org = td.UID_Org AND v.maxLevel = td.treelevel125IF @DebugSwitch > 0126BEGIN127 SELECT *128 FROM #GroupsForPerson129END130DELETE #GroupsForPerson131FROM #GroupsForPerson g132WHERE133 EXISTS(134SELECT TOP 1 1135FROM DialogGroupCollection co136WHERE137 g.UID_SingleGuid = co.UID_DialogGroupParent AND co.UID_DialogGroup <> co.UID_DialogGroupParent AND co.UID_DialogGroup IN(138SELECT e.UID_SingleGuid139FROM #GroupsForPerson e)) AND g.UID_SingleGuid <> @QBM_BaseRight140DELETE #GroupsForPerson141FROM #GroupsForPerson g142WHERE143 NOT EXISTS(144SELECT TOP 1 1145FROM DialogGroupCollection co146WHERE147 g.UID_SingleGuid = co.uid_dialogGroup) AND g.UID_SingleGuid <> @QBM_BaseRight148IF @DebugSwitch > 0149BEGIN150 SELECT *151 FROM #GroupsForPerson152END153IF NOT EXISTS(154 SELECT TOP 1 1155 FROM #GroupsForPerson g156 WHERE157 g.UID_SingleGUID = @QBM_BaseRight)158BEGIN159 INSERT INTO #GroupsForPerson(UID_SingleGUID)160 SELECT @QBM_BaseRight161END162SELECT @AnzahlGruppen = count(*)163FROM #GroupsForPerson164IF @AnzahlGruppen = 0165BEGIN166 RAISERROR('#LDS#No valid group passed.|',167 18,168 2)169 WITH nowait170 RETURN171END172IF @DebugSwitch > 0173BEGIN174 print 'Anzahl Gruppen ' + str(@AnzahlGruppen)175END176SELECT @UID_DialogUser = NULL177SELECT TOP 1 @UID_DialogUser = y.UID_DialogUser178FROM(179SELECT x.UID_DialogUser180FROM(181SELECT uig.UID_DialogUser182FROM #GroupsForPerson g183JOIN DialogUserInGroup uig184 ON uig.uid_DialogGroup = g.UID_SingleGuid185GROUP BY uig.UID_DialogUser186HAVING count(*) = @AnzahlGruppen187UNION all188SELECT uig.UID_DialogUser189FROM DialogUserInGroup uig190GROUP BY uig.UID_DialogUser191HAVING count(*) = @AnzahlGruppen) AS x192GROUP BY x.UID_DialogUser193HAVING count(*) = 2) AS y194JOIN DialogUser u195 ON y.UID_DialogUser = u.UID_DialogUser196WHERE197 u.isDynamicUser = 1198IF @UID_DialogUser > ' '199BEGIN200 IF @DebugSwitch > 0201 BEGIN202 print 'fertigen User gefunden'203 END204 GOTO fertig205END206IF @DebugSwitch > 0207BEGIN208 print '-- dann müssen wir einen anlegen'209END210SELECT @UID_DialogUser = newid()211IF EXISTS(212 SELECT TOP 1 1213 FROM DialogTable t214 WHERE215 t.TableName = 'DialogUser' AND t.IsModuleGUIDDefault = 1)216BEGIN217 SELECT218 @UID_DialogUser = dbo.QBM_FCVGuidToTransfer(@UID_DialogUser,219 'CCC')220END221EXEC QBM_PSessionContextSet 'GenProcID',222 @GenProcID223EXEC QBM_PSessionContextSet 'XUser',224 @XUser225IF @DebugSwitch > 0226BEGIN227 print 'vor insert user ' + str(DATEDIFF(ms, @Startdate, getutcdate()))228END229INSERT INTO DialogUser(UID_DialogUser,230UserName,231XObjectKey,232Password,233XDateInserted,234XDateUpdated,235XUserInserted,236XUserUpdated,237CustomRemarks,238IsReadOnly,239IsDynamicUser)240SELECT241 @UID_DialogUser,242 @UID_DialogUser,243 dbo.QBM_FCVElementToObjectKey1('DialogUser',244 'UID_DialogUser',245 @UID_DialogUser),246 'UnableForDialogLogin ',247 @XDate,248 @XDate,249 N 'System',250 @XUser_R,251 N 'Created by System',252 0,253 1254EXEC QBM_PSessionContextSet 'GenProcID',255 @GenProcID256EXEC QBM_PSessionContextSet 'XUser',257 @XUser_R258IF @DebugSwitch > 0259BEGIN260 print 'vor insert useringroup ' + str(DATEDIFF(ms, @Startdate, getutcdate()))261END262INSERT INTO DialogUserInGroup(UID_DialogUser,263uid_DialogGroup,264XDateInserted,265XDateUpdated,266XUserInserted,267XUserUpdated,268XObjectKey)269SELECT270 DISTINCT @UID_DialogUser,271 g.UID_SingleGuid,272 @XDate,273 @XDate,274 N 'System',275 @XUser,276 dbo.QBM_FCVElementToObjectKey2('DialogUserInGroup',277 'UID_DialogUser',278 @UID_DialogUser,279 'uid_DialogGroup',280 g.UID_SingleGuid)281FROM #GroupsForPerson g282WHERE283 NOT EXISTS(284SELECT TOP 1 1285FROM DialogUserInGroup e286WHERE287 e.UID_DialogUser = @UID_DialogUser AND e.UID_DialogGroup = g.UID_SingleGuid)288IF @DebugSwitch > 0289BEGIN290 print 'nach insert useringroup ' + str(DATEDIFF(ms, @Startdate, getutcdate()))291END292fertig:293UPDATE DialogUser294SET LastLogin = @XDate,295XDateUpdated = @Xdate,296XUserUpdated = @XUser297WHERE298 UID_DialogUser = @UID_DialogUser299IF @DebugSwitch > 0300BEGIN301 print 'nach update user ' + str(DATEDIFF(ms, @Startdate, getutcdate()))302END303END TRY304BEGIN CATCH305 EXEC QBM_PSessionErrorAdd DEFAULT306 DECLARE @Rethrow varchar(1000) = dbo.QBM_FGISessionErrorRethrow()307 RAISERROR(@Rethrow,308 18,309 1)310 WITH NOWAIT311END CATCH312EndLabel:313EXEC QBM_PSessionContextSet 'GenProcID',314 @GenProcID_R315EXEC QBM_PSessionContextSet 'XUser',316 @XUser_R317RETURN318END
Open raw exported source
1 create procedure QBM_PDynamicUserForPerson (@UID_Person varchar(38) , @UID_QBMProduct varchar(38) , @UID_DialogUser varchar(38) output ) as2 begin declare @GenProcID varchar(38) declare @XUser nvarchar(64) = object_name(@@procid) declare @XDate datetime = getutcdate() declare @SQLCmd nvarchar3(max) declare @DebugSwitch int = 0 declare @Startdate datetime = getutcdate() declare @UID_QBMProduct_Intern varchar(38) = isnull(@UID_QBMProduct, '##'4) drop table if exists #GroupsAvailable create table #GroupsAvailable (UID_DialogGroup varchar(38) collate database_default primary key (UID_DialogGroup5) ) drop table if exists #GroupsForPerson create table #GroupsForPerson (UID_SingleGUID varchar(38) collate database_default primary key (UID_SingleGUID6) ) declare @anzahlGruppen int declare @GenProcID_R varchar(38) = dbo.QBM_FGISessionContext('') declare @XUser_R nvarchar(64) = dbo.QBM_FGISessionContext7('XUser') declare @QBM_BaseRight varchar(38) = 'QBM-1CA5B3F72AD35643BEDB25511BB6DBF5' SET XACT_ABORT OFF BEGIN TRY set nocount on select @GenProcID = @GenProcID_R8 select @SQLCmd = concat( 'select g.UID_DialogGroup-- , gl.*9 from DialogGroup g left outer join DialogGroupInProductLimited gl on g.UID_DialogGroup = gl.UID_DialogGroup10 where gl.UID_DialogGroup is null11 -- reduktion um die Gruppen, die für Rolebased zur Verfügung stehen'12 , case when dbo.QBM_FGIModuleExists('QER') = 1 then '13 and g.IsRoleBasedOnly = 1' else '' end, '14 union1516 -- die Gruppen für dieses Produkt17 select gl.UID_DialogGroup18 from DialogGroupInProductLimited gl join DialogGroup g on gl.UID_DialogGroup = g.UID_DialogGroup19 where gl.UID_DialogProduct = '''20, @UID_QBMProduct_Intern , '''21 -- reduktion um die Gruppen, die für Rolebased zur Verfügung stehen' , case when dbo.QBM_FGIModuleExists('QER') = 1 22then '23 and g.IsRoleBasedOnly = 1' else '' end, '24 union2526 select ''', @QBM_BaseRight, '''27 ' ) if @DebugSwitch > 0 begin print @sqlcmd end28 insert into #GroupsAvailable(UID_DialogGroup) exec sp_executesql @SQLCmd if @DebugSwitch > 0 begin select * from #GroupsAvailable end insert into #GroupsForPerson29(UID_SingleGuid) select distinct UID_DialogGroup from ( select rp.UID_Org as UID_AERole, c.UID_Org, rp.UID_DialogGroup, rp.treelevel from AERole r join30 BaseTreeCollectionF c on c.UID_Org = r.UID_AERole join BaseTree rp on rp.UID_Org = c.UID_ParentOrg join #GroupsAvailable gv on rp.UID_DialogGroup = gv.UID_DialogGroup31 join PersonInAERole p on p.UID_AERole = c.UID_Org and p.UID_Person = @UID_Person ) td join ( select UID_Org, max(x.treelevel) as maxLevel from ( select32 rp.UID_Org as UID_AERole, c.UID_Org, rp.UID_DialogGroup, rp.treelevel from AERole r join BaseTreeCollectionF c on c.UID_Org = r.UID_AERole join BaseTree33 rp on rp.UID_Org = c.UID_ParentOrg join #GroupsAvailable gv on rp.UID_DialogGroup = gv.UID_DialogGroup join PersonInBaseTree p on p.UID_Org = c.UID_Org34 and p.UID_Person = @UID_Person ) x group by UID_Org ) v on v.UID_Org = td.UID_Org and v.maxLevel = td.treelevel if @DebugSwitch > 0 begin select * from35 #GroupsForPerson end delete #GroupsForPerson from #GroupsForPerson g where exists (select top 1 1 from DialogGroupCollection co where g.UID_SingleGuid36 = co.UID_DialogGroupParent and co.UID_DialogGroup <> co.UID_DialogGroupParent and co.UID_DialogGroup in (select e.UID_SingleGuid from #GroupsForPerson37 e ) ) and g.UID_SingleGuid <> @QBM_BaseRight delete #GroupsForPerson from #GroupsForPerson g where Not exists (select top 1 1 from DialogGroupCollection38 co where g.UID_SingleGuid = co.uid_dialogGroup ) and g.UID_SingleGuid <> @QBM_BaseRight if @DebugSwitch > 0 begin select * from #GroupsForPerson end39 if not exists (select top 1 1 from #GroupsForPerson g where g.UID_SingleGUID = @QBM_BaseRight ) begin insert into #GroupsForPerson(UID_SingleGUID) select40 @QBM_BaseRight end select @AnzahlGruppen = count(*) from #GroupsForPerson if @AnzahlGruppen = 0 begin raiserror('#LDS#No valid group passed.|' , 18, 412) with nowait return end if @DebugSwitch > 0 begin print 'Anzahl Gruppen ' + str(@AnzahlGruppen) end select @UID_DialogUser = null select top 1 @UID_DialogUser42 = y.UID_DialogUser from ( select x.UID_DialogUser from ( select uig.UID_DialogUser from #GroupsForPerson g join DialogUserInGroup uig on uig.uid_DialogGroup43 = g.UID_SingleGuid group by uig.UID_DialogUser having count(*) = @AnzahlGruppen union all select uig.UID_DialogUser from DialogUserInGroup uig group44 by uig.UID_DialogUser having count(*) = @AnzahlGruppen ) as x group by x.UID_DialogUser having count(*) = 2 ) as y join DialogUser u on y.UID_DialogUser45 = u.UID_DialogUser where u.isDynamicUser = 1 if @UID_DialogUser > ' ' begin if @DebugSwitch > 0 begin print 'fertigen User gefunden' end goto fertig 46end if @DebugSwitch > 0 begin print '-- dann müssen wir einen anlegen' end select @UID_DialogUser = newid() if exists (select top 1 1 from DialogTable47 t where t.TableName = 'DialogUser' and t.IsModuleGUIDDefault = 1 ) begin select @UID_DialogUser = dbo.QBM_FCVGuidToTransfer(@UID_DialogUser, 'CCC') end48 exec QBM_PSessionContextSet 'GenProcID', @GenProcID exec QBM_PSessionContextSet 'XUser', @XUser if @DebugSwitch > 0 begin print 'vor insert user ' + 49str(DATEDIFF(ms, @Startdate, getutcdate())) end insert into DialogUser (UID_DialogUser, UserName, XObjectKey, Password, XDateInserted, XDateUpdated, XUserInserted50, XUserUpdated, CustomRemarks , IsReadOnly, IsDynamicUser ) select @UID_DialogUser, @UID_DialogUser, dbo.QBM_FCVElementToObjectKey1('DialogUser', 'UID_DialogUser'51, @UID_DialogUser), 'UnableForDialogLogin ', @XDate, @XDate, N'System', @XUser_R, N'Created by System' , 0, 1 exec QBM_PSessionContextSet 'GenProcID', 52@GenProcID exec QBM_PSessionContextSet 'XUser', @XUser_R if @DebugSwitch > 0 begin print 'vor insert useringroup ' + str(DATEDIFF(ms, @Startdate, getutcdate53())) end insert into DialogUserInGroup (UID_DialogUser , uid_DialogGroup , XDateInserted, XDateUpdated, XUserInserted, XUserUpdated , XObjectKey) select54 distinct @UID_DialogUser, g.UID_SingleGuid , @XDate, @XDate, N'System', @XUser, dbo.QBM_FCVElementToObjectKey2('DialogUserInGroup', 'UID_DialogUser', 55@UID_DialogUser, 'uid_DialogGroup', g.UID_SingleGuid ) from #GroupsForPerson g where not exists (select top 1 1 from DialogUserInGroup e where e.UID_DialogUser56 = @UID_DialogUser and e.UID_DialogGroup = g.UID_SingleGuid ) if @DebugSwitch > 0 begin print 'nach insert useringroup ' + str(DATEDIFF(ms, @Startdate57, getutcdate())) end fertig: update DialogUser set LastLogin = @XDate , XDateUpdated = @Xdate , XUserUpdated = @XUser where UID_DialogUser = @UID_DialogUser58 if @DebugSwitch > 0 begin print 'nach update user ' + str(DATEDIFF(ms, @Startdate, getutcdate())) end END TRY BEGIN CATCH exec QBM_PSessionErrorAdd default59 declare @Rethrow varchar(1000) = dbo.QBM_FGISessionErrorRethrow() RAISERROR (@Rethrow, 18, 1) WITH NOWAIT END CATCH EndLabel: exec QBM_PSessionContextSet60 'GenProcID', @GenProcID_R exec QBM_PSessionContextSet 'XUser', @XUser_R return end 61