UFN_MKTSEGMENTATIONACTIVATE_VALIDATESOURCECODEUNIQUENESS
Returns that there are either no vendor managed segments in a marketing effort, or that there are and all of the source codes in the marketing effort are unique.
Return
Return Type |
---|
tinyint |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTATIONID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.[UFN_MKTSEGMENTATIONACTIVATE_VALIDATESOURCECODEUNIQUENESS]
(
@SEGMENTATIONID uniqueidentifier
)
returns tinyint
as
begin
declare @MAILINGTYPECODE tinyint;
declare @HASVENDORMANAGEDSEGMENTS bit = 0;
declare @SEGMENTATIONISHISTORICAL bit;
declare @SOURCECODEISHISTORICAL bit;
declare @SOURCECODESTABLE table ([SEGMENTID] uniqueidentifier not null, [TESTSEGMENTID] uniqueidentifier, [SOURCECODE] nvarchar(50));
declare @SEGMENTID uniqueidentifier;
declare @TESTSEGMENTID uniqueidentifier;
declare @SOURCECODE nvarchar(50);
declare @ERRORCODE tinyint;
set @ERRORCODE = 0;
select
@MAILINGTYPECODE = [MKTSEGMENTATION].[MAILINGTYPECODE],
@SEGMENTATIONISHISTORICAL = [MKTSEGMENTATION].[ISHISTORICAL],
@SOURCECODEISHISTORICAL = isnull([MKTSOURCECODE].[ISHISTORICAL], 0)
from dbo.[MKTSEGMENTATION]
left outer join dbo.[MKTSOURCECODE] on [MKTSOURCECODE].[ID] = [MKTSEGMENTATION].[SOURCECODEID]
where [MKTSEGMENTATION].[ID] = @SEGMENTATIONID;
-- get all the segments/test segments for the mailing so we can compare all of their source codes
insert into @SOURCECODESTABLE
select
[SEGMENTID],
[TESTSEGMENTID],
dbo.[UFN_MKTSOURCECODE_BUILDCODE](isnull([TESTSEGMENTID], [SEGMENTID]), default, default)
from dbo.[UFN_MKTSEGMENTATIONACTIVATE_GETSEGMENTS](@SEGMENTATIONID) as [SEGMENTS]
where [SEGMENTS].[EXCLUDE] = 0;
if @MAILINGTYPECODE = 0
-- (note that associating white mail segments with marketing efforts was ultimately scrapped and thus this will never return a row)
insert into @SOURCECODESTABLE
select
[ID],
null,
dbo.[UFN_MKTSOURCECODE_BUILDCODE]([ID], default, default)
from dbo.[MKTSEGMENTWHITEMAIL]
where [SEGMENTATIONID] = @SEGMENTATIONID;
if exists(select top 1 1
from @SOURCECODESTABLE as [SCT]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [SCT].[SEGMENTID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
where [MKTSEGMENT].[SEGMENTTYPECODE] = 2 and dbo.[UFN_MKTSEGMENT_ISVENDORMANAGEDLIST]([MKTSEGMENT].[ID]) = 1)
set @HASVENDORMANAGEDSEGMENTS = 1;
-- if there is at least one vendor managed segment
-- or if this is a public media marketing effort
-- or if this is a historical marketing effort
if @HASVENDORMANAGEDSEGMENTS = 1 or @MAILINGTYPECODE = 4 or @SEGMENTATIONISHISTORICAL = 1
begin
-- it doesn't make sense to allow a historical marketing effort, or any marketing effort with vendor managed segments, to be activated without a source code
-- returning an error code so that we can provide a better error message
if @HASVENDORMANAGEDSEGMENTS = 1 or @SEGMENTATIONISHISTORICAL = 1
if (select [SOURCECODEID] from dbo.[MKTSEGMENTATION] where [ID] = @SEGMENTATIONID) is null
set @ERRORCODE = 2;
if @ERRORCODE = 0
begin
-- loop through each applicable segment and make sure its source code is unique amongst all the other segments and test segments
if @MAILINGTYPECODE <> 4 and @SOURCECODEISHISTORICAL = 0
declare SEGMENTCURSOR cursor local fast_forward for
select
[TEMP].[SEGMENTID],
[TEMP].[TESTSEGMENTID],
dbo.[UFN_MKTSOURCECODE_BUILDCODE](isnull([TEMP].[TESTSEGMENTID], [TEMP].[SEGMENTID]), default, default)
from (
select [MKTSEGMENTATIONSEGMENT].[ID] as [SEGMENTID], [MKTSEGMENTATIONSEGMENT].[SEQUENCE] as [SEGMENTSEQUENCE], null as [TESTSEGMENTID], null as [TESTSEGMENTSEQUENCE]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
and [MKTSEGMENTLIST].[TYPECODE] = 1
union
select [MKTSEGMENTATIONSEGMENT].[ID] as [SEGMENTID], [MKTSEGMENTATIONSEGMENT].[SEQUENCE] as [SEGMENTSEQUENCE], [MKTSEGMENTATIONTESTSEGMENT].[ID] as [TESTSEGMENTID], [MKTSEGMENTATIONTESTSEGMENT].[SEQUENCE] as [TESTSEGMENTSEQUENCE]
from [MKTSEGMENTATIONTESTSEGMENT]
inner join [MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
and [MKTSEGMENTLIST].[TYPECODE] = 1
union
select [MKTSEGMENTWHITEMAIL].[ID] as [SEGMENTID], null as [SEGMENTSEQUENCE], null as [TESTSEGMENTID], null as [TESTSEGMENTSEQUENCE]
from dbo.[MKTSEGMENTWHITEMAIL]
where [MKTSEGMENTWHITEMAIL].[SEGMENTATIONID] = @SEGMENTATIONID
) as [TEMP]
group by [TEMP].[SEGMENTID], [TEMP].[TESTSEGMENTID], [TEMP].[SEGMENTSEQUENCE], [TEMP].[TESTSEGMENTSEQUENCE]
order by [TEMP].[SEGMENTSEQUENCE], [TEMP].[TESTSEGMENTSEQUENCE];
else
-- for public media marketing efforts or marketing efforts with historical source codes, check all of the segments
declare SEGMENTCURSOR cursor local fast_forward for
select
[MKTSEGMENTATIONSEGMENT].[ID] as [SEGMENTID],
null as [TESTSEGMENTID],
dbo.[UFN_MKTSOURCECODE_BUILDCODE]([MKTSEGMENTATIONSEGMENT].[ID], default, default)
from dbo.[MKTSEGMENTATIONSEGMENT]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
union
select
[MKTSEGMENTATIONSEGMENT].[ID] as [SEGMENTID],
[MKTSEGMENTATIONTESTSEGMENT].[ID] as [TESTSEGMENTID],
dbo.[UFN_MKTSOURCECODE_BUILDCODE]([MKTSEGMENTATIONTESTSEGMENT].[ID], default, default)
from dbo.[MKTSEGMENTATIONTESTSEGMENT]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID;
open SEGMENTCURSOR;
fetch next from SEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID, @SOURCECODE;
while (@@FETCH_STATUS = 0)
begin
-- check to make sure this segment's source code is unique amongst all the other segments and test segments
select @ERRORCODE = (case when count(1) = 0 then 0 else 1 end)
from @SOURCECODESTABLE
where (
[SEGMENTID] <> @SEGMENTID or
([SEGMENTID] = @SEGMENTID and
(
(@TESTSEGMENTID is null and [TESTSEGMENTID] is not null)
or
(@TESTSEGMENTID is not null and ([TESTSEGMENTID] is null or [TESTSEGMENTID] <> @TESTSEGMENTID))
)
)
)
and [SOURCECODE] = @SOURCECODE;
if @ERRORCODE <> 0
break;
fetch next from SEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID, @SOURCECODE;
end;
close SEGMENTCURSOR;
deallocate SEGMENTCURSOR;
end;
end;
-- if there are white mail segments in the mailing,
-- all of their source codes must be unique
-- and none of their codes can match any of the segment's codes
-- (note that associating white mail segments with marketing efforts was ultimately scrapped and thus this will never return a row)
if exists (select top 1 1 from @SOURCECODESTABLE as [SCT] inner join dbo.[MKTSEGMENTWHITEMAIL] on [MKTSEGMENTWHITEMAIL].[ID] = [SCT].[SEGMENTID])
begin
if exists (select top 1 1
from @SOURCECODESTABLE as [SCT]
inner join dbo.[MKTSEGMENTWHITEMAIL] on [MKTSEGMENTWHITEMAIL].[ID] = [SCT].[SEGMENTID]
group by [SCT].[SOURCECODE]
having count([SOURCECODE]) > 1)
set @ERRORCODE = 3;
else
begin
declare SEGMENTCURSOR cursor local fast_forward for
select
[TEMP].[SEGMENTID],
[TEMP].[TESTSEGMENTID],
dbo.UFN_MKTSOURCECODE_BUILDCODE(isnull([TEMP].[TESTSEGMENTID], [TEMP].[SEGMENTID]), default, default)
from (
select [MKTSEGMENTATIONSEGMENT].[ID] as [SEGMENTID], [MKTSEGMENTATIONSEGMENT].[SEQUENCE] as [SEGMENTSEQUENCE], null as [TESTSEGMENTID], null as [TESTSEGMENTSEQUENCE]
from dbo.[MKTSEGMENTATIONSEGMENT]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
union
select [MKTSEGMENTATIONSEGMENT].[ID] as [SEGMENTID], [MKTSEGMENTATIONSEGMENT].[SEQUENCE] as [SEGMENTSEQUENCE], [MKTSEGMENTATIONTESTSEGMENT].[ID] as [TESTSEGMENTID], [MKTSEGMENTATIONTESTSEGMENT].[SEQUENCE] as [TESTSEGMENTSEQUENCE]
from [MKTSEGMENTATIONTESTSEGMENT]
inner join [MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
) as [TEMP]
open SEGMENTCURSOR;
fetch next from SEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID, @SOURCECODE;
while (@@FETCH_STATUS = 0)
begin
-- check to make sure each segment's source code does not match a white mail segment's
select @ERRORCODE = (case when count(1) = 0 then 0 else 3 end)
from @SOURCECODESTABLE as [SCT]
inner join dbo.[MKTSEGMENTWHITEMAIL] on [MKTSEGMENTWHITEMAIL].[ID] = [SCT].[SEGMENTID]
where [SOURCECODE] = @SOURCECODE;
if @ERRORCODE <> 0
break;
fetch next from SEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID, @SOURCECODE;
end;
close SEGMENTCURSOR;
deallocate SEGMENTCURSOR;
end;
end;
return @ERRORCODE;
end