Openio

Use Openio to open and close a sequential file in update mode on one of the available servers from the Sage X3 application server.

Syntax

 OpenioOpenio Using [ABBREVIATION]Openio FILE_EXPROpenio FILE_EXPR Using [ABBREVIATION]Openio FILE_EXPR, SIZE_EXPROpenio FILE_EXPR, SIZE_EXPR Using [ABBREVIATION]

Examples

 # Let's open a file on the server to append data to itOpenio "C:\Temp\my_file.txt",-1...# Close the last file opened to readOpenio# Opening a file on the "distrib" server in read write mode and an initial position at the beginningOpenio "distrib@"+[L]NOMFIC# Open two files located in the TMP sub-directory of the folder directory on the application server# The initial position is at byte 1024.Openio filpath('TMP','rdfile1',''),1024 Using [YYY]Openio filpath('TMP','rdfile2',''),1024 Using [ZZZ]# Close the two previously opened filesOpenio Using [YYY]Openio Using [ZZZ]

Description

Use Openio to open a file for reading and writing data with Rdseq, Wrseq, Getseq, and Putseq.

The first parameter is the file path that must be opened:

The value in the 2nd parameter is used to position the read/write position (in bytes) in the file:

When a unique file is opened, there is no need to give an abbreviation. If several files can be opened, it is preferable to use an abbreviation that can be freely chosen and used later to identify the channel used.
* The maximum number of sequential files that can be opened simultaneously is given by the value of the adxmso system variable.
* For a given abbreviation (or without abbreviation), only one sequential file can be opened by OpenioOpeni, or Openo at a given moment. Opening a file in read/write mode closes any file that may have been previously opened with Openio, Openi, or Openo with this abbreviation (or with no abbreviation).

The current read/write position can be known:
* By adxseek(0) or adxseek(1) if the file has been opened without abbreviation. On a file opened by Openio, the two values of adxseek(0) and adxseek(1) are always the same.
* By adxseek("ABREV") if the [ABREV] abbreviation has been used.

Comments

Note that Openio does not manage the write conflicts that can happen when two users try to access the same file. It is recommended to position a Lock on a predefined symbol. The data written in sequential files is not included in database transactions. Therefore, Trbegin, Commit, and Rollback have no interaction with the files written by Openio.

The data write operations are buffered by the system and are completely done only after the file is closed by Openio. If it is necessary to ensure that the data has been written, use the instruction Seek 0 on the abbreviation. This instruction flushes the write buffers.

Execution restriction in Clouds environment

For obvious security reasons, the execution of this instruction is controlled on Clouds environments:

If the conditions defined by the sandbox are not fulfilled, an error 27 will be raised.

For more information, look at the sandbox configuration page.

The version 2 (code named mindo) will implement the file operations in mongoDB rather than on file systems. The use of Openio to update a file starting at a given position will need to perform a copy of the file and won't therefore be performing with good performances. I is therefore recommended to avoid using this syntax except for small file. Remember that you have the following patterns:
Openo FILENAME,0 : # Opens a file and truncates it if it already existsOpeno FILENAME, -1 : # Opens a file in append mode

Associated errors

Error codeDescription
10FILE_EXPR is not a Char type or SEEK_EXPR is not numeric.
20Nonexistent file or path folder.
25System error when connecting to a remote server.
27Access not possible, permission denied.
44No more disk space.
50exp_depl > 0.
57No seek operation allowed on the file.
60Too many channels used.
65Size limit exceeded for the file.

See also

Openi, Openo, Seek, Getseq, Rdseq, Putseq, Wrseq, adxifs, adxirs, adxium, adxmso.