USP_REVENUEUPDATEBATCH_NOTE_CUSTOMUPDATEFORITEMLISTXML
Updates documentation records in the revenue update batch from an XML list.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@NOTES | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_REVENUEUPDATEBATCH_NOTE_CUSTOMUPDATEFORITEMLISTXML
(
@REVENUEID uniqueidentifier,
@NOTES xml,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
if @CHANGEDATE is null
set @CHANGEDATE = getdate()
-- build a temporary table containing the values from the XML
declare @TempTbl table (
[ID] uniqueidentifier,
[REVENUENOTETYPECODEID] uniqueidentifier,
[TITLE] nvarchar(255),
[DATEENTERED] datetime,
[AUTHORID] uniqueidentifier,
[TEXTNOTE] nvarchar(max),
[REVENUENOTEID] uniqueidentifier,
[HTMLNOTE] nvarchar(max)
)
insert into @TempTbl (
ID,
REVENUENOTETYPECODEID,
TITLE,
DATEENTERED,
AUTHORID,
TEXTNOTE,
HTMLNOTE
)
select
REVENUENOTEID,
NOTETYPECODEID,
NOTETITLE,
NOTEDATEENTERED,
NOTEAUTHORID,
NOTETEXTNOTE,
NOTEHTMLNOTE
from dbo.UFN_REVENUEUPDATEBATCH_GETNOTES_FROMITEMLISTXML(@NOTES)
update @TempTbl set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');
if @@Error <> 0
return 1;
declare @contextCache varbinary(128);
declare @e int;
-- cache current context information
set @contextCache = CONTEXT_INFO();
-- set CONTEXT_INFO to @CHANGEAGENTID
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
-- delete any items that no longer exist in the XML table
delete from dbo.REVENUENOTE where REVENUENOTE.ID in
(select ID from dbo.REVENUENOTE RN where RN.REVENUEID = @REVENUEID
EXCEPT select ID from @TempTbl)
select @e=@@error;
-- reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
if @e <> 0
return 2;
--update notes
update dbo.REVENUENOTE
set DATEENTERED = temp.DATEENTERED,
TITLE = temp.TITLE,
AUTHORID = temp.AUTHORID,
TEXTNOTE = temp.TEXTNOTE,
REVENUENOTETYPECODEID = temp.REVENUENOTETYPECODEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE,
HTMLNOTE = temp.HTMLNOTE
from dbo.REVENUENOTE inner join @TempTbl as temp on REVENUENOTE.ID = temp.ID
where
(REVENUENOTE.DATEENTERED<>temp.DATEENTERED) or
(REVENUENOTE.DATEENTERED is null and temp.DATEENTERED is not null) or
(REVENUENOTE.DATEENTERED is not null and temp.DATEENTERED is null) or
(REVENUENOTE.TITLE<>temp.TITLE) or
(REVENUENOTE.TITLE is null and temp.TITLE is not null) or
(REVENUENOTE.TITLE is not null and temp.TITLE is null) or
(REVENUENOTE.AUTHORID<>temp.AUTHORID) or
(REVENUENOTE.AUTHORID is null and temp.AUTHORID is not null) or
(REVENUENOTE.AUTHORID is not null and temp.AUTHORID is null) or
(REVENUENOTE.TEXTNOTE<>temp.TEXTNOTE) or
(REVENUENOTE.TEXTNOTE is null and temp.TEXTNOTE is not null) or
(REVENUENOTE.TEXTNOTE is not null and temp.TEXTNOTE is null) or
(REVENUENOTE.REVENUENOTETYPECODEID<>temp.REVENUENOTETYPECODEID) or
(REVENUENOTE.REVENUENOTETYPECODEID is null and temp.REVENUENOTETYPECODEID is not null) or
(REVENUENOTE.REVENUENOTETYPECODEID is not null and temp.REVENUENOTETYPECODEID is null) or
(REVENUENOTE.HTMLNOTE<>temp.HTMLNOTE) or
(REVENUENOTE.HTMLNOTE is null and temp.HTMLNOTE is not null) or
(REVENUENOTE.HTMLNOTE is not null and temp.HTMLNOTE is null);
select @e=@@error;
-- reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
if @e <> 0
return 3;
--insert notes
insert into dbo.[REVENUENOTE]
(
[ID],
[DATEENTERED],
[TITLE],
[AUTHORID],
[TEXTNOTE],
[REVENUENOTETYPECODEID],
[REVENUEID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED],
[HTMLNOTE]
)
select
ID,
DATEENTERED,
TITLE,
AUTHORID,
TEXTNOTE,
REVENUENOTETYPECODEID,
@REVENUEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
HTMLNOTE
from @TempTbl as temp
where not exists (select data.ID from dbo.REVENUENOTE as data where data.ID = temp.ID)
if @@Error <> 0
return 4;
return 0;