USP_DATAFORMTEMPLATE_ADD_CUSTOMFORMRULEACTION_BULK
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@FORMID | uniqueidentifier | IN | |
@RULES | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_CUSTOMFORMRULEACTION_BULK
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@FORMID uniqueidentifier,
@RULES xml = ''
)
as
set nocount on;
if @ID is null
set @ID = newid()
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
begin try
--Pull the rule actions out into a table variable
declare @RULEACTIONSTABLE table(RULEACTIONID uniqueidentifier, RULEACTIONFIELDID uniqueidentifier, RULEACTIONCOMPARISONCODE tinyint, RULEACTIONVALUE1 nvarchar(255),
RULEACTIONVALUE2 nvarchar(255), RULETARGETS xml)
insert into @RULEACTIONSTABLE
select
R.I.value('RULEACTIONID[1]', 'uniqueidentifier'),
R.I.value('RULEACTIONFIELDID[1]', 'uniqueidentifier'),
R.I.value('RULEACTIONCOMPARISONCODE[1]', 'tinyint'),
R.I.value('RULEACTIONVALUE1[1]', 'nvarchar(255)'),
R.I.value('RULEACTIONVALUE2[1]', 'nvarchar(255)'),
R.I.query('./RULETARGETS')
from @RULES.nodes('/RULES/ITEM') R(I)
--Update changes to existing rule actions
update dbo.CUSTOMFORMRULEACTION
set
RULEACTIONFIELDID = RAT.RULEACTIONFIELDID,
RULEACTIONCOMPARISONCODE = RAT.RULEACTIONCOMPARISONCODE,
RULEACTIONVALUE1 = RAT.RULEACTIONVALUE1,
RULEACTIONVALUE2 = RAT.RULEACTIONVALUE2,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.CUSTOMFORMRULEACTION RA
inner join @RULEACTIONSTABLE RAT on RA.ID = RAT.RULEACTIONID
--Add new rule actions
insert dbo.CUSTOMFORMRULEACTION (ID, FORMID, RULEACTIONFIELDID, RULEACTIONCOMPARISONCODE, RULEACTIONVALUE1, RULEACTIONVALUE2, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select RAT.RULEACTIONID, @FORMID, RAT.RULEACTIONFIELDID, RAT.RULEACTIONCOMPARISONCODE, RAT.RULEACTIONVALUE1, RAT.RULEACTIONVALUE2, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from @RULEACTIONSTABLE RAT
left outer join dbo.CUSTOMFORMRULEACTION RA on RAT.RULEACTIONID = RA.ID
where RA.ID is null
--Pull the rule targets out into a table variable
declare @RULETARGETSTABLE table(RULETARGETID uniqueidentifier, RULEACTIONID uniqueidentifier, RULETARGETFIELDID uniqueidentifier, RULETARGETACTIONCODE tinyint)
insert into @RULETARGETSTABLE
select
RT.I.value('RULETARGETID[1]', 'uniqueidentifier'),
RULEACTIONID,
RT.I.value('RULETARGETFIELDID[1]', 'uniqueidentifier'),
RT.I.value('RULETARGETACTIONCODE[1]', 'tinyint')
from @RULEACTIONSTABLE
cross apply RULETARGETS.nodes('/RULETARGETS/ITEM') RT(I)
--Update changes to existing rule targets
update dbo.CUSTOMFORMRULETARGET
set
RULEACTIONID = RTT.RULEACTIONID,
RULETARGETFIELDID = RTT.RULETARGETFIELDID,
RULETARGETACTIONCODE = RTT.RULETARGETACTIONCODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.CUSTOMFORMRULETARGET RT
inner join @RULETARGETSTABLE RTT on RT.ID = RTT.RULETARGETID
--Add new rule targets
insert dbo.CUSTOMFORMRULETARGET (ID, RULEACTIONID, RULETARGETFIELDID, RULETARGETACTIONCODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select RTT.RULETARGETID, RTT.RULEACTIONID, RTT.RULETARGETFIELDID, RTT.RULETARGETACTIONCODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from @RULETARGETSTABLE RTT
left outer join dbo.CUSTOMFORMRULETARGET RT on RTT.RULETARGETID = RT.ID
where RT.ID is null
----Delete old rules for this form
delete from dbo.CUSTOMFORMRULEACTION
where FORMID = @FORMID and ID not in (select RULEACTIONID from @RULEACTIONSTABLE) and CUSTOMFORMFEEID is null
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0