A ProDataSet is exactly what its name implies—a set of related data. It is typically populated in a single operation, where one or more top-level records and all their related records are retrieved at once. This is called a FILL operation, or just a FILL. You can define a query for the top-level buffer (or for each top-level buffer if there is more than one) and execute a FILL on the ProDataSet itself, in which case all of its tables are loaded. The AVM executes the queries for top-level buffers and also for other buffers that have specific queries. The ProDataSet follows the Data-Relations to identify and load the children for each parent. A simple example is a purchase order header (where the top-level query identifies a single Order by its key), plus all of the OrderLines for the Order, plus Items for the OrderLines, plus Inventory for the OrderLines, and so on.
In other cases, you might want to populate only a part of a ProDataSet at one time. To do this, you can run the FILL method on a buffer rather than on the ProDataSet as a whole, and it is filled from there on down. When you do this, you can also deactivate Data-Relations in order to limit the scope of the FILL. You can also execute a FILL multiple times to add more data to a ProDataSet that already has data. Each temp-table has a FILL-MODE that allows you to specify that a table should be emptied before it is filled again, or that it should be skipped altogether, or that new records are simply to be appended to existing ones, or merged with existing ones by checking for duplicates.