USP_DATALIST_QUERY
Returns a list of all queries.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@NAME | nvarchar(100) | IN | Name |
@ONLYSHOWMYQUERIES | bit | IN | Only show my queries |
@RECORDTYPEID | uniqueidentifier | IN | Type |
@QUERYCATEGORYCODEID | uniqueidentifier | IN | Category |
@SITEFILTERMODE | tinyint | IN | Sites |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | Input parameter indicating the ID of the feature to use for site security checking. |
@SECURITYFEATURETYPE | tinyint | IN | Input parameter indicating the type of the feature to use for site security checking. |
@INCLUDEFOLDERS | bit | IN | |
@ONLYSHOWMOBILIZED | bit | IN | Only show mobilized |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_QUERY
(
@CURRENTAPPUSERID uniqueidentifier,
@NAME nvarchar(100) = null,
@ONLYSHOWMYQUERIES bit = null,
@RECORDTYPEID uniqueidentifier = null,
@QUERYCATEGORYCODEID uniqueidentifier = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@INCLUDEFOLDERS bit = 0,
@ONLYSHOWMOBILIZED bit = 0
)
as
set nocount on;
declare @QUERYCATEGORYCODEIDNOTNULL as uniqueidentifier;
declare @RECORDTYPEIDNOTNULL as uniqueidentifier;
if @RECORDTYPEID = '00000000-0000-0000-0000-000000000001'
set @RECORDTYPEIDNOTNULL = null;
else
set @RECORDTYPEIDNOTNULL = @RECORDTYPEID;
if @QUERYCATEGORYCODEID = '00000000-0000-0000-0000-000000000001'
set @QUERYCATEGORYCODEIDNOTNULL = null;
else
set @QUERYCATEGORYCODEIDNOTNULL = @QUERYCATEGORYCODEID;
declare @ISSYSADMIN bit;
declare @HASQUERYVIEWSYSTEMPRIVILEGE bit = 0;
select @ISSYSADMIN = ISSYSADMIN from dbo.APPUSER where ID = @CURRENTAPPUSERID;
/* Filter out any ad-hoc/smart queries involving query views to which the current user does not have access */
if (@ISSYSADMIN = 0)
begin
select @HASQUERYVIEWSYSTEMPRIVILEGE = dbo.UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE(@CURRENTAPPUSERID, '5f9bbcaf-9c67-4539-9880-ae4f709a9c1f')
if (@HASQUERYVIEWSYSTEMPRIVILEGE = 0)
begin
declare @ADHOCCATALOGITEMS table (OBJECTNAME nvarchar(128));
insert into @ADHOCCATALOGITEMS (OBJECTNAME)
select
QUERYVIEWCATALOG.OBJECTNAME
from
dbo.QUERYVIEWCATALOG
where
exists
(
select [ADHOCCATALOGITEMS].QUERYVIEWCATALOGID
from dbo.UFN_SECURITY_GETGRANTEDQUERYVIEWSFORUSER(@CURRENTAPPUSERID) as [ADHOCCATALOGITEMS] where [ADHOCCATALOGITEMS].QUERYVIEWCATALOGID = QUERYVIEWCATALOG.ID
);
end
declare @SMARTCATALOGITEMS table (SMARTQUERYCATALOGID uniqueidentifier);
insert into @SMARTCATALOGITEMS (SMARTQUERYCATALOGID)
select
SMARTQUERYCATALOG.ID
from dbo.SMARTQUERYCATALOG
where
exists
(
select [SMARTCATALOGITEMS].SMARTQUERYCATALOGID
from dbo.UFN_SECURITY_GETGRANTEDSMARTQUERIESFORUSER(@CURRENTAPPUSERID) as [SMARTCATALOGITEMS] where [SMARTCATALOGITEMS].SMARTQUERYCATALOGID = SMARTQUERYCATALOG.ID
);
end;
declare @PERMISSIONEDFOLDERS table
(
FOLDERID uniqueidentifier
);
insert into @PERMISSIONEDFOLDERS (FOLDERID)
select ID
from dbo.UFN_ADHOCQUERYFOLDERS_GETUSERSFOLDERS(@CURRENTAPPUSERID);
declare @QUERIESTOINCLUDE table
(
QUERYID uniqueidentifier,
FOLDERID uniqueidentifier,
QUERY_TYPE bit,
ISFAVORITE bit
);
declare @HASCRITERIA bit = 0;
if rtrim(ltrim(coalesce(@NAME, ''))) <> '' or coalesce(@SITEFILTERMODE, 0) <> 0 or @RECORDTYPEID is not null or @QUERYCATEGORYCODEID is not null or coalesce(@ONLYSHOWMYQUERIES, 0) <> 0 or @ONLYSHOWMOBILIZED <> 0
set @HASCRITERIA = 1;
insert into @QUERIESTOINCLUDE (QUERYID, FOLDERID, QUERY_TYPE, ISFAVORITE)
select
QUERY.ID,
QUERY.FOLDERID,
0,
case when exists(select ID from dbo.APPUSERADHOCQUERYFAVORITE where ADHOCQUERYID = QUERY.ID and APPUSERID = @CURRENTAPPUSERID)
then convert(bit, 1) else convert(bit, 0)
end as ISFAVORITE
from dbo.ADHOCQUERY QUERY
inner join dbo.QUERYVIEWCATALOG on QUERY.QUERYVIEWCATALOGID = QUERYVIEWCATALOG.ID
where
/* Filter out restricted query views */
((@ISSYSADMIN = 1 or
(@HASQUERYVIEWSYSTEMPRIVILEGE = 1 and (dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCE_IN_SYSTEMROLE(@CURRENTAPPUSERID, QUERY.ID) = 1)))
/* This will return a list of query views in use by the ad-hoc query but not in the ADHOCCATALOGITEMS variable;
These ad-hoc queries should not be returned to the client. */
or
(not exists(select [QUERYVIEWSINUSE].OBJECTNAME
from dbo.UFN_ADHOCQUERY_QUERYVIEWSINUSE(QUERY.QUERYDEFINITIONXML) as [QUERYVIEWSINUSE]
where not exists (
select [ADHOCCATALOGITEMS].OBJECTNAME
from @ADHOCCATALOGITEMS as [ADHOCCATALOGITEMS] where [ADHOCCATALOGITEMS].OBJECTNAME = [QUERYVIEWSINUSE].OBJECTNAME))
)
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCE_IN_SYSTEMROLE(@CURRENTAPPUSERID, QUERY.ID) = 1)
)
-- Ensure the folder the query belongs to is visible
and
(
QUERY.FOLDERID is null
or QUERY.FOLDERID in (select FOLDERID from @PERMISSIONEDFOLDERS)
)
/* End restricted query views filter */
and (@ONLYSHOWMOBILIZED = 0 or QUERY.MOBILIZE = 1)
and ((@NAME is null or @NAME = '') or QUERY.NAME like '%' + @NAME + '%')
and ((@ONLYSHOWMYQUERIES is null or @ONLYSHOWMYQUERIES = 0) or (@ONLYSHOWMYQUERIES = 1 and QUERY.OWNERID = @CURRENTAPPUSERID))
and (@RECORDTYPEID is null or ((@RECORDTYPEIDNOTNULL is null and QUERYVIEWCATALOG.RECORDTYPEID is null) or (QUERYVIEWCATALOG.RECORDTYPEID = @RECORDTYPEIDNOTNULL)))
and (@QUERYCATEGORYCODEID is null or ((@QUERYCATEGORYCODEIDNOTNULL is null and QUERY.QUERYCATEGORYCODEID is null) or (QUERY.QUERYCATEGORYCODEID = @QUERYCATEGORYCODEIDNOTNULL)))
and QUERYVIEWCATALOG.ROOTOBJECT = 1
and
(
QUERY.SITEID is null
or
(dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[QUERY].[SITEID] or (SITEID is null and [QUERY].[SITEID] is null)))
)
and
(
@SITEFILTERMODE = 0
or
QUERY.SITEID in (select SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED))
);
insert into @QUERIESTOINCLUDE (QUERYID, FOLDERID, QUERY_TYPE, ISFAVORITE)
select
QUERY.ID,
QUERY.FOLDERID,
1,
case when exists(select ID from dbo.APPUSERSMARTQUERYINSTANCEFAVORITE where SMARTQUERYINSTANCEID = QUERY.ID and APPUSERID = @CURRENTAPPUSERID)
then convert(bit, 1) else convert(bit, 0)
end as ISFAVORITE
from dbo.SMARTQUERYINSTANCE QUERY
inner join dbo.SMARTQUERYCATALOG on QUERY.SMARTQUERYCATALOGID = SMARTQUERYCATALOG.ID
where
/* Filter out restricted smart queries */
(@ISSYSADMIN = 1
/*This will return a list of smart queries in use by the smart query but not in the SMARTCATALOGITEMS variable;
These smart queries should not be returned to the client.*/
or
exists (select [SMARTCATALOGITEMS].SMARTQUERYCATALOGID
from @SMARTCATALOGITEMS as [SMARTCATALOGITEMS]
where [SMARTCATALOGITEMS].SMARTQUERYCATALOGID = SMARTQUERYCATALOG.ID)
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERYINSTANCE_IN_SYSTEMROLE(@CURRENTAPPUSERID, QUERY.ID) = 1)
)
-- Ensure the folder the query belongs to is visible
and
(
QUERY.FOLDERID is null
or QUERY.FOLDERID in (select FOLDERID from @PERMISSIONEDFOLDERS)
)
and (@ONLYSHOWMOBILIZED = 0 or QUERY.MOBILIZE = 1)
and ((@NAME is null or @NAME = '') or QUERY.NAME like '%' + @NAME + '%')
and ((@ONLYSHOWMYQUERIES is null or @ONLYSHOWMYQUERIES = 0) or (@ONLYSHOWMYQUERIES = 1 and QUERY.OWNERID = @CURRENTAPPUSERID))
and (@RECORDTYPEID is null or ((@RECORDTYPEIDNOTNULL is null and SMARTQUERYCATALOG.RECORDTYPEID is null) or (SMARTQUERYCATALOG.RECORDTYPEID = @RECORDTYPEIDNOTNULL)))
and (@QUERYCATEGORYCODEID is null or ((@QUERYCATEGORYCODEIDNOTNULL is null and QUERY.QUERYCATEGORYCODEID is null) or (QUERY.QUERYCATEGORYCODEID = @QUERYCATEGORYCODEIDNOTNULL)))
and
(
QUERY.SITEID is null
or
(dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[QUERY].[SITEID] or (SITEID is null and [QUERY].[SITEID] is null)))
)
and
(
@SITEFILTERMODE = 0
or
QUERY.SITEID in (select SITEID from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED))
);
declare @QUERYANCESTORS table
(
QUERYID uniqueidentifier,
ANCESTORFOLDERID uniqueidentifier
);
insert into @QUERYANCESTORS (QUERYID, ANCESTORFOLDERID)
select
QUERIESTOINCLUDE.QUERYID,
ANCESTORS.ID
from @QUERIESTOINCLUDE QUERIESTOINCLUDE
cross apply dbo.UFN_ADHOCQUERY_GETANCESTORS(QUERIESTOINCLUDE.FOLDERID) as ANCESTORS;
declare @QUERY_DETAIL table
(
QUERYID uniqueidentifier,
NAME nvarchar(255),
[DESCRIPTION] nvarchar(1024),
RECORDTYPEID uniqueidentifier,
PRIMARYKEYFIELD nvarchar(100),
[RECORDTYPE_NAME] nvarchar(50),
QUERYCATEGORYCODEID uniqueidentifier,
[QUERYCATEGORYCODE_DESCRIPTION] nvarchar(100),
CATALOG_NAME nvarchar(255),
[OWNER] nvarchar(128),
OWNERID uniqueidentifier,
OTHERSCANMODIFY bit,
DATEADDED datetime,
[ADDEDBY_USERNAME] nvarchar(128),
ISBROWSABLE bit,
[SITE] nvarchar(250),
ISQUERY bit,
PARENTFOLDERID uniqueidentifier,
IMAGEKEY nvarchar(30),
DISPLAYORDER int,
DISPLAYORDERNOTSET bit,
MOBILIZE bit,
USERCANEDIT bit,
QUERY_TYPE int,
QUERY_TYPE_NAME varchar(10),
ISFAVORITE bit
);
with xmlnamespaces ('bb_appfx_smartquery' as [ns])
insert into @QUERY_DETAIL (QUERYID,NAME,[DESCRIPTION],RECORDTYPEID,PRIMARYKEYFIELD, [RECORDTYPE_NAME],QUERYCATEGORYCODEID,[QUERYCATEGORYCODE_DESCRIPTION],CATALOG_NAME,[OWNER],OWNERID,OTHERSCANMODIFY,DATEADDED,[ADDEDBY_USERNAME],ISBROWSABLE,[SITE],ISQUERY,PARENTFOLDERID, IMAGEKEY,DISPLAYORDER,DISPLAYORDERNOTSET,MOBILIZE,USERCANEDIT,QUERY_TYPE,QUERY_TYPE_NAME,ISFAVORITE)
select
QUERY.ID as QUERYID,
QUERY.NAME,
QUERY.[DESCRIPTION],
QUERY.RECORDTYPEID,
QUERY.PRIMARYKEYFIELD,
RECORDTYPE.NAME [RECORDTYPE_NAME],
QUERY.QUERYCATEGORYCODEID,
QUERYCATEGORYCODE.[DESCRIPTION] [QUERYCATEGORYCODE_DESCRIPTION],
QUERY.CATALOG_NAME,
case when APPUSER.DISPLAYNAME = ''
then APPUSER.USERNAME
else APPUSER.DISPLAYNAME
end [OWNER],
QUERY.OWNERID,
QUERY.OTHERSCANMODIFY,
QUERY.DATEADDED,
CHANGEAGENT.USERNAME [ADDEDBY_USERNAME],
QUERY.ISBROWSABLE,
coalesce(SITE.NAME, 'All sites') [SITE],
cast(1 as bit) as ISQUERY,
QUERY.FOLDERID as PARENTFOLDERID,
null,
QUERY.DISPLAYORDER,
case
when DISPLAYORDER = 0 then 1
else 0
end as DISPLAYORDERNOTSET,
QUERY.MOBILIZE,
QUERY.USERCANEDIT,
QUERY.QUERY_TYPE,
case
when QUERY.QUERY_TYPE = 0 then 'Ad-hoc'
else 'Smart'
end as QUERY_TYPE_NAME,
QUERIESTOINCLUDE.ISFAVORITE
from @QUERIESTOINCLUDE as QUERIESTOINCLUDE
inner join
(
select
ADHOCQUERY.ID,
ADHOCQUERY.NAME,
ADHOCQUERY.[DESCRIPTION],
QUERYVIEWCATALOG.RECORDTYPEID,
'' as [PRIMARYKEYFIELD],
ADHOCQUERY.QUERYCATEGORYCODEID,
QUERYVIEWCATALOG.DISPLAYNAME CATALOG_NAME,
ADHOCQUERY.OWNERID,
ADHOCQUERY.OTHERSCANMODIFY,
ADHOCQUERY.DATEADDED,
ADHOCQUERY.ISBROWSABLE,
ADHOCQUERY.SITEID,
ADHOCQUERY.FOLDERID,
ADHOCQUERY.DISPLAYORDER,
ADHOCQUERY.MOBILIZE,
case
when @ISSYSADMIN = 1 then cast(1 as bit)
when dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCEEDIT_IN_SYSTEMROLE(@CURRENTAPPUSERID, ADHOCQUERY.ID) = 1 then cast(1 as bit)
else cast(0 as bit)
end as USERCANEDIT,
ADHOCQUERY.ADDEDBYID,
0 as QUERY_TYPE
from dbo.ADHOCQUERY
inner join dbo.QUERYVIEWCATALOG on ADHOCQUERY.QUERYVIEWCATALOGID = QUERYVIEWCATALOG.ID
union all
select
SMARTQUERYINSTANCE.ID,
SMARTQUERYINSTANCE.NAME,
SMARTQUERYINSTANCE.[DESCRIPTION],
SMARTQUERYCATALOG.RECORDTYPEID,
(select T.c.value('@PrimaryKeyField', 'nvarchar(100)') from SMARTQUERYCATALOG.SMARTQUERYSPEC.nodes('ns:SmartQuerySpec') as T(c)) as [PRIMARYKEYFIELD],
SMARTQUERYINSTANCE.QUERYCATEGORYCODEID,
SMARTQUERYCATALOG.[NAME] CATALOG_NAME,
SMARTQUERYINSTANCE.OWNERID,
SMARTQUERYINSTANCE.OTHERSCANMODIFY,
SMARTQUERYINSTANCE.DATEADDED,
case (select coalesce(T.c.value('@PrimaryKeyField', 'nvarchar(100)'), '') from SMARTQUERYCATALOG.SMARTQUERYSPEC.nodes('ns:SmartQuerySpec') as T(c))
when '' then convert(bit, 0)
else convert(bit, 1) end as [ISBROWSABLE],
SMARTQUERYINSTANCE.SITEID,
SMARTQUERYINSTANCE.FOLDERID,
SMARTQUERYINSTANCE.DISPLAYORDER,
SMARTQUERYINSTANCE.MOBILIZE,
cast(1 as bit) as USERCANEDIT,
SMARTQUERYINSTANCE.ADDEDBYID,
1 as QUERY_TYPE
from dbo.SMARTQUERYINSTANCE
inner join dbo.SMARTQUERYCATALOG on SMARTQUERYINSTANCE.SMARTQUERYCATALOGID = SMARTQUERYCATALOG.ID
) as QUERY on QUERY.ID = QUERIESTOINCLUDE.QUERYID
left join dbo.RECORDTYPE on QUERY.RECORDTYPEID = RECORDTYPE.ID
left join dbo.APPUSER on QUERY.OWNERID = dbo.APPUSER.ID
left join dbo.QUERYCATEGORYCODE on QUERY.QUERYCATEGORYCODEID = QUERYCATEGORYCODE.ID
left join dbo.CHANGEAGENT on QUERY.ADDEDBYID = CHANGEAGENT.ID
left join dbo.[SITE] on QUERY.SITEID = [SITE].ID;
declare @FAVORITESFOLDERID uniqueidentifier = '00000000-0000-0000-0000-000000000001';
select
QUERY.QUERYID,
QUERY.NAME,
QUERY.[DESCRIPTION],
QUERY.RECORDTYPEID,
QUERY.PRIMARYKEYFIELD,
QUERY.[RECORDTYPE_NAME],
QUERY.QUERYCATEGORYCODEID,
QUERY.[QUERYCATEGORYCODE_DESCRIPTION],
QUERY.CATALOG_NAME,
QUERY.[OWNER],
QUERY.OWNERID,
QUERY.OTHERSCANMODIFY,
QUERY.DATEADDED,
QUERY.[ADDEDBY_USERNAME],
QUERY.ISBROWSABLE,
QUERY.[SITE],
QUERY.ISQUERY,
QUERY.PARENTFOLDERID,
QUERY.IMAGEKEY,
QUERY.DISPLAYORDER,
QUERY.DISPLAYORDERNOTSET,
QUERY.MOBILIZE,
QUERY.USERCANEDIT,
QUERY.QUERY_TYPE,
QUERY.QUERY_TYPE_NAME
from @QUERY_DETAIL as QUERY
union all
select
ADHOCQUERYFOLDER.ID,
ADHOCQUERYFOLDER.NAME + ' (' + cast((select count(*) from @QUERYANCESTORS as QUERYANCESTORS where QUERYANCESTORS.ANCESTORFOLDERID = ADHOCQUERYFOLDER.ID) as nvarchar(10)) + ')',
null,
null,
null,
null,
null,
null,
null,
null,
null,
cast(1 as bit) as OTHERSCANMODIFY,
null,
null,
null,
null,
cast(0 as bit) as ISQUERY,
ADHOCQUERYFOLDER.PARENTFOLDERID,
'RES:folder_closed',
ADHOCQUERYFOLDER.DISPLAYORDER,
case
when DISPLAYORDER = 0 then 1
else 0
end as DISPLAYORDERNOTSET,
null,
cast(0 as bit) as USERCANEDIT,
null,
null
from @PERMISSIONEDFOLDERS PERMISSIONEDFOLDERS
inner join dbo.ADHOCQUERYFOLDER on PERMISSIONEDFOLDERS.FOLDERID = ADHOCQUERYFOLDER.ID
where
@INCLUDEFOLDERS = 1 and
(@ISSYSADMIN = 1 or dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYFOLDER_IN_SYSTEMROLE(@CURRENTAPPUSERID, ADHOCQUERYFOLDER.ID) = 1) and
(
@HASCRITERIA = 0 or
-- Ensure that there are visible queries under this folder
exists
(
select 1 from
@QUERYANCESTORS as QUERYANCESTORS
where
QUERYANCESTORS.ANCESTORFOLDERID = ADHOCQUERYFOLDER.ID
)
)
union all
select
@FAVORITESFOLDERID,
'Favorites' + ' (' + cast((select count(*) from @QUERIESTOINCLUDE as QUERIESTOINCLUDE where QUERIESTOINCLUDE.ISFAVORITE = 1) as nvarchar(10)) + ')',
null,
null,
null,
null,
null,
null,
null,
null,
null,
cast(1 as bit) as OTHERSCANMODIFY,
null,
null,
null,
null,
cast(0 as bit) as ISQUERY,
null,
'RES:favorites_16',
0,
0 as DISPLAYORDERNOTSET,
null,
cast(0 as bit) as USERCANEDIT,
null,
null
where @INCLUDEFOLDERS = 1
union all
select
QUERY.QUERYID,
QUERY.NAME,
QUERY.[DESCRIPTION],
QUERY.RECORDTYPEID,
QUERY.PRIMARYKEYFIELD,
QUERY.[RECORDTYPE_NAME],
QUERY.QUERYCATEGORYCODEID,
QUERY.[QUERYCATEGORYCODE_DESCRIPTION],
QUERY.CATALOG_NAME,
QUERY.[OWNER],
QUERY.OWNERID,
QUERY.OTHERSCANMODIFY,
QUERY.DATEADDED,
QUERY.[ADDEDBY_USERNAME],
QUERY.ISBROWSABLE,
QUERY.[SITE],
QUERY.ISQUERY,
@FAVORITESFOLDERID as PARENTFOLDERID,
QUERY.IMAGEKEY,
QUERY.DISPLAYORDER,
QUERY.DISPLAYORDERNOTSET,
QUERY.MOBILIZE,
QUERY.USERCANEDIT,
QUERY.QUERY_TYPE,
QUERY.QUERY_TYPE_NAME
from @QUERY_DETAIL as QUERY
where QUERY.ISFAVORITE = 1 and @INCLUDEFOLDERS = 1
order by
-- This order statement is to ensure that rows with a blank DISPLAYORDER appear
-- after rows that have a set DISPLAYORDER
DISPLAYORDERNOTSET,
DISPLAYORDER,
NAME;