USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS
Returns the all position holders for a given IDSet or 'My Team' set.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@IDSET | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS
(
@IDSET uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier
)
as
begin
set nocount on;
declare @SQLTOEXEC nvarchar(max);
declare @DBOBJECTNAME nvarchar(128);
declare @DBOBJECTTYPE smallint;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate()
if @IDSET is not null
begin
if @IDSET = '00000000-0000-0000-0000-000000000001' or @IDSET = '00000000-0000-0000-0000-000000000002'
begin
declare @NODES as table (ID uniqueidentifier, ITERATION integer)
declare @CONSTITUENTID as uniqueidentifier;
select @CONSTITUENTID = CONSTITUENTID from dbo.APPUSER where ID = @CURRENTAPPUSERID;
declare @ITERATION integer;
set @ITERATION = 1;
insert into @NODES (ID, ITERATION)
select
POSITIONID,
@ITERATION
from dbo.ORGANIZATIONPOSITIONHOLDER
where CONSTITUENTID = @CONSTITUENTID
--The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...
and cast(DATEFROM as date) < @CURRENTDATE
--The "GETLATESTTIME" date function has been inlined here for performance (the part with "dateadd(ms, -003...")...
and (DATETO is null or dateadd(ms, -003, dateadd(d, 1, cast(cast(DATETO as date) as datetime))) < @CURRENTDATE);
if @IDSET = '00000000-0000-0000-0000-000000000001' --Direct reports
begin
insert into @NODES
select ORGANIZATIONHIERARCHY.ID, @ITERATION + 1
from dbo.ORGANIZATIONHIERARCHY
where ORGANIZATIONHIERARCHY.PARENTID IN (select ID from @NODES where ITERATION = @ITERATION);
end
if @IDSET = '00000000-0000-0000-0000-000000000002' --Indirect reports
begin
declare @CONTINUE bit;
set @CONTINUE = 1;
while @CONTINUE = 1
begin
insert into @NODES
select ORGANIZATIONHIERARCHY.ID, @ITERATION + 1
from dbo.ORGANIZATIONHIERARCHY
where ORGANIZATIONHIERARCHY.PARENTID IN (select ID from @NODES where ITERATION = @ITERATION);
if @@ROWCOUNT = 0
set @CONTINUE = 0;
set @ITERATION = @ITERATION + 1;
--protect from runaway recursion
if @ITERATION > 100 set @CONTINUE = 0;
end
end
select OPH.ID
from @NODES N
inner join dbo.ORGANIZATIONPOSITION OP on N.ID = OP.ID
inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH on OP.ID = OPH.POSITIONID
where dbo.UFN_SITEALLOWEDFORUSER(@CURRENTAPPUSERID, OP.SITEID) = 1;
return 0;
end
else --Else this is REAL idset
begin
select @DBOBJECTNAME = DBOBJECTNAME, @DBOBJECTTYPE = OBJECTTYPE from dbo.IDSETREGISTER where ID = @IDSET;
if @DBOBJECTTYPE = 1 set @DBOBJECTNAME = @DBOBJECTNAME + '()';
else if @DBOBJECTTYPE = 2 set @DBOBJECTNAME = @DBOBJECTNAME + '(''' + convert(nvarchar(36), @IDSET) + ''')';
if @DBOBJECTNAME is not null
begin
set @SQLTOEXEC = 'select ID from ' + @DBOBJECTNAME + nchar(13);
exec sp_executesql @SQLTOEXEC;
return 0;
end
end
end
return 0;
end