User bio
404 bio not found
Member since Nov 17, 2025
Posts:
Replies:
MarkLee · May 11 go to post

I have a class that tries to get the latest file, but I can't test it because I am getting METHOD DOES NOT EXIST.

This is the error my logger outputs.

***************************

tLatestFile: 0 o<METHOD DOES NOT EXIST>GetLatestFile+7 ^UHNuEPICPKG.UHNEpicProduction.Epic.X12WSIBClm.UHN.EpicX12wsibclmUhnService.1 *NameList,EnsLib.File.InboundAdapterÆ
UHN_EPIC·a ^GetLatestFile+7^UHNuEPICPKG.UHNEpicProduction.Epic.X12WSIBClm.UHN.EpicX12wsibclmUhnService.1 ^1ce^OnProcessInput+7 ^UHNuEPICPKG.UHNEpicProduction.Epic.X12WSIBClm.UHN.EpicX12wsibclmUhnService.1 ^1+e^ProcessInput+12 ^Ens.BusinessService.1 ^12e^processFile+127 ^EnsLib.File.InboundAdapter.1 ^1-e^OnTask+107^EnsLib.File.InboundAdapter.1 ^1%e^OnTask+29^Ens.BusinessService.1 ^1e^Start+62^Ens.Job.1 ^2$d^StartEnsembleJob+8 ^|"%SYS"|STU^1d^ ^^0
**************************

code

*************************

/// Accepts ONLY THE LATEST MODIFIED FILE from the File Inbound Adapter, encapsulates each one as a Stream object within a StreamContainer object and forwards the container object to the configured target configuration item or items.
Class My.Package.NewService Extends EnsLib.File.PassthroughService
{

/// Property to store the file path directory
Property FilePath As %String;

/// Property to store the file wildcard pattern
Property FilePattern As %String(MAXLEN = 255) [ InitialExpression = "*" ];

Method OnProcessInput(pInput As %Stream.Object, pOutput As %RegisteredObject) As %Status
{
       Set tSC = $$$OK
       Set tSource = pInput.Attributes("Filename")

      
       Try {
           // Get the directory from the input stream filename
           Set tDirectory = ##class(%File).GetDirectory(tSource)
          
           // Get all files matching the pattern
           Set tLatestFile = ..GetLatestFile(tDirectory)
           $$$LOGINFO("tSource: "_tSource)
           $$$LOGINFO("tDirectory: "_tDirectory)
           $$$LOGINFO("tLatestFile: "_tLatestFile)

           /*If $$$ISERR(tSC) {
               $$$LOGERROR("Error retrieving file list: "_$ZERROR)
               Return tSC
           }*/
          
           // If we found a latest file and it matches our current input, process it
           If tLatestFile = tSource {
               // Wrap the stream in a container and send it
               Set pInput = ##class(Ens.StreamContainer).%New(pInput)
              
               Set tWorkArchive = (""'=..Adapter.ArchivePath) &&
                   (..Adapter.ArchivePath = ..Adapter.WorkPath ||
                    (""=..Adapter.WorkPath &&
                     (..Adapter.ArchivePath=..Adapter.FilePath)))
              
               For iTarget = 1:1:$Length(..TargetConfigNames, ",") {
                   Set tOneTarget = $ZStrip($Piece(..TargetConfigNames, ",", iTarget), "<>W")
                   Continue:""=tOneTarget
                  
                   If tWorkArchive {
                       Set tSC1 = ..SendRequestAsync(tOneTarget, pInput)
                       Set:$$$ISERR(tSC1) tSC = $$$ADDSC(tSC, tSC1)
                   } Else {
                       Set tSC1 = ..SendRequestSync(tOneTarget, pInput)
                       Set:$$$ISERR(tSC1) tSC = $$$ADDSC(tSC, tSC1)
                   }
               }
           } Else {
               $$$LOGINFO("Skipping file: "_tSource_" (not the latest file)")
           }
       }
       Catch ex {
           Set tSC = ex.AsStatus()
           $$$LOGERROR("Exception in OnProcessInput: "_$ZERROR)
       }
      
       Return tSC
}


/// Method to get the latest file from a directory
Method GetLatestFile(pDirectory As %String, Output pLatestFile As %String) As %Status
{
       Set tSC = $$$OK
       Set pLatestFile = ""
       Set tLatestTimestamp = 0
       Set tLatestFullPath = ""
      
       Try {
           // Use the Adapter's NameList method to get all files
           Set tSC = ..Adapter.NameList(.tFileList, ..FilePattern)
           If $$$ISERR(tSC) {
               Return tSC
           }
          
           // Iterate through the file list
           Set tIterator = tFileList.%GetIterator()
           While tIterator.%GetNext(.key, .tFileEntry) {
               // Parse the file entry: Filename;Type;Size;DateCreated;DateModified;FullPathName

               $$$LOGINFO("File Entry: "_tFileEntry)

               
               Set tFilename = $Piece(tFileEntry, ";", 1)
               Set tType = $Piece(tFileEntry, ";", 2)
               Set tDateModified = $Piece(tFileEntry, ";", 5)
               Set tFullPath = $Piece(tFileEntry, ";", 6)
              
               // Skip directories
               If tType = "D" {
                   Continue
               }
              
               // Compare timestamps to find the latest file
               If tDateModified > tLatestTimestamp {
                   Set tLatestTimestamp = tDateModified
                   Set tLatestFullPath = tFullPath
                   Set pLatestFile = tFilename
               }
           }
          
           If tLatestFullPath = "" {
               $$$LOGWARNING("No files found in directory: "_pDirectory)
           } Else {
               $$$LOGINFO("Latest file identified: "_pLatestFile_" (modified: "_tLatestTimestamp_")")
           }
       }
       Catch ex {
           Set tSC = ex.AsStatus()
       }
      
       Return tSC
}

}
 

Certifications & Credly badges:
MarkLee has no Certifications & Credly badges yet.
Followers:
MarkLee has no followers yet.
Following:
MarkLee has not followed anybody yet.