USP_BATCH_GETEXCEPTIONBATCHNUMBER_ATOMIC
Gets the exception batch number for the given batch workflow.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@BATCHNUMBER | nvarchar(100) | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_BATCH_GETEXCEPTIONBATCHNUMBER_ATOMIC(
@ID uniqueidentifier,
@BATCHNUMBER nvarchar(100) output,
@CHANGEAGENTID uniqueidentifier = null
)
as
set nocount on;
declare @BATCHTEMPLATEID uniqueidentifier;
declare @USERDEFINEDNUMBER nvarchar(60);
declare @EXCEPTIONBATCHNUMBERCODE tinyint;
declare @INCLUDEEXCEPTIONPREFIX bit;
declare @EXCEPTIONPREFIX nvarchar(8);
declare @NUMBERINGSCHEMEID uniqueidentifier;
begin transaction;
exec sp_getapplock @Resource = 'USP_BATCH_GETEXCEPTIONBATCHNUMBER', @LockMode = 'Exclusive';
select
@USERDEFINEDNUMBER = BATCH.EXCEPTIONBATCHNAME,
@EXCEPTIONBATCHNUMBERCODE = BATCHNUMBERINGSCHEME.EXCEPTIONBATCHNUMBERCODE,
@INCLUDEEXCEPTIONPREFIX = BATCHNUMBERINGSCHEME.INCLUDEEXCEPTIONPREFIX,
@EXCEPTIONPREFIX = BATCHNUMBERINGSCHEME.EXCEPTIONPREFIX,
@NUMBERINGSCHEMEID = BATCHNUMBERINGSCHEME.ID,
@BATCHTEMPLATEID = BATCH.BATCHTEMPLATEID
from dbo.BATCH
inner join dbo.BATCHTEMPLATE on BATCH.BATCHTEMPLATEID = BATCHTEMPLATE.ID
inner join dbo.BATCHNUMBERINGSCHEME on BATCHTEMPLATE.BATCHNUMBERINGSCHEMEID = BATCHNUMBERINGSCHEME.ID
where
BATCH.ID = @ID;
if len(@USERDEFINEDNUMBER) > 0
set @BATCHNUMBER = @USERDEFINEDNUMBER;
else
begin
if @EXCEPTIONBATCHNUMBERCODE = 0 -- Assign new number
exec dbo.USP_BATCHNUMBERINGSCHEME_GETNEXTBATCHNUMBER_ATOMIC @NUMBERINGSCHEMEID, @BATCHTEMPLATEID, @BATCHNUMBER output, @CHANGEAGENTID;
else -- Use current number plus sequence
begin
set @BATCHNUMBER = '';
declare @LEVEL int, @ORIGINALBATCHNUMBER nvarchar(100), @SEPARATOR nvarchar(9);
exec dbo.USP_BATCH_GETORIGINALNUMBERANDLEVEL @ID, @ORIGINALBATCHNUMBER output, @LEVEL output
declare @APPENDTEXT nvarchar(35)
set @APPENDTEXT = ''
-- Adding the Separator here, after the original batch number
select top 1 @SEPARATOR = SEPARATOR
from
(select
SEQUENCEPLACECODE PLACECODE_1, SEQUENCESEPARATOR SEPARATOR_1, CONVERT(bit, 1) INCLUDE_1,
LABELPLACECODE PLACECODE_2, LABELSEPARATOR SEPARATOR_2, INCLUDELABEL INCLUDE_2,
DATEFORMATPLACECODE PLACECODE_3, DATESEPARATOR SEPARATOR_3, INCLUDEDATEFORMAT INCLUDE_3
from
dbo.BATCHNUMBERINGSCHEME
where ID = @NUMBERINGSCHEMEID) P
UNPIVOT
(PLACECODE FOR ID1 IN (PLACECODE_1, PLACECODE_2, PLACECODE_3)) AS UNPVT
UNPIVOT
(SEPARATOR for ID2 in (SEPARATOR_1, SEPARATOR_2, SEPARATOR_3)) as UNPVT2
UNPIVOT
(INCLUDE for ID3 in (INCLUDE_1, INCLUDE_2, INCLUDE_3)) as UNPVT3
where RIGHT(ID1, 1) = RIGHT(ID2, 1) and
RIGHT(ID1, 1) = RIGHT(ID3, 1) and
INCLUDE = 1
order by PLACECODE desc;
-- 2 special cases have string stored in the db
if @SEPARATOR = '< Space >'
set @SEPARATOR = ' ';
if @SEPARATOR = '< None >'
set @SEPARATOR = '';
set @APPENDTEXT = @SEPARATOR
if (@EXCEPTIONPREFIX is not null) and (len(@EXCEPTIONPREFIX) > 0)
begin
set @APPENDTEXT = @APPENDTEXT + @EXCEPTIONPREFIX
end
set @APPENDTEXT = @APPENDTEXT + cast(@LEVEL + 1 as nvarchar)
set @BATCHNUMBER = substring(@ORIGINALBATCHNUMBER, 1, 100 - len(@APPENDTEXT)) + @APPENDTEXT
if exists (select top 1 ID from dbo.BATCH where (BATCHTEMPLATEID = @BATCHTEMPLATEID) and (BATCHNUMBER = @BATCHNUMBER))
begin
set @APPENDTEXT = @APPENDTEXT + ' ' + convert(nvarchar(20), getdate(), 120)
set @BATCHNUMBER = substring(@ORIGINALBATCHNUMBER, 1, 100 - len(@APPENDTEXT)) + @APPENDTEXT
end
end
end;
exec sp_releaseapplock @Resource = 'USP_BATCH_GETEXCEPTIONBATCHNUMBER';
commit transaction;
return 0;