UFN_ADHOCQUERY_ISBROWSABLE
Determines whether an existing ad-hoc query can be browsed.
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@QUERYDEFINITIONXML | xml | IN | |
@ROOTOBJECT | nvarchar(255) | IN | |
@PRIMARYKEYFIELD | nvarchar(255) | IN |
Definition
Copy
CREATE function dbo.UFN_ADHOCQUERY_ISBROWSABLE(@QUERYDEFINITIONXML xml,
@ROOTOBJECT nvarchar(255),
@PRIMARYKEYFIELD nvarchar(255))
returns bit
as
begin
declare @RETURN_VALUE bit;
declare @QUERYVIEWHASPRIMARYKEYFIELD bit;
declare @SELECTSAGGREGATE bit;
declare @SELECTSPRIMARYKEYFIELD bit;
set @SELECTSAGGREGATE = 0;
set @SELECTSPRIMARYKEYFIELD = 0;
--If the query view doesn't have a primary key field specified, the ad-hoc query can't be browsed. Otherwise, check to see if the
--ad-hoc query contains an aggregate but not the primary key.
if not @PRIMARYKEYFIELD is null and @PRIMARYKEYFIELD <> ''
begin
set @QUERYVIEWHASPRIMARYKEYFIELD = 1;
--Check for the presence of an aggregate in the ad-hoc query's output.
with xmlnamespaces ('Blackbaud.AppFx.WebService.API.1' as [ns])
select @SELECTSAGGREGATE = 1
from @QUERYDEFINITIONXML.nodes('ns:AdHocQuery/ns:SelectFields/ns:f[string-length(@AggregateType) > 0]') as T(c);
--Check for the presence of the primary key with no aggregate type in the ad-hoc query's output.
with xmlnamespaces ('Blackbaud.AppFx.WebService.API.1' as [ns])
select @SELECTSPRIMARYKEYFIELD = 1
from @QUERYDEFINITIONXML.nodes('ns:AdHocQuery/ns:SelectFields/ns:f[string-length(@AggregateType) = 0]') as T(c)
where T.c.value('@ObjectName', 'nvarchar(255)') = @ROOTOBJECT
and T.c.value('@ColumnName', 'nvarchar(255)') = @PRIMARYKEYFIELD;
end;
if @QUERYVIEWHASPRIMARYKEYFIELD = 1 and (@SELECTSAGGREGATE = 0 or @SELECTSPRIMARYKEYFIELD = 1)
set @RETURN_VALUE = 1;
else
set @RETURN_VALUE = 0;
return @RETURN_VALUE;
end;