USP_DATAFORMTEMPLATE_EDIT_SYSTEMROLE_ASSIGNUSERS
The save procedure used by the edit dataform template "System Role Assign Users 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. |
@USERSIDLIST | xml | IN | User SID List |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_SYSTEMROLE_ASSIGNUSERS
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@USERSIDLIST 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 user name list
declare @sids table (sid varbinary(85), username nvarchar(255))
insert into @sids (sid,username)
select distinct USERSID, DISPLAYNAME from dbo.[UFN_SYSTEMROLE_GETUSERSIDLIST_FROMITEMLISTXML](@USERSIDLIST);
--Add Appusers that don't yet exist
insert into dbo.APPUSER (USERSID, [DISPLAYNAME], [ADDEDBYID], [CHANGEDBYID], [DATEADDED], [DATECHANGED], WINDOWSUSERNAME)
select distinct SID,COALESCE(USERNAME,''),@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,
case when len(NEWUSERS.USERNAME) > 0 then NEWUSERS.USERNAME else coalesce(suser_name(SID), '') end
from @sids as NEWUSERS
where NEWUSERS.SID not in (select USERSID from dbo.APPUSER);
--Remove users no longer in role
delete from dbo.SYSTEMROLEAPPUSER
where SYSTEMROLEID=@ID and
FROMROLESYNC = 0 and
APPUSERID not in
(select AU.ID from @sids as s inner join dbo.APPUSER as AU on s.sid =AU.USERSID);
--Add users to role
insert into dbo.SYSTEMROLEAPPUSER (SYSTEMROLEID, APPUSERID, ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
select @id, APPUSER.ID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.APPUSER
where APPUSER.USERSID in (select SID from @sids)
and APPUSER.ID not in (select APPUSERID from dbo.SYSTEMROLEAPPUSER where SYSTEMROLEID=@ID);
--Update display names for any Appusers that don't have them
update dbo.APPUSER set DISPLAYNAME = NEWUSERS.USERNAME
from dbo.APPUSER
inner join @sids as NEWUSERS
on APPUSER.USERSID = NEWUSERS.SID
where len(APPUSER.DISPLAYNAME) = 0 and len(NEWUSERS.USERNAME) > 0;
--Update the "synchronized" flag for users that have been entered
update dbo.SYSTEMROLEAPPUSER set FROMROLESYNC = 0
from dbo.SYSTEMROLEAPPUSER
inner join dbo.APPUSER on SYSTEMROLEAPPUSER.APPUSERID = APPUSER.ID
inner join @sids as NEWUSERS on APPUSER.USERSID = NEWUSERS.SID
where SYSTEMROLEID = @ID and SYSTEMROLEAPPUSER.FROMROLESYNC = 1;
return 0;
END TRY
BEGIN CATCH
exec dbo.USP_RAISE_ERROR;
return 1;
END CATCH