Had a request to send notification emails against a SharePoint Task List when the Due Dates were 90, 60, 30 and 5 days out.


Steps:
0. You will need to create the 6 variables show on the left.
1. I am dropping and importing the SP List Data each time the package is run with
a SQL Task.
2. I am using the SharePoint adapter add-ins from codeplex.com
3. The query to pull the data into SSIS is screenshot #1 below. Make sure your
ResultSet is set to “Full Result Set”
3a. Click on Result Set and set it to your global QueryResults variable.
Screenshot #2.
4. Add a Foreach Loop Container. Use the Foreach ADO Enumerator and set the
ADO Object to your global QueryResults variable. Screenshot #3
4a. Set your variable mappings to your Item global variables. Screenshot #4.
5. Add a Script Task with the code snippet below.
6. Add a Send Email Task. Create your SMTP connection.
Add a From email address.
Set MessageSourceType to Variable.
Set MessageSource to your global EmailBody variable.
Screenshot #5.
7. Modify your Send Email Task Expressions setting the ToLine to your global
EmailBody variable. Important Note: Set the Delay Validation
property to True.
8. Deploy and schedule your package.
Screenshot #1

Screenshot #2:

Screenshot #3:

Screenshot #4:

Script Task Code:
/*Microsoft SQL Server Integration Services Script Task
Write scripts using Microsoft Visual C# 2008.
The ScriptMain is the entry point class of the script.
*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
namespace ST_7f59d09774914001b60a99a90809d5c5.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
Variables varCollection = null;
string header = string.Empty;
string message = string.Empty;
Dts.VariableDispenser.LockForWrite("User::EmailBody");
Dts.VariableDispenser.LockForWrite("User::ItemTitle");
Dts.VariableDispenser.LockForWrite("User::ItemDue");
Dts.VariableDispenser.LockForWrite("User::ItemEmail");
Dts.VariableDispenser.LockForWrite("User::DaysOut");
Dts.VariableDispenser.GetVariables(ref varCollection);
//Set the header message for the query result
if (varCollection["User::EmailBody"].Value == string.Empty)
{
header = "You have been assigned a task:nn";
varCollection["User::EmailBody"].Value = header;
}
//Clear previous message is applicable
//Create Body
message = "The due date for this task is "+varCollection["User::ItemDue"].Value+"nnThis task is "+varCollection["User::DaysOut"].Value+" days out from the due date. nn";
varCollection["User::EmailBody"].Value = varCollection["User::EmailBody"].Value + message;
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
Screenshot #5:

Screenshot #6:

