USP_MKTSEGMENT_COPY
Executes the "Segment: Copy" record operation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | Input parameter indicating the ID of the record being updated. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the update. |
Definition
Copy
CREATE procedure dbo.[USP_MKTSEGMENT_COPY]
(
@ID uniqueidentifier output,
@CHANGEAGENTID uniqueidentifier
)
as
set nocount on;
declare @SOURCESEGMENTID uniqueidentifier;
declare @TARGETSEGMENTID uniqueidentifier;
declare @SEGMENTTYPECODE tinyint;
declare @DATALOADED bit;
declare @NAME nvarchar(100);
declare @DESCRIPTION nvarchar(255);
declare @SITEID uniqueidentifier;
declare @CODE nvarchar(10);
declare @QUERYVIEWCATALOGID uniqueidentifier;
declare @SELECTIONS xml;
declare @TEMPSELECTIONS table ([ID] uniqueidentifier, [SELECTIONID] uniqueidentifier);
declare @GROUPS xml;
declare @TEMPGROUPS table ([ID] uniqueidentifier, [SEGMENTGROUPID] uniqueidentifier);
declare @SMARTQUERIESEXIST bit;
declare @ISINUSE bit;
declare @SELECTIONTYPE tinyint;
declare @TSLONG bigint;
declare @UNIQUENAME nvarchar(100);
declare @SEGMENTCATEGORYCODEID uniqueidentifier;
declare @CODEVALUEID uniqueidentifier;
begin try
if @CHANGEAGENTID is null
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;
set @SOURCESEGMENTID = @ID;
set @TARGETSEGMENTID = newid();
select @SEGMENTTYPECODE = [SEGMENTTYPECODE]
from dbo.[MKTSEGMENT]
where [ID] = @SOURCESEGMENTID;
--Only constituent and revenue segments can be copied this way, because CODE is not required nor required to be unique.
--Copying of list segments must be mediated by the user, to ensure a unique code is assigned. -- see SegmentListCopy.Edit.xml
if @SEGMENTTYPECODE in (1, 3, 4, 5)
begin
if @SEGMENTTYPECODE = 1
exec dbo.[USP_DATAFORMTEMPLATE_EDITLOAD_MKTSEGMENT_2] @ID, null, @DATALOADED output, @NAME output, @DESCRIPTION output, @SEGMENTCATEGORYCODEID output, @CODE output, @QUERYVIEWCATALOGID output, @SELECTIONS output, @GROUPS output, @SMARTQUERIESEXIST output, @ISINUSE output, null, null, @CODEVALUEID output, @TSLONG output, @SITEID output, null;
else if @SEGMENTTYPECODE = 3
exec dbo.[USP_DATAFORMTEMPLATE_EDITLOAD_MKTSEGMENTREVENUE_2] @ID, null, @DATALOADED output, @NAME output, @DESCRIPTION output, @SEGMENTCATEGORYCODEID output, @CODE output, @QUERYVIEWCATALOGID output, @SELECTIONS output, @GROUPS output, @SMARTQUERIESEXIST output, @ISINUSE output, @SELECTIONTYPE output, null, null, @CODEVALUEID output, @TSLONG output, @SITEID output, null;
else if @SEGMENTTYPECODE = 4
exec dbo.[USP_DATAFORMTEMPLATE_EDITLOAD_MKTSEGMENTMEMBERSHIP] @ID, null, @DATALOADED output, @NAME output, @DESCRIPTION output, @SEGMENTCATEGORYCODEID output, @CODE output, @QUERYVIEWCATALOGID output, @SELECTIONS output, @GROUPS output, @SMARTQUERIESEXIST output, @ISINUSE output, @SELECTIONTYPE output, null, null, @CODEVALUEID output, @TSLONG output, @SITEID output, null;
else if @SEGMENTTYPECODE = 5
exec dbo.[USP_DATAFORMTEMPLATE_EDITLOAD_MKTSEGMENTSPONSORSHIP] @ID, null, @DATALOADED output, @NAME output, @DESCRIPTION output, @SEGMENTCATEGORYCODEID output, @CODE output, @QUERYVIEWCATALOGID output, @SELECTIONS output, @GROUPS output, @SMARTQUERIESEXIST output, @ISINUSE output, @SELECTIONTYPE output, null, null, @CODEVALUEID output, @TSLONG output, @SITEID output, null;
set @UNIQUENAME = dbo.[UFN_MKTSEGMENT_GETUNIQUENAME](@TARGETSEGMENTID, @NAME, null);
-- codes have to be unique if they're present
if dbo.[UFN_MKTSOURCECODEPARTDEFINITIONVALUE_GETAUTOINCREMENTSETTING](@CODEVALUEID) = 1
set @CODE = dbo.[UFN_MKTSOURCECODE_AUTOINCREMENTCODE](@CODEVALUEID, 0);
else
set @CODE = '';
-- have to null out the IDs in the XML to avoid PK constraint violations in the
-- MKTSEGMENTSELECTION and MKTSEGMENTGROUP tables
insert into @TEMPSELECTIONS
select null, [SELECTIONID]
from dbo.[UFN_MKTSEGMENT_GETSELECTIONS_FROMITEMLISTXML](@SELECTIONS);
select @SELECTIONS = (select [ID], [SELECTIONID]
from @TEMPSELECTIONS
for xml raw('ITEM'), type, elements, root('SELECTIONS'), binary base64);
insert into @TEMPGROUPS
select null, [SEGMENTGROUPID]
from dbo.[UFN_MKTSEGMENT_GETGROUPS_FROMITEMLISTXML](@GROUPS);
select @GROUPS = (select [ID], [SEGMENTGROUPID]
from @TEMPGROUPS
for xml raw('ITEM'), type, elements, root('GROUPS'), binary base64);
if @SEGMENTTYPECODE = 1
exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENT] @TARGETSEGMENTID, @CHANGEAGENTID, @QUERYVIEWCATALOGID, @UNIQUENAME, @DESCRIPTION, @CODE, @SELECTIONS, @GROUPS, 1, @SEGMENTCATEGORYCODEID, @CODEVALUEID, @SITEID;
else if @SEGMENTTYPECODE = 3
exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTREVENUE] @TARGETSEGMENTID, @CHANGEAGENTID, @QUERYVIEWCATALOGID, @UNIQUENAME, @DESCRIPTION, @CODE, @SELECTIONS, @GROUPS, @SEGMENTCATEGORYCODEID, @CODEVALUEID, @SITEID;
else if @SEGMENTTYPECODE = 4
exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTMEMBERSHIP] @TARGETSEGMENTID, @CHANGEAGENTID, @QUERYVIEWCATALOGID, @UNIQUENAME, @DESCRIPTION, @CODE, @SELECTIONS, @GROUPS, @SEGMENTCATEGORYCODEID, @CODEVALUEID, @SITEID;
else if @SEGMENTTYPECODE = 5
exec dbo.[USP_DATAFORMTEMPLATE_ADD_MKTSEGMENTSPONSORSHIP] @TARGETSEGMENTID, @CHANGEAGENTID, @QUERYVIEWCATALOGID, @UNIQUENAME, @DESCRIPTION, @CODE, @SELECTIONS, @GROUPS, @SEGMENTCATEGORYCODEID, @CODEVALUEID, @SITEID;
set @ID = @TARGETSEGMENTID;
end
else
raiserror('BBERR_MKTSEGMENTCOPY_SEGMENTTYPEINVALID', 13, 1);
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;