USP_DATAFORMTEMPLATE_EDIT_SITEHIERARCHY

The save procedure used by the edit dataform template "Site Hierarchy Edit".

Parameters

Parameter Parameter Type Mode Description
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@SITEHIERARCHY xml IN Site Hierarchy

Definition

Copy


          CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_SITEHIERARCHY
          (
            @CHANGEAGENTID uniqueidentifier,
            @SITEHIERARCHY xml
          ) 
          as 
          begin
            set nocount on;

            if @CHANGEAGENTID is null  
              exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

            declare @CURRENTDATE datetime;
            set @CURRENTDATE = getdate();

            begin try                
              declare @TempTbl table (
                ID uniqueidentifier,
                PARENTSITEID uniqueidentifier,
                NAME nvarchar(100),
                SEQUENCE int);

              insert into 
                @TempTbl
              select
                T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
                T.c.value('(PARENTSITEID)[1]','uniqueidentifier') AS 'PARENTSITEID',
                T.c.value('(NAME)[1]','nvarchar(100)') AS 'NAME',
                T.c.value('(SEQUENCE)[1]','int') AS 'SEQUENCE'
              from
                @SITEHIERARCHY.nodes('/SITEHIERARCHY/ITEM') T(c);                                

              -- Update the hierarchyids using using a recursive cte to build up paths (i.e. '/2/1/3')
              with SITE_SEQUENCE_CTE as (
                select
                  ID,
                  PARENTSITEID,
                  SEQUENCE
                from
                  @TempTbl
              ),
              SITE_PATHS_CTE as (
                select
                  ID,
                  PARENTSITEID,
                  CAST('/' + cast(SEQUENCE as nvarchar(11)) + '/' AS hierarchyid) as HIERARCHYPATH
                from
                  @TempTbl
                where
                  PARENTSITEID is null                                    
                union all    
                select
                  SITE_SEQUENCE_CTE.ID,
                  SITE_SEQUENCE_CTE.PARENTSITEID,
                  CAST(HIERARCHYPATH.ToString() + cast(SITE_SEQUENCE_CTE.SEQUENCE as varchar(20)) + '/' AS hierarchyid)
                from
                  SITE_PATHS_CTE
                  inner join SITE_SEQUENCE_CTE on SITE_SEQUENCE_CTE.PARENTSITEID = SITE_PATHS_CTE.ID
              )update
                dbo.SITE
              set
                SITE.HIERARCHYPATH = SITE_PATHS_CTE.HIERARCHYPATH,
                SITE.CHANGEDBYID = @CHANGEAGENTID,
                SITE.DATECHANGED = @CURRENTDATE
              from
                dbo.SITE
                inner join SITE_PATHS_CTE on SITE.ID = SITE_PATHS_CTE.ID;
            end try
            begin catch
              exec dbo.USP_RAISE_ERROR;
              return 1;
            end catch

            return 0;                        
          end