USP_BULKUPDATEEMAILJOBRECIPIENTS

Add email and job recipients returning only valid job recipients

Parameters

Parameter Parameter Type Mode Description
@EMAILJOBDATAID uniqueidentifier INOUT
@EMAILID int IN
@EMAILJOBID int IN
@DATA xml IN

Definition

Copy


CREATE procedure dbo.USP_BULKUPDATEEMAILJOBRECIPIENTS
(
    @EMAILJOBDATAID uniqueidentifier = null output,
    @EMAILID integer,
    @EMAILJOBID integer,
    @DATA xml = null
)
as

--Reset the EMAILJOBDATAID coming in from code.

set @EMAILJOBDATAID = newid()

begin try
    set nocount on
                -- handle inserting the data

          insert into dbo.EMAILJOBDATA
                    (ID, EMAILJOBID, DATA, SENT)
                values
                    (@EMAILJOBDATAID, @EMAILJOBID, @DATA, 0)

                DECLARE @Email_RecipientCount int
                DECLARE @EmailJob_RecipientCount int
                DECLARE @Email_JobCount int
                DECLARE @idoc int
                DECLARE @XMLData table(id uniqueidentifier default(newid()) primary key, USERID int, ABID int, MailDisplay nvarchar(512) COLLATE database_default, MailAddress nvarchar(512) COLLATE database_default, OptOut bit, InvalidAddress bit, PEOPLEID int, BORECID int, BOSYSID int, MERGEID uniqueidentifier,
                    unique(BOSYSID, BORECID, maildisplay, mailaddress, USERID, ABID, OptOut, InvalidAddress, id), unique(UserID, maildisplay, mailaddress, id), unique(ABID, maildisplay, mailaddress, id))

                --Load Up the XML into a temporary table

                EXEC sp_xml_preparedocument @idoc OUTPUT, @DATA
                INSERT INTO @XMLData(USERID, ABID, MailDisplay, MailAddress, OptOut, InvalidAddress, PEOPLEID, BORECID, BOSYSID, MERGEID)
                SELECT 
                    U, 
                    AB, 
                    N, 
                    E, 
                    O, 
                    X,
                    BP,
                    BR,
                    BS,
                    M
                FROM OPENXML (@idoc, '/Recipients/R', 2
                WITH (
                    U int,
                    AB int
                    N nvarchar(512), 
                    E nvarchar(512),
                    O bit,
                    X bit,
                    BP int,
                    BR int,
                    BS int,
                    M uniqueidentifier
                )
                EXEC sp_xml_removedocument @idoc

                INSERT INTO dbo.BackOfficeSystemPeople 
                    (BackOfficeSystemID, BackofficeRecordID)
                SELECT BOSYSID, BORECID 
                FROM @XMLData x1 
                WHERE NOT EXISTS (
                    SELECT *
                    FROM dbo.BackOfficeSystemPeople p
                    WHERE x1.bosysid = p.BackOfficeSystemID
                    AND x1.borecid = p.BackofficeRecordID
                )
                AND BORECID > 0


                INSERT INTO Email_Recipient(
                    EmailID, 
                    UserID, 
                    AddressBookID, 
                    DisplayName, 
                    EmailAddress, 
                    OptOut, 
                    InvalidAddress, 
                    BackOfficeSystemPeopleID,
                    MERGEID,
          EMAILJOBDATAID)
                SELECT 
                    @EmailID
                    USERID, 
                    ABID, 
                    MailDisplay, 
                    MailAddress, 
                    OptOut, 
                    InvalidAddress, 
                    p.[id],
                    x1.MERGEID,
          @EMAILJOBDATAID
                FROM @XMLData x1 
                left outer join dbo.BackOfficeSystemPeople p
                on x1.bosysid = p.BackOfficeSystemID and
                x1.borecid = p.BackofficeRecordID

                --Mark all records that have Invalid Accounts so we do not send to them...

                UPDATE Email_Recipient
                SET InvalidAccount = 1
                FROM Email_Recipient er
                INNER JOIN EmailInvalidAccount eia on eia.emailaddress = er.emailaddress and eia.active = 1
                AND er.EmailID = @EmailID AND er.EMAILJOBDATAID = @EMAILJOBDATAID

                INSERT INTO EmailJob_Recipient(
                    EmailID, 
                    EmailJobID, 
                    UserID, 
                    EmailAddress, 
                    MessageDate, 
                    UpdateDate, 
                    AddressBookID, 
                    EmailRecipientID,
                    BackOfficeSystemPeopleID,
          MERGEID,
          EMAILJOBDATAID)
                SELECT 
                    @EmailID
                    @EmailJobID,
                    UserID, 
                    EmailAddress, 
                    getutcdate(), 
                    getutcdate(),
                    AddressBookID, 
                    [ID],
                    BackOfficeSystemPeopleID,
          MERGEID,
          @EMAILJOBDATAID 
                FROM Email_Recipient
                WHERE EmailID = @EmailID
                AND OptOut = 0
                AND InvalidAddress = 0
                AND InvalidAccount = 0
        AND Email_Recipient.EMAILJOBDATAID = @EMAILJOBDATAID

        select ID, MERGEID
          from dbo.EMAILJOB_RECIPIENT 
        where EMAILJOBDATAID = @EMAILJOBDATAID

end try

begin catch
    exec dbo.USP_RAISE_ERROR
    return 1
end catch

return 0