public void Process()
        {
            var errorContext = "An error occured when extracting text for field.";

            try
            {
                errorContext += String.Format(" [WorkspaceArtifactId: {0}, DocumentArtifactId: {1}]", WorkspaceArtifactId, DocumentArtifactId);

                //retreive text source on Document object
                String textSource = ArtifactQueries.GetDocumentTextFieldValue(ServicesMgr, ExecutionIdentity, WorkspaceArtifactId, DocumentArtifactId, SourceLongTextFieldArtifactId);

                if (textSource == null)
                {
                    //update TextExtractorDetails field on Document object
                    String extractorSetName = ArtifactQueries.GetExtractorSetNameForArtifactId(ServicesMgr, ExecutionIdentity.CurrentUser, WorkspaceArtifactId, ExtractorSet.ArtifactId);
                    var    fieldValue       = string.Format(Constant.ErrorMessages.DOCUMENT_ERROR_ENCOUNTERED, Constant.ErrorMessages.EXTRACTOR_SET_SOURCE_LONG_TEXT_FIELD_IS_EMPTY, extractorSetName);
                    ArtifactQueries.AppendToDocumentLongTextFieldValue(ServicesMgr, ExecutionIdentity.CurrentUser, WorkspaceArtifactId, DocumentArtifactId, Constant.Guids.Fields.Document.TextExtractorErrors, fieldValue);

                    //Update ExtractorSet Details field
                    ArtifactQueries.UpdateExtractorSetDetails(ServicesMgr, ExecutionIdentity.CurrentUser, WorkspaceArtifactId, ExtractorSet.ArtifactId, Constant.ExtractorSetStatus.DetailMessages.COMPLETE_WITH_ERRORS_DETAILS);
                }
                else
                {
                    var textExtractorDocument = new ExtractorSetDocument(DocumentArtifactId, textSource).GetInstance();

                    //extract text and update fields.
                    ExtractorProfile.ProcessAllTargetTexts(textExtractorDocument, ExtractorSet);

                    //update the value for reporting
                    ExtractorSet.ExtractorSetReporting.SetNumberOfUpdatesWithValues(WorkspaceArtifactId, ExtractorSetArtifactId, ExtractorProfile.NumberOfTargetTextsWithValues);
                }

                // Reset the count because it's being done on one instance of ExtractorProfile
                ExtractorProfile.ResetNumberOfTargetTextsWithValues();
            }
            catch (Exception ex)
            {
                throw new CustomExceptions.TextExtractorException(errorContext, ex);
            }
        }
        public WorkerQueueRecord(ISqlQueryHelper sqlSqlQueryHelper, IArtifactQueries artifactArtifactQueries, IDBContext eddsDbContext, IServicesMgr servicesMgr, ArtifactFactory artifactArtifactFactory, ExecutionIdentity executionExecutionIdentity, Int32 queueId, Int32 workspaceArtifactId, Int32 queueStatus, Int32 agentId, Int32 extractorSetArtifactId, Int32 documentArtifactId, Int32 extractorProfileArtifactId, Int32 sourceLongTextFieldArtifactId, ExtractorSetReporting textExtractorJobReporting, ExtractorSet extractorSet, ExtractorProfile extractorProfile)
        {
            SqlQueryHelper  = sqlSqlQueryHelper;
            ArtifactQueries = artifactArtifactQueries;

            QueueId                       = queueId;
            WorkspaceArtifactId           = workspaceArtifactId;
            QueueStatus                   = queueStatus;
            AgentId                       = agentId;
            ExtractorSetArtifactId        = extractorSetArtifactId;
            DocumentArtifactId            = documentArtifactId;
            ExtractorProfileArtifactId    = extractorProfileArtifactId;
            SourceLongTextFieldArtifactId = sourceLongTextFieldArtifactId;
            TextExtractorJobReporting     = textExtractorJobReporting;
            ArtifactFactory               = artifactArtifactFactory;

            QueueTableName    = Constant.Tables.WorkerQueue;
            EddsDbContext     = eddsDbContext;
            ServicesMgr       = servicesMgr;
            ExecutionIdentity = executionExecutionIdentity;

            ExtractorSet     = extractorSet;
            ExtractorProfile = extractorProfile;
        }