USP_BUSINESSPROCESSSTATUS_UPDATESTATUS

Updates the status of the business process.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@STATUSMESSAGE nvarchar(1000) IN
@STATUSCODE int IN
@CHANGEAGENTID uniqueidentifier IN
@INNEREXCEPTION nvarchar(max) IN

Definition

Copy


      CREATE procedure dbo.USP_BUSINESSPROCESSSTATUS_UPDATESTATUS
      (
        @ID uniqueidentifier,
        @STATUSMESSAGE nvarchar(1000),
        @STATUSCODE int
        @CHANGEAGENTID uniqueidentifier,
        @INNEREXCEPTION nvarchar(max) = null
      )
      with execute as caller
      as
      begin
        set nocount on;

        declare @SQL nvarchar(2000);
        declare @TABLENAME nvarchar(100);
        declare @CURRENTSTATUS int;
        declare @CURRENTDATE datetime;
        declare @ERRORMSG nvarchar(max);
        declare @INNERMSG nvarchar(max);

        if @STATUSCODE = 2
          begin
            set @ERRORMSG = @STATUSMESSAGE;
            set @INNERMSG = @INNEREXCEPTION;
          end
        else
          begin
            set @ERRORMSG = '';
            set @INNERMSG = null;
          end

        set @TABLENAME = '##BUSINESSPROCESSSTATUS_' + replace(cast(@ID AS nvarchar(36)),'-','_');

        if charindex('''', @STATUSMESSAGE) > 0
          set @STATUSMESSAGE = replace(@STATUSMESSAGE, '''', '''''');

        --For enqueque, if the sql server resets before the process starts to process, the temp status table is removed so create the status table here

        --and insert the status message

        set @SQL = 'if object_id(''tempdb..' + @TABLENAME + ''') is null' + char(13);
        set @SQL = @SQL + 'begin' + char(13);
        set @SQL = @SQL + '  create table ' + @TABLENAME + ' (STATUSMESSAGE nvarchar(1000));' + char(13);
        set @SQL = @SQL + '  insert into ' + @TABLENAME + ' ([STATUSMESSAGE]) values (''' + @STATUSMESSAGE + ''');';
        set @SQL = @SQL + 'end' + char(13);
        set @SQL = @SQL + 'else' + char(13);
        set @SQL = @SQL + '  update ' + @TABLENAME + ' set STATUSMESSAGE = ''' + @STATUSMESSAGE + '''' + char(13);

        select
          @CURRENTSTATUS = STATUSCODE 
        from
          dbo.BUSINESSPROCESSSTATUS
        where
          ID = @ID;

        if @STATUSCODE <> @CURRENTSTATUS
          begin
            if @CHANGEAGENTID is null
              exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

            set @CURRENTDATE = getdate();

            update 
              dbo.BUSINESSPROCESSSTATUS
            set
              STATUSCODE = @STATUSCODE,
              ERRORMESSAGE = @ERRORMSG,
              ENDEDON = (case when (@CURRENTSTATUS = 4 and @STATUSCODE = 1) then null else @CURRENTDATE end),-- set the ENDEDON date to the current date only if not switching from Enqueued to Running

              CHANGEDBYID = @CHANGEAGENTID,
              DATECHANGED = @CURRENTDATE,
              INNEREXCEPTION = @INNERMSG
            where
              ID = @ID;
          end

        exec sp_executesql @SQL;

      end