5 Steps to Enhance SharePoint 2010 Approval Workflow

In my previous post, we discussed the shortcomings of SharePoint 2010 Approval workflow. Though empowering and convenient to use, the out-of-box workflow lacks a user-centered experience. To quickly recap, I highlighted five limitations in particular:

  • Inability to specify workflow condition
  • Potential governance concern
  • Vague email notifications
  • Due Date Duration not accounted for
  • Rejected document marked as “Completed”

Fortunately, through SharePoint Designer (SPD) 2010, you can extend the approval workflow process. This post outlines how to configure the approval workflow using the SPD workflow designer. Though it’s certainly not the only way to customize approval workflow, I find myself coming back to this similar framework when implementing approval processes.

Step 1 – Expose “Start Approval Process” action in workflow designer

  1. Open SPD 2010 and create a new List Workflow for your Document Library
  2. Click Action in the ribbon. Then select “Start Approval Process” under the “Task Actions” heading
    Start Approval Process Action

  3. Click on “these users” to set the approval designations
  4. The next screen you’ll see mimics the Approval Workflow design form in the UI. Fill in the appropriate approval details. (Note: You can add multiple approval stages by clicking this icon and selecting “Insert Assignment Stage”)
    these users

  5. After clicking Ok, you’ve completed the 1st step. Click on “Approval” to start configuring the details of the approval workflow.
    Update Approval Process

  6. Optional Step

    For every approval action you utilize in SPD, SharePoint creates a custom Approval Site Content Type. In other word, if you create 5 approval actions through SPD, you’ll end up with 5 different Approval Content Types (see screenshot below). So, it’s a good idea to rename the Approval Site Content Type and match your workflow name. Renaming to “Approval – Team A Proposal Draft,” for example, would provide better context and probably serve your well in the future.

Step 2 – Update email notification for the requester

  1. Click on “Change the behavior of the overall task process” in the Approval editor page
    Change the behavior of the overall task process

  2. Find the Step “When the Task Process Starts”
  3. Then click on the Action “then Email Workflow Context: Initiator”
    Email Workflow Initiator action

  4. Change the subject line to something more descriptive
    Otherwise SharePoint would send an email with a generic subject line, i.e.: “Approval started on.” To change the subject, click on icon and replace [%Task Process: Process Name%] with something easier for your team to relate to, i.e.: RFP Approval, Draft Report Approval, etc.
  5. Clean up the email body. Below is a screenshot example of my change:
      Workflow Initiator email design

    The following Data Sources and Fields were kept same:

    • [%Task Process:Item Title (Unencoded)%]
    • [%Task Process:Item Title%]
    • [%Task Process:Participant List%]
    • View the status of this workflow
      • URL is the same
      • Changed label to “Monitor the status of the approval here”

    The following Data Source and Field were added:

    • [%Workflow Context: Initiator%]
      • Data Source = Workflow Context
      • Field from source = Initiator
      • Return field as = Display Name

Email as end result of Step 2:

    Workflow Initiator actual email

Step 3 – Update email for approver(s)

  1. Click on “Change the behavior of a single task” in the Approval editor page
    Change the behavior of a single task

  2. Find the Step “When a Task is Pending”
  3. Then find the Condition “If Current Task: External Participant is empty,” and click on “Current Task: Assigned To”
    Email Assigned To

  4. Clean up the email body. Below is a screenshot example of my change:
      Approver email design

    The following Data Sources and Fields were kept same:

    • [%Current Task: Title%]
      • This value comes from the Title field in the Select Task Process Participants screen (see #4 in Step 1 above)
    • [%Workflow Context: Initiator%]
    • [%Task Process:Item Title%]

    The following Data Sources and Fields were added:

    • [%Current Task: Assigned To%]
      • Data Source = Current Task: Approval
      • Field from source = Assigned To
      • Return field as = Display Name
    • [%Current Task:Due Date%]
      • Data source = Current Task: Approval
      • Field from source = Due Date
      • Return field as = Short Date
    • Access approval form in SharePoint
      • To create hyperlink, highlight the text then click Globe Hyperlink Icon icon
      • Assign [%Current Task:Form_URN%] on the address field:
        • Data source = Current Task: Approval
        • Field from source = Form_URN
        • Return field as = As String
      • Click OK a couple of times and you should see the following below. Then click OK.
        Edit Hyperlink

Email as end result of Step 3:

    Workflow Assigned To actual email

Step 4 – Update rejection notice

  1. Click on “Change the behavior of the overall task process” in the Approval editor page
    Change the behavior of the overall task process

  2. Find the Step ““When the Task Process Completes”
  3. Find “Set workflow status to Rejected.” Then click below “Set workflow status to Rejected.”
  4. Update email subject line to denote rejection:
    • Add “Set Workflow Variable” from Action on the ribbon
      Workflow Variable
    • Click on “workflow variable” then select “Variable: CompletionMailTitle”
    • Click on “value” to assign a rejection tagline to be displayed in the email subject line
      • Access the String Builder by clicking this icon
      • Use the word “Rejected” combined with brief info about the rejected file
      • E.g.: “REJECTED – Draft Report: [%Task Process:Item Title%]”
        • Data source = Task Process: Approval
        • Field from source = Item Title
        • Return field as = As String

        String Builder Rejected Title

  5. Update email content to denote rejection:
    • Click under the action you just created to add another workflow action
    • Click “Set Workflow Variable” from Action on the ribbon
    • Click on “workflow variable” then select “Variable: CompletionMailReason”
    • Click on “value” to assign a rejection message to be displayed in the email body
      • Access the String Builder by clicking this icon
      • Include the word “Rejected” along with some context about the rejected file
        String Builder for Rejected Body
  6. At this point, your set of Rejected actions should look similar to the following
    Rejected workflow actions

  7. Scroll below and click on the last action – “Email Workflow Context: Initiator” under “Else”
    Workflow Context Initiator

  8. Clean up the email body
    • Remove the first line. Otherwise, the words “Approval” and “Completed” will be included on the rejected email
    • Make sure you keep both [%Variable: CompletionReason%] and [%TaskProcess:Consolidated Comments%] because they provide the rejected status and comments from the user(s) who rejected the file
    • Everything else is optional. Please feel free to redesign as needed.

Email as end result of Step 4:

    Rejected email

Step 5 – Update notification for approved files

  1. Similar to Step 4. Only this time, we’re configuring the email notification for an approved document
  2. Click on “Change the behavior of the overall task process” in the Approval editor page
  3. Find the Step ““When the Task Process Completes”
  4. Find “If Variable: IsItemApproved equals Yes” then click below “Set workflow status to Approved.”
  5. Update email subject line to denote Approval:
    • Add “Set Workflow Variable” from Action on the ribbon
    • Click on “workflow variable” then select “Variable: CompletionMailTitle”
    • Click on “value” to assign a rejection tagline to be displayed in the email subject line
      • Access the String Builder by clicking this icon
      • Use the word “Approved” combined with brief info about the approved file
      • E.g.: “APPROVED – Draft Report: [%Task Process:Item Title%]”
        • Data source = Task Process: Approval
        • Field from source = Item Title
        • Return field as = As String
  6. Update email content to denote Approval:
    • Click under the action you just created to add another workflow action
    • Click “Set Workflow Variable” from Action on the ribbon
    • Click on “workflow variable” then select “Variable: CompletionMailReason”
    • Click on “value” to assign a rejection message to be displayed in the email body
      • Access the String Builder by clicking this icon
      • Include the word “Approved” along with some context about the approved file
        String Builder Approved
  7. At this point, your set of Approved actions should look similar to the following
    Approved workflow actions

Email as end result of Step 5:

    Approved email

And there you have it! Five steps to get you started with enhancing the approval workflow. We focused mostly on emails, but there are still other system generated emails that you can configure. Furthermore, there are a slew of other functions that you can explore, e.g., Task Form Fields and Task Outcomes to extend the approval capability even further. I hope this post would get you started in the right direction.

Advertisements

52 responses to “5 Steps to Enhance SharePoint 2010 Approval Workflow

  1. These are great enhancements, but the one short-coming that drives me batty is that if the approvers are added or updated there seems to be no way to access the updated list. Participants list only shows the original approvers. Any ideas on how to capture that event?

    • Hey Lori, are you referring to the SharePoint Designer list of approvers (#4 in Step 1)? If so, you can easily add or update users. Just remember to Publish the workflow when you’re done to commit your changes.

      If you’re referring to workflow already in progress for a given document, then yes, you’re right – adding or updating the approver list won’t make a difference. The documents can only reference the approval settings at the time that the workflow starts.

      You can also assign a SharePoint group as an approver. Doing so allows you to manage a list of approval from a central location – handy if you have the same group of approvers for more than 1 workflow. If you go this route, 1 person in the group approves or rejects on behalf of the entire group.

      Hope this helps.

  2. Bobby – very helpful stuff here, I appreciate you taking the time to spread the knowledge. These have all been issues we’ve been mulling over with no real answer until now. The one thing that is still unclear to me is how to restart an approval workflow after it has been rejected. The workflow will only show as completed and not allow me to restart. I’ve tried updating the file to the next minor & major version and deleted the list item – no luck. Any thoughts?

    • Hi Matthew, the easiest way is to allow manual start of the workflow. If you open the workflow in SPD, you should see “Start Options” (located at right hand side of Workflow Info & Settings page). Make sure you have “Allow this workflow to be manually started.” Then, in your Document Library, click on drop down to the right of filename, select “Workflows.” This next page should allow you to re-run the approval workflow.

      I would also recommend looking into Custom Actions. You can make the approval workflow appear in several places in the document library, so it’s more apparent to your users.

      Hope this help. Good luck, sir!

      • We do have those settings, however someone with design rights must “terminate” the workflow before it can be restarted… We’re using 2010

  3. Interesting, the workflow should be completed at this point. Make sure you don’t have “Require Manage List permissions” selected in Start Options.

    To make sure you don’t have other pending workflow processes, you can also try adding “Stop workflow” in Workflow Designer. Try adding this below the Approval process or at the bottom of “Change behavior of the overall task process.”

  4. This is very comprehensive. However, if you start the Approval Workflow from another workflow, there are fields (see Step 1, item# 4 image) that allow you to adjust the Title for all the tasks that are triggered right from there, as well as set the Due Date. I would have LOVED to see the solution here, for how to make sure the “Task Notification” email that goes out to the initiator, can contain the actual Due Date instead of “None”. Still searching for that solution.

    • April, the title field is definitely referenced throughout but it still doesn’t overcome the other shortcomings listed above.

      In terms of Due Date, you can swap it in the email body with [%Current Task:Due Date%] as outlined in #4 in Step 3. Thanks for chiming in.

      • Drake, April

        sweet, i’ll try that!!

        ________________________________

      • Hello Bobby and all. I also tried the update to the current task due date data field and I end up getting a fictitious date instead of the correct due date. Is there any way to fix this. I can’t believe this is so difficult!

      • Are you going by Duration per task or Due Date? If by duration, then it’ll calculate starting from today’s date, which is an easier way to go. Otherwise, you’ll have to use the function to manipulate the Due Date (ref: screenshot in # 4 of Step 1).

  5. Thanks Bobby for taking the time to put this post out. However, I don’t see anything about “◾Inability to specify workflow condition” can you let us know how you would address that? Thanks.

  6. Bobby, I’m trying to automatically approve a workflow when the due date occurs. We have a “rule” to approve a project closing document after five business days, if the approvers do not act. It is intended to get our projects completed, otherwise they could remain open for ever. How can I modify the standard approval process to do this?

    • John, I would recommend using Information Management Policy on the workflow task list (i.e.: not on the Document Library). You can create a separate workflow in SPD that would approve the task. Then you can trigger the workflow to start 5 days after due date – this is done via Info Mgmt Policy.

      But I would verify the use case first. I tend to frown upon biz needs when auto approval is requested.

  7. Hi Bobby, I’m using the default approval workflow in SP 2010 and when I upload a document to a library, the workflow starts the approval emails go out. The problem is that most of the time when the content is “approved”, the approval status is changed to “Approved” (good) but the Workflow’s status bounces back to in progress and starts another workflow as if in a loop. Sometimes I get the desired outcome where the first approval task sets both the content approval status and the workflow status to “Approved”. Is this a glitch or something you’re aware of?

    • Allen, I recommend trying the approval workflow on a different site first to see if you run into same issue. Also, using SharePoint Designer 2010, open the root site collection. Click on “Workflows” and see if the Approval workflow under Global workflow has been updated by anyone. If that’s the case, you may have run into a little trouble. There are workarounds to revert to the default approval workflow but I haven’t seen a perfect fix.

      • Allen, I was wondering maybe your library has the Content Approval turned on? I’m having a somewhat similar issue with my library that has content approval turned on. The Approval Status changes to pending everytime a workflow makes any changes to the item, which I don’t want.

      • DB, I do have the “require content approval for submitted items” option selected and we do want approval to occur with any changes to the item. I just didn’t want the content approval status to change because of the workflow process but rather when something really changed with the document in question.

      • Bobby, I did find that someone had updated the Global workflow in trying to solve the issue I’m now tasked with. I created a new workflow using the approval type and in dorking around with settings I was able to stop it from making us approve new documents multiple times.

        So let me make it clear that I’m totally new to SP development and I can’t say that I understand why this works or if there will be any negative effects but here’s what I did to make it stop firing multiple approval requests:
        1. create new approval workflow
        2. under “change the behavior of the overall task process” and “When the task process completes”: there should be a line at the bottom of the 3rd IF block (before the first ELSE) that says, “then Set content approval of item that the task process is running on to Approved (run as the workflow author)”. I moved this up under the first IF under “Set workflow status to Approved”. I moved it because I couldn’t figure out how to enter it myself because the intellisense or whatever didn’t give the options.

      • @Allen – not exactly sure what you’re pinpointing but if it works for you, then great. Typically when the global workflow is tinkered, I don’t bother creating one from scratch; only because a lot goes into an out-of-box workflow. There are posts out there where you can upload download the approval workflow as a wsp solution. You would then upload the solution to your environment and activate it as a site feature. That’s what I would recommend so it’s a cleaner process than creating the workflow with bare hands.

  8. Thanks for stepping thru these configurations. We are trying to leverage as much as we can from the OOTB Approval WF. These are helpful!

  9. Bobby, thank you SO MUCH for this post! Ditto Ktranamber above. I can’t wait to make these changes!!

  10. Hi Bobby, great blog – thank you.
    However I have one more big issue with the OOTB workflow. If the document being submitted for workflow is an editable document (ie not a PDF), after it has been approved the user can edit the document and it retains its approved status. Eg A funding approval excel doc for $30,000 is submitted for approval and approved. Someone then edits the doc and makes it $300,000. The approval status of the document does not change!!

    Would it be possible to update a document property after the Workflow Tasks have been completed. IE if all workflow tasks have been completed and approved then change the Status of the document to approved? This would accommodate the need for multiple approvers but still create a version of the doc with a date and time stamp so that at least you could look through the version history and see if any changes have been made to the doc since it was approved or return to the approved version if necessary.

    Hope that makes sense. I assume everyone else only uses this workflow with PDF’s?? Many thanks.

  11. Hi Bobby, I just ran across your blog and absolutely love it -very thorough and easy to understand. For several months I’ve been trying to use a custom workflow but some parts work and some do not. The workflow is for manager approval for leave time requested.The part that doesn’t work is the approval notification email to the requester. This workflow was created using Custom Task Process. I have worked with soooo many people who aren’t able to help me or make suggestions. Thanks again for this wonderful information.

  12. I left out the main point. Would Start approval process work for something like this if I were to start all over? My list is a calendar.

    • Hi Shery, it sounds like Start Approval Process could do the trick. Of course, it all depends on how complex you need the process to be. If it’s as simple as a one-time approve or reject, then it should work. I would certainly try it first on a different/dev list or environment before making the plunge on your prod list. Good luck!

  13. Thanks for your quick response. It is a simple one-time approve/reject. I’ll give it a try. My SharePoint experience is pretty basic, but when given SCA permissions, why not take the plunge and learn? Thanks again.

  14. Bobby-
    Awesome tutorial! I’ve been fighting with the OOTB workflows for a while now and this was exactly what I needed!
    THANK YOU!

    One glitch I’m coming across is that when an item is approved the email sent back to the initiator is displaying the ‘rejected’ email body from Step 4, parts 7 & 8. The subject line displays my approved message but the body is my rejected text.

    Any thoughts? I’ve gone through the steps multiple time figuring I missed something simple but to no avail.

    Again- I appreciate the tutorial. I’m a jQuery/CSS/HTML developer and my company just threw me into SharePoint and said ‘make it work’ so this has been a bit of a learning curve for me but sites like yours are a huge help!

    • Hi Dan, have you gone through Step 5 to confirm that the approved email message config is displaying approval subject line? Sounds like you’ve gone through all the details but just want to verify. What may be worth testing is to apply the out of box approval workflow (via browser not SharePoint Designer) and testing that behavior first.

      Front-end development is a huge arena for SP2013 so you’re in the right place! Look into SPServices and Client Object Model in SharePoint to see if it’s right up your interest alley.

  15. Hi, how do you get this custom workflow to trigger on publishing major revisions? It seems only the inbuilt workflows do this. I have seen some solutions including the xml definition of the workflow, but it seems cumbersome, I have not succeeded in getting it to work.

    • Try running a Condition clause for version number to contain .0 (to denote a major version), then put your approval process underneath that condition. Let me know if that does the trick.

      • Thanks! I’ll give it a try! However, when approval is required, is it not so that the version will be minor after publish (request) and only *after* approval (successful workflow outcome) the version will be updated to integer?

      • Not necessarily. You have to select that you want to start the workflow to approve publishing of a major version. This is a simple checkbox via the browser but I haven’t actually tried that via SPD.

  16. Juan Manuel Spessot

    Great post Bobby! It helped my a lot! I’ll take a look at your blog, I’m sure it’ll be really helpful in my trip to mastering SharePoint.

  17. Hi Bobby, great work! It worked for me, but there is something that is a little bit disturbing. As I wanted to add a workflow I typed in a workflow name, after that I clicked the button “Next”, after that there was a blank page but the workflow was added. Can you help me to figure out to see that page?

  18. No it isn’t. it is in my library on SharePoint….After I published my workflow on SharePoint I wanted to start it. So I chose a document in my library, clicked to add a workflow, clicked on “next” and suddenly was there a blank page. In other words the surface (look on Step 1, no.4, picture on the right side) never showed up.

    • Julien, the picture on the right of Step 1 no. 4 is just an illustration. It’s showing what it would look like with the out-of-box Approval workflow via the browser. If you followed all the steps on this post, you should NOT see that picture when you run your workflow. However, I’m still unsure of the blank page that you’re running to. I would recommend creating another workflow for testing, i.e.: do all of Step 1 and see if you see a blank page. I would also try starting the workflow automatically and testing if that works.

  19. Hi, thanks alors for your post !
    hen I change the approval content type’s name I get an error when publishing the WF, even though I have “Push Changes to Sites and Lists” checked, do you have an Idea of what I could be doing wrong ?
    Alors, is it possible to change the name of the default task forms created by the WF ?

    • Antonin, have you tried updating the Content Type via the browser? Also, you may need to save and close the workflow in SPD first. For the task form name, I believe that the task should take the name you assigned in Step 1 no. 4. In terms of look and feel of the task form, you can use InfoPath to update the form design – see: http://blogs.msdn.com/b/edhild/archive/2011/06/01/creating-custom-workflow-task-approval-forms-with-sharepoint-designer-2010.aspx

      • Thanks for your reply, I managed to change the name of the content type using the browser, and it works. But what I meant by changing the name of the task form wasn’t the name of the task but the actual name of the form “Approval_x0028_1_x0029.xsn” . Do you know how it is done ?
        I remember managing to do it a while ago but I don’t remember how it’s done and am stuck on it…

      • Try going to the Approval Content Type via the browser. Under Advanced Settings, you should find the xsn template file there. This could be a bit tricky, since you may have to upload a new template file, instead of renaming the existing one. Try saving the xsn locally first, that way you have a backup. You should also find this xsn template in SPD.

      • I cannot see the xsn template under Advanced Settings (through the browser). Maybe a specific feature needs to be activated in order to see the template for this kind of content type ?
        I can see the xsn in SPD but if I rename it there, when I publish the WF, it created a new form from scratch…

      • When you open the xsn, can you rename it then publish it using InfoPath Designer? This may require you to save the xsn file locally first, then publishing the file from InfoPath. I must admit that I never publish from InfoPath Designer to a workflow before. I’m not sure if you could even do that, independent of SPD.

  20. Hi,
    Great tuto, but i have a problem. If i create a column call approver, type person for my document library.Then I change the workflow “start with” specifiying the metadata “approver” the workflow get stuck on starting.

    If i do not specify the user i have to add the document and then trigger the workflow to get the inition form.

    Any idea how to solve this ?
    Thanks for helping
    Regards.

    • Hi Nicolas, if you’re using a People field, make sure that you’re passing the right value. Sometimes, SPD can get stuck on what you select (e.g.: Account ID vs. email, etc.).

      If it’s still a problem, you may want to expand the Approver workflow in SPD and put additional logging actions along the way to troubleshoot.

  21. Thank’s for replying… The funny thing is that the workflow get stuck on starting, BUT, if i stop and then start again it does work (so with the same value). I Guess it’s just not possible.

    Regards.

  22. Is there a way to determine whuch stage a workflow is in when you have multiple approval stages? The first stage I send the email to four approvers in parallel, when they all approved the document, the workflow moves to teh next stage where I am in single mode. How can I tell when I am in this stage?

    • Edward, if you clicked on the workflow status from the library, you can view the associated workflow tasks. If you have multiple approvers, the workflow task would indicate which current approver the workflow is currently waiting on. That’s the easiest way to determine the stage of approval so hope that suffices.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s