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