USP_AMPROIMPORT_FIXIDS
Fixes IDs in AuctionMaestro Pro import exception batches.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BATCHROWID | uniqueidentifier | IN | |
@ORIGINATINGBATCHROWID | uniqueidentifier | IN | |
@CONSTITUENT_LINKID | uniqueidentifier | INOUT | |
@REGISTRANT_CONSTITUENTID | uniqueidentifier | INOUT | |
@AUCTIONITEM_LINKID | uniqueidentifier | INOUT | |
@AUCTIONITEM_CONSTITUENTID | uniqueidentifier | INOUT | |
@PURCHASE_CONSTITUENTID | uniqueidentifier | INOUT | |
@PURCHASE_DETAIL | xml | INOUT | |
@PACKAGE_LINKID | uniqueidentifier | INOUT |
Definition
Copy
CREATE procedure dbo.USP_AMPROIMPORT_FIXIDS
(
@BATCHROWID uniqueidentifier,
@ORIGINATINGBATCHROWID uniqueidentifier,
@CONSTITUENT_LINKID uniqueidentifier = null output,
@REGISTRANT_CONSTITUENTID uniqueidentifier = null output,
@AUCTIONITEM_LINKID uniqueidentifier = null output,
@AUCTIONITEM_CONSTITUENTID uniqueidentifier = null output,
@PURCHASE_CONSTITUENTID uniqueidentifier = null output,
@PURCHASE_DETAIL xml = null output,
@PACKAGE_LINKID uniqueidentifier = null output
)
as
set nocount on;
if @BATCHROWID = @ORIGINATINGBATCHROWID
return;
declare @CURRENTBATCHID uniqueidentifier;
declare @CURRENTBATCHISEXCEPTIONBATCH bit;
declare @ORIGINALBATCHID uniqueidentifier;
select
@CURRENTBATCHID = BATCH.ID,
@CURRENTBATCHISEXCEPTIONBATCH = case when BATCH.ORIGINATINGBATCHID is null then 0 else 1 end
from dbo.BATCHAMPROIMPORT
inner join dbo.BATCH on BATCH.ID = BATCHAMPROIMPORT.BATCHID
where BATCHAMPROIMPORT.ID = @BATCHROWID;
if @CURRENTBATCHID is null or @CURRENTBATCHISEXCEPTIONBATCH = 0
return;
exec dbo.USP_AMPROIMPORT_FIXCONSTITUENTID @CONSTITUENT_LINKID output, @CURRENTBATCHID;
exec dbo.USP_AMPROIMPORT_FIXCONSTITUENTID @REGISTRANT_CONSTITUENTID output, @CURRENTBATCHID;
exec dbo.USP_AMPROIMPORT_FIXITEMID @AUCTIONITEM_LINKID output, @CURRENTBATCHID;
exec dbo.USP_AMPROIMPORT_FIXCONSTITUENTID @AUCTIONITEM_CONSTITUENTID output, @CURRENTBATCHID;
exec dbo.USP_AMPROIMPORT_FIXCONSTITUENTID @PURCHASE_CONSTITUENTID output, @CURRENTBATCHID;
exec dbo.USP_AMPROIMPORT_FIXITEMID @PACKAGE_LINKID output, @CURRENTBATCHID;
declare @PURCHASE_DETAILS table
(
ID uniqueidentifier,
PURCHASEDETAIL_TRANSACTIONTYPECODE tinyint,
PURCHASEDETAIL_AMOUNT money,
PURCHASEDETAIL_ITEMID uniqueidentifier,
PURCHASEDETAIL_REGISTRANTID uniqueidentifier,
PURCHASEDETAIL_DESIGNATIONID uniqueidentifier
);
if @PURCHASE_DETAIL is not null
begin
insert into @PURCHASE_DETAILS
(ID, PURCHASEDETAIL_TRANSACTIONTYPECODE, PURCHASEDETAIL_AMOUNT, PURCHASEDETAIL_ITEMID,
PURCHASEDETAIL_REGISTRANTID, PURCHASEDETAIL_DESIGNATIONID)
select
newid(),
T.c.value('PURCHASEDETAIL_TRANSACTIONTYPECODE[1]', 'tinyint'),
T.c.value('PURCHASEDETAIL_AMOUNT[1]', 'money'),
T.c.value('PURCHASEDETAIL_ITEMID[1]', 'uniqueidentifier'),
T.c.value('PURCHASEDETAIL_REGISTRANTID[1]', 'uniqueidentifier'),
T.c.value('PURCHASEDETAIL_DESIGNATIONID[1]','uniqueidentifier')
from @PURCHASE_DETAIL.nodes('/PURCHASE_DETAIL/ITEM') T(c)
declare @PURCHASEDETAIL_ID uniqueidentifier;
declare @PURCHASEDETAIL_TRANSACTIONTYPECODE tinyint;
declare @PURCHASEDETAIL_ITEMID uniqueidentifier;
declare @PURCHASEDETAIL_REGISTRANTID uniqueidentifier;
declare PD_CURSOR cursor local fast_forward for
select ID, PURCHASEDETAIL_TRANSACTIONTYPECODE, PURCHASEDETAIL_ITEMID, PURCHASEDETAIL_REGISTRANTID
from @PURCHASE_DETAILS;
open PD_CURSOR
fetch next from PD_CURSOR into @PURCHASEDETAIL_ID, @PURCHASEDETAIL_TRANSACTIONTYPECODE, @PURCHASEDETAIL_ITEMID, @PURCHASEDETAIL_REGISTRANTID;
while @@FETCH_STATUS = 0
begin
if @PURCHASEDETAIL_TRANSACTIONTYPECODE = 2 --item purchase
begin
exec dbo.USP_AMPROIMPORT_FIXITEMID @PURCHASEDETAIL_ITEMID output, @CURRENTBATCHID;
end
else if @PURCHASEDETAIL_TRANSACTIONTYPECODE = 3 --event registration
begin
if @PURCHASEDETAIL_REGISTRANTID is not null and not exists(select ID from dbo.REGISTRANT where REGISTRANT.ID = @PURCHASEDETAIL_REGISTRANTID)
begin
if not exists(select ID from dbo.BATCHAMPROIMPORT where BATCHID = @CURRENTBATCHID and ID = @PURCHASEDETAIL_REGISTRANTID)
begin
if exists(select ID from dbo.BATCHAMPROIMPORT where BATCHID = @CURRENTBATCHID and ORIGINATINGBATCHROWID = @PURCHASEDETAIL_REGISTRANTID)
select top 1 @PURCHASEDETAIL_REGISTRANTID = ID from dbo.BATCHAMPROIMPORT where BATCHID = @CURRENTBATCHID and ORIGINATINGBATCHROWID = @PURCHASEDETAIL_REGISTRANTID
else
set @PURCHASEDETAIL_REGISTRANTID = null;
end
end
end
update @PURCHASE_DETAILS
set PURCHASEDETAIL_ITEMID = @PURCHASEDETAIL_ITEMID,
PURCHASEDETAIL_REGISTRANTID = @PURCHASEDETAIL_REGISTRANTID
where ID = @PURCHASEDETAIL_ID;
fetch next from PD_CURSOR into @PURCHASEDETAIL_ID, @PURCHASEDETAIL_TRANSACTIONTYPECODE, @PURCHASEDETAIL_ITEMID, @PURCHASEDETAIL_REGISTRANTID;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close PD_CURSOR;
deallocate PD_CURSOR;
set @PURCHASE_DETAIL =
(
select ID, PURCHASEDETAIL_ITEMID, PURCHASEDETAIL_AMOUNT, PURCHASEDETAIL_REGISTRANTID,
PURCHASEDETAIL_TRANSACTIONTYPECODE, PURCHASEDETAIL_DESIGNATIONID
from @PURCHASE_DETAILS
for xml raw('ITEM'),type,elements,root('PURCHASE_DETAIL'),binary base64
);
end