USP_EVENTHIERARCHY_LOADPAGENAVIGATIONDATA

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_EVENTHIERARCHY_LOADPAGENAVIGATIONDATA
(
    @EVENTID uniqueidentifier,
    @CURRENTAPPUSERID uniqueidentifier
)
with execute as caller
as
    set nocount on;

    declare @MAINEVENTID uniqueidentifier;
    declare @ROOTPATH hierarchyid;

    select
        @MAINEVENTID = coalesce(EVENT.MAINEVENTID, EVENT.ID)
    from
        dbo.EVENT
    where
        EVENT.ID = @EVENTID;

    --For very old events that only use the EVENT.MAINEVENTID column, there may be no

    --EVENTHIERARCHY data, but this page navigation tree is only displayed if the event

    --HASEVENTMANAGEMENTOPTIONS, so we can ignore those older events. This is consistent

    --with the behavior of the ClickOnce docked section that existed before we added

    --the page navigation tree in web shell.


    --Use a recursive CTE to build a new hierarchy path for each node so that we can

    --have a date-based sort rather than a sort based on the order in which nodes

    --were added.

    with EVENTWITHSORTEDHIERARCHYCTE
    as
    (
        --Anchor the CTE with just the main event

        select
            EVENT.ID as EVENTID,
            EVENT.NAME as EVENTNAME,
            EVENTHIERARCHY.HIERARCHYPATH as HIERARCHYPATH,
            dbo.UFN_EVENT_USERHASSITEACCESS(@CURRENTAPPUSERID, EVENTHIERARCHY.ID) as [USERHASSITEACCESS],
            hierarchyid::Parse('/') as SORTEDPATH
        from
            dbo.EVENTHIERARCHY
            inner join dbo.EVENT on EVENT.ID = EVENTHIERARCHY.ID
        where
            EVENTHIERARCHY.ID = @MAINEVENTID

        union all

        select
            EVENT.ID as EVENTID,
            EVENT.NAME as EVENTNAME,
            EVENTHIERARCHY.HIERARCHYPATH as HIERARCHYPATH,
            dbo.UFN_EVENT_USERHASSITEACCESS(@CURRENTAPPUSERID, EVENTHIERARCHY.ID) as [USERHASSITEACCESS],
            hierarchyid::Parse
            (
                EVENTWITHSORTEDHIERARCHYCTE.SORTEDPATH.ToString()
                + cast
                    (
                        row_number() over
                            (
                                order by
                                    EVENT.STARTDATE,
                                    EVENT.STARTTIME,
                                    EVENT.ENDDATE,
                                    EVENT.ENDTIME,
                                    EVENT.NAME
                            )
                        as nvarchar(10)
                    )
                + '/'
            ) as SORTEDPATH
        from
            EVENTWITHSORTEDHIERARCHYCTE
            --Join to direct children from the previous level

            inner join dbo.EVENTHIERARCHY on EVENTHIERARCHY.HIERARCHYPATH.GetAncestor(1) = EVENTWITHSORTEDHIERARCHYCTE.HIERARCHYPATH
            inner join dbo.EVENT on EVENT.ID = EVENTHIERARCHY.ID
    )
    select
        EVENTWITHSORTEDHIERARCHYCTE.EVENTID,
        EVENTWITHSORTEDHIERARCHYCTE.EVENTNAME,
        EVENTWITHSORTEDHIERARCHYCTE.SORTEDPATH.GetAncestor(1).ToString() as PARENTPATH,
        EVENTWITHSORTEDHIERARCHYCTE.SORTEDPATH.ToString() as SORTEDPATH,
        EVENTWITHSORTEDHIERARCHYCTE.USERHASSITEACCESS
    from
        EVENTWITHSORTEDHIERARCHYCTE
    order by
        EVENTWITHSORTEDHIERARCHYCTE.SORTEDPATH;