USP_QUEUEPROCESS_APPUSER_GRANTED_ALL_STEPS

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN
@STEPLISTXML xml IN
@GRANTED bit INOUT

Definition

Copy

        create procedure dbo.[USP_QUEUEPROCESS_APPUSER_GRANTED_ALL_STEPS]
        (
            @CURRENTAPPUSERID uniqueidentifier,
            @STEPLISTXML xml,
            @GRANTED bit output
        )
        as 
            begin
                set nocount on;

            if dbo.[UFN_APPUSER_ISSYSADMIN](@CURRENTAPPUSERID) = 1
              set @GRANTED = 1
            else
              begin
                    declare @STEPSTABLE table ([BUSINESSPROCESSCATALOGID] uniqueidentifier, [PARAMETERSETID] uniqueidentifier);

                    -- unwrap the steps
                    insert into @STEPSTABLE ([BUSINESSPROCESSCATALOGID], [PARAMETERSETID])
                    select 
                        T.c.value('(BUSINESSPROCESSCATALOGID)[1]', 'uniqueidentifier') as 'BUSINESSPROCESSCATALOGID',
                        T.c.value('(PARAMETERSETID)[1]', 'uniqueidentifier') as 'PARAMETERSETID'
                      from @STEPLISTXML.nodes('/STEPS/ITEM') T(c);

                    -- check any steps that involve the KPI instance, mailing, or mailing export record types
                    declare CHECK_CURSOR cursor local fast_forward for
                    select 
                          S.[PARAMETERSETID],
                          C.[PARAMETERTABLENAME],
                          upper(R.[NAME]) as [RECORDTYPE],
                    I.[ID] as [INSTANCEID]
                      from @STEPSTABLE S
                      inner join dbo.[BUSINESSPROCESSCATALOG] C on C.[ID] = S.[BUSINESSPROCESSCATALOGID]
                      left outer join dbo.[RECORDTYPE] R on R.[ID] = C.[RECORDTYPEID]
                  left outer join dbo.[BUSINESSPROCESSINSTANCE] I on I.[BUSINESSPROCESSPARAMETERSETID] = S.[PARAMETERSETID]
                     where upper(R.[NAME]) = 'KPI INSTANCE'
                          or upper(R.[NAME]) = 'MAILING'
                          or upper(R.[NAME]) = 'MAILING EXPORT'
                    or I.[ID] is not null;

                    declare @PARAMETERSETID uniqueidentifier;
                    declare @PARAMETERTABLENAME nvarchar(100);
                    declare @RECORDTYPE nvarchar(50);
                declare @INSTANCEID uniqueidentifier;

                    declare @SQL nvarchar(max);

                    set @GRANTED = 1;

                    open CHECK_CURSOR;

                    fetch next from CHECK_CURSOR into @PARAMETERSETID, @PARAMETERTABLENAME, @RECORDTYPE, @INSTANCEID;

                    while @@FETCH_STATUS = 0 
                    begin

                      if @RECORDTYPE = 'KPI INSTANCE'
                        -- @PARAMETERSETID = KPIINSTANCE.ID
                        set @GRANTED = dbo.[UFN_SECURITY_APPUSER_GRANTED_KPIINSTANCE](@CURRENTAPPUSERID, @PARAMETERSETID);
                      else
                          -- mailing, mailing export
                          if @RECORDTYPE = 'MAILING' or @RECORDTYPE = 'MAILING EXPORT'
                            begin
                                -- @PARAMETERSETID gets you from the parameter table to MKTSEGMENTATION,
                                -- since all of the parameter tables have SEGMENTATIONID in them
                                set @SQL = 'select @GRANTED = dbo.[UFN_SITEALLOWEDFORUSER](@CURRENTAPPUSERID, [MKTSEGMENTATION].[SITEID])' + char(13) +
                                               '  from dbo.[' + @PARAMETERTABLENAME + ']' + char(13) +
                                               '  inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [' + @PARAMETERTABLENAME + '].[SEGMENTATIONID]' + char(13) +
                                               ' where [' + @PARAMETERTABLENAME + '].[ID] = @PARAMETERSETID';

                                exec sp_executesql @SQL, N'@GRANTED bit output, @CURRENTAPPUSERID uniqueidentifier, @PARAMETERSETID uniqueidentifier', @GRANTED = @GRANTED output, @CURRENTAPPUSERID = @CURRENTAPPUSERID, @PARAMETERSETID = @PARAMETERSETID;
                            end
                    else
                      if @INSTANCEID is not null
                        set @GRANTED = dbo.[UFN_SECURITY_APPUSER_GRANTED_BUSINESSPROCESSINSTANCE_IN_SYSTEMROLE](@CURRENTAPPUSERID, @INSTANCEID)

                      if @GRANTED = 0 break;

                      fetch next from CHECK_CURSOR into @PARAMETERSETID, @PARAMETERTABLENAME, @RECORDTYPE, @INSTANCEID;
                    end

                    close CHECK_CURSOR;

                    deallocate CHECK_CURSOR;
                end;
          end;