We'll start with a simple example of how to create and use a SuperFile. This dataset declaration is in the ProgGuide MODULE structure (contained in the Default module). This declares the SuperFile as a DATASET that can be referenced in ECL code:
EXPORT SuperFile1 := DATASET(BaseFile,Layout_Person,FLAT);
Then we'll create and add sub-files to a SuperFile (this code is contained in SuperFile2.ECL):
IMPORT $; IMPORT Std; SEQUENTIAL( Std.File.CreateSuperFile($.DeclareData.BaseFile), Std.File.StartSuperFileTransaction(), Std.File.AddSuperFile($.DeclareData.BaseFile,$.DeclareData.SubFile1), Std.File.AddSuperFile($.DeclareData.BaseFile,$.DeclareData.SubFile2), Std.File.FinishSuperFileTransaction());
If the workunit failed with a "logical name progguide::superfile::base already exists" error message, then open the SuperFileRestart.ECL file and run it, then re-try the above code. Once you've successfully executed this code in a builder window, you've created the SuperFile and added two sub-files into it.
The SuperFile1 DATASET declaration attribute makes the SuperFile available for use just as any other DATASET would be--this is the key to using SuperFiles. That means the following types of actions can be executed against the SuperFile, just as with any other dataset:
IMPORT $; COUNT($.DeclareData.SuperFile1(PersonID <> 0)); OUTPUT($.DeclareData.SuperFile1);
Given the logical files previously built, the results of the COUNT should be 317,000. The filter condition will always be true, so the COUNT returned will be the total number of records in the SuperFile. The (PersonID <> 0) record filter is necessary so that the actual COUNT is performed each time and the result is not a shortcut value stored internally by the ECL Agent. Of course, the OUTPUT produces the first 100 records in the SuperFile.