USP_GLOBALCHANGE_DELETECONSTITUENTATTRIBUTE

Parameters

Parameter Parameter Type Mode Description
@IDSETREGISTERID uniqueidentifier IN
@ATTRIBUTECATEGORYID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@ASOF datetime IN
@NUMBERADDED int INOUT
@NUMBEREDITED int INOUT
@NUMBERDELETED int INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@STRINGVALUE nvarchar(250) IN
@NUMBERVALUE int IN
@MONEYVALUE money IN
@DATEVALUE datetime IN
@BOOLEANVALUE bit IN
@CODETABLEVALUE uniqueidentifier IN
@FUZZYDATEVALUE UDT_FUZZYDATE IN
@CONSTITUENTIDVALUE uniqueidentifier IN
@HOURMINUTEVALUE UDT_HOURMINUTE IN
@MEMOVALUE nvarchar(max) IN
@CURRENCYID uniqueidentifier IN
@DELETETYPE tinyint IN

Definition

Copy


      CREATE procedure dbo.USP_GLOBALCHANGE_DELETECONSTITUENTATTRIBUTE
      (
        @IDSETREGISTERID uniqueidentifier = null
        @ATTRIBUTECATEGORYID uniqueidentifier,
        @CHANGEAGENTID uniqueidentifier = null,
        @ASOF as datetime = null,
        @NUMBERADDED int = 0 output,
        @NUMBEREDITED int = 0 output,
        @NUMBERDELETED int = 0 output,
        @CURRENTAPPUSERID uniqueidentifier = null,
        @STRINGVALUE nvarchar(250) = null,
        @NUMBERVALUE int = null,
        @MONEYVALUE money = null,
        @DATEVALUE datetime = null,
        @BOOLEANVALUE bit = null,
        @CODETABLEVALUE uniqueidentifier = null,
        @FUZZYDATEVALUE udt_fuzzydate = null,
        @CONSTITUENTIDVALUE uniqueidentifier = null,
        @HOURMINUTEVALUE udt_hourminute = null,
        @MEMOVALUE nvarchar(max) = null,
        @CURRENCYID uniqueidentifier = null,
        @DELETETYPE tinyint = null
      )
      as
        set nocount off;

        declare @ATTRIBUTETABLENAME nvarchar(128)
        declare @ONEPERRECORD bit
        declare @DATATYPE int;
        declare @VALUECOLUMNNAME nvarchar(128)

        set @NUMBERADDED = 0;
        set @NUMBEREDITED = 0;
        set @NUMBERDELETED = 0

        declare @BYPASSSECURITY bit;
        declare @BPID uniqueidentifier;
        declare @BYPASSSITESECURITY bit;
        declare @SECURITYCLAUSE nvarchar(max);
        declare @MULTIPLEATTRIBUTESECURITYCLAUSE nvarchar(max);
        declare @SECURITYPARAMETERS nvarchar(500);

        set @BPID = '3269A1D1-31CB-4D28-945C-B7623A3EFCCA';
        set @SECURITYPARAMETERS = ', @CURRENTAPPUSERIDPARAMETER uniqueidentifier, @BPIDPARAMETER uniqueidentifier, @BYPASSSECURITYPARAMETER bit, @BYPASSSITESECURITYPARAMETER bit'
        set @SECURITYCLAUSE = '
            left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBUSINESSPROCESS(@CURRENTAPPUSERIDPARAMETER, @BPIDPARAMETER) as CONSTIT_RACS on SELECTEDCONSTITUENT.ID = CONSTIT_RACS.ID
          where
            (@BYPASSSECURITYPARAMETER = 1 or CONSTIT_RACS.ID is not null)
            and 
            (
              @BYPASSSITESECURITYPARAMETER = 1 or 
              exists 
              (
                select 1 
                from dbo.CONSTITUENT --JamesWill WI172781 2011-08-25 Be sure to select from CONSTITUENT first to make sure we get a null back for constituents without sites

                left join dbo.CONSTITUENTSITE on CONSTITUENTSITE.CONSTITUENTID = CONSTITUENT.ID
                where CONSTITUENT.ID = SELECTEDCONSTITUENT.ID 
                and dbo.UFN_SECURITY_APPUSER_GRANTED_BUSINESSPROCESS_FORSITE(@CURRENTAPPUSERIDPARAMETER, @BPIDPARAMETER, CONSTITUENTSITE.SITEID) = 1
              )
            )
          ';

        set @MULTIPLEATTRIBUTESECURITYCLAUSE = '
            left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBUSINESSPROCESS(@CURRENTAPPUSERIDPARAMETER, @BPIDPARAMETER) as CONSTIT_RACS on SELECTEDCONSTITUENT.CONSTITUENTID = CONSTIT_RACS.ID
          where
            (@BYPASSSECURITYPARAMETER = 1 or CONSTIT_RACS.ID is not null)
            and 
            (
              @BYPASSSITESECURITYPARAMETER = 1 or 
              exists 
              (
                select 1 
                from dbo.CONSTITUENT --JamesWill WI172781 2011-08-25 Be sure to select from CONSTITUENT first to make sure we get a null back for constituents without sites

                left join dbo.CONSTITUENTSITE on CONSTITUENTSITE.CONSTITUENTID = CONSTITUENT.ID
                where CONSTITUENT.ID = SELECTEDCONSTITUENT.ID 
                and dbo.UFN_SECURITY_APPUSER_GRANTED_BUSINESSPROCESS_FORSITE(@CURRENTAPPUSERIDPARAMETER, @BPIDPARAMETER, CONSTITUENTSITE.SITEID) = 1
              )
            )
          ';

        exec dbo.USP_SECURITY_APPUSER_BYPASSSECURITYFORBUSINESSPROCESS @CURRENTAPPUSERID, @BPID, @BYPASSSECURITY output, @BYPASSSITESECURITY output;

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

        select 
          @DATATYPE = ATTRIBUTECATEGORY.DATATYPECODE, 
          @ATTRIBUTETABLENAME = TABLECATALOG.TABLENAME, 
          @ONEPERRECORD = ATTRIBUTECATEGORY.ONLYALLOWONEPERRECORD,
          @VALUECOLUMNNAME = ATTRIBUTECATEGORY.VALUECOLUMNNAME
        from 
          dbo.ATTRIBUTECATEGORY 
          inner join dbo.TABLECATALOG on TABLECATALOG.ID = ATTRIBUTECATEGORY.TABLECATALOGID 
        where 
          ATTRIBUTECATEGORY.ID = @ATTRIBUTECATEGORYID;

        declare @SELECTIONTABLESQL nvarchar(100);
        declare @SELECTION nvarchar(43);
        set @SELECTION = '';

        begin try
          declare @CONTEXTCACHE varbinary(128);
          declare @DELETESQL nvarchar(max);

          if @IDSETREGISTERID is not null 
            begin
              /* Create temp table to hold selection ID values */
              declare @PARAMETERDEFINITION nvarchar(500);
              set @PARAMETERDEFINITION = '@IDSETREGISTERIDPARAMETER uniqueidentifier';

              select @SELECTION = '##SELECTION' + replace(cast(newid() as nvarchar(36)),'-','')

              set @SELECTIONTABLESQL = 'create table ' + @SELECTION + '(ID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY)';
              exec sp_executesql @SELECTIONTABLESQL;

              declare @IDSETREGISTERSQL nvarchar(max);

              --retrieve records from the selection based on whether or not the user should bypass security

              if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
                begin
                  set @PARAMETERDEFINITION = '@IDSETREGISTERIDPARAMETER uniqueidentifier' + @SECURITYPARAMETERS;

                  --insert records from the selection for which the user has rights

                  set @IDSETREGISTERSQL = 'insert into ' + @SELECTION + '(ID) select SELECTEDCONSTITUENT.ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERIDPARAMETER) SELECTEDCONSTITUENT ' + @SECURITYCLAUSE;
                  exec sp_executesql @IDSETREGISTERSQL, @PARAMETERDEFINITION, @IDSETREGISTERIDPARAMETER = @IDSETREGISTERID, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY;

                end
              else
                begin
                  --insert all records from the selection

                  set @IDSETREGISTERSQL = 'insert into ' + @SELECTION + '(ID) select ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERIDPARAMETER)';
                  exec sp_executesql @IDSETREGISTERSQL, @PARAMETERDEFINITION, @IDSETREGISTERIDPARAMETER = @IDSETREGISTERID;
                end


              if @ONEPERRECORD = 1    
              begin
                set @DELETESQL = 'delete from dbo.[' + @ATTRIBUTETABLENAME + '] where ID in(select ID from ' + @SELECTION + ')';
              end
              else
              begin
                set @DELETESQL = 'delete from dbo.[' + @ATTRIBUTETABLENAME + '] where CONSTITUENTID in(select ID from ' + @SELECTION + ')';
              end

              -- append where clause when only certain values are to be deleted

              if @DELETETYPE = 1
              begin
                if @DATATYPE = 0 and @STRINGVALUE <> ''
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + @STRINGVALUE + ''''
                end
                else if @DATATYPE = 1 and @NUMBERVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ' + convert(nvarchar(max), @NUMBERVALUE)
                end
                else if @DATATYPE = 2 and @DATEVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @DATEVALUE) + ''''
                end
                else if @DATATYPE = 3 and @MONEYVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ' + convert(nvarchar(max), @MONEYVALUE)
                end
                else if @DATATYPE = 4 and @BOOLEANVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ' + convert(nvarchar(max), case @BOOLEANVALUE when 'TRUE' then 1 else 0 end)
                end
                else if @DATATYPE = 5 and @CODETABLEVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @CODETABLEVALUE) + ''''
                end
                else if @DATATYPE = 6 and @CONSTITUENTIDVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @CONSTITUENTIDVALUE) + ''''
                end
                else if @DATATYPE = 7 and @FUZZYDATEVALUE <> '00000000'
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @FUZZYDATEVALUE) + ''''
                end
                else if @DATATYPE = 8 and @HOURMINUTEVALUE <> ''
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @HOURMINUTEVALUE) + ''''
                end
                else if @DATATYPE = 9 and @MEMOVALUE <> ''
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + @MEMOVALUE + ''''
                end
              end

              /* Cache current context information@ */
              set @CONTEXTCACHE = CONTEXT_INFO();

              /* Set CONTEXT_INFO to @CHANGEAGENTID */
              set CONTEXT_INFO @CHANGEAGENTID;

              /* delete records */
              exec sp_executesql @DELETESQL
              set @NUMBERDELETED = @@ROWCOUNT;

              /* Reset CONTEXT_INFO to previous value */
              if not @contextCache is null begin
                set CONTEXT_INFO @CONTEXTCACHE;
              end 

              set @SELECTIONTABLESQL = 'drop table ' + @SELECTION;
              exec sp_executesql @SELECTIONTABLESQL;
              set @SELECTION = '';
            end
          else
            begin
              declare @DELETEPARAMETERDEFINITION nvarchar(500);
              set @DELETEPARAMETERDEFINITION = '@CURRENTAPPUSERIDPARAMETER uniqueidentifier, @BPIDPARAMETER uniqueidentifier, @BYPASSSECURITYPARAMETER bit, @BYPASSSITESECURITYPARAMETER bit'

              if @ONEPERRECORD = 1
                -- delete all attribute records for which the user has rights

                set @DELETESQL = 'delete from dbo.[' + @ATTRIBUTETABLENAME + '] where ID in 
                  (
                    select SELECTEDCONSTITUENT.ID 
                    from dbo.[' + @ATTRIBUTETABLENAME + '] SELECTEDCONSTITUENT ' + @SECURITYCLAUSE + 
                  ')';    
              else
                -- delete all attribute records for which the user has rights

                set @DELETESQL = 'delete from dbo.[' + @ATTRIBUTETABLENAME + '] where CONSTITUENTID in 
                  (
                    select SELECTEDCONSTITUENT.CONSTITUENTID
                    from dbo.[' + @ATTRIBUTETABLENAME + '] SELECTEDCONSTITUENT ' + @MULTIPLEATTRIBUTESECURITYCLAUSE + 
                  ')';

              -- append where clause when only certain values are to be deleted

              if @DELETETYPE = 1
              begin
                if @DATATYPE = 0 and @STRINGVALUE <> ''
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + @STRINGVALUE + ''''
                end
                else if @DATATYPE = 1 and @NUMBERVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ' + convert(nvarchar(max), @NUMBERVALUE)
                end
                else if @DATATYPE = 2 and @DATEVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @DATEVALUE) + ''''
                end
                else if @DATATYPE = 3 and @MONEYVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ' + convert(nvarchar(max), @MONEYVALUE)
                end
                else if @DATATYPE = 4 and @BOOLEANVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ' + convert(nvarchar(max), case @BOOLEANVALUE when 'TRUE' then 1 else 0 end)
                end
                else if @DATATYPE = 5 and @CODETABLEVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @CODETABLEVALUE) + ''''
                end
                else if @DATATYPE = 6 and @CONSTITUENTIDVALUE is not null
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @CONSTITUENTIDVALUE) + ''''
                end
                else if @DATATYPE = 7 and @FUZZYDATEVALUE <>  '00000000'
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @FUZZYDATEVALUE) + ''''
                end
                else if @DATATYPE = 8 and @HOURMINUTEVALUE <> ''
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + convert(nvarchar(max), @HOURMINUTEVALUE) + ''''
                end
                else if @DATATYPE = 9 and @MEMOVALUE <> ''
                begin
                  set @DELETESQL = @DELETESQL + ' and ' + @VALUECOLUMNNAME + ' = ''' + @MEMOVALUE + ''''
                end
              end

              /* Cache current context information@ */
              set @CONTEXTCACHE = CONTEXT_INFO();

              /* Set CONTEXT_INFO to @CHANGEAGENTID */
              set CONTEXT_INFO @CHANGEAGENTID;

              /* delete records */
              exec sp_executesql @DELETESQL, @DELETEPARAMETERDEFINITION, @CURRENTAPPUSERIDPARAMETER = @CURRENTAPPUSERID, @BPIDPARAMETER = @BPID, @BYPASSSECURITYPARAMETER = @BYPASSSECURITY, @BYPASSSITESECURITYPARAMETER = @BYPASSSITESECURITY;
              set @NUMBERDELETED = @@ROWCOUNT;

              /* Reset CONTEXT_INFO to previous value */
              if not @contextCache is null begin
                set CONTEXT_INFO @CONTEXTCACHE;
              end
            end
        end try

        begin catch
          if @SELECTION <> '' begin
            set @SELECTIONTABLESQL = 'drop table ' + @SELECTION;
            exec sp_executesql @SELECTIONTABLESQL 
          end

          exec dbo.USP_RAISE_ERROR;
          return 1;
        end catch