USP_DATAFORMTEMPLATE_EDIT_MKTDUPLICATE

The save procedure used by the edit dataform template "Record Source Duplicate Criteria Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@QUERYVIEWCATALOGID uniqueidentifier IN Query View Catalog ID
@DEDUPLISTS bit IN Apply duplicate criteria during list import
@DUPLICATEFIELDS xml IN Fields

Definition

Copy


CREATE procedure dbo.[USP_DATAFORMTEMPLATE_EDIT_MKTDUPLICATE]
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier,
  @QUERYVIEWCATALOGID uniqueidentifier,
  @DEDUPLISTS bit,
  @DUPLICATEFIELDS xml
)
as
  set nocount on;

  declare @DUPLICATEID uniqueidentifier;
  declare @SEGMENTLISTDUPLICATEPROCESSID uniqueidentifier;
  declare @SEGMENTLISTID uniqueidentifier;
  declare @CURRENTDATE datetime;

  set @CURRENTDATE = getdate();

  begin try
    if @CHANGEAGENTID is null  
      exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;

    --Since @ID is actually the queryviewcatalogID, get the duplicate ID for @ID

    select
      @DUPLICATEID = [ID] 
    from dbo.[MKTDUPLICATE]
    where [QUERYVIEWCATALOGID] = @ID;

    if @DUPLICATEID is null
      begin
        set @DUPLICATEID = newid();

        insert into dbo.[MKTDUPLICATE] (
          [ID],
          [QUERYVIEWCATALOGID],
          [DEDUPLISTS],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        ) values (
          @DUPLICATEID,
          @ID,
          @DEDUPLISTS,
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        );
      end
    else
      update dbo.[MKTDUPLICATE] set
        [QUERYVIEWCATALOGID] = @QUERYVIEWCATALOGID,
        [DEDUPLISTS] = @DEDUPLISTS,
        [CHANGEDBYID] = @CHANGEAGENTID,
        [DATECHANGED] = @CURRENTDATE
      where [ID] = @DUPLICATEID;


    --Save the duplicate fields...

    exec dbo.[USP_MKTDUPLICATE_GETDUPLICATEFIELDS_UPDATEFROMXML] @DUPLICATEID, @DUPLICATEFIELDS, @CHANGEAGENTID, @CURRENTDATE;


    if @DEDUPLISTS = 1
      begin
        --Find any list segments that do not already have a duplicate process parameter set and create one...

        declare LISTSEGMENTCURSOR cursor local fast_forward for
          select [MKTSEGMENTLIST].[ID]
          from dbo.[MKTSEGMENT]
          inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
          left join dbo.[MKTSEGMENTLISTDEDUPEPROCESS] on [MKTSEGMENTLISTDEDUPEPROCESS].[SEGMENTLISTID] = [MKTSEGMENTLIST].[ID]
          inner join dbo.[MKTDUPLICATE] on [MKTDUPLICATE].[QUERYVIEWCATALOGID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]
          where [MKTSEGMENTLIST].[TYPECODE] = 0
          and [MKTSEGMENTLIST].[STATUSCODE] = 3
          and [MKTSEGMENTLIST].[PARENTSEGMENTID] is null
          and [MKTSEGMENTLISTDEDUPEPROCESS].[ID] is null
          and [MKTDUPLICATE].[ID] = @DUPLICATEID
          and dbo.[UFN_MKTSEGMENTLIST_DUPLICATEFIELDSEXIST]([MKTSEGMENTLIST].[ID]) = 1;

        open LISTSEGMENTCURSOR;
        fetch next from LISTSEGMENTCURSOR into @SEGMENTLISTID;

        while (@@FETCH_STATUS = 0)
        begin
          --Create the duplicate process parameter set for the list segment...

          set @SEGMENTLISTDUPLICATEPROCESSID = null;
          exec dbo.[USP_MKTSEGMENTLISTDEDUPEPROCESS_CREATE] @SEGMENTLISTDUPLICATEPROCESSID output, @SEGMENTLISTID, @CHANGEAGENTID;

          fetch next from LISTSEGMENTCURSOR into @SEGMENTLISTID;
        end

        close LISTSEGMENTCURSOR;
        deallocate LISTSEGMENTCURSOR;
      end
  end try

  begin catch
    exec dbo.[USP_RAISE_ERROR];
    return 1;
  end catch

  return 0;