How to Programmatically Create a Project for Objects in a Given Layer


Action


You may want to create an AX project that contains all of the application elements that exist in a given layer.  For example, if you need to recreate the VAR layer *.aod file, you will need to pull all of the application elements in the VAR layer into a project, export the project to an xpo, delete the VAR *.aod file and finally log into the newly created VAR *.aod file import the xpo.  When you import the xpo all of the application elements can be recreated in the new *.aod file.  The code in this document demonstrates how to do this.

Result


When the X++ code in this example is added to a job in the AOT and executed, the code will create a  private project called VarLayerChanges.  The VarLayerChanges project will contain all of the elements that exist in the VAR layer.  If you would like to create a project for a different layer, change the string 'VarLayerChanges' to the layer you need it for, for example 'CusLayerChanges'.  Then change the enum UtilEntryLevel::var to the different layer, for example UtilEntryLevel::cus.

Resolution


TreeNode treeNode = infolog.projectRootNode();
ProjectNode projectNode;
UtilElements utilElements;
;

treeNode = treeNode.AOTfirstChild();
treeNode.AOTadd('VarLayerChanges');

projectNode = treeNode.AOTfindChild('VarLayerChanges');
projectNode = projectNode.getRunNode();

while select utilElements WHERE utilElements.utilLevel == UtilEntryLevel::var
{
    ProjectNode.addUtilNode(utilElements.recordType, utilElements.name);
}

ProjectNode.AOTsave();