USP_DATAFORMTEMPLATE_EDIT_BUSINESSPROCESS_PERMISSIONS

The save procedure used by the edit dataform template "Edit Business Process Permissions".

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.
@SYSTEMROLELIST xml IN System Role List

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_BUSINESSPROCESS_PERMISSIONS(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,    
    @SYSTEMROLELIST xml

) AS

set nocount on;

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

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

BEGIN TRY
    declare @contextCache varbinary(128);

    --cache current context information
    set @contextCache = CONTEXT_INFO();

    --set CONTEXT_INFO to @CHANGEAGENTID
    set CONTEXT_INFO @CHANGEAGENTID;

    -- build a temporary table containing the values from the XML, excluding ones where permission is None
    declare @TempTbl table (ID uniqueidentifier, SYSTEMROLEID uniqueidentifier, GRANTORDENY bit)
    insert into @TempTbl 
        select ID, SYSTEMROLEID, GRANTORDENY
        from dbo.UFN_BUSINESSPROCESS_GETSYSTEMROLEPERMISSIONSLIST_FROMITEMLISTXML(@SYSTEMROLELIST)
        where (GRANTORDENY = 0) or (GRANTORDENY = 1)

    -- rebuild the system role list
    set @SYSTEMROLELIST = 
        (select ID, SYSTEMROLEID, GRANTORDENY
         from @TempTbl
         for xml raw('ITEM'), type, elements, root('SYSTEMROLELIST'), BINARY BASE64)

    if @SYSTEMROLELIST is null
        delete from dbo.SYSTEMROLEPERM_BUSINESSPROCESS where BUSINESSPROCESSCATALOGID = @ID
    else
        exec dbo.USP_BUSINESSPROCESS_GETSYSTEMROLEPERMISSIONSLIST_UPDATEFROMXML @ID, @SYSTEMROLELIST, @CHANGEAGENTID;

    --reset CONTEXT_INFO to previous value
    if not @contextCache is null
        set CONTEXT_INFO @contextCache;

    return 0;

END TRY
BEGIN CATCH
    exec dbo.USP_RAISE_ERROR;
    return 1;
END CATCH