USP_DATAFORMTEMPLATE_EDIT_SYSTEMROLE_ASSIGNGROUPS

The save procedure used by the edit dataform template "System Role Assign Groups Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@ADGROUPLIST xml IN Active Directory Group List

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_SYSTEMROLE_ASSIGNGROUPS
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @ADGROUPLIST xml
                    )    
                    as
                        set nocount on;

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

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

                        begin try
                            update 
                                dbo.SYSTEMROLE 
                            set
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED=@CURRENTDATE
                            where 
                                ID = @ID;

                            --Parse and validate ad group list

                            declare @adgroups table (groupid varbinary(85), groupname nvarchar(255), id uniqueidentifier, includesubcontainers bit, ldapquery nvarchar(4000), searchroot nvarchar(1024), overwriteexistingsecurity bit)

                            insert into @adgroups (groupid, groupname, id, includesubcontainers, ldapquery, searchroot, overwriteexistingsecurity)
                                select distinct 
                                    GROUPID, 
                                    DISPLAYNAME, 
                                    ID, 
                                    INCLUDESUBCONTAINERS, 
                                    LDAPQUERY, 
                                    SEARCHROOT, 
                                    OVERWRITEEXISTINGSECURITY
                                from 
                                    dbo.[UFN_SYSTEMROLE_GETGROUPLIST_FROMITEMLISTXML](@ADGROUPLIST);

                            --Remove groups no longer in role

                            delete from 
                                dbo.SYSTEMROLEADGROUP
                            where 
                                SYSTEMROLEID=@ID and
                                ID not in (select ID from @adgroups);

                            --Update any groups that exist

                            update 
                                dbo.SYSTEMROLEADGROUP 
                            set 
                                GROUPID = NEWGROUPS.GROUPID, 
                                DISPLAYNAME = NEWGROUPS.GROUPNAME,
                                INCLUDESUBCONTAINERS = NEWGROUPS.INCLUDESUBCONTAINERS, 
                                LDAPQUERY = NEWGROUPS.LDAPQUERY, 
                                SEARCHROOT = NEWGROUPS.SEARCHROOT,
                                OVERWRITEEXISTINGSECURITY = NEWGROUPS.OVERWRITEEXISTINGSECURITY
                            from 
                                dbo.SYSTEMROLEADGROUP
                                inner join @adgroups as NEWGROUPS on SYSTEMROLEADGROUP.ID = NEWGROUPS.ID;

                            --Add new groups to role

                            insert into dbo.SYSTEMROLEADGROUP (SYSTEMROLEID, GROUPID, LDAPQUERY, DISPLAYNAME, SEARCHROOT, INCLUDESUBCONTAINERS, OVERWRITEEXISTINGSECURITY, ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                                select 
                                    @ID
                                    NEWGROUPS.GROUPID, 
                                    COALESCE(NEWGROUPS.LDAPQUERY,''), 
                                    COALESCE(NEWGROUPS.GROUPNAME,''), 
                                    COALESCE(NEWGROUPS.SEARCHROOT,''), 
                                    NEWGROUPS.INCLUDESUBCONTAINERS, 
                                    NEWGROUPS.OVERWRITEEXISTINGSECURITY,
                                    @CHANGEAGENTID
                                    @CHANGEAGENTID
                                    @CURRENTDATE
                                    @CURRENTDATE
                                from 
                                    @adgroups as NEWGROUPS
                                where 
                                    NEWGROUPS.ID not in (select ID from dbo.SYSTEMROLEADGROUP where SYSTEMROLEID=@ID);

                            return 0;
                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR;
                            return 1;
                        end catch