Writing Multiple File Layouts
If you’re writing files that contain data based on more than one File Layout definition, consider the following points:
-
If the file is going to a third-party vendor, you should work with the third-party to determine what their requirements are for specifying the different data formats.
-
If the file is going to be used by another PeopleSoft system, you must add the FileId between each rowset that requires a different layout. FileId file records are not part of any rowset. They should be designed so they won’t be mistaken for part of a rowset. You can create and write them to the file in many ways. The following are suggestions:
-
Build each line as a string, using any of the built-in string manipulation functions, then write them to the file using the File class WriteLine or WriteString methods.
-
Design a file layout consisting of a single file record definition for the FileId file records, then build the records using Record Class methods and functions, and write them to the file using the WriteRecord method.
-
The following code example writes each record from the level one scroll on a page to the file using a different File Layout. Between each WriteRowset the File ID file record is written to the file, describing the new File Layout being used.
Local File &MYFILE;
Local Rowset &FILEROWSET;
Local Record &REC1, &REC2;
Local SQL &SQL;
&MYFILE = GetFile("c:\temp\Records.txt", "W", "UTF8", %FilePath_Absolute);
If &MYFILE.IsOpen Then
If &MYFILE.SetFileLayout(FileLayout.TREE_LEVEL) Then
&REC1 = CreateRecord(Record.PSTREELEVEL);
&FILEROWSET = &MYFILE.CreateRowset();
&SQL = CreateSQL("%Selectall(:1)", &REC1);
/* write first File ID to file */
&MYFILE.WriteLine("999 FILE LAYOUT 1");
While &SQL.Fetch(&REC1)
&REC1.CopyFieldsTo(&FILEROWSET.GetRow(1).PSTREELEVEL);
&MYFILE.WriteRowset(&FILEROWSET, True);
End-While;
Else
/* file layout not found, do error processing */
End-If;
If &MYFILE.SetFileLayout(FileLayout.TREE_USERLEVEL) Then
&REC2 = CreateRecord(Record.TREE_LEVEL_TBL);
&FILEROWSET = &MYFILE.CreateRowset();
&SQL = CreateSQL("%Selectall(:1)", &REC2);
/* write second File ID to file */
&MYFILE.WriteLine("999 FILE LAYOUT 2");
While &SQL.Fetch(&REC2)
&REC2.CopyFieldsTo(&FILEROWSET.GetRow(1).TREE_LEVEL_TBL);
&MYFILE.WriteRowset(&FILEROWSET);
End-While;
Else
/* file layout not found, do error processing */
End-If;
Else
/* file not opened, do error processing */
End-If;
&MYFILE.Close();See WriteLine method: File class, WriteString method: File class, WriteRecord method: File class.