USP_MKTEXPORTDEFINITION_GETAVAILABLEFIELDS
Returns a list of available query fields for a specific record source.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@QUERYVIEWCATALOGID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTEXPORTDEFINITION_GETAVAILABLEFIELDS]
(
@QUERYVIEWCATALOGID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier
)
as
set nocount on;
declare @AVAILABLEFIELDS table (
[ID] uniqueidentifier,
[CATEGORYORDER] tinyint,
[QUERYVIEWCATALOGID] uniqueidentifier,
[CUSTOMQUERYVIEWCATALOGID] uniqueidentifier,
[QUERYVIEWNAME] nvarchar(255),
[CATEGORY] nvarchar(255),
[NAME] nvarchar(255),
[CAPTION] nvarchar(255),
[ISHIDDEN] nvarchar(5),
[TYPECODE] tinyint,
[DATATYPE] nvarchar(128),
[ISALLOWED] bit,
[INSTALLEDPRODUCTS] xml)
declare @QUERYVIEWNAME nvarchar(255);
declare @OUTPUTDEFINITIONXML xml;
declare @QUERYVIEWOBJECTNAME nvarchar(128);
declare @CUSTOMQUERYVIEWCATALOGID uniqueidentifier;
declare @ID uniqueidentifier;
declare @INSTALLEDPRODUCTS xml;
if (dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT](@QUERYVIEWCATALOGID) = 1)
begin
select
@QUERYVIEWNAME = [DISPLAYNAME],
@OUTPUTDEFINITIONXML = [OUTPUTDEFINITIONXML],
@QUERYVIEWOBJECTNAME = [OBJECTNAME]
from dbo.[QUERYVIEWCATALOG]
where [ID] = @QUERYVIEWCATALOGID;
-- query view fields
with xmlnamespaces ('bb_appfx_queryview' as QV, 'bb_appfx_commontypes' as C)
insert into @AVAILABLEFIELDS
select
newid() as [ID],
0 as [CATEGORYORDER],
@QUERYVIEWCATALOGID as [QUERYVIEWCATALOGID],
null as [CUSTOMQUERYVIEWCATALOGID],
@QUERYVIEWNAME as [QUERYVIEWNAME],
T.c.value('(@Category)[1]','nvarchar(255)') as [CATEGORY],
T.c.value('(@Name)[1]','nvarchar(255)') as [NAME],
isnull(T.c.value('(@Caption)[1]','nvarchar(255)'), T.c.value('(@Name)[1]','nvarchar(255)')) as [CAPTION],
isnull(T.c.value('(@IsHidden)[1]', 'nvarchar(5)'), 'false') as [ISHIDDEN],
0 as [TYPECODE],
(select isnull([DOMAIN_NAME], [DATA_TYPE]) from INFORMATION_SCHEMA.COLUMNS where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @QUERYVIEWOBJECTNAME and [COLUMN_NAME] = T.c.value('(@Name)[1]','nvarchar(255)')) as [DATATYPE],
1 as [ISALLOWED],
T.c.query('./C:InstalledProductList/C:InstalledProduct') as [INSTALLEDPRODUCTS]
from @OUTPUTDEFINITIONXML.nodes('/QueryViewOutput/QV:OutputFields/QV:OutputField') T(c);
if (dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC](@QUERYVIEWCATALOGID) = 1 and dbo.[UFN_MKTRECORDSOURCE_ISDONORRECORDSOURCE](@QUERYVIEWCATALOGID) = 1) or
exists (select top 1 1 from dbo.[MKTCONSOLIDATEDQUERYVIEWSPEC] where [CONSOLIDATEDQUERYVIEWCATALOGID] = @QUERYVIEWCATALOGID and dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC]([ID]) = 1 and dbo.[UFN_MKTRECORDSOURCE_ISDONORRECORDSOURCE]([ID]) = 1)
insert into @AVAILABLEFIELDS values (
newid(),
0,
@QUERYVIEWCATALOGID,
null,
@QUERYVIEWNAME,
null,
'CONTACTADDRESSEE',
'Contact addressee',
'false',
4,
'nvarchar',
1,
null);
if exists (select top 1 1 from dbo.[MKTMEMBERSHIPRECORDSOURCE] where [QUERYVIEWCATALOGID] = @QUERYVIEWCATALOGID)
insert into @AVAILABLEFIELDS values (
newid(),
0,
@QUERYVIEWCATALOGID,
null,
@QUERYVIEWNAME,
null,
'ISMEMBER',
'Is member?',
'false',
4,
'bit',
1,
null);
-- if the consolidated query view ID has been passed, use the underlying record source's query view ID to
-- find smart fields and custom query view fields
select
@QUERYVIEWCATALOGID = isnull([ID], @QUERYVIEWCATALOGID)
from dbo.[MKTCONSOLIDATEDQUERYVIEWSPEC]
where [CONSOLIDATEDQUERYVIEWCATALOGID] = @QUERYVIEWCATALOGID;
--Remove any fields that have product flags that are not installed...
declare PRODUCTCURSOR cursor local fast_forward for
select
[ID],
[INSTALLEDPRODUCTS]
from @AVAILABLEFIELDS
where [INSTALLEDPRODUCTS] is not null
and cast([INSTALLEDPRODUCTS] as varchar(max)) <> '';
open PRODUCTCURSOR;
fetch next from PRODUCTCURSOR into @ID, @INSTALLEDPRODUCTS
while (@@FETCH_STATUS = 0)
begin
if not exists(select top 1 1 from @INSTALLEDPRODUCTS.nodes('declare namespace C="bb_appfx_commontypes"; /C:InstalledProduct') T(c) where dbo.[UFN_INSTALLEDPRODUCTS_PRODUCTIS](T.c.value('(@ID)[1]', 'uniqueidentifier')) = 1)
delete @AVAILABLEFIELDS
where [ID] = @ID;
fetch next from PRODUCTCURSOR into @ID, @INSTALLEDPRODUCTS
end
close PRODUCTCURSOR;
deallocate PRODUCTCURSOR;
end
select
[QUERYVIEWCATALOGID],
[CUSTOMQUERYVIEWCATALOGID],
[QUERYVIEWNAME],
[CATEGORY],
[NAME],
[CAPTION],
[ISHIDDEN],
[TYPECODE],
[DATATYPE],
[ISALLOWED]
from @AVAILABLEFIELDS
order by [CATEGORYORDER], [QUERYVIEWNAME], [CATEGORY], [CAPTION], [NAME];
return 0;