USP_WORKFLOWTASK_ASSIGNED_ALERT_SEND
Sends alerts for a given workflow task to qualified users associated with the workflow task inbox
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@WORKFLOWTASKID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_WORKFLOWTASK_ASSIGNED_ALERT_SEND
(
@WORKFLOWTASKID uniqueidentifier
)
as
begin
declare @ALERTTYPEID uniqueidentifier = '958D5708-39B4-4ECF-8DBD-E7A5CFED90A8'
if not exists (select top(1) ID from dbo.DATABASEMAILSETTINGS where ENABLED = 1)
return 0;
declare @EMAILBODYCONTEXTLINKPAGEID uniqueidentifier
declare @EMAILSUBJECT nvarchar(255);
declare @EMAILBODY nvarchar(max);
declare @EMAILVIEWFORMINSTANCEID uniqueidentifier;
declare @BODYLINK nvarchar(2048);
select
@EMAILSUBJECT = EMAILSUBJECT,
@EMAILBODY = EMAILBODY,
@EMAILBODYCONTEXTLINKPAGEID = EMAILBODYCONTEXTLINKPAGEID,
@EMAILVIEWFORMINSTANCEID = EMAILVIEWFORMINSTANCEID
from
dbo.ALERTTYPE
where
ID = @ALERTTYPEID;
begin try
if @EMAILVIEWFORMINSTANCEID is not null
exec dbo.USP_ALERT_PERFORMFIELDSUBSTITUTION @EMAILBODY output, @EMAILSUBJECT output, @EMAILVIEWFORMINSTANCEID, @WORKFLOWTASKID, null;
end try
begin catch
-- do nothing, field substitution failing shouldn't prevent email from being sent
end catch
if @EMAILBODYCONTEXTLINKPAGEID is not null
set @BODYLINK = dbo.UFN_ALERT_GETAPPLICATIONLINK(@EMAILBODYCONTEXTLINKPAGEID, @WORKFLOWTASKID);
set @EMAILSUBJECT = replace(@EMAILSUBJECT, '<<APPLICATIONLINK>>', coalesce(@BODYLINK, ''));
set @EMAILBODY = replace(@EMAILBODY, '<<APPLICATIONLINK>>', coalesce(@BODYLINK, ''))
declare @EMAILADDRESSES table (APPUSERID uniqueidentifier, EMAILADDRESS nvarchar(100))
--If the task has a specific owner then don't email the inbox, instead just email the specific owner.
declare @OWNER_APPUSERID uniqueidentifier;
select @OWNER_APPUSERID = OWNER_APPUSERID from dbo.BBWORKFLOWTASK where ID = @WORKFLOWTASKID;
if @OWNER_APPUSERID is null
begin
insert into @EMAILADDRESSES
select BBWORKFLOWINBOXASSIGNMENT.APPUSERID, APPUSERALERTSETTING.EMAILADDRESS from dbo.BBWORKFLOWTASK
inner join dbo.BBWORKFLOWINBOXASSIGNMENT on BBWORKFLOWTASK.BBWORKFLOWINBOXID = BBWORKFLOWINBOXASSIGNMENT.BBWORKFLOWINBOXID
inner join dbo.APPUSERALERTTYPESETTING on APPUSERALERTTYPESETTING.APPUSERID = BBWORKFLOWINBOXASSIGNMENT.APPUSERID
inner join dbo.APPUSERALERTSETTING on APPUSERALERTTYPESETTING.APPUSERID = APPUSERALERTSETTING.ID
and APPUSERALERTTYPESETTING.ALERTTYPEID = @ALERTTYPEID and APPUSERALERTTYPESETTING.ENABLED = 1
where BBWORKFLOWTASK.ID = @WORKFLOWTASKID
union all
select SYSTEMROLEAPPUSER.APPUSERID, APPUSERALERTSETTING.EMAILADDRESS from dbo.BBWORKFLOWTASK
inner join dbo.BBWORKFLOWINBOXASSIGNMENT on BBWORKFLOWTASK.BBWORKFLOWINBOXID = BBWORKFLOWINBOXASSIGNMENT.BBWORKFLOWINBOXID
inner join SYSTEMROLEAPPUSER on BBWORKFLOWINBOXASSIGNMENT.SYSTEMROLEID = SYSTEMROLEAPPUSER.SYSTEMROLEID
inner join dbo.APPUSERALERTTYPESETTING on APPUSERALERTTYPESETTING.APPUSERID = SYSTEMROLEAPPUSER.APPUSERID
and APPUSERALERTTYPESETTING.ALERTTYPEID = @ALERTTYPEID and APPUSERALERTTYPESETTING.ENABLED = 1
inner join dbo.APPUSERALERTSETTING on APPUSERALERTTYPESETTING.APPUSERID = APPUSERALERTSETTING.ID
where BBWORKFLOWTASK.ID = @WORKFLOWTASKID
end
else
begin
declare @USEREMAILADDRESS nvarchar(100);
select @USEREMAILADDRESS = APPUSERALERTSETTING.EMAILADDRESS from dbo.APPUSERALERTSETTING
inner join dbo.APPUSERALERTTYPESETTING on APPUSERALERTSETTING.ID = APPUSERALERTTYPESETTING.APPUSERID
where
APPUSERALERTTYPESETTING.APPUSERID = @OWNER_APPUSERID and APPUSERALERTTYPESETTING.ALERTTYPEID = @ALERTTYPEID and APPUSERALERTTYPESETTING.ENABLED = 1;
if @USEREMAILADDRESS ='' set @USEREMAILADDRESS = null;
if @USEREMAILADDRESS is not null
insert into @EMAILADDRESSES (APPUSERID,EMAILADDRESS) VALUES (@OWNER_APPUSERID,@USEREMAILADDRESS);
else
return 0;
end
declare @APPUSERID uniqueidentifier
declare @EMAILADDRESS nvarchar(100)
declare emailaddress_cursor cursor for select distinct APPUSERID, EMAILADDRESS from @EMAILADDRESSES
open emailaddress_cursor;
fetch next from emailaddress_cursor
into @APPUSERID, @EMAILADDRESS;
while @@FETCH_STATUS = 0
begin
--select @EMAILADDRESS, @EMAILSUBJECT, @EMAILBODY
exec dbo.USP_ALERT_SEND @EMAILADDRESS, @EMAILSUBJECT, @EMAILBODY, 'TEXT', 'Normal';
fetch next from emailaddress_cursor
into @APPUSERID, @EMAILADDRESS;
end
close emailaddress_cursor;
deallocate emailaddress_cursor;
return 0;
end