USP_DATAFORMTEMPLATE_EDIT_BATCH2WORKFLOWSTATE

The save procedure used by the edit dataform template "Batch Workflow Status Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@NAME nvarchar(200) IN Name
@ALLOWCOMMIT bit IN Allow batch to be committed when in this status
@ISINITIALSTATE bit IN This is the initial status for the workflow
@ALLOWEDIT bit IN Allow batch to be edited in this status
@OVERDUEIN tinyint IN Days allowed before batch is overdue
@ENFORCETOTALMATCHING bit IN Only allow commit when projected totals match batch totals
@PERMISSIONS xml IN Specify roles that have access to batches in this status
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_BATCH2WORKFLOWSTATE
(
    @ID uniqueidentifier,
    @NAME nvarchar(200),
    @ALLOWCOMMIT bit,
    @ISINITIALSTATE bit,
    @ALLOWEDIT bit,
  @OVERDUEIN tinyint,
  @ENFORCETOTALMATCHING bit,
    @PERMISSIONS xml,
    @CHANGEAGENTID uniqueidentifier = null                        
)
as
set nocount on;

begin try
    declare @CHANGEDATE datetime;
    set @CHANGEDATE = getdate();

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

  declare @BATCHWORKFLOWID uniqueidentifier;
  select @BATCHWORKFLOWID = BATCHWORKFLOWID from dbo.BATCHWORKFLOWSTATE where ID = @ID;

  --check to see if this workflow is used in a template used by a netcommunity processor
  if exists(
    select 
      NETCOMMUNITYTRANSACTIONPROCESSOR.ID 
    from 
      NETCOMMUNITYTRANSACTIONPROCESSOR
    inner join BATCHTEMPLATE on NETCOMMUNITYTRANSACTIONPROCESSOR.BATCHTEMPLATEID =  BATCHTEMPLATE.ID
    where
      BATCHTEMPLATE.BATCHWORKFLOWID = @BATCHWORKFLOWID
  )
  begin
    if @ALLOWEDIT = 0 and @ISINITIALSTATE = 1
      raiserror('BBERR_BBISINITIALSTATESHOULDALLOWEDIT : This workflow is used by a Blackbaud Internet Solutions Batch Assignment Setting. The initial state should allow the batch to be edited.', 13, 1);
  end 

    if @ISINITIALSTATE = 1 
  begin
            if exists(select ID from dbo.BATCHWORKFLOWSTATE where ID <> @ID and BATCHWORKFLOWID = @BATCHWORKFLOWID and ISINITIALSTATE = 1)
                update 
          dbo.BATCHWORKFLOWSTATE 
        set 
          ISINITIALSTATE = 0,
          CHANGEDBYID = @CHANGEAGENTID,
          DATECHANGED = @CHANGEDATE          
        where 
          BATCHWORKFLOWID = @BATCHWORKFLOWID
        end


        if @OVERDUEIN is null
        set @OVERDUEIN = 0;

    update dbo.BATCHWORKFLOWSTATE
        set NAME = @NAME,
            ALLOWCOMMIT = @ALLOWCOMMIT,
            ISINITIALSTATE = @ISINITIALSTATE,
            ALLOWEDIT = @ALLOWEDIT,
      OVERDUEIN = @OVERDUEIN,
      ENFORCETOTALMATCHING = @ENFORCETOTALMATCHING,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CHANGEDATE
    where ID = @ID;

  declare @TTbl table (
   [GRANTORDENY] int,
   [ID] uniqueidentifier,
   [SYSTEMROLEID] uniqueidentifier)

insert into @TTbl select 
    [GRANTORDENY],
    [ID],
    [SYSTEMROLEID] 
from dbo.UFN_BATCHWORKFLOWSTATE_GETSYSTEMROLEPERMISSIONS_FROMITEMLISTXML(@PERMISSIONS)
where [GRANTORDENY] <> 2

    set @PERMISSIONS = (SELECT [GRANTORDENY], [ID], [SYSTEMROLEID]
      FROM @TTbl
      for xml raw('ITEM'),type,elements,root('PERMISSIONS'),BINARY BASE64)




    exec dbo.USP_BATCHWORKFLOWSTATE_GETSYSTEMROLEPERMISSIONS_UPDATEFROMXML @ID, @PERMISSIONS, @CHANGEAGENTID;

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

return 0;