After upgrading to 1.7.913, services or shared processes with manual tasks get stuck in Queued

Problem

After upgrading a ZervicePoint installation to 1.7.913, any existing service or shared process that contains a manual task activity will be stuck in queued and you receive the following message in the log:

Error when trying to get process workflow markup from configuration: System.NullReferenceException:
Object reference not set to an instance of an object.
    at Zipper.ZervicePoint.ProcessSystem.Builders.TaskActivityGenerator.BuildCreateMultiTaskAndWait(TaskActivityData activityData, WorkflowExecutionContext context, Variable`1 assigneeList, String connectedFormName, BoundValue`1 notifyUsers)

This is caused by the manual task activity missing certain properties after upgrade.

Solution

There are two possible solutions that both will correct the issue. You can either make a modification to the service or run a sql script that fixes it for you. You can choose whichever solution suits your environment best

Option 1: Open and save

  • Open any services/shared processes that uses a manual task and make some modification to it (i.e. change description, short description). By saving the service again, Zervicepoint automatically adds all missing properties
  • Restart any failing orders with latest version (since existing orders stuck in queued will not continue)

Option 2: Run SQL fix

  • Verify that your database is backed up properly
  • Connect to the SQL server using SQL Management Studio and connect to the database server containing Zervicepoint database
  • Open a new query window and select Zervicepoint as the database
  • Paste the following script into the query window and the execute the script:
DECLARE @SourceProperties TABLE(Name NVARCHAR(MAX), BooleanValue bit, StringValue NVARCHAR(MAX))
INSERT INTO @SourceProperties (Name, BooleanValue, StringValue) VALUES ('taskResult_value', NULL, NULL)
INSERT INTO @SourceProperties (Name, BooleanValue, StringValue) VALUES ('taskResult_isBoundToSystemVariable', 0, NULL)
INSERT INTO @SourceProperties (Name, BooleanValue, StringValue) VALUES ('taskResult_isBound', 0, NULL)
INSERT INTO @SourceProperties (Name, BooleanValue, StringValue) VALUES ('taskResult_boundTo', NULL, '')
INSERT INTO ProcessComponent.ActivityProperties (ActivityId, Name, BooleanValue, StringValue)
SELECT * FROM
(
    SELECT a.Id FROM ProcessComponent.Activities a
        INNER JOIN ProcessComponent.Workflows w ON w.Id = a.WorkflowId
        INNER JOIN ProcessComponent.Processes p ON p.id = w.ProcessId
    WHERE
        p.IsLatest = 1 AND p.IsDeleted = 0
    AND
        a.ActivityType = 'Task'
    AND (SELECT COUNT(*) FROM ProcessComponent.ActivityProperties ap WHERE ap.ActivityId = a.Id and ap.Name = 'taskResult_value') = 0
) AS Activities
CROSS JOIN @SourceProperties
UPDATE ConfigurationSystem.GlobalSettings SET Value = Value + 1 WHERE Name = 'WorkflowVersion'