UFN_QUERY_UNCOMMITTEDBATCHES

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN
@SITEFILTERMODE tinyint IN
@SITESSELECTED xml IN
@SPECIFICBATCHTYPEID uniqueidentifier IN
@NUMDAYS int IN
@ONLYEXCEPTIONBATCHES bit IN

Definition

Copy


CREATE function dbo.UFN_QUERY_UNCOMMITTEDBATCHES
(
  @CURRENTAPPUSERID uniqueidentifier,
  @SITEFILTERMODE tinyint = 0,
  @SITESSELECTED xml = null
  @SPECIFICBATCHTYPEID uniqueidentifier = null,
  @NUMDAYS int = 7,
  @ONLYEXCEPTIONBATCHES bit = 0
)
returns table
as return  (

  with ISSYSADMIN (ISSYSADMIN) as (
    select ISSYSADMIN from dbo.APPUSER where ID = @CURRENTAPPUSERID
  )
  select
    BATCH.ID,
    BATCH.BATCHNUMBER,
    BATCH.DESCRIPTION,
    (select case when DISPLAYNAME = '' then USERNAME else DISPLAYNAME end from dbo.APPUSER where ID = BATCH.APPUSERID) as OWNER,
    case when BATCH.STATUSCODE = 3 then BATCH.STATUS else BATCHWORKFLOWSTATE.NAME end as STATUS,
    BATCHTYPECATALOG.CATEGORY,
    dbo.UFN_BATCH_GETVALIDATIONREPORTID(BATCH.ID) as REPORTID,
    dbo.UFN_BATCHWORKFLOWSTATE_TASKSAVAILABLE(BATCH.BATCHWORKFLOWSTATEID) as TASKSAVAILABLE,
    (select ALLOWCOMMIT from dbo.BATCHWORKFLOWSTATE where BATCHWORKFLOWSTATE.ID = BATCH.BATCHWORKFLOWSTATEID) as ENABLECOMMIT,
    case when BATCH.ORIGINATINGBATCHID is not null or CHILDBATCH.ID is not null then 1 else 0 end as INEXCEPTIONCHAIN,
    case when BATCHTEMPLATE.CUSTOM = 1 then dbo.UFN_BATCHTEMPLATE_GETORIGINATINGTEMPLATENAME(BATCH.BATCHTEMPLATEID) else BATCHTEMPLATE.NAME end as BATCHDESIGN,
    case when BATCHTEMPLATE.CUSTOM = 1 then 1 else null end as ISCUSTOM,
    BATCH.DATEADDED,
    BATCH.STATUSCODE as BATCHSTATUSCODE,
    case when BATCH.STATUSCODE = 3 then  -- committing

      -- for batches that are committing, see if the business process is running

      case when (select top 1 BPS.STATUSCODE from dbo.BATCHSTATUS as BS inner join dbo.BUSINESSPROCESSSTATUS as BPS on BPS.ID = BS.ID where BS.PARAMETERSETID = BATCH.ID order by BPS.STARTEDON DESC) = 1
      then 1 else 0 end
    else 0 end as BUSINESSPROCESSRUNNING,
    isnull(SITE.NAME, 'All sites') as BATCHTEMPLATESITE,
    case when BATCHWORKFLOWSTATE.OVERDUEIN > 0
          and datediff(day, (select max(BATCHWORKFLOWSTATUS.DATEADDED) from dbo.BATCHWORKFLOWSTATUS where BATCHWORKFLOWSTATUS.BATCHID = BATCH.ID and BATCH.BATCHWORKFLOWSTATEID=BATCHWORKFLOWSTATUS.BATCHWORKFLOWSTATEID), getdate()) >= BATCHWORKFLOWSTATE.OVERDUEIN
    then 1 else 0 end as OVERDUE,
    BATCH.DATECHANGED,
    V_BATCH_ISLOCKED.ISLOCKED as ISBATCHLOCKED

  from dbo.BATCH
  inner join dbo.V_BATCH_ISLOCKED on BATCH.ID = V_BATCH_ISLOCKED.BATCHID
  left join dbo.BATCH as CHILDBATCH on BATCH.ID = CHILDBATCH.ORIGINATINGBATCHID
  inner join dbo.BATCHTEMPLATE on BATCH.BATCHTEMPLATEID = BATCHTEMPLATE.ID
  inner join dbo.BATCHTYPECATALOG on BATCHTEMPLATE.BATCHTYPECATALOGID = BATCHTYPECATALOG.ID
  left join dbo.BATCHWORKFLOWSTATE on BATCH.BATCHWORKFLOWSTATEID = BATCHWORKFLOWSTATE.ID
  left join dbo.SITE on SITE.ID = BATCHTEMPLATE.SITEID
  cross apply ISSYSADMIN

  where BATCH.STATUSCODE in (0, 3)  -- uncommitted, committing


  -- feature security

  and (
    BATCH.APPUSERID = @CURRENTAPPUSERID  -- current user owns the batch; trumps everything

    or
    ISSYSADMIN.ISSYSADMIN = 1
    or (
      dbo.UFN_SECURITY_APPUSER_GRANTED_BATCHOWNER(@CURRENTAPPUSERID, BATCH.ID) = 1  -- current user has access to the batch somehow

      and (
        -- check site security

        BATCHTEMPLATE.SITEID is null
        or exists (select top 1 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, 'bd1b97b5-9512-4d7a-8177-3692f7cefe77', 10) where SITEID = BATCHTEMPLATE.SITEID)
      )
    )
  )

  -- site filter

  and (
      @SITEFILTERMODE = 0
      or BATCHTEMPLATE.SITEID in (select SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED))
  )

  -- time window

  and (
      @NUMDAYS is null
      -- the "GETLATESTTIME" date function has been inlined here for performance (the part with "dateadd(ms, -003...")...

      or (@NUMDAYS is not null and dateadd(ms, -003, dateadd(d, 1, cast(cast(BATCH.DATEADDED as date) as datetime))) > dateadd(dd, -@NUMDAYS, getdate()))
  )

  -- other parameters

  and (@SPECIFICBATCHTYPEID is null or BATCHTYPECATALOG.ID = @SPECIFICBATCHTYPEID)
  and (@ONLYEXCEPTIONBATCHES = 0 or dbo.UFN_BATCH_HASBATCHEXCEPTION(BATCH.ID) = 1)
)