USP_BUSINESSPROCESSSTATUS_VALIDATESTATUS

Verifies that the business process is still running.

Parameters

Parameter Parameter Type Mode Description
@BUSINESSPROCESSSTATUSID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_BUSINESSPROCESSSTATUS_VALIDATESTATUS
(
  @BUSINESSPROCESSSTATUSID uniqueidentifier = null
)
with execute as caller
as
begin
  set nocount on

  declare @STATUSRECORDS table (ID uniqueidentifier);
  declare @STATUSNEEDUPDATE bit = 0

  if @BUSINESSPROCESSSTATUSID is not null
  begin
    insert into @STATUSRECORDS
    select
      ID
    from
      dbo.BUSINESSPROCESSSTATUS
    where
      ID = @BUSINESSPROCESSSTATUSID and
      STATUSCODE = 1 and
      applock_test('public', upper(cast(ID as nvarchar(36))), 'Exclusive', 'Session') = 1;

    if @@ROWCOUNT > 0
      set @STATUSNEEDUPDATE = 1;
  end
  else
  begin
    insert into @STATUSRECORDS
    select
      ID
    from
      dbo.BUSINESSPROCESSSTATUS
    where
      STATUSCODE = 1 and
      applock_test('public', upper(cast(ID as nvarchar(36))), 'Exclusive', 'Session') = 1;

    if @@ROWCOUNT > 0
      set @STATUSNEEDUPDATE = 1;
  end

  if @STATUSNEEDUPDATE = 1
  begin
    declare @CHANGEAGENTID uniqueidentifier;
    declare @CHANGEDATE datetime = getdate();

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

    update
      BPS
    set
      BPS.STATUSCODE = 2,
      BPS.ERRORMESSAGE = 'Process terminated unexpectedly.',
      BPS.ENDEDON = @CHANGEDATE,
      BPS.CHANGEDBYID = @CHANGEAGENTID,
      BPS.DATECHANGED = @CHANGEDATE
    from
      dbo.BUSINESSPROCESSSTATUS BPS
    inner join
      @STATUSRECORDS SR on SR.ID = BPS.ID;
  end
end