USP_CREATEORUPDATE_CONSTITUENTDISPLAYNAME

This functions creates or updates the constituent display name calculations to reflect the database configuration.

Parameters

Parameter Parameter Type Mode Description
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


create procedure dbo.USP_CREATEORUPDATE_CONSTITUENTDISPLAYNAME
(
    @CHANGEAGENTID uniqueidentifier = null
)
with execute as caller
as
begin

    if @CHANGEAGENTID is null  
        exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

    declare @SQL nvarchar(max);
    declare @CREATEORALTER nvarchar(7);

    declare @INDIVIDUAL_NAMEFORMATFUNCTION nvarchar(200);
    select top (1) @INDIVIDUAL_NAMEFORMATFUNCTION = NF.FORMATSQLTABLEVALUEFUNCTION
    from dbo.CONSTITUENTDISPLAYNAMEFORMAT CDNF
        inner join dbo.NAMEFORMATFUNCTION NF on CDNF.INDIVIDUALNAMEFORMATFUNCTIONID = NF.ID
        inner join sys.objects SO on NF.FORMATSQLTABLEVALUEFUNCTION = SO.[NAME] and SO.[TYPE] = 'IF';

    if @INDIVIDUAL_NAMEFORMATFUNCTION is null
    begin
        --GenerateFunction

        declare @FORCERELOAD bit = 1;
        declare @SPEC xml;

        select @SPEC = SQLFUNCTIONSPECXML
        from dbo.SQLFUNCTIONCATALOG
        where ID = '417dc59e-545c-43a5-8679-1205e497ac0a' and FUNCTIONNAME = 'UFN_CONSTITUENT_DISPLAYNAME' ;

        exec dbo.USP_LOADSPEC @SPEC, @CHANGEAGENTID, 'USP_CREATEORUPDATE_CONSTITUENTDISPLAYNAME', '', 0 , @FORCERELOAD;
    end
    else
    begin
        if exists(select object_id from sys.objects where type = 'IF' and name = 'UFN_CONSTITUENT_DISPLAYNAME')
            set @CREATEORALTER = 'alter ';
        else
            set @CREATEORALTER = 'create ';

        if charindex('.', @INDIVIDUAL_NAMEFORMATFUNCTION) <= 0
            set @INDIVIDUAL_NAMEFORMATFUNCTION = 'dbo.' + @INDIVIDUAL_NAMEFORMATFUNCTION;

        set @SQL = @CREATEORALTER + 'function dbo.UFN_CONSTITUENT_DISPLAYNAME' + char(10);
        set @SQL = @SQL + '(@ID uniqueidentifier)' + char(10);
        set @SQL = @SQL + 'returns table as' + char(10);
        set @SQL = @SQL + 'return (' + char(10);
        set @SQL = @SQL + '  select' + char(10);
        set @SQL = @SQL + '    case C.ISORGANIZATION when 1 then' + char(10);
        set @SQL = @SQL + '       case C.KEYNAMEPREFIX when '''' then C.KEYNAME else C.KEYNAMEPREFIX + '' '' + C.KEYNAME end' + char(10);
        set @SQL = @SQL + '    else' + char(10);
        set @SQL = @SQL + '      case C.ISGROUP when 1 then' + char(10);
        set @SQL = @SQL + '        case C.DISPLAYNAME when '''' then C.KEYNAME else C.DISPLAYNAME end' + char(10);
        set @SQL = @SQL + '      else' + char(10);
        set @SQL = @SQL + '        NF.NAME' + char(10);
        set @SQL = @SQL + '      end' + char(10);
        set @SQL = @SQL + '    end as NAME' + char(10);
        set @SQL = @SQL + '  from dbo.CONSTITUENT C' + char(10);
        set @SQL = @SQL + '    outer apply ' + @INDIVIDUAL_NAMEFORMATFUNCTION + '(C.ID) as NF' + char(10);
        set @SQL = @SQL + '  where C.ID = @ID' + char(10);
        set @SQL = @SQL + ')' + char(10);

        exec (@SQL);
    end
end