Here is my proposal for this Request
The SharePoint list to fulfill the Requests needs to contain a Title, the Request Type, the overall status, % Completed. I have added the numbers of steps completed and the Total numbers of steps in the view. It is more readable. I believe also that a Request is assigned to a responsible, so I have added a Assigned To column. The 3 statuses will be New (Default), In Progress, Completed.
After the creation of the Request, the view looks like this.
As the Manager needs to be able to add a new Request Type and its steps, I propose to use a List to configure them: Steps.
The list contains 3 columns: Request Type, Step (Number), and Step Description.
For the 3 first steps of the Inventory Request Type.
So, we need to be able to fill the Request Type from two lists. For that I have created a third list: Request Type with only one column the Request Type (=Title). Both lists will looked up this one.
For each Request, the process needs to create as many items as they are steps. For that, I decide to create Tasks to take all the advantages of Tasks in SharePoint like Gantt Chart, Subtask, Timeline, Overdue date, Mobile access, link with MS Project Professional, …
The Task list will have his own security as I want to avoid that people are able to change Status from Completed to In Progress and back to Completed as it will start the Workflow again and the %Complete will exceed 100%.
I will develop two workflows:
1. Workflow on Request list: (Run when item is created)
It will create all tasks as separated items and not as assigned tasks as tasks can be run in parallel. I do not want to wait a Task to be completed before the next one can be run.
For that I query the Step list on Request Type (Sort Order: Step).
I loop on all steps -1, create a task including, Step, Step Description, Request Type ID.
After exiting the loop, there is still one last Task to create, for it, I update the same column but I set a specific column I have added:
Last Step to Yes to know that this is the last task for this Request. That will avoid me to check if I am in the last step in my workflow on the Task list.
At the end, update Total Steps in the Request
Task list after the Workflow as run for 3 steps.
2. Workflow on Task list: Run only when Status is Completed
Update the following columns in the Request:
- Add 1 to Steps Completed
- Update %Complete
- Update Status (In Progress or Completed if Last Step = Yes)
- Set the Security to Read
Request list after the Workflow as run for 1 task
Request list after the Workflow as run for all tasks
In the Step list, we can add
- Default Assignee that we can add to the Task.
- Duration that we can add to the Task. After the Start Date is filled in, it is visible in a Gantt chart. Even more, but this is challenging, if the Request contains a Start Date, that all steps contains a duration, that we can deal will all week-end and bank holidays, we can plan on a Gantt chart, the full Request.
- Predecessors can be also automatically filled in based on step if really needed
Thanks for the challenge, Brendan Murphy