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);
            }
        }