Using a normal table as a temporary table
Standard Dynamics AX contains numerous temporary tables, which are used by the application and could be used in custom modifications too. Although new temporary tables can also be easily created using the AOT, sometimes it is not effective. One of the cases could be when the temporary table is very similar or exactly the same as an existing one. The goal of this recipe is to demonstrate an approach for using standard non-temporary tables to hold temporary data.
As an example, we will use the vendor table to insert and display a couple of temporary records without affecting the actual data.
How to do it...
Carry out the following steps in order to complete this recipe:
1. In the AOT, create a new class named
VendTableTmp
with the following code:class VendTableTmp { } server static void main(Args _args) { VendTable vendTable; vendTable.setTmp(); vendTable.AccountNum = '1000'; vendTable.Blocked = CustVendorBlocked::No; vendTable.Party = 1; vendTable.doInsert(); vendTable.clear(); vendTable.AccountNum = '1002'; vendTable.Blocked = CustVendorBlocked::All; vendTable.Party = 2; vendTable.doInsert(); while select vendTable { info(strFmt( "%1 - %2", vendTable.AccountNum, vendTable.Blocked)); } }
2. Run the class and check the results:
How it works...
The key method in this recipe is in the setTmp()
method. It is available on all tables, and it declares the current table instance to behave as a temporary table in the current scope. So in this recipe, we will first call the setTmp()
method on the vendTable
table to make it temporary in the scope of this method. That means any data manipulations will be lost once the execution of this method is over and actual table content will not be affected.
Next, we will insert a couple of test records. Here, we use the doInsert()
method to bypass any additional logic, which normally resides in the table's insert()
method.
The last thing to do is to check for newly created records by listing the vendTable
table. We can see that although the table contains many actual records, only the ones which we inserted were displayed in the Infolog. Additionally, the two we inserted do not appear in the actual table records.