Skip to main content

EnsLib.File.InboundAdapter

class EnsLib.File.InboundAdapter extends Ens.InboundAdapter, EnsLib.File.Common

Finds files in a FilePath directory and submits all that match a FileSpec wildcard to an associated BusinessService for processing

Property Inventory

Method Inventory

Parameters

parameter SERVICEINPUTCLASS = %Stream.Object;
parameter SETTINGS = RegistryID:Basic:selector?context={Ens.ServiceRegistry.External.ContextSearch/Services?Protocols_1=File},FilePath:Basic:directorySelector,FileSpec:Basic,ArchivePath:Basic:directorySelector,WorkPath:Basic:directorySelector,SubdirectoryLevels,DeleteFromServer,Charset::selector?context={Ens.ContextSearch/CharacterSets},AppendTimestamp,ConfirmComplete,FileAccessTimeout,SemaphoreSpec;
Inherited description: List of properties can be set as settings in the configuration file format is a comma separated list of property names

Properties

property AppendTimestamp as %String [ InitialExpression = 1 ];
Append a timestamp to Archive and Working filenames in order to prevent possible name collisions on repeated processing of the same filename.

If this value is empty or 0, no timestamp will be appended. If it is 1, then the standard timestamped filename specification template '%f_%Q' will be used.

Any other value will be used directly as a timestamped filename specification template.

Property methods: AppendTimestampDisplayToLogical(), AppendTimestampGet(), AppendTimestampIsValid(), AppendTimestampLogicalToDisplay(), AppendTimestampLogicalToOdbc(), AppendTimestampNormalize(), AppendTimestampSet()
property ArchivePath as %String (MAXLEN = 1000);
Path to move a file to after processing is completed. If not given, the file will be deleted after processing is completed unless the setting DeleteFromServer is false and the WorkPath setting is the empty string.

Note that the AppendTimestamp option must be used to avoid name collisions in the archive directory if the same filename will be retrieved repeatedly.

Property methods: ArchivePathDisplayToLogical(), ArchivePathGet(), ArchivePathIsValid(), ArchivePathLogicalToDisplay(), ArchivePathLogicalToOdbc(), ArchivePathNormalize()
property Charset as %String [ InitialExpression = "Native" ];
Character encoding scheme used for translating input from files. For binary input, use 'Binary'. Other choices include:
Native - the default character encoding of the installed locale of the InterSystems IRIS server
latin1 - the ISO Latin1 8-bit encoding
ISO-8859-1 - the ISO Latin1 8-bit encoding
UTF-8 - the Unicode 8-bit encoding
Unicode - the Unicode 16-bit encoding (Little-Endian)
UnicodeBig - the Unicode 16-bit encoding (Big-Endian)
@<ttable> - <ttable> means a raw InterSystems character translation table name. A prefix of '@' means to use the named table.
Property methods: CharsetDisplayToLogical(), CharsetGet(), CharsetIsValid(), CharsetLogicalToDisplay(), CharsetLogicalToOdbc(), CharsetNormalize(), CharsetSet()
property ConfirmComplete as %Integer (DISPLAYLIST = ",None,Size,Rename,Readable,Writable", VALUELIST = ",0,1,2,4,8") [ InitialExpression = "4" ];
Special measures to confirm complete receipt of a file, in case it is still being written at the time we detect it in the FilePath directory.

- 'Size' means wait until the size reported for the file in the FilePath directory listing stops increasing.
This option alone may not be sufficient when the source application is sluggish. If the OS reports the same size for the file for a duration of the FileAccessTimeout value then InterSystems IRIS will consider the file complete.
- 'Rename' means keep trying to read more data for a file until the OS allows us to rename it. If WorkPath or ArchivePath is different from FilePath, this option is implied because the file must be moved which is equivalent to renaming. This option may not be effective because it is common for an OS to allow InterSystems IRIS to rename a file even while another application has the file open and is still writing more data into it.
- 'Readable' means if we consider the file complete if we are simply able to open it in Read mode. Depending on the OS and the details of the process that puts the file in the FilePath directory where we find it, this may be enough although in many cases it isn't.
- 'Writable' means if we consider the file complete if we are able to open it in Write mode (as a test - we generally don't intend to write to it.). This may be enough depending on the OS and the details of the process that puts the file in the FilePath directory where we find it.

Property methods: ConfirmCompleteDisplayToLogical(), ConfirmCompleteGet(), ConfirmCompleteIsValid(), ConfirmCompleteLogicalToDisplay(), ConfirmCompleteNormalize(), ConfirmCompleteSet()
property DeleteFromServer as %Boolean [ InitialExpression = 1 ];
Specifies whether or not to delete files from the local file server after successful processing

If not deleted, the adapter will ignore files already processed until something else deletes them.

Note 1: If this setting is false an attempt will be made to delete file when the IRIS message is purged.
Note 2: If a WorkPath is specified this setting is ignored and the file is moved to the work path.

Property methods: DeleteFromServerDisplayToLogical(), DeleteFromServerGet(), DeleteFromServerIsValid(), DeleteFromServerLogicalToDisplay(), DeleteFromServerNormalize(), DeleteFromServerSet()
property FileAccessTimeout as %Integer [ InitialExpression = 2 ];
Amount of idle time to wait before abandoning our attempt to confirm complete access to a file we've found (see the ConfirmComplete option)
Property methods: FileAccessTimeoutDisplayToLogical(), FileAccessTimeoutGet(), FileAccessTimeoutIsValid(), FileAccessTimeoutLogicalToDisplay(), FileAccessTimeoutNormalize(), FileAccessTimeoutSet()
property FilePath as %String (MAXLEN = 1000) [ Required ];
Path to directory to look for files in - may be prefixed with @MyAgent:
Property methods: FilePathDisplayToLogical(), FilePathGet(), FilePathIsValid(), FilePathLogicalToDisplay(), FilePathLogicalToOdbc(), FilePathNormalize()
property FileSpec as %String (MAXLEN = 400) [ InitialExpression = "*" ];
Wildcard filename to look for; may be a semicolon-separated list of wildcards.
Property methods: FileSpecDisplayToLogical(), FileSpecGet(), FileSpecIsValid(), FileSpecLogicalToDisplay(), FileSpecLogicalToOdbc(), FileSpecNormalize(), FileSpecSet()
property SemaphoreSpec as %String (MAXLEN = 400);

Allows you to indicate that the data file or files are complete and ready to be read by creating an associated second file in the same directory that is used as a semaphore. The inbound file adapter waits until the semaphore file exists before checking the other conditions specified by the Confirm Complete requirements and then processing the data file or files. The adapter tests only for the existence of the semaphore file and does not read the semaphore file contents.

If the Semaphore Specification is an empty string, the adapter does not wait for a semaphore file and processes the data files as soon as the conditions specified by the Confirm Complete requirements are met.

If you are using the Semaphore Specification feature, consider setting the Confirm Complete field to None.

SYNTAX: Semaphore Specification can be an empty string or can be a series of pairs, each of which associates a data filename pattern with a semaphore filename pattern. The pairs are separated by semicolons:

DataFileSpec=SemaphoreFileSpec;DataFileSpec=SemaphoreFileSpec;...

DataFileSpec either a plain filename or is a filename pattern that includes the * wildcard (which matches any character). Similarly, SemaphoreFileSpec either a plain filename or is a filename pattern that includes the * wildcard (but in this case, the * wildcard matches any character except a period). Notes:

  • The semaphore file associated with a given data file (or multiple data files) must be in the same directory as those files.
  • DataFileSpec and SemaphoreFileSpec do not include the directory name.
  • DataFileSpec is always case-sensitive.
  • SemaphoreFileSpec is case-sensitive if the operating system is case-sensitive and is not case-sensitive otherwise.
  • The pairs are processed left-to-right, and the first matching pair is used; see below. Consequently, if you are including multiple specifications that can match the same file, you should specify the more specific specification before the more general ones.
  • If an adapter configured with a FileSpec equal to *, the adapter usually considers all files in the directory as data files. But if Semaphore Specification is also specified, the adapter can recognize a file as a semaphore file and not treat it as a data file.

FILENAMES THAT DO NOT MATCH A PATTERN: If a Semaphore Specification is specified and a given data file does not match any of the patterns, then the adapter will not process this data file. If this is undesirable, specify a final pair that will match any file and that uses its own semaphore file. For example, consider this Semaphore Specification:

*.DAT=*.SEM; *.DOC=*.READY; *=SEM.LAST

The SEM.LAST is the semaphore file for all files that do not end with .DAT or .DOC.

HOW THE ADAPTER USES SEMAPHORE SPECIFICATION: Within each polling cycle, the inbound file adapter examines all the files found within the configured directory (and any subdirectories). Then for each file:

  1. The adapter reads the Semaphore Specification from left-to-right, finding the first specification whose DataFileSpec matches the given filename. This indicates the name of the semaphore file to look for.
  2. The adapter looks for the semaphore file in the same directory as the file being examined. Then: If it does not find the semaphore file, the adapter skips the file and sets an internal flag that causes the adapter to wait until the next polling cycle. If it does find the semaphore file, the adapter processes the file.

After the adapter has processed through all the data files in a polling cycle, it deletes all the corresponding semaphore files.

Property methods: SemaphoreSpecDisplayToLogical(), SemaphoreSpecGet(), SemaphoreSpecIsValid(), SemaphoreSpecLogicalToDisplay(), SemaphoreSpecLogicalToOdbc(), SemaphoreSpecNormalize(), SemaphoreSpecSet()
property SubdirectoryLevels as %Integer (MINVAL = 0) [ InitialExpression = 0 ];
Number of levels of subdirectory depth under the FilePath directory that should be searched for files matching the FileSpec pattern.
Property methods: SubdirectoryLevelsDisplayToLogical(), SubdirectoryLevelsGet(), SubdirectoryLevelsIsValid(), SubdirectoryLevelsLogicalToDisplay(), SubdirectoryLevelsNormalize(), SubdirectoryLevelsSet()
property VMSLatestVersionOnly as %Boolean [ InitialExpression = 1 ];
Property methods: VMSLatestVersionOnlyDisplayToLogical(), VMSLatestVersionOnlyGet(), VMSLatestVersionOnlyIsValid(), VMSLatestVersionOnlyLogicalToDisplay(), VMSLatestVersionOnlyNormalize(), VMSLatestVersionOnlySet()
property WorkPath as %String (MAXLEN = 1000);
Path to move a file to while it is being processed. If not given, the file will not move while in process.

This setting is useful when the same filename is used for repeated file submissions.

Note: This setting takes precedence over DeleteFromServer and the file is moved from the source directory to this directory if DeleteFromServer is false.

Property methods: WorkPathDisplayToLogical(), WorkPathGet(), WorkPathIsValid(), WorkPathLogicalToDisplay(), WorkPathLogicalToOdbc(), WorkPathNormalize()

Methods

method IsVMSLatestVersion(pFilename As %String) as %Boolean
method OnInit() as %Status
Inherited description: This user callback method is called just after %OnNew()
method OnTask() as %Status
Inherited description: default InboundAdapter behavior: always call ProcessInput on CallInterval
method testPaths(pOnInit As %Boolean = 1) as %Status

Inherited Members

Inherited Properties

Inherited Methods

Subclasses

FeedbackOpens in a new tab