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;