private static TaskProgressCallbackMessage ToProgressCallbackMessage(CustomTrackingRecord customTrackingRecord)
        {
            var target = customTrackingRecord.GetData <IWorkItemWithChildren>(CustomProgressTrackingDataKey.Target);

            return(new TaskProgressCallbackMessage
            {
                MessageType = customTrackingRecord.Name,
                ActivityName = customTrackingRecord.Activity.Name,
                Message = customTrackingRecord.GetDataOrDefault <string>(CustomProgressTrackingDataKey.Message),
                TimeStamp = customTrackingRecord.EventTime.ToLocalTime(),
                RecordNumber = customTrackingRecord.RecordNumber,
                RouteToChild = new List <WorkItemId>
                {
                    new WorkItemId
                    {
                        Id = target.Id,
                        Name = target.Name,
                        WorkItemType = target.WorkItemType
                    }
                }
            });
        }
        private void ProcessCustomTrackingRecord(CustomTrackingRecord customTrackingRecord)
        {
            if (customTrackingRecord.Name == WorkItemStatus.Received)
            {
                var lookupTree = customTrackingRecord.GetData <WorkItemWithHistory>(CustomProgressTrackingDataKey.LookupTree);
                _activeWorkItemsLogs.RegisterWorkflowInstanceWithLookupTree(
                    customTrackingRecord.InstanceId, lookupTree, _messageIndex++);

                if (ProgressObserver != null)
                {
                    ProgressObserver.RegisterWorkItemsWithHistoryTree(lookupTree, _messageIndex);
                }
            }
            else
            {
                TaskProgressCallbackMessage progressCallbackMessage = ToProgressCallbackMessage(customTrackingRecord);
                _activeWorkItemsLogs.PushMessage(customTrackingRecord.InstanceId, progressCallbackMessage, _messageIndex++);

                if (ProgressObserver != null)
                {
                    ProgressObserver.WorkItemLogCallback(progressCallbackMessage, _messageIndex);
                }
            }
        }