USP_EXCHANGECONTACTSYNC_CONSTITUENTLIST
Returns a list of constituents for a synchronization process based on the parameter set values.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PARAMETERSETID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_EXCHANGECONTACTSYNC_CONSTITUENTLIST
(
@PARAMETERSETID uniqueidentifier
)
as
set nocount on;
declare @APPUSERIDSETREGISTERID uniqueidentifier
declare @CONSTITUENTIDSETREGISTERID uniqueidentifier
declare @LASTRUNON datetime
declare @LIMITTOASSIGNEDCONSTITUENTS bit
declare @SPECIFICAPPUSERID uniqueidentifier
declare @APPLYTOCODE tinyint
declare @CONSTITUENTPAIRINGS table (CONSTITUENTID uniqueidentifier, APPUSERID uniqueidentifier);
/* Get the current settings for the business process.*/
select
@APPUSERIDSETREGISTERID = EXCHANGECONTACTSYNC.APPUSERIDSETREGISTERID,
@CONSTITUENTIDSETREGISTERID = EXCHANGECONTACTSYNC.CONSTITUENTIDSETREGISTERID,
@LASTRUNON = EXCHANGECONTACTSYNC.LASTRUNON,
@LIMITTOASSIGNEDCONSTITUENTS = EXCHANGECONTACTSYNC.LIMITTOASSIGNEDCONSTITUENTS,
@SPECIFICAPPUSERID = EXCHANGECONTACTSYNC.SPECIFICAPPUSERID,
@APPLYTOCODE = EXCHANGECONTACTSYNC.APPLYTOCODE
from
dbo.EXCHANGECONTACTSYNC
where
EXCHANGECONTACTSYNC.ID = @PARAMETERSETID
declare @CONSTITUENTS TABLE (ID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY);
INSERT INTO @CONSTITUENTS (ID) select ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@CONSTITUENTIDSETREGISTERID);
if @APPLYTOCODE = 1 begin
declare @APPUSERS TABLE (ID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY);
INSERT INTO @APPUSERS (ID) select ID from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@APPUSERIDSETREGISTERID);
end;
/* First build a list of proposed constituent ID and app user ID pairings.*/
if @LIMITTOASSIGNEDCONSTITUENTS = 1
/* App user must be an owner of a planned step for the constituent */
begin
if @APPLYTOCODE = 0 -- All users
begin
insert into @CONSTITUENTPAIRINGS(CONSTITUENTID, APPUSERID)
select
CONSTITUENT.ID,
APPUSER.ID
from
dbo.CONSTITUENT
inner join @CONSTITUENTS as CONSTITUENTSELECTION on CONSTITUENTSELECTION.ID = CONSTITUENT.ID
cross join dbo.APPUSER
where
APPUSER.ID in(select
APPUSER.ID
from
dbo.APPUSER
inner join dbo.CONSTITUENT on CONSTITUENT.ID = APPUSER.CONSTITUENTID
inner join dbo.INTERACTION on INTERACTION.FUNDRAISERID = CONSTITUENT.ID
where
INTERACTION.CONSTITUENTID = CONSTITUENTSELECTION.ID) and
CONSTITUENT.ISORGANIZATION = 0
order by
CONSTITUENT.ID;
end
else if @APPLYTOCODE = 1 -- Selected users
begin
insert into @CONSTITUENTPAIRINGS(CONSTITUENTID, APPUSERID)
select
CONSTITUENT.ID,
APPUSER.ID
from
dbo.CONSTITUENT
inner join @CONSTITUENTS as CONSTITUENTSELECTION on CONSTITUENTSELECTION.ID = CONSTITUENT.ID
cross join dbo.APPUSER
inner join @APPUSERS as APPUSERSELECTION on APPUSERSELECTION.ID = APPUSER.ID
where
APPUSER.ID in(select
APPUSER.ID
from
dbo.APPUSER
inner join dbo.CONSTITUENT on CONSTITUENT.ID = APPUSER.CONSTITUENTID
inner join dbo.INTERACTION on INTERACTION.FUNDRAISERID = CONSTITUENT.ID
where
INTERACTION.CONSTITUENTID = CONSTITUENTSELECTION.ID) and
CONSTITUENT.ISORGANIZATION = 0
order by
CONSTITUENT.ID;
end
else if @APPLYTOCODE = 2 -- Specific user
begin
insert into @CONSTITUENTPAIRINGS(CONSTITUENTID, APPUSERID)
select
CONSTITUENT.ID,
@SPECIFICAPPUSERID
from
dbo.CONSTITUENT
inner join @CONSTITUENTS as CONSTITUENTSELECTION on CONSTITUENTSELECTION.ID = CONSTITUENT.ID
where
@SPECIFICAPPUSERID in(select
APPUSER.ID
from
dbo.APPUSER
inner join dbo.CONSTITUENT on CONSTITUENT.ID = APPUSER.CONSTITUENTID
inner join dbo.INTERACTION on INTERACTION.FUNDRAISERID = CONSTITUENT.ID
where
INTERACTION.CONSTITUENTID = CONSTITUENTSELECTION.ID) and
CONSTITUENT.ISORGANIZATION = 0
order by
CONSTITUENT.ID;
end
end
else
begin
if @APPLYTOCODE = 0 -- All users
begin
insert into @CONSTITUENTPAIRINGS(CONSTITUENTID, APPUSERID)
select
CONSTITUENT.ID,
APPUSER.ID
from
dbo.CONSTITUENT
inner join @CONSTITUENTS as CONSTITUENTSELECTION on CONSTITUENTSELECTION.ID = CONSTITUENT.ID
cross join dbo.APPUSER
where
CONSTITUENT.ISORGANIZATION = 0
order by
CONSTITUENT.ID;
end
else if @APPLYTOCODE = 1 --Selected users
begin
insert into @CONSTITUENTPAIRINGS(CONSTITUENTID, APPUSERID)
select
CONSTITUENT.ID,
APPUSER.ID
from
dbo.CONSTITUENT
inner join @CONSTITUENTS as CONSTITUENTSELECTION on CONSTITUENTSELECTION.ID = CONSTITUENT.ID
cross join dbo.APPUSER
inner join @APPUSERS as APPUSERSELECTION on APPUSERSELECTION.ID = APPUSER.ID
where
CONSTITUENT.ISORGANIZATION = 0
order by
CONSTITUENT.ID;
end
else if @APPLYTOCODE = 2 -- Specific user
begin
insert into @CONSTITUENTPAIRINGS(CONSTITUENTID, APPUSERID)
select
CONSTITUENT.ID,
@SPECIFICAPPUSERID
from
dbo.CONSTITUENT
inner join @CONSTITUENTS as CONSTITUENTSELECTION on CONSTITUENTSELECTION.ID = CONSTITUENT.ID
where
CONSTITUENT.ISORGANIZATION = 0
order by
CONSTITUENT.ID;
end
end
/* Return pairings that have either not been created in exchange or where the constituent information has been updated since the last run */
select
PAIRINGS.CONSTITUENTID,
PAIRINGS.APPUSERID,
APPUSER.USERSID,
coalesce(EXCHANGEUSER.WATERMARK,'') as WATERMARK,
EXCHANGESERVERAPPUSER.EMAILADDRESS,
coalesce(EXCHANGESERVERAPPUSER.IDENTIFIERTYPECODE,0) as IDENTIFIERTYPECODE,
coalesce(EXCHANGESERVERAPPUSER.EXCHANGESERVERID, (select EXCHANGESERVER.ID from dbo.EXCHANGESERVER where ISDEFAULTSERVER = 1)) as EXCHANGESERVERID
from
@CONSTITUENTPAIRINGS AS PAIRINGS
inner join dbo.APPUSER on APPUSER.ID = PAIRINGS.APPUSERID
left join dbo.EXCHANGEUSER on EXCHANGEUSER.APPUSERID = PAIRINGS.APPUSERID
left join dbo.EXCHANGESERVERAPPUSER on APPUSER.ID = EXCHANGESERVERAPPUSER.APPUSERID
where
@LASTRUNON is null or
not exists(select ID from dbo.EXCHANGECONTACT where EXCHANGECONTACT.CONSTITUENTID = PAIRINGS.CONSTITUENTID AND EXCHANGECONTACT.APPUSERID = PAIRINGS.APPUSERID) or
(
PAIRINGS.CONSTITUENTID in (select ID from dbo.CONSTITUENT where DATECHANGED > @LASTRUNON) or
PAIRINGS.CONSTITUENTID in (select CONSTITUENTID from dbo.ADDRESS inner join dbo.EXCHANGEADDRESSMAPPING on EXCHANGEADDRESSMAPPING.ADDRESSTYPECODEID = ADDRESS.ADDRESSTYPECODEID where ADDRESS.DATECHANGED > @LASTRUNON) or
PAIRINGS.CONSTITUENTID in (select CONSTITUENTID from dbo.PHONE inner join dbo.EXCHANGEPHONEMAPPING on EXCHANGEPHONEMAPPING.PHONETYPECODEID = PHONE.PHONETYPECODEID where PHONE.DATECHANGED > @LASTRUNON) or
PAIRINGS.CONSTITUENTID in (select CONSTITUENTID from dbo.EMAILADDRESS inner join dbo.EXCHANGEEMAILADDRESSMAPPING on EXCHANGEEMAILADDRESSMAPPING.EMAILADDRESSTYPECODEID = EMAILADDRESS.EMAILADDRESSTYPECODEID where EMAILADDRESS.DATECHANGED > @LASTRUNON) or
PAIRINGS.CONSTITUENTID in (select RELATIONSHIPCONSTITUENTID from dbo.RELATIONSHIP inner join dbo.CONSTITUENT on CONSTITUENT.ID = RELATIONSHIP.RECIPROCALCONSTITUENTID where RELATIONSHIP.ISSPOUSE = 1 and CONSTITUENT.DATECHANGED > @LASTRUNON)
);