spAddUpdate_EmailList

Parameters

Parameter Parameter Type Mode Description
@UserID int IN
@ClientsID int IN
@PKID int INOUT
@Name nvarchar(256) IN
@Description nvarchar(256) IN
@Subscription bit IN
@QueryXML ntext IN
@Guid uniqueidentifier INOUT
@Type int IN
@DataSourceID int IN
@Options ntext IN
@AcquiredStatus int IN
@AcquiredDate datetime IN
@AcquiredMsg ntext IN
@AcquiredStartDate datetime IN
@AcquiredRecordCount int IN
@EmailDisplayNameFieldName nvarchar(128) IN
@EmailAddressFieldName nvarchar(128) IN
@UniqueKeyFieldName nvarchar(128) IN
@UploadFileName nvarchar(256) IN
@UploadFileSize int IN
@UploadedDataSourceID int IN
@ListDataSchema ntext IN
@FileContents image IN
@Origin tinyint IN
@UserImportID int IN
@BBDMListID nvarchar(255) IN
@SystemList bit IN
@CLIENTSITESID int IN

Definition

Copy

      CREATE  PROCEDURE [dbo].[spAddUpdate_EmailList]
(
    @UserID          int,
    @ClientsID        int,
    @PKID            int output,
    @Name             nvarchar(256),
    @Description    nvarchar(256),
    @Subscription    bit,
    @QueryXML        ntext,
    @Guid             uniqueidentifier output,
    @Type            int,
    @DataSourceID    int,
    @Options ntext,
    @AcquiredStatus int,
    @AcquiredDate datetime,
    @AcquiredMsg ntext,
    @AcquiredStartDate datetime,
    @AcquiredRecordCount int,
    @EmailDisplayNameFieldName nvarchar(128),
    @EmailAddressFieldName nvarchar(128),
    @UniqueKeyFieldName nvarchar(128),
    @UploadFileName nvarchar(256),
    @UploadFileSize int,
    @UploadedDataSourceID int
    @ListDataSchema ntext,
    @FileContents image,
    @Origin tinyint,
    @UserImportID int,
    @BBDMListID nvarchar(255),
    @SystemList bit,
    @CLIENTSITESID int = 0
)
AS
BEGIN
    set nocount on

        DECLARE @PopulateEmailField bit
        declare @UploadOrigin int
        SET @PopulateEmailField = 0

        if @CLIENTSITESID <= 0
            select @CLIENTSITESID = Value from dbo.Setting where ID = 1

        --For Uploaded Lists only
        --We need to update the masterlist with the email address of each record in the list,
        --but we only want to do this if this is an existing list and the EmailAddressFieldName has been changed
        --This process will take place in [spAddUploadedListToMasterList] proc for a new list
        declare @OldEmailColumnName nvarchar(200
        IF (@DataSourceID = 300 or @DataSourceID = 301) AND @PKID > 0 AND @EmailAddressFieldName <> (SELECT EmailAddressFieldName FROM dbo.EmailList WHERE [ID] = @PKID)
        begin
            SET @PopulateEmailField = 1
            set @OldEmailColumnName = (SELECT EmailAddressFieldName FROM dbo.EmailList WHERE [ID] = @PKID)
        end


        declare @NewRecord bit
        declare @NewDataSourceID int
        if (@PKID<=0) begin

            set @NewRecord = 1

            INSERT INTO EmailList
            (
                ClientsID,
                [Name],
                [Description],
                Guid,
                OwnerID,
                Subscription,
                Type,
                DatasourceID,
                Options,
                AcquiredStatus,
                AcquiredDate,
                AcquiredMsg,
                AcquiredStartDate,
                AcquiredRecordCount,
                EmailDisplayNameFieldName,
                EmailAddressFieldName,
                UniqueKeyFieldName,
                ListDataSchema,
                UploadedDataSourceID,
                Origin,
                UserImportID,
                BBDMListID,
                SystemList,
                CLIENTSITESID
            )

            VALUES
            (
                @ClientsID,
                @Name,
                @Description,
                NewID(),
                @UserID,
                @Subscription,
                @Type,
                @DatasourceID,
                @Options,
                @AcquiredStatus,
                @AcquiredDate,
                @AcquiredMsg,
                @AcquiredStartDate,
                @AcquiredRecordCount,
                @EmailDisplayNameFieldName,
                @EmailAddressFieldName,
                @UniqueKeyFieldName,
                @ListDataSchema,
                @UploadedDataSourceID,
                @Origin,
                @UserImportID,
                @BBDMListID,
                @SystemList,
                @CLIENTSITESID
            )

            select    @PKID = @@Identity

            select @Guid = Guid from dbo.EmailList where ID = @PKID

            exec spAuditThis @UserID, 1, @Guid, 12

            end

        ELSE
            begin

                set @NewRecord = 0

                UPDATE
                    EmailList

                SET
                    [Name] = @Name,
                    [Description] = @Description,
                    [Subscription] = @Subscription,
                    [Type] = @Type,
                    [DataSourceID] = @DataSourceID,
                    [Options] = @Options,
                    AcquiredStatus = @AcquiredStatus,
                    AcquiredDate = @AcquiredDate,
                    AcquiredMsg = @AcquiredMsg,
                    AcquiredStartDate = @AcquiredStartDate,
                    AcquiredRecordCount = @AcquiredRecordCount,
                    EmailDisplayNameFieldName = @EmailDisplayNameFieldName,
                    EmailAddressFieldName = @EmailAddressFieldName,
                    UniqueKeyFieldName = @UniqueKeyFieldName,
                    UploadedDataSourceID = @UploadedDataSourceID,
                    ListDataSchema = @ListDataSchema,
                    Origin = @Origin,
                    UserImportID=@UserImportID,
                    BBDMListID = @BBDMListID,
                    SystemList = @SystemList,
                    CLIENTSITESID = @CLIENTSITESID
                WHERE
                    Id    =     @PKID 

                if not exists
                (
                    select 1 from dbo.emaillist EL 
                    inner join dbo.sitefolders SF on SF.FolderID = EL.SITEFOLDERSID
                    where EL.ID = @PKID and sf.clientsitesid = @CLIENTSITESID
                )
                    update dbo.emaillist set SITEFOLDERSID = 0 where ID = @PKID;

                select @Guid = Guid from dbo.EmailList where ID = @PKID

                exec spAuditThis @UserID, 2, @Guid, 12


                --there may be a 1:1 linked datasource - update its name to keep it in sync
                update datasources 
                set [name] = @Name
                where ImportListID = @PKID


            end

        -- only hit filecontent cols if passing up a file        
        if (@UploadFileSize > 0) begin

            update EmailList 
                set FileContents = @FileContents,
                UploadFileSize = @UploadFileSize,
                UploadFileName = @UploadFileName
                where id=@PKID
        end



        -- adding new uploaded list - create datasource for it
        if (@NewRecord =1 and (@DataSourceID = 300)) begin


            if (@DataSourceID = 300
                -- uppoaded file
                set @UploadOrigin=1
            else
                -- API
                set @UploadOrigin=2

            -- generate next uploaded datasource id available
            select @NewDataSourceID=coalesce(max([DataSourceID])+1, 1001
                from dbo.DataSources 
                where [DataSourceID]>1000

            -- clone Datasource 300
            INSERT INTO [dbo].[DataSources]
                       ([DataSourceID]
                       ,[Name]
                       ,[TypeNamespace]
                       ,[TypeName]
                       ,[IsEmailListSource]
                       ,[BackOfficeSystemId]
                       ,[Available]
                       ,[SubscriberProviderForSystemID]
                       ,[ImportListID]
                       ,[UploadOrigin]
                       ,[DATAPROCESSOR]
                       ,[LISTPROCESSOR])
                 select
                       @NewDataSourceID,
                       @Name,
                       TypeNamespace,
                       TypeName,
                       0,
                       BackOfficeSystemId,
                       Available,
                       -1,
                       @PKID,
                       @UploadOrigin,
                       DATAPROCESSOR,
                       LISTPROCESSOR                       
                    from dbo.DataSources 
                    where DataSourceID = 300


            -- store datasourceid on emaillist rec
            update EmailList 
                set UploadedDataSourceID = @NewDataSourceID
                where id=@PKID

        end

        IF @PopulateEmailField = 1
        BEGIN
            DECLARE @UPLOADLISTTABLENAME nvarchar(128)
            DECLARE @SQL nvarchar(4000)

            SET @UPLOADLISTTABLENAME = dbo.fnUloadedListBuildTableName(@PKID);

            -- Rename the old EmailAddress column on the Xlist table. The dynamic sql below expects the new column name.
            declare @RenameTarget nvarchar(300) = 'dbo.[' + @UPLOADLISTTABLENAME + '].[' + @OldEmailColumnName + ']'
            exec sp_RENAME @RenameTarget, @EmailAddressFieldName , 'COLUMN'

            SET @SQL ='UPDATE dbo.EmailListUploadMasterList SET EmailAddress = xl.' + @EmailAddressFieldName + 
            ' FROM dbo.EmailListUploadMasterList ml inner join ' + @UPLOADLISTTABLENAME +
            ' xl on ml.GUID = xl.BB_XListRecordGuid WHERE ml.EmailListID = '  + cast(@PKID as nvarchar(10)) 

            exec(@SQL)
        END


        DECLARE @idoc int
        EXEC sp_xml_preparedocument @idoc OUTPUT, @QueryXML

        DELETE FROM dbo.EmailList_Query WHERE EmailListID = @PKID 

        INSERT EmailList_Query (EmailListID, QUERYID, QueryName, BBSystem) 
        SELECT @PKID, QueryID, QueryName, BBSystem 
        FROM OPENXML (@idoc, '/root/QueryList', 1)
        WITH (     QueryID int
            QueryName nvarchar(300),
            BBSystem int)

        EXEC sp_xml_removedocument @idoc
END