USP_BBNC_COMMITPROFILEUPDATEATTRIBUTES
Updates a constituent's attribute information from a Blackbaud Internet Solutions profile transaction to the system from a given batch.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@XMLITEMS | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_BBNC_COMMITPROFILEUPDATEATTRIBUTES
(
@CONSTITUENTID uniqueidentifier = null,
@XMLITEMS xml = null,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
) as
set nocount on;
declare @ATTRIBUTECOUNT int;
if @CONSTITUENTID is null
begin
raiserror('The constituent ID is required',16,1);
return -2;
end
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
-- Build a temporary table to hold the values from XMLITEMS
declare @ATTRIBUTES table (
[ATTRIBUTETYPEID] int,
[VALUE] nvarchar(max),
[TABLEENTRYID] uniqueidentifier,
[BOOLEANCODE] tinyint);
insert into @ATTRIBUTES
select
[ATTRIBUTETYPEID],
[VALUE],
[TABLEENTRYID],
[BOOLEANCODE]
from
dbo.UFN_BBNC_ATTRIBUTES_FROMITEMLISTXML(@XMLITEMS);
begin try
/* ***
JamesWill 02/29/2008 CR294475-022508 Having a "Nickname" attribute is confusing BBNC (because of the "Nickname" ConstitData.Bio field)
-- Nickname
select
@ATTRIBUTECOUNT = count(*)
from
@ATTRIBUTES
where
[ATTRIBUTETYPEID] = 1; -- as defined in UFN_BBNC_ATTRIBUTETYPE_GETLIST
if @ATTRIBUTECOUNT = 1
update
dbo.CONSTITUENT
set
[NICKNAME] = (select top 1 [VALUE] from @ATTRIBUTES where [ATTRIBUTETYPEID] = 1),
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CHANGEDATE
where
[ID] = @CONSTITUENTID;
*/
if exists(select top(1) 1 from @ATTRIBUTES where ATTRIBUTETYPEID = 2)
begin
-- Interests
-- Add any interests that don't exist yet
insert into dbo.CONSTITUENTINTEREST
(
[ID],
[CONSTITUENTINTERESTCODEID],
[NOTE],
[CONSTITUENTID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
newid(),
[TABLEENTRYID],
'',
@CONSTITUENTID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from
@ATTRIBUTES where [ATTRIBUTETYPEID] = 2
and not [TABLEENTRYID] is null --JamesWill 05/16/2008 CR268692-030107 Don't try to add attributes which are being deleted
and not exists(
select
ID
from
dbo.CONSTITUENTINTEREST
where
CONSTITUENTID = @CONSTITUENTID
and CONSTITUENTINTERESTCODEID = TABLEENTRYID
);
-- Remove interests that no longer exist
delete from
dbo.CONSTITUENTINTEREST
where
[CONSTITUENTID] = @CONSTITUENTID
and
[CONSTITUENTINTERESTCODEID]
not in (
select
coalesce(TABLEENTRYID, '00000000-0000-0000-0000-000000000000') --JamesWill 05/16/2008 CR300750-051508 When deleting all attributes, TABLEENTRYID will be null; which won't work correctly with this "not in" statement. So turn the null into a value.
from
@ATTRIBUTES where [ATTRIBUTETYPEID] = 2
);
end
-- Update the built-in attributes
exec dbo.USP_BBNC_COMMITPROFILEUPDATEBUILTINATTRIBUTES @CONSTITUENTID, @XMLITEMS, @CHANGEAGENTID, @CHANGEDATE;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;