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;