private void Send(DcbSlice dcbSlice)
        {
            var message = new PipeMessageEnvelope
            {
                Body = dcbSlice
            };

            OutputDataPipe.Send(message);
            IncreaseProcessedDocumentsCount(dcbSlice.NumberOfDocuments);
        }
        protected override bool GenerateMessage()
        {
            try
            {
                var dcbSlice = new DcbSlice
                {
                    FirstDocument  = currentDocumentNumber,
                    DcbCredentials = DcbCredentials,
                    ImageSetId     = ImageSetId
                };

                var currentBatchSize   = BatchSize;
                var documentsRemaining = numberOfDocumentsInDcb - currentDocumentNumber;
                if (documentsRemaining < BatchSize)
                {
                    currentBatchSize = documentsRemaining;
                }
                dcbSlice.NumberOfDocuments = currentBatchSize;
                currentDocumentNumber     += currentBatchSize;

                Send(dcbSlice);

                if (currentDocumentNumber >= numberOfDocumentsInDcb)
                {
                    CreateDatabaseLevelTags();
                    return(true);
                }
                LogMessage(true, "DCB documents sliced successfully");
                return(false);
            }
            catch (ArgumentOutOfRangeException exRange)
            {
                Tracer.Debug("DcbParser: Opening unsecured DCB database {0}", exRange.Message);
                LogMessage(false, "DcbParser failed to process document. Error: " + Constants.ExportPathFull);
                throw;
            }
            catch (Exception ex)
            {
                LogMessage(false, "DcbSlicer failed to process document. Error: " + ex.Message);
                throw;
            }
        }
Пример #3
0
        protected override void ProcessMessage(PipeMessageEnvelope envelope)
        {
            if (null == envelope || null == envelope.Body)
            {
                return;
            }

            try
            {
                DcbSlice dcbSlice = (DcbSlice)envelope.Body;

                OpenDCB(dcbSlice.DcbCredentials);

                ImageSetId = dcbSlice.ImageSetId;

                FamiliesInfo familiesInfo = DcbOpticonJobBEO.IsImportFamilies ? new FamiliesInfo() : null;

                var documentDetailList     = new List <DocumentDetail>();
                var dcbParserLogEntries    = new List <JobWorkerLog <DcbParserLogInfo> >();
                int lastDocumentInTheBatch = dcbSlice.FirstDocument + dcbSlice.NumberOfDocuments - 1;
                for (int currentDocumentNumber = dcbSlice.FirstDocument;
                     currentDocumentNumber <= lastDocumentInTheBatch;
                     currentDocumentNumber++)
                {
                    JobWorkerLog <DcbParserLogInfo> dcbParserLogEntry =
                        new JobWorkerLog <DcbParserLogInfo>()
                    {
                        JobRunId         = long.Parse(PipelineId),
                        WorkerInstanceId = WorkerId,
                        CorrelationId    = currentDocumentNumber + 1,      // CorrId is the same as TaskId and it is 1 based.
                        // This magic GUID is set in [EVMaster].[dbo].[EV_JOB_WorkerRoleType] to identify DcbParcer for Log Worker
                        WorkerRoleType = "e754adb7-23c8-44cc-8d4c-12f33aef41b6",
                        Success        = true,
                        CreatedBy      = ProfileBEO.CreatedBy,
                        IsMessage      = false,
                        LogInfo        = new DcbParserLogInfo()
                    };

                    FetchDocumentFromDCB(currentDocumentNumber, documentDetailList, familiesInfo, dcbParserLogEntry);

                    dcbParserLogEntries.Add(dcbParserLogEntry);
                }

                if (0 == dcbSlice.FirstDocument)
                {
                    DcbDatabaseTags dcbDatabaseTags = FetchDatabaseLevelTags();
                    if (null != dcbDatabaseTags)
                    {
                        if (null == documentDetailList[0].DcbTags)
                        {
                            documentDetailList[0].DcbTags = new List <DcbTags>();
                        }
                        documentDetailList[0].DcbTags.Add(dcbDatabaseTags);
                    }
                }

                if (DcbOpticonJobBEO.IsImportFamilies)
                {
                    SendRelationshipsInfo(familiesInfo.FamilyInfoList);
                }

                Send(documentDetailList);
                SendLog(dcbParserLogEntries);
            }
            catch (ArgumentOutOfRangeException exRange)
            {
                exRange.AddUsrMsg(Constants.ExportPathFull);
                ReportToDirector(exRange);
                exRange.Trace();
                LogMessage(false, Constants.ExportPathFull);
                throw;
            }
            catch (Exception ex)
            {
                ReportToDirector(ex);
                ex.Trace().Swallow();
                LogMessage(false, "DcbParser failed to process document. Error: " + ex.ToUserString());
            }
        }