/Free // Register error condition handler HdlrProcPtr = %PAddr(ErrorConditionHandler); HdlrToken = %Addr(SystemDS); CEEHDLR(HdlrProcPtr :HdlrToken :*OMIT); // Make sure constructor has been called IS3905R_Constructor(); // Read data queue entry RcvDQEnt(DQName :DQLibrary :DQLength :DQDataDS :DQWait); // An entry containing "SHUTDOWN" will be placed onto the queue for // each server. This signals the receiver program to end. DoW DQDataDS.Shutdown <> 'SHUTDOWN'; // Retrieve UI entries for this group UIRemoveCriteria = %EditC(DQDataDS.GroupingID :'X') + '001' + %EditC(DQDataDS.GroupingID :'X') + %EditC(DQDataDS.NbrOfImages :'X'); RmvUsrIdxEnt(UINbrRemoved :UIRcvVarDS :UIRcvVarLen :UIOffsets :UILenOfOffsets :UIRetLibrary :UIName :UIFormat :UIMaxEntries :UIRemoveType :UIRemoveCriteria :UICriteriaLength :UICriteriaOffset :apiError); // Reset values OKToIndex = *On; WriteECEAuditRec = *Off; Clear ImageHstUpdDS; Clear RVIRecDS; RVIRecDS.ABAICD = TargetDir; // Walk through returned list of images For ImageCount = 1 to UINbrRemoved; ImageHstUpdDs(ImageCount).SourceFile = UIRcvVarDS.UIEntry(ImageCount).ImageFile; // Validate account identifier If ValidAccountID(MyAccountID :UIRcvVarDS.UIEntry(ImageCount).AccountType :UIRcvVarDS.UIEntry(ImageCount).AccountID); // Validate doc type If ValidDocType(WriteECEAuditRec :UIRcvVarDS.UIEntry(ImageCount).DocType :UIRcvVarDS.UIEntry(ImageCount).NCPProductCode :UIRcvVarDS.UIEntry(ImageCount).LetterType1 :UIRcvVarDS.UIEntry(ImageCount).LetterType2); // Next RVI transaction number If ImageCount = 1; RVIRecDS.ABAACD = UIRcvVarDS.UIEntry(ImageCount).RVISysCode; RVIRecDS.ABAANB = Nxttrn#(UIRcvVarDS.UIEntry(ImageCount).RVISysCode); EndIf; // Determine file type and set RVI field and suffix accordingly If %Scan('.PDF' :ImageHstUpdDS(1).ImageFile) > 0; RVIRecDS.ABABST = 'O'; Suffix = '.PDF'; Else; RVIRecDS.ABABST = 'B'; Suffix = %EditC(UIRcvVarDS.UIEntry(ImageCount).ImageNumber :'X'); EndIf; // Move images If MovedToImageDir(ReturnedImage :UIRcvVarDS.UIEntry(ImageCount).ImageFile :UIRcvVarDS.UIEntry(ImageCount).ImageDir :Suffix :UIRcvVarDS.UIEntry(ImageCount).RVISysCode :RVIRecDS.ABAANB); ImageHstUpdDS(ImageCount).ProcSts = 'P'; ImageHstUpdDS(ImageCount).ImageFile = ReturnedImage; Else; // MovedToImageDir() ImageHstUpdDS(ImageCount).ProcSts = 'E'; ImageHstUpdDS(ImageCount).ImageFile = *Blanks; OKToIndex = *Off; EndIf; // MovedToImageDir() // Invalid doc type Else; ImageHstUpdDS(ImageCount).ProcSts = 'E'; OKToIndex = *Off; SndErrorEMail('IMG0004' :%EditC(UIRcvVarDS.UIEntry(ImageCount).DocType :'X') + UIRcvVarDS.UIEntry(ImageCount).ImageFile + UIRcvVarDS.UIEntry(ImageCount).ImageDir); EndIf; // ValidDocType() // Update image history with error code Else; // Valid account identifier ImageHstUpdDS(ImageCount).ProcSts = 'E'; OKToIndex = *Off; SndErrorEMail('IMG0003' :%EditC(UIRcvVarDS.UIEntry(ImageCount).AccountID :'X') + UIRcvVarDS.UIEntry(ImageCount).ImageFile + UIRcvVarDS.UIEntry(ImageCount).ImageDir); EndIf; // Valid account identifier EndFor; // ImageCount = 1 to UINbrRemoved // If it is ok to index the image send MQ message and update RVI If OKToIndex; // Use letter ID if this is an ECE image If WriteECEAuditRec; RVIRecDS.ABAGCD = UIRcvVarDS.UIEntry(1).LetterID; // Place ECE audit entry onto the queue WriteECEAudit(UIRcvVarDS.UIEntry(1).LetterID); // Use batch number if not ECE Else; RVIRecDS.ABAGCD = BatchNbr; EndIf; // Write RVABREP record WriteIndexRec(RVIRecDS); EndIf; // Update image history records ImageHstUpdDS(ImageCount).RVISysID = UIRcvVarDS.UIEntry(ImageCount).RVISysCode; ImageHstUpdDS(ImageCount).RVITrnID = RVIRecDS.ABAANB; UpdateImageHst(); // Retrieve next data queue entry RcvDQEnt(DQName :DQLibrary :DQLength :DQDataDS :DQWait); EndDo; // <> SHUTDOWN *InLR = *On; /End-Free