I am working in SharePoint Designer 2013 (the SharePoint site itself is SharePoint 2010, upgrading soon).

We have a list to keep track of our tasks as a team. People can update these tasks. Currently, we have a very generic email that goes out whenever someone updates the task that basically says 'Hey, a task assigned to you was updated, go check the list on SharePoint'. It is functional, sure, but I've been tasked with making the message more detailed.

Specifically, my question is can I show (in the email) the before and after column values after the list is updated?

I think I can accomplish this by duplicating the columns and storing the previous value in each of those columns, but the list has many fields and that seems really un-elegant to me. Is there a better way?

I have a workflow set up that is sending emails appropriately when the list is updated.

As an example, say I have this entry originally:

|      Task     | Requested By | Priority |  Due Date |
| Update Report |   John Doe   |     1    | 7/20/2015 |

The list is updated to lower the priority from 1 to 3 and move the deadline later, so the list now looks like this:

|      Task     | Requested By | Priority |  Due Date |
| Update Report |   John Doe   |     3    | 7/31/2015 |

After this action, I would like an e-mail that looks something like this:

Your task Update Report has been updated.

Priority from 1 to 3
Due Date from 7/20/2015 to 7/31/2015

Click here to view the task.

I may embellish that a bit more so it is not so plain, but that gets the point across.

Any ideas? A few hours of Googling has done wonders for my other workflows, but I am stuck here.


For such situations I use InfoPath to customise the list form. I use an XML file as a secondary data source. The XML file has nodes for each field I want to watch. A form load rule writes all the current values to the XML. The Save button has a rule for each field I'm watching. If the form field and the XML field are not the same, a message is appended to a change log text field, along the lines of Set a field's value (in this case the field is changeLog) to:

concat(changeLog,"Priority from ",XMLPriority," to ",Priority)

Then the form is saved. The workflow can pick up the change log field and plug its contents into an email.

A similar thing could be done with JavaScript.

Edit: A few more details.

Microsoft Article on how to add an XML file as a data source.

A typical XML file fit for the purpose (I use the same field name as the SharePoint list, preceded by an "x"):

<?xml version="1.0"?>

Create with a text editor and save with an XML extension.

Add a button to save the form and on click run a rule on each of the change tracking fields.

Condition is Priority is not equal xPriority Action is et a field's Value, field is xMessage, value is

concat(xMessage, newLine, "   ", "Priority from '", xPriority, "' to '", Priority, "'.")

After that use a rule that writes xMessage to the Change Log text field. You can embellish with user name and date stamp.

  • This looks promising, I've been googling a couple hours and haven't found a ton about using InfoPath to do what I need, do you have any resources that might be helpful? I am very shocked that it is so hard to implement this and that there doesn't seem to be great documentation on it. – Soulfire Jul 9 '15 at 13:30
  • 1
    I have added some more details around the XML. This is not very well documented online. – teylyn Jul 10 '15 at 1:06

A simpler solution than the one proposed by @teylyn could be to enable versioning in your Tasks list and keeping a link to the Versions.aspx (http://<server>/<site>/_layouts/versions.aspx?list={litsID}&ID=<itemID>) page of that item to show what all has been changed. Might not be the solution you want but posting it as an alternative nonetheless.


You can try below steps:

  1. Create a list template from original list(Say ListA) and using this template create another list(Say ListB).
  2. Add ListA_ID column in ListB.
  3. Now whenever item get added in ListA, using designer workflow add/copy that item in ListB and with ID of item in ListB column "ListA_ID"
  4. Now when Item get updated in ListA, compare it values with item in ListB. Then send mail accordingly and update the item in ListB for next time comparison.

I have not try this. Just a thought.

Your Answer

