diff --git a/AXModulesBuild.proj b/AXModulesBuild.proj
new file mode 100644
index 0000000..c427dd7
--- /dev/null
+++ b/AXModulesBuild.proj
@@ -0,0 +1,45 @@
+
+
+
+ $(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dynamics\AX\7.0\SDK@MetadataPath)
+ $(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dynamics\AX\7.0\SDK@DynamicsSDK)
+ $(AGENT_BUILDDIRECTORY)\Packages
+ $(AGENT_BUILDDIRECTORY)\TestResults
+ $(AGENT_BUILDDIRECTORY)\Artifacts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBAOTObjectPopulateController.xml b/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBAOTObjectPopulateController.xml
new file mode 100644
index 0000000..025312b
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBAOTObjectPopulateController.xml
@@ -0,0 +1,95 @@
+
+
+ ARBAOTObjectPopulateController
+
+
+/// Controller for generating setup data for parameter comparison
+///
+class ARBAOTObjectPopulateController extends SysOperationserviceController
+{
+}
+]]>
+
+
+ new
+
+ /// Constructor for ACMAOTObjectPopulateController class
+ ///
+ /// The name of the class
+ /// The method name
+ /// The execution mode
+ protected void new(IdentifierName _className = '', IdentifierName _methodName = '', SysOperationExecutionMode _executionMode = SysOperationExecutionMode::Synchronous)
+ {
+ super(classStr(ARBAOTObjectPopulateService), methodStr(ARBAOTObjectPopulateService, populateAOTObjects), _executionMode);
+ }
+
+]]>
+
+
+ construct
+
+ /// Construct method for ACMAOTObjectPopulateController
+ ///
+ /// The new ACMAOTObjectPopulateController
+ public static ARBAOTObjectPopulateController construct()
+ {
+ return new ARBAOTObjectPopulateController();
+ }
+
+]]>
+
+
+ caption
+
+ /// The caption for the controller
+ ///
+ /// The caption
+ public ClassDescription caption()
+ {
+ return "@AOTBrowser:PopulateAOTObjectTable";
+ }
+
+]]>
+
+
+ parmDialogCaption
+
+ /// The dialog caption
+ ///
+ /// The new dialog caption
+ /// The dialog caption
+ public LabelType parmDialogCaption(LabelType _dialogCaption = dialogCaption)
+ {
+ LabelType ret;
+
+ ret = "@AOTBrowser:PopulateAOTObjectTable";
+
+ return ret;
+ }
+
+]]>
+
+
+ main
+
+ /// The main method
+ ///
+ /// The arguments
+ public static void main(Args _args)
+ {
+ ARBAOTObjectPopulateController controller = ARBAOTObjectPopulateController::construct();
+
+ controller.startOperation();
+ }
+
+]]>
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBAOTObjectPopulateService.xml b/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBAOTObjectPopulateService.xml
new file mode 100644
index 0000000..7975551
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBAOTObjectPopulateService.xml
@@ -0,0 +1,517 @@
+
+
+ ARBAOTObjectPopulateService
+
+
+/// Service for generating parameter comparison setup data
+///
+class ARBAOTObjectPopulateService extends SysOperationServiceBase
+{
+
+}
+]]>
+
+
+ populateAOTObjects
+
+ /// Generate the setup data needed for parameter comparison
+ ///
+ public void populateAOTObjects()
+ {
+ var tableList = Xpp.MetadataSupport::GetDataModelElements(true,false,false,false,false).GetEnumerator();
+
+ ARBAOTObjects aotObjects;
+ RecordInsertList aotObjectsInsertList = new RecordInsertList(tableNum(ARBAOTObjects));
+ delete_from aotObjects;
+
+ while (tableList.MoveNext())
+ {
+ AxTable table = Xpp.MetadataSupport::GetTable(tableList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = table.Name;
+ aotObjects.Label = SysLabel::labelId2String2(table.Label);
+ aotObjects.Type = ARBAOTObjectType::Table;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var viewList = Xpp.MetadataSupport::GetDataModelElements(false,true,false,false,false).GetEnumerator();
+
+ while (viewList.MoveNext())
+ {
+ AxView view = Xpp.MetadataSupport::GetView(viewList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = view.Name;
+ aotObjects.Label = SysLabel::labelId2String2(view.Label);
+ aotObjects.Type = ARBAOTObjectType::View;
+ aotObjectsInsertList.add(aotObjects);
+
+ }
+
+ var enumList = Xpp.MetadataSupport::EnumNames();
+
+ while (enumList.MoveNext())
+ {
+ AxEnum enum = Xpp.MetadataSupport::GetEnum(enumList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = enum.Name;
+ aotObjects.Label = SysLabel::labelId2String2(enum.Label);
+ aotObjects.Type = ARBAOTObjectType::BaseEnum;
+ aotObjectsInsertList.add(aotObjects);
+
+ }
+
+ var edtList = Xpp.MetadataSupport::EdtNames();
+
+ while (edtList.MoveNext())
+ {
+ AxEdt edt = Xpp.MetadataSupport::GetEdt(edtList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = edt.Name;
+ aotObjects.Label = SysLabel::labelId2String2(edt.Label);
+ aotObjects.Type = ARBAOTObjectType::ExtendedDataType;
+ aotObjectsInsertList.add(aotObjects);
+
+ }
+
+ var dataEntityList = Xpp.MetadataSupport::GetDataModelElements(false,false,true,false,false).GetEnumerator();
+
+ while (dataEntityList.MoveNext())
+ {
+ AxDataEntityView dataEntityView = Xpp.MetadataSupport::GetDataEntityView(dataEntityList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = dataEntityView.Name;
+ aotObjects.Label = SysLabel::labelId2String2(dataEntityView.Label);
+ aotObjects.Type = ARBAOTObjectType::DataEntity;
+ aotObjectsInsertList.add(aotObjects);
+
+ }
+
+ var mapList = Xpp.MetadataSupport::GetDataModelElements(false,false,false,false,true).GetEnumerator();
+
+ while (mapList.MoveNext())
+ {
+ AxMap map = Xpp.MetadataSupport::GetMap(mapList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = map.Name;
+ aotObjects.Label = SysLabel::labelId2String2(map.Label);
+ aotObjects.Type = ARBAOTObjectType::Map;
+ aotObjectsInsertList.add(aotObjects);
+
+ }
+
+ var classList = Xpp.MetadataSupport::ClassNames();
+
+ while (classList.MoveNext())
+ {
+ AxClass aotClass = Xpp.MetadataSupport::GetClass(classList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = aotClass.Name;
+ //aotObjects.Label = SysLabel::labelId2String2(aotClass.Label);
+ aotObjects.Type = ARBAOTObjectType::Class;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var formsList = Xpp.MetadataSupport::FormNames();
+
+ while (formsList.MoveNext())
+ {
+ AxForm form = Xpp.MetadataSupport::GetForm(formsList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = form.Name;
+ aotObjects.Label = SysLabel::labelId2String2(form.Design.Caption);
+ aotObjects.Type = ARBAOTObjectType::Form;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var queriesList = Xpp.MetadataSupport::QueryNames();
+
+ while (queriesList.MoveNext())
+ {
+ AxQuery query = Xpp.MetadataSupport::GetQuery(queriesList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = query.Name;
+ if (query is AxQuerySimple)
+ {
+ AxQuerySimple querySimple = query;
+ aotObjects.Label = SysLabel::labelId2String2(querySimple.Title);
+ }
+ aotObjects.Type = ARBAOTObjectType::Query;
+ aotObjectsInsertList.add(aotObjects);
+
+ }
+
+ var menuList = ArbelaXpp.MetadataSupport::MenuNames();
+
+ while (menuList.MoveNext())
+ {
+ AxMenu menu = Xpp.MetadataSupport::GetMenu(menuList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = menu.Name;
+ aotObjects.Label = SysLabel::labelId2String2(menu.Label);
+ aotObjects.Type = ARBAOTObjectType::Menu;
+ aotObjectsInsertList.add(aotObjects);
+
+ }
+
+ var tileList = ArbelaXpp.MetadataSupport::TileNames();
+
+ while (tileList.MoveNext())
+ {
+ AxTile tile = Xpp.MetadataSupport::GetTile(tileList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = tile.Name;
+ aotObjects.Label = SysLabel::labelId2String2(tile.Label);
+ aotObjects.Type = ARBAOTObjectType::Tile;
+ aotObjectsInsertList.add(aotObjects);
+
+ }
+
+ var tableCollectionList = ArbelaXpp.MetadataSupport::TableCollectionNames();
+
+ while (tableCollectionList.MoveNext())
+ {
+ AxTableCollection tableCollection = ArbelaXpp.MetadataSupport::GetTableCollection(tableCollectionList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = tableCollection.Name;
+ aotObjects.Type = ARBAOTObjectType::TableCollection;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var compositEntityList = ArbelaXpp.MetadataSupport::CompositeDataEntityNames();
+
+ while (compositEntityList.MoveNext())
+ {
+ AxCompositeDataEntityView compositeEntity = ArbelaXpp.MetadataSupport::GetCompositeDataEntity(compositEntityList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = compositeEntity.Name;
+ aotObjects.Label = SysLabel::labelId2String2(compositeEntity.Label);
+ aotObjects.Type = ARBAOTObjectType::CompositeDataEntity;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var menuItemDisplayList = Xpp.MetadataSupport::MenuItemDisplayNames();
+
+ while (menuItemDisplayList.MoveNext())
+ {
+ AxMenuItemDisplay menuItemDisplay = Xpp.MetadataSupport::GetMenuItemDisplay(menuItemDisplayList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = menuItemDisplay.Name;
+ aotObjects.Label = SysLabel::labelId2String2(menuItemDisplay.Label);
+ aotObjects.Type = ARBAOTObjectType::MenuItemDisplay;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var menuItemActionList = Xpp.MetadataSupport::MenuItemActionNames();
+
+ while (menuItemActionList.MoveNext())
+ {
+ AxMenuItemAction menuItemAction = Xpp.MetadataSupport::GetMenuItemAction(menuItemActionList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = menuItemAction.Name;
+ aotObjects.Label = SysLabel::labelId2String2(menuItemAction.Label);
+ aotObjects.Type = ARBAOTObjectType::MenuItemAction;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var menuItemOutputList = Xpp.MetadataSupport::MenuItemOutputNames();
+
+ while (menuItemOutputList.MoveNext())
+ {
+ AxMenuItemOutput menuItemOutput = Xpp.MetadataSupport::GetMenuItemOutput(menuItemOutputList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = menuItemOutput.Name;
+ aotObjects.Label = SysLabel::labelId2String2(menuItemOutput.Label);
+ aotObjects.Type = ARBAOTObjectType::MenuItemOutput;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var securityRoleList = Xpp.MetadataSupport::SecurityRoleNames();
+
+ while (securityRoleList.MoveNext())
+ {
+ AxSecurityRole securityRole = Xpp.MetadataSupport::GetSecurityRole(securityRoleList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = securityRole.Name;
+ aotObjects.Label = SysLabel::labelId2String2(securityRole.Label);
+ aotObjects.Type = ARBAOTObjectType::SecurityRole;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var securityDutyList = ArbelaXpp.MetadataSupport::SecurityDutyNames();
+
+ while (securityDutyList.MoveNext())
+ {
+ AxSecurityDuty securityDuty = ArbelaXpp.MetadataSupport::GetSecurityDuty(securityDutyList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = securityDuty.Name;
+ aotObjects.Label = SysLabel::labelId2String2(securityDuty.Label);
+ aotObjects.Type = ARBAOTObjectType::SecurityDuty;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var securityPrivilegeList = ArbelaXpp.MetadataSupport::SecurityPrivilegeNames();
+
+ while (securityPrivilegeList.MoveNext())
+ {
+ AxSecurityPrivilege securityPrivilege = ArbelaXpp.MetadataSupport::GetSecurityPrivilege(securityPrivilegeList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = securityPrivilege.Name;
+ aotObjects.Label = SysLabel::labelId2String2(securityPrivilege.Label);
+ aotObjects.Type = ARBAOTObjectType::SecurityPrivilege;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var aggregateDataEntityList = ArbelaXpp.MetadataSupport::AggregateDataEntityNames();
+
+ while (aggregateDataEntityList.MoveNext())
+ {
+ AxAggregateDataEntity aggregateDataEntity = Xpp.MetadataSupport::GetAggregateDataEntity(aggregateDataEntityList.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = aggregateDataEntity.Name;
+ aotObjects.Label = SysLabel::labelId2String2(aggregateDataEntity.Label);
+ aotObjects.Type = ARBAOTObjectType::AggregateDataEntity;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var workflowCategoryNames = Xpp.MetadataSupport::GetWorkflowCategoryNames().GetEnumerator();
+
+ while (workflowCategoryNames.MoveNext())
+ {
+ AxWorkflowCategory object = Xpp.MetadataSupport::GetWorkflowCategory(workflowCategoryNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::WorkflowCategory;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var workflowApprovalNames = Xpp.MetadataSupport::GetWorkflowApprovalNames().GetEnumerator();
+
+ while (workflowApprovalNames.MoveNext())
+ {
+ AxWorkflowApproval object = Xpp.MetadataSupport::GetWorkflowApproval(workflowApprovalNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::WorkflowApproval;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var workflowTaskNames = Xpp.MetadataSupport::GetWorkflowTaskNames().GetEnumerator();
+
+ while (workflowTaskNames.MoveNext())
+ {
+ AxWorkflowTask object = Xpp.MetadataSupport::GetWorkflowTask(workflowTaskNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::WorkflowTask;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var workflowAutomatedTaskNames = Xpp.MetadataSupport::GetWorkflowAutomatedTaskNames().GetEnumerator();
+
+ while (workflowAutomatedTaskNames.MoveNext())
+ {
+ AxWorkflowAutomatedTask object = Xpp.MetadataSupport::GetWorkflowAutomatedTask(workflowAutomatedTaskNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::WorkflowAutomatedTask;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var workflowTypeNames = Xpp.MetadataSupport::GetWorkflowTemplateNames().GetEnumerator();
+
+ while (workflowTypeNames.MoveNext())
+ {
+ AxWorkflowTemplate object = Xpp.MetadataSupport::GetWorkflowTemplate(workflowTypeNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::WorkflowType;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var workflowProviderNames = Xpp.MetadataSupport::GetWorkflowHierarchyAssignmentProviderNames().GetEnumerator();
+
+ while (workflowProviderNames.MoveNext())
+ {
+ AxWorkflowHierarchyAssignmentProvider object = Xpp.MetadataSupport::GetWorkflowHierarchyAssignmentProvider(workflowProviderNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::WorkflowHierarchyAssignmentProvider;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ workflowProviderNames = Xpp.MetadataSupport::GetWorkflowParticipantAssignmentProviderNames().GetEnumerator();
+
+ while (workflowProviderNames.MoveNext())
+ {
+ AxWorkflowParticipantAssignmentProvider object = Xpp.MetadataSupport::GetWorkflowParticipantAssignmentProvider(workflowProviderNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::WorkflowParticipantAssignmentProvider;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ workflowProviderNames = Xpp.MetadataSupport::GetWorkflowQueueAssignmentProviderNames().GetEnumerator();
+
+ while (workflowProviderNames.MoveNext())
+ {
+ AxWorkflowQueueAssignmentProvider object = Xpp.MetadataSupport::GetWorkflowQueueAssignmentProvider(workflowProviderNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::WorkflowQueueAssignmentProvider;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ workflowProviderNames = Xpp.MetadataSupport::GetWorkflowDueDateCalculationProviderNames().GetEnumerator();
+
+ while (workflowProviderNames.MoveNext())
+ {
+ AxWorkflowDueDateCalculationProvider object = Xpp.MetadataSupport::GetWorkflowDueDateCalculationProvider(workflowProviderNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::WorkflowDueDateCalculationProvider;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var resourceNames = Xpp.MetadataSupport::ResourceNames();
+
+ while (resourceNames.MoveNext())
+ {
+ AxResource object = Xpp.MetadataSupport::GetResource(resourceNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::Resource;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var licenseCodeNames = Xpp.MetadataSupport::LicenseCodeNames();
+
+ while (licenseCodeNames.MoveNext())
+ {
+ AxLicenseCode object = Xpp.MetadataSupport::GetLicenseCode(licenseCodeNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::LicenseCode;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var configKeyNames = Xpp.MetadataSupport::ConfigurationKeyNames();
+
+ while (configKeyNames.MoveNext())
+ {
+ AxConfigurationKey object = Xpp.MetadataSupport::GetConfigurationKey(configKeyNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::ConfigKey;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var configKeyGroupNames = Xpp.MetadataSupport::ConfigurationKeyGroupNames();
+
+ while (configKeyGroupNames.MoveNext())
+ {
+ AxConfigurationKeyGroup object = Xpp.MetadataSupport::GetConfigurationKeyGroup(configKeyGroupNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::ConfigKeyGroup;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var serviceNames = Xpp.MetadataSupport::ServiceNames();
+
+ while (serviceNames.MoveNext())
+ {
+ AxService object = ArbelaXpp.MetadataSupport::GetService(serviceNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ //aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::Service;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var serviceGroupNames = ArbelaXpp.MetadataSupport::ServiceGroupNames();
+
+ while (serviceGroupNames.MoveNext())
+ {
+ AxServiceGroup object = ArbelaXpp.MetadataSupport::GetServiceGroup(serviceGroupNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ //aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::ServiceGroup;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ var reportNames = Xpp.MetadataSupport::ReportNames();
+
+ while (reportNames.MoveNext())
+ {
+ AxReport object = Xpp.MetadataSupport::GetReport(reportNames.Current);
+
+ aotObjects.clear();
+ aotObjects.Name = object.Name;
+ //aotObjects.Label = SysLabel::labelId2String2(object.Label);
+ aotObjects.Type = ARBAOTObjectType::Report;
+ aotObjectsInsertList.add(aotObjects);
+ }
+
+ aotObjectsInsertList.insertDatabase();
+ }
+
+]]>
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBDMFEntity_EventHandler.xml b/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBDMFEntity_EventHandler.xml
new file mode 100644
index 0000000..30098cc
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBDMFEntity_EventHandler.xml
@@ -0,0 +1,44 @@
+
+
+ ARBDMFEntity_EventHandler
+
+
+/// Event Handlers for DMFEntity
+///
+class ARBDMFEntity_EventHandler
+{
+
+}
+]]>
+
+
+ ACMOpenInAOTBrowser_OnClicked
+
+ /// Handle clicked event for open in AOT browser
+ ///
+ ///
+ ///
+ [FormControlEventHandler(formControlStr(DMFEntity, ARBOpenInAOTBrowser), FormControlEventType::Clicked),
+ SuppressBPWarning('BPParameterNotUsed', 'EventArgs is a required parameter')]
+ public static void ACMOpenInAOTBrowser_OnClicked(FormControl sender, FormControlEventArgs e)
+ {
+ FormRun form = sender.formRun();
+ FormDataSource datasource = form.dataSource(formDataSourceStr(DMFEntity, DMFEntity)) as FormDataSource;
+ DMFEntity entity = datasource.cursor();
+ Args args = new Args();
+
+ args.parmEnumType(enumNum(ARBAOTObjectType));
+ args.parmEnum(ARBAOTObjectType::DataEntity);
+ args.parm(entity.TargetEntity);
+ args.caller(sender.formRun());
+
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ }
+
+]]>
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBFormControlPersonalization_EventHandler.xml b/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBFormControlPersonalization_EventHandler.xml
new file mode 100644
index 0000000..f633799
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxClass/ARBFormControlPersonalization_EventHandler.xml
@@ -0,0 +1,41 @@
+
+
+ ARBFormControlPersonalization_EventHandler
+
+
+/// Event handlers for FormControlPersonalization
+///
+class ARBFormControlPersonalization_EventHandler
+{
+
+}
+]]>
+
+
+ ACMOpenInAOTBrowser_OnClicked
+
+ ///
+ ///
+ ///
+ ///
+ [FormControlEventHandler(formControlStr(FormControlPersonalization, ARBOpenInAOTBrowser), FormControlEventType::Clicked),
+ SuppressBPWarning('BPParameterNotUsed', 'EventArgs is a required parameter')]
+ public static void ACMOpenInAOTBrowser_OnClicked(FormControl sender, FormControlEventArgs e)
+ {
+ Args args = new Args();
+
+ args.parmEnumType(enumNum(ARBAOTObjectType));
+ args.parmEnum(ARBAOTObjectType::Form);
+ args.parm(sender.formRun().args().caller().name());
+ args.caller(sender.formRun());
+
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ }
+
+]]>
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxEdt/ARBAOTProperties.xml b/Metadata/AOTBrowser/AOTBrowser/AxEdt/ARBAOTProperties.xml
new file mode 100644
index 0000000..ed3a61a
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxEdt/ARBAOTProperties.xml
@@ -0,0 +1,605 @@
+
+
+ ARBAOTProperties
+
+
+
+ Prop02
+ 2
+
+
+
+
+ Prop03
+ 3
+
+
+
+
+ Prop04
+ 4
+
+
+
+
+ Prop05
+ 5
+
+
+
+
+ Prop06
+ 6
+
+
+
+
+ Prop07
+ 7
+
+
+
+
+ Prop08
+ 8
+
+
+
+
+ Prop09
+ 9
+
+
+
+
+ Prop10
+ 10
+
+
+
+
+ Prop11
+ 11
+
+
+
+
+ Prop12
+ 12
+
+
+
+
+ Prop13
+ 13
+
+
+
+
+ Prop14
+ 14
+
+
+
+
+ Prop15
+ 15
+
+
+
+
+ Prop16
+ 16
+
+
+
+
+ Prop17
+ 17
+
+
+
+
+ Prop18
+ 18
+
+
+
+
+ Prop19
+ 19
+
+
+
+
+ Prop20
+ 20
+
+
+
+
+ Prop21
+ 21
+
+
+
+
+ Prop22
+ 22
+
+
+
+
+ Prop23
+ 23
+
+
+
+
+ Prop24
+ 24
+
+
+
+
+ Prop25
+ 25
+
+
+
+
+ Prop26
+ 26
+
+
+
+
+ Prop27
+ 27
+
+
+
+
+ Prop28
+ 28
+
+
+
+
+ Prop29
+ 29
+
+
+
+
+ Prop30
+ 30
+
+
+
+
+ Prop31
+ 31
+
+
+
+
+ Prop32
+ 32
+
+
+
+
+ Prop33
+ 33
+
+
+
+
+ Prop34
+ 34
+
+
+
+
+ Prop35
+ 35
+
+
+
+
+ Prop36
+ 36
+
+
+
+
+ Prop37
+ 37
+
+
+
+
+ Prop38
+ 38
+
+
+
+
+ Prop39
+ 39
+
+
+
+
+ Prop40
+ 40
+
+
+
+
+ Prop41
+ 41
+
+
+
+
+ Prop42
+ 42
+
+
+
+
+ Prop43
+ 43
+
+
+
+
+ Prop44
+ 44
+
+
+
+
+ Prop45
+ 45
+
+
+
+
+ Prop46
+ 46
+
+
+
+
+ Prop47
+ 47
+
+
+
+
+ Prop48
+ 48
+
+
+
+
+ Prop49
+ 49
+
+
+
+
+ Prop50
+ 50
+
+
+
+
+ Prop51
+ 51
+
+
+
+
+ Prop52
+ 52
+
+
+
+
+ Prop53
+ 53
+
+
+
+
+ Prop54
+ 54
+
+
+
+
+ Prop55
+ 55
+
+
+
+
+ Prop56
+ 56
+
+
+
+
+ Prop57
+ 57
+
+
+
+
+ Prop58
+ 58
+
+
+
+
+ Prop59
+ 59
+
+
+
+
+ Prop60
+ 60
+
+
+
+
+ Prop61
+ 61
+
+
+
+
+ Prop62
+ 62
+
+
+
+
+ Prop63
+ 63
+
+
+
+
+ Prop64
+ 64
+
+
+
+
+ Prop65
+ 65
+
+
+
+
+ Prop66
+ 66
+
+
+
+
+ Prop67
+ 67
+
+
+
+
+ Prop68
+ 68
+
+
+
+
+ Prop69
+ 69
+
+
+
+
+ Prop70
+ 70
+
+
+
+
+ Prop71
+ 71
+
+
+
+
+ Prop72
+ 72
+
+
+
+
+ Prop73
+ 73
+
+
+
+
+ Prop74
+ 74
+
+
+
+
+ Prop75
+ 75
+
+
+
+
+ Prop76
+ 76
+
+
+
+
+ Prop77
+ 77
+
+
+
+
+ Prop78
+ 78
+
+
+
+
+ Prop79
+ 79
+
+
+
+
+ Prop80
+ 80
+
+
+
+
+ Prop81
+ 81
+
+
+
+
+ Prop82
+ 82
+
+
+
+
+ Prop83
+ 83
+
+
+
+
+ Prop84
+ 84
+
+
+
+
+ Prop85
+ 85
+
+
+
+
+ Prop86
+ 86
+
+
+
+
+ Prop87
+ 87
+
+
+
+
+ Prop88
+ 88
+
+
+
+
+ Prop89
+ 89
+
+
+
+
+ Prop90
+ 90
+
+
+
+
+ Prop91
+ 91
+
+
+
+
+ Prop92
+ 92
+
+
+
+
+ Prop93
+ 93
+
+
+
+
+ Prop94
+ 94
+
+
+
+
+ Prop95
+ 95
+
+
+
+
+ Prop96
+ 96
+
+
+
+
+ Prop97
+ 97
+
+
+
+
+ Prop98
+ 98
+
+
+
+
+ Prop99
+ 99
+
+
+
+
+ Prop100
+ 100
+
+
+
+
+
+
+ 100
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxEdt/ARBAOTPropertyValue.xml b/Metadata/AOTBrowser/AOTBrowser/AxEdt/ARBAOTPropertyValue.xml
new file mode 100644
index 0000000..2a75a66
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxEdt/ARBAOTPropertyValue.xml
@@ -0,0 +1,10 @@
+
+
+ ARBAOTPropertyValue
+
+
+
+
+ 100
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxEnum/ARBAOTObjectType.xml b/Metadata/AOTBrowser/AOTBrowser/AxEnum/ARBAOTObjectType.xml
new file mode 100644
index 0000000..e12ba98
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxEnum/ARBAOTObjectType.xml
@@ -0,0 +1,191 @@
+
+
+ ARBAOTObjectType
+
+
+
+ None
+
+
+
+ Table
+
+ 1
+
+
+ Class
+
+ 2
+
+
+ BaseEnum
+
+ 3
+
+
+ ExtendedDataType
+
+ 4
+
+
+ View
+
+ 5
+
+
+ Query
+
+ 6
+
+
+ DataEntity
+
+ 7
+
+
+ CompositeDataEntity
+
+ 8
+
+
+ AggregateDataEntity
+
+ 21
+
+
+ Map
+
+ 9
+
+
+ TableCollection
+
+ 10
+
+
+ Form
+
+ 12
+
+
+ Tile
+
+ 13
+
+
+ Menu
+
+ 14
+
+
+ MenuItemDisplay
+
+ 15
+
+
+ MenuItemOutput
+
+ 16
+
+
+ MenuItemAction
+
+ 17
+
+
+ SecurityRole
+
+ 18
+
+
+ SecurityDuty
+
+ 19
+
+
+ SecurityPrivilege
+
+ 20
+
+
+ WorkflowCategory
+
+ 22
+
+
+ WorkflowApproval
+
+ 23
+
+
+ WorkflowTask
+
+ 24
+
+
+ WorkflowAutomatedTask
+
+ 25
+
+
+ WorkflowType
+
+ 26
+
+
+ WorkflowHierarchyAssignmentProvider
+
+ 27
+
+
+ WorkflowParticipantAssignmentProvider
+
+ 28
+
+
+ WorkflowQueueAssignmentProvider
+
+ 29
+
+
+ WorkflowDueDateCalculationProvider
+
+ 30
+
+
+ Resource
+
+ 31
+
+
+ LicenseCode
+
+ 32
+
+
+ ConfigKey
+
+ 33
+
+
+ ConfigKeyGroup
+
+ 34
+
+
+ Service
+
+ 36
+
+
+ ServiceGroup
+
+ 37
+
+
+ Report
+
+ 38
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxForm/ARBAOTBrowser.xml b/Metadata/AOTBrowser/AOTBrowser/AxForm/ARBAOTBrowser.xml
new file mode 100644
index 0000000..df57051
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxForm/ARBAOTBrowser.xml
@@ -0,0 +1,1925 @@
+
+
+ ARBAOTBrowser
+
+
+
+ classDeclaration
+
+/// ACM AOT browser form
+///
+[Form]
+public class ARBAOTBrowser extends FormRun
+{
+ ARBAOTObjectType objectType;
+ TreeNodeName aotNodeName;
+ FormGridControl propertiesMatrixGrid;
+
+
+}
+]]>
+
+
+ updateControlsFromTable
+
+
+
+ updateControls
+
+
+
+ updateTableControls
+
+
+
+ updateEnumControls
+
+
+
+ updateEdtControls
+
+
+
+ updateDataEntityControls
+
+
+
+ updateClassControls
+
+
+
+ updateFormControls
+
+
+
+ updateQueryControls
+
+
+
+ updateMapControls
+
+
+
+ updateViewControls
+
+
+
+ updateMenuControls
+
+
+
+ updateTileControls
+
+
+
+ updateTableCollectionControls
+
+
+
+ updateCompositeDataEntityControls
+
+
+
+ updateAggregateDataEntityControls
+
+
+
+ updateMenuItemDisplayControls
+
+
+
+ updateMenuItemActionControls
+
+
+
+ updateMenuItemOutputControls
+
+
+
+ updateSecurityRoleControls
+
+
+
+ updateSecurityDutyControls
+
+
+
+ updateSecurityPrivilegeControls
+
+
+
+ updateWorkflowCategoryControls
+
+
+
+ updateWorkflowApprovalControls
+
+
+
+ updateWorkflowTaskControls
+
+
+
+ updateWorkflowAutomatedTaskControls
+
+
+
+ updateWorkflowTypeControls
+
+
+
+ updateWorkflowHierarchyProviderControls
+
+
+
+ updateWorkflowParticipantProviderControls
+
+
+
+ updateWorkflowQueueProviderControls
+
+
+
+ updateWorkflowDueDateCalcProviderControls
+
+
+
+ updateResourceControls
+
+
+
+ updateLicenseCodeControls
+
+
+
+ updateConfigKeyControls
+
+
+
+ updateConfigKeyGroupControls
+
+
+
+ updateServiceControls
+
+
+
+ updateServiceGroupControls
+
+
+
+ updateReportControls
+
+
+
+ clearPropertiesMatrix
+
+
+
+ updatePropertiesGroup
+ 100)
+ {
+ continue;
+ }
+
+ nextArrayNum++;
+ propMap.insert(prop.Name, arrayNum);
+ previousControl = propertiesMatrixGrid.addDataField(ARBAOTObjectPropertiesMatrix_ds.id(), fieldNum(ARBAOTObjectPropertiesMatrix, Property), previousControl, arrayNum);
+ previousControl.label(prop.Name);
+ }
+
+ if (prop.Name == 'ReturnType')
+ {
+ AxMethodReturnType returnType = prop.GetValue(object);
+ ARBAOTObjectPropertiesMatrix.Property[arrayNum] = returnType.Type.ToString() + ' - ' + returnType.TypeName;
+ }
+ else
+ {
+ ARBAOTObjectPropertiesMatrix.Property[arrayNum] = prop.Name == 'Label' || prop.Name == 'Description' || prop.Name == 'HelpText' || prop.Name == 'DeveloperDocumentation' || prop.Name == 'EntityRelationshipRole' ? SysLabel::labelId2String(prop.GetValue(object).ToString()) : (prop.GetValue(object) == null ? '' : prop.GetValue(object).ToString());
+ }
+ }
+ }
+ ARBAOTObjectPropertiesMatrix.insert();
+ }
+
+ propertiesMatrixGrid.visible(true);
+
+ }
+ else
+ {
+ element.clearPropertiesMatrix();
+ System.Type t = _object.GetType();
+
+ var props = t.GetProperties();
+ for (int i = 0; i < props.Length; i++)
+ {
+ PropertyInfo prop = props.GetValue(i);
+ if (((prop.GetValue(_object) is System.String) ||
+ (!(prop.GetValue(_object) is System.Collections.IEnumerable)
+ && prop.PropertyType.Name != 'AxPropertyCollection'
+ && prop.PropertyType.Name != 'AxFormPropertyCollection'))
+ && prop.Name != 'CompilerMetadata')
+ {
+ ARBAOTObjectProperties.clear();
+ ARBAOTObjectProperties.Name = prop.Name;
+ if (prop.Name == 'ReturnType')
+ {
+ AxMethodReturnType returnType = prop.GetValue(_object);
+ ARBAOTObjectProperties.Value = returnType.Type.ToString() + ' - ' + returnType.TypeName;
+ }
+ else
+ {
+ ARBAOTObjectProperties.Value = prop.Name == 'Label' || prop.Name == 'Description' || prop.Name == 'HelpText' || prop.Name == 'DeveloperDocumentation' || prop.Name == 'EntityRelationshipRole' ? SysLabel::labelId2String(prop.GetValue(_object).ToString()) : (prop.GetValue(_object) == null ? '' : prop.GetValue(_object).ToString());
+ }
+ ARBAOTObjectProperties.insert();
+ }
+ }
+ PropertiesGrid.visible(true);
+ }
+ }
+ else
+ {
+ element.clearPropertiesMatrix();
+ PropertiesGrid.visible(false);
+ }
+ ARBAOTObjectProperties_ds.executeQuery();
+ ARBAOTObjectPropertiesMatrix_ds.executeQuery();
+
+ //element.reload();
+ }
+
+]]>
+
+
+ updateObjectTree
+
+
+
+ addTreeNode
+
+
+
+ init
+
+ ///
+ ///
+ public void init()
+ {
+ super();
+
+ Args args = element.args();
+
+ if (args.parmEnumType() == enumNum(ARBAOTObjectType) && args.parm() != null)
+ {
+ NavigationGroup.visible(false);
+ ARBAOTObjects_ds.queryBuildDataSource().enabled(false);
+ this.updateControls(args.parmEnum(), args.parm());
+ }
+ }
+
+]]>
+
+
+
+
+ ARBAOTObjects
+
+
+ active
+
+ ///
+ ///
+ ///
+ public int active()
+ {
+ int ret;
+
+ ret = super();
+
+ element.updateControlsFromTable();
+
+ return ret;
+ }
+
+]]>
+
+
+
+
+
+
+
+ ARBOpenTableBrowser
+ Button
+
+
+ clicked
+
+ ///
+ ///
+ public void clicked()
+ {
+ super();
+
+ SysTableBrowser sysTableBrowser;
+
+ sysTableBrowser = new SysTableBrowser();
+ sysTableBrowser.parmTableName(ARBAOTObjects.Name);
+ sysTableBrowser.run(tablename2id(ARBAOTObjects.Name));
+ }
+
+]]>
+
+
+
+
+ AOTObjectTypeFilter
+ ComboBox
+
+
+ modified
+
+ ///
+ ///
+ ///
+ public boolean modified()
+ {
+ boolean ret;
+
+ ret = super();
+
+ if (AOTObjectTypeFilter.selection() == enum2int(ARBAOTObjectType::None))
+ {
+ ARBAOTObjects_ds.queryBuildDataSource().clearRange(fieldNum(ARBAOTObjects,Type));
+ }
+ else
+ {
+ SysQuery::findOrCreateRange(ARBAOTObjects_ds.queryBuildDataSource(), fieldNum(ARBAOTObjects,Type)).value(queryValue(AOTObjectTypeFilter.selection()));
+ }
+ ARBAOTObjects_ds.executeQuery();
+
+ return ret;
+ }
+
+]]>
+
+
+
+
+ TableTree
+ Tree
+
+
+ selectionChanged
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void selectionChanged(FormTreeItem _OldItem, FormTreeItem _NewItem, FormTreeSelect _how)
+ {
+ super(_OldItem, _NewItem, _how);
+
+ element.updatePropertiesGroup(_NewItem.data());
+ }
+
+]]>
+
+
+
+
+ ACMAOTObjectProperties_Value
+ String
+
+
+ jumpRef
+
+ ///
+ ///
+ public void jumpRef()
+ {
+ ARBAOTObjectProperties props;
+ props.setTmpData(ARBAOTObjectProperties);
+ Args args = new Args();
+ args.parmEnumType(enumNum(ARBAOTObjectType));
+
+ switch(ARBAOTObjectProperties.Name)
+ {
+ case 'Table':
+ case 'RelatedTable':
+ args.parmEnum(ARBAOTObjectType::Table);
+ args.parm(this.valueStr());
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ break;
+
+ case 'ExtendedDataType':
+ args.parmEnum(ARBAOTObjectType::ExtendedDataType);
+ args.parm(this.valueStr());
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ break;
+
+ case 'EnumType':
+ args.parmEnum(ARBAOTObjectType::BaseEnum);
+ args.parm(this.valueStr());
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ break;
+
+ case 'Tile':
+ args.parmEnum(ARBAOTObjectType::Tile);
+ args.parm(this.valueStr());
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ break;
+
+ case 'DataEntity':
+ args.parmEnum(ARBAOTObjectType::DataEntity);
+ args.parm(this.valueStr());
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ break;
+
+ case 'Object':
+ case 'ObjectName':
+ props.setTmpData(ARBAOTObjectProperties);
+ select firstOnly props
+ where props.Name == 'ObjectType';
+ if (props)
+ {
+ switch (props.Value)
+ {
+ case 'Form':
+ args.parmEnum(ARBAOTObjectType::Form);
+ break;
+ case 'Class':
+ args.parmEnum(ARBAOTObjectType::Class);
+ break;
+ case 'Query':
+ args.parmEnum(ARBAOTObjectType::Query);
+ break;
+ case 'MenuItemAction':
+ args.parmEnum(ARBAOTObjectType::MenuItemAction);
+ break;
+ case 'MenuItemDisplay':
+ args.parmEnum(ARBAOTObjectType::MenuItemDisplay);
+ break;
+ case 'MenuItemOutput':
+ args.parmEnum(ARBAOTObjectType::MenuItemOutput);
+ break;
+ }
+ args.parm(this.valueStr());
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ }
+ break;
+
+ case 'Extends':
+ select firstOnly props
+ where props.Name == 'SupportInheritance';
+ if (props)
+ {
+ args.parmEnum(ARBAOTObjectType::Table);
+ args.parm(this.valueStr());
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ }
+ else
+ {
+ args.parmEnum(ARBAOTObjectType::ExtendedDataType);
+ args.parm(this.valueStr());
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ }
+ break;
+
+ case 'MenuItemName':
+ props.setTmpData(ARBAOTObjectProperties);
+ select firstOnly props
+ where props.Name == 'MenuItemType';
+ if (props)
+ {
+ switch (props.Value)
+ {
+ case 'Display':
+ args.parmEnum(ARBAOTObjectType::MenuItemDisplay);
+ break;
+ case 'Action':
+ args.parmEnum(ARBAOTObjectType::MenuItemAction);
+ break;
+ case 'Output':
+ args.parmEnum(ARBAOTObjectType::MenuItemOutput);
+ break;
+ }
+ args.parm(this.valueStr());
+ new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
+ }
+ break;
+ }
+
+ }
+
+]]>
+
+
+
+
+
+
+
+
+ ARBAOTObjects
+
+
+
+ Label
+
+
+ Name
+
+
+ Partition
+
+
+ RecId
+
+
+ TableId
+
+
+ Type
+
+
+
+ No
+ No
+ No
+ No
+ No
+
+
+
+
+ ARBAOTObjectProperties
+
+
+
+ Name
+
+
+ Partition
+
+
+ RecId
+
+
+ TableId
+
+
+ Value
+
+
+
+
+
+
+
+ ARBAOTObjectPropertiesMatrix
+ ARBAOTObjectPropertiesMatrix
+
+
+ Partition
+
+
+ Property[1]
+
+
+ Property[10]
+
+
+ Property[11]
+
+
+ Property[12]
+
+
+ Property[13]
+
+
+ Property[14]
+
+
+ Property[15]
+
+
+ Property[16]
+
+
+ Property[17]
+
+
+ Property[18]
+
+
+ Property[19]
+
+
+ Property[2]
+
+
+ Property[20]
+
+
+ Property[21]
+
+
+ Property[22]
+
+
+ Property[23]
+
+
+ Property[24]
+
+
+ Property[25]
+
+
+ Property[26]
+
+
+ Property[27]
+
+
+ Property[28]
+
+
+ Property[29]
+
+
+ Property[3]
+
+
+ Property[30]
+
+
+ Property[31]
+
+
+ Property[32]
+
+
+ Property[33]
+
+
+ Property[34]
+
+
+ Property[35]
+
+
+ Property[36]
+
+
+ Property[37]
+
+
+ Property[38]
+
+
+ Property[39]
+
+
+ Property[4]
+
+
+ Property[40]
+
+
+ Property[41]
+
+
+ Property[42]
+
+
+ Property[43]
+
+
+ Property[44]
+
+
+ Property[45]
+
+
+ Property[46]
+
+
+ Property[47]
+
+
+ Property[48]
+
+
+ Property[49]
+
+
+ Property[5]
+
+
+ Property[50]
+
+
+ Property[51]
+
+
+ Property[52]
+
+
+ Property[53]
+
+
+ Property[54]
+
+
+ Property[55]
+
+
+ Property[56]
+
+
+ Property[57]
+
+
+ Property[58]
+
+
+ Property[59]
+
+
+ Property[6]
+
+
+ Property[60]
+
+
+ Property[61]
+
+
+ Property[62]
+
+
+ Property[63]
+
+
+ Property[64]
+
+
+ Property[65]
+
+
+ Property[66]
+
+
+ Property[67]
+
+
+ Property[68]
+
+
+ Property[69]
+
+
+ Property[7]
+
+
+ Property[70]
+
+
+ Property[71]
+
+
+ Property[72]
+
+
+ Property[73]
+
+
+ Property[74]
+
+
+ Property[75]
+
+
+ Property[8]
+
+
+ Property[9]
+
+
+ RecId
+
+
+ TableId
+
+
+ TypeName
+
+
+
+ No
+ No
+ No
+ No
+ No
+
+
+
+
+
+ @ACM:AOTBrowser
+ SimpleListDetails
+ 1.3
+ No
+ No
+
+
+
+ ApplicationBar
+ ActionPane
+
+
+
+ GeneralButtonGroup
+ ButtonGroup
+
+
+
+ ARBAOTObjectPopulate
+ MenuFunctionButton
+
+ ARBAOTObjectPopulate
+ Action
+
+
+ ARBOpenTableBrowser
+ Yes
+ Button
+
+ @AOTBrowser:OpenTableBrowserButton
+
+
+ General
+
+
+
+
+ NavigationGroup
+ Yes
+ SizeToAvailable
+ Group
+
+
+
+ QuickFilter
+ SizeToAvailable
+
+ QuickFilterControl
+
+
+
+ targetControlName
+ String
+ NavigationGrid
+
+
+ placeholderText
+ String
+
+
+ defaultColumnName
+ String
+
+
+
+
+
+ AOTObjectTypeFilterGroup
+ Group
+ SizeToAvailable
+
+
+
+ AOTObjectTypeFilter
+ Yes
+ ComboBox
+
+ ARBAOTObjectType
+
+
+
+ None
+
+ Edit
+
+
+ NavigationGrid
+ No
+ Grid
+ SizeToContent
+
+
+
+ ACMAOTObjects_Name
+ Yes
+ String
+
+ Name
+ ARBAOTObjects
+
+
+ ACMAOTObjects_Label
+ String
+
+ Label
+ ARBAOTObjects
+
+
+ ACMAOTObjects_Type
+ ComboBox
+
+ Type
+ ARBAOTObjects
+
+
+
+ No
+ No
+
+
+
+ None
+
+
+
+ DetailsHeader
+ FieldsFieldGroups
+ 1.1
+ Group
+ SizeToAvailable
+
+
+ Fill
+ None
+
+
+ DetailsTabs
+ Tab
+
+
+
+ TableTab
+ Yes
+ NestedSimpleListDetails
+ UX7 1.1
+ TabPage
+
+
+
+ TableBodyGroup
+ Yes
+ SizeToAvailable
+ Group
+ SizeToAvailable
+
+
+
+ TableNavigationList
+ SizeToAvailable
+ Group
+
+
+
+ TableTree
+ Yes
+ SizeToAvailable
+ Tree
+
+
+
+ None
+
+
+ TableDetailsGroup
+ Yes
+ SizeToAvailable
+ Group
+ SizeToAvailable
+
+
+
+ TableDetailsHeader
+ Group
+ SizeToAvailable
+
+
+ Fill
+ None
+
+
+ TableDetailsPropertiesGroup
+ No
+ Yes
+ Custom
+ Group
+ SizeToAvailable
+
+
+
+ PropertiesGrid
+ Yes
+ Grid
+
+
+
+ ACMAOTObjectProperties_Name
+ String
+
+ Name
+ ARBAOTObjectProperties
+
+
+ ACMAOTObjectProperties_Value
+ String
+
+ Value
+ ARBAOTObjectProperties
+
+
+ ARBAOTObjectProperties
+
+
+ ResourceImageGroup
+ Yes
+ Group
+ No
+
+
+
+ ResourceImage
+ Yes
+ 250
+ Manual
+ Image
+ 250
+ Manual
+
+
+
+ @SYS58650
+
+
+ Fill
+ None
+
+
+ None
+
+
+ 2
+ None
+
+
+ @ACM:Object
+ Always
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxFormExtension/DMFEntity.AOTBrowser.xml b/Metadata/AOTBrowser/AOTBrowser/AxFormExtension/DMFEntity.AOTBrowser.xml
new file mode 100644
index 0000000..0112399
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxFormExtension/DMFEntity.AOTBrowser.xml
@@ -0,0 +1,26 @@
+
+
+ DMFEntity.AOTBrowser
+
+
+
+ FormExtensionControlbtpeddxt1
+
+ ARBOpenInAOTBrowser
+ Button
+
+ No
+ Yes
+ @AOTBrowser:OpenInAOTBrowser
+
+ InputButtonGroup
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxFormExtension/FormControlPersonalization.AOTBrowser.xml b/Metadata/AOTBrowser/AOTBrowser/AxFormExtension/FormControlPersonalization.AOTBrowser.xml
new file mode 100644
index 0000000..0de161e
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxFormExtension/FormControlPersonalization.AOTBrowser.xml
@@ -0,0 +1,24 @@
+
+
+ FormControlPersonalization.AOTBrowser
+
+
+
+ FormExtensionControlgzu0p1p51
+
+ ARBOpenInAOTBrowser
+ Button
+
+ @AOTBrowser:OpenInAOTBrowser
+
+ CommitGroup
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxLabelFile/AOTBrowser_en-US.xml b/Metadata/AOTBrowser/AOTBrowser/AxLabelFile/AOTBrowser_en-US.xml
new file mode 100644
index 0000000..cb13079
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxLabelFile/AOTBrowser_en-US.xml
@@ -0,0 +1,7 @@
+
+
+ AOTBrowser_en-US
+ AOTBrowser.en-US.label.txt
+ AOTBrowser
+ AOTBrowser\AOTBrowser\AxLabelFile\LabelResources\en-US\AOTBrowser.en-US.label.txt
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxLabelFile/LabelResources/en-US/AOTBrowser.en-US.label.txt b/Metadata/AOTBrowser/AOTBrowser/AxLabelFile/LabelResources/en-US/AOTBrowser.en-US.label.txt
new file mode 100644
index 0000000..c044167
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxLabelFile/LabelResources/en-US/AOTBrowser.en-US.label.txt
@@ -0,0 +1,92 @@
+NewLabel0=Label files created on 12/04/2019 20:20:46 for label file Id AOTBrowser and language en-US
+ ;Label file comment - see above label
+CompositeDataEntities=Composite data entity
+ ;ARB_AOTBrowser
+Maps=Map
+ ;ARB_AOTBrowser
+Macros=Macro
+ ;ARB_AOTBrowser
+Tiles=Tile
+ ;ARB_AOTBrowser
+Menus=Menu
+ ;ARB_AOTBrowser
+AOTBrowser=AOT browser
+ ;ARB_AOTBrowser
+BaseEnum=Base enum
+ ;ARB_AOTBrowser
+MenuItemDisplay=Display menu item
+ ;ARB_AOTBrowser
+MenuItemOutput=Output menu item
+ ;ARB_AOTBrowser
+MenuItemAction=Action menu item
+ ;ARB_AOTBrowser
+SecurityRole=Security role
+ ;ARB_AOTBrowser
+SecurityDuty=Security duty
+ ;ARB_AOTBrowser
+SecurityPrivilege=Security privilege
+ ;ARB_AOTBrowser
+PopulateAOTObjectTable=AOTBrowser - Populate AOT object table
+ ;ARB_AOTBrowser
+ObjectType=Object type
+ ;ARB_AOTBrowser
+Object=Object
+ ;ARB_AOTBrowser
+OpenInAOTBrowser=Open in AOT browser
+ ;ARB_AOTBrowser
+AOTObjects=AOT objects
+ ;ARB_AOTBrowser
+AOTObjectsDevDoc=List of objects in the application object tree
+ ;ARB_AOTBrowser
+TableStatisticsDevDoc=Statistics about each table in the database
+ ;ARB_AOTBrowser
+PropertyValue=Value
+ ;ARB_AOTBrowser
+AOTObjectProperties=AOT object properties
+ ;ARB_AOTBrowser
+AOTObjectPropertiesDevDoc=Holds the properties for the AOT object
+ ;ARB_AOTBrowser
+AggregateDataEntity=Aggregate data entity
+ ;ARB_AOTBrowser
+WorkflowCategory=Workflow category
+ ;ARB_AOTBrowser
+WorkflowApproval=Workflow approval
+ ;ARB_AOTBrowser
+WorkflowTask=Workflow task
+ ;ARB_AOTBrowser
+WorkflowAutomatedTask=Workflow automated task
+ ;ARB_AOTBrowser
+WorkflowType=Workflow type
+ ;ARB_AOTBrowser
+WorkflowHierarchyAssignmentProvider=Workflow hierarchy assignment provider
+ ;ARB_AOTBrowser
+WorkflowParticipantAssignmentProvider=Workflow participant assignment provider
+ ;ARB_AOTBrowser
+WorkflowQueueAssignmentProvider=Workflow queue assignment provider
+ ;ARB_AOTBrowser
+WorkflowDueDateCalculationProvider=Workflow due date calculation provider
+ ;ARB_AOTBrowser
+Resource=Resource
+ ;ARB_AOTBrowser
+LicenseCode=License code
+ ;ARB_AOTBrowser
+ConfigKey=Configuration key
+ ;ARB_AOTBrowser
+ConfigKeyGroup=Configuration key group
+ ;ARB_AOTBrowser
+Reference=Reference
+ ;ARB_AOTBrowser
+Service=Service
+ ;ARB_AOTBrowser
+ServiceGroup=Service group
+ ;ARB_AOTBrowser
+Report=Report
+ ;ARB_AOTBrowser
+PopulateAOTObjects=Populate AOT objects
+ ;ARB_AOTBrowser
+OpenTableBrowserButton=Open table browser
+ ;ARB_AOTBrowser
+AOTBrowserMaintain=Maintain AOT browser
+ ;ARB_AOTBrowser
+AOTBrowserUser=AOT browser user
+ ;ARB_AOTBrowser
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxMenuExtension/CommonMenu.AOTBrowser.xml b/Metadata/AOTBrowser/AOTBrowser/AxMenuExtension/CommonMenu.AOTBrowser.xml
new file mode 100644
index 0000000..73110cb
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxMenuExtension/CommonMenu.AOTBrowser.xml
@@ -0,0 +1,17 @@
+
+
+ CommonMenu.AOTBrowser
+
+
+
+ Common
+
+ ARBAOTBrowser
+ ARBAOTBrowser
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxMenuItemAction/ARBAOTObjectPopulate.xml b/Metadata/AOTBrowser/AOTBrowser/AxMenuItemAction/ARBAOTObjectPopulate.xml
new file mode 100644
index 0000000..565f22d
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxMenuItemAction/ARBAOTObjectPopulate.xml
@@ -0,0 +1,10 @@
+
+
+ ARBAOTObjectPopulate
+
+
+ Class
+
+ Allow
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxMenuItemDisplay/ARBAOTBrowser.xml b/Metadata/AOTBrowser/AOTBrowser/AxMenuItemDisplay/ARBAOTBrowser.xml
new file mode 100644
index 0000000..6bb830d
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxMenuItemDisplay/ARBAOTBrowser.xml
@@ -0,0 +1,9 @@
+
+
+ ARBAOTBrowser
+
+
+
+ Allow
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxReference/Arbela.Dynamics.AX.Xpp.Support.xml b/Metadata/AOTBrowser/AOTBrowser/AxReference/Arbela.Dynamics.AX.Xpp.Support.xml
new file mode 100644
index 0000000..9b25e04
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxReference/Arbela.Dynamics.AX.Xpp.Support.xml
@@ -0,0 +1,7 @@
+
+
+ Arbela.Dynamics.AX.Xpp.Support
+ Arbela.Dynamics.AX.Xpp.Support
+ Arbela.Dynamics.AX.Xpp.Support, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ 1.0.0.0
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxSecurityDuty/ARBAOTBrowserMaintain.xml b/Metadata/AOTBrowser/AOTBrowser/AxSecurityDuty/ARBAOTBrowserMaintain.xml
new file mode 100644
index 0000000..ac4bb8a
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxSecurityDuty/ARBAOTBrowserMaintain.xml
@@ -0,0 +1,10 @@
+
+
+ ARBAOTBrowserMaintain
+
+
+
+ ARBAOTBrowserMaintain
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxSecurityPrivilege/ARBAOTBrowserMaintain.xml b/Metadata/AOTBrowser/AOTBrowser/AxSecurityPrivilege/ARBAOTBrowserMaintain.xml
new file mode 100644
index 0000000..7c6136a
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxSecurityPrivilege/ARBAOTBrowserMaintain.xml
@@ -0,0 +1,42 @@
+
+
+ ARBAOTBrowserMaintain
+
+
+
+
+
+ ARBAOTBrowser
+
+ Allow
+ Allow
+ Allow
+ Allow
+ Allow
+
+ ARBAOTBrowser
+ MenuItemDisplay
+
+
+ ARBAOTBrowser
+
+
+
+
+
+
+ ARBAOTObjectPopulate
+
+ Allow
+ Allow
+ Allow
+ Allow
+ Allow
+
+ ARBAOTObjectPopulate
+ MenuItemAction
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxSecurityRole/ARBAOTBrowserUser.xml b/Metadata/AOTBrowser/AOTBrowser/AxSecurityRole/ARBAOTBrowserUser.xml
new file mode 100644
index 0000000..a808e80
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxSecurityRole/ARBAOTBrowserUser.xml
@@ -0,0 +1,13 @@
+
+
+ ARBAOTBrowserUser
+
+
+
+
+ ARBAOTBrowserMaintain
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxTable/ARBAOTObjectProperties.xml b/Metadata/AOTBrowser/AOTBrowser/AxTable/ARBAOTObjectProperties.xml
new file mode 100644
index 0000000..22e3f1b
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxTable/ARBAOTObjectProperties.xml
@@ -0,0 +1,113 @@
+
+
+ ARBAOTObjectProperties
+
+
+/// ACM AOT object properties table
+///
+public class ARBAOTObjectProperties extends common
+{
+}
+
+]]>
+
+
+ @AOTBrowser:AOTObjectPropertiesDevDoc
+
+
+ Allow
+
+ Name
+ Value
+ NameIdx
+ NameIdx
+ NameIdx
+ No
+ InMemory
+
+
+
+ AutoReport
+
+
+ Name
+
+
+ Value
+
+
+
+
+ AutoLookup
+
+
+ Name
+
+
+ Value
+
+
+
+
+ AutoIdentification
+ Yes
+
+
+ Name
+
+
+
+
+ AutoSummary
+
+
+ Name
+
+
+ Value
+
+
+
+
+ AutoBrowse
+
+
+ Name
+
+
+ Value
+
+
+
+
+
+
+ Name
+ No
+ Name
+ Yes
+
+
+ Value
+ ARBAOTPropertyValue
+
+
+
+
+
+ NameIdx
+ Yes
+
+
+ Name
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxTable/ARBAOTObjectPropertiesMatrix.xml b/Metadata/AOTBrowser/AOTBrowser/AxTable/ARBAOTObjectPropertiesMatrix.xml
new file mode 100644
index 0000000..2e254d4
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxTable/ARBAOTObjectPropertiesMatrix.xml
@@ -0,0 +1,84 @@
+
+
+ ARBAOTObjectPropertiesMatrix
+
+
+/// ACM AOT object properties table
+///
+public class ARBAOTObjectPropertiesMatrix extends common
+{
+}
+
+]]>
+
+
+ @AOTBrowser:AOTObjectPropertiesDevDoc
+
+
+ Allow
+
+ TypeName
+ NameIdx
+ NameIdx
+ NameIdx
+ No
+ InMemory
+
+
+
+ AutoReport
+
+
+
+ AutoLookup
+
+
+
+ AutoIdentification
+ Yes
+
+
+ TypeName
+
+
+
+
+ AutoSummary
+
+
+
+ AutoBrowse
+
+
+
+
+
+ TypeName
+ No
+ ARBAOTPropertyValue
+ Yes
+
+
+ Property
+ ARBAOTProperties
+
+
+
+
+
+ NameIdx
+ Yes
+
+
+ TypeName
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/AOTBrowser/AxTable/ARBAOTObjects.xml b/Metadata/AOTBrowser/AOTBrowser/AxTable/ARBAOTObjects.xml
new file mode 100644
index 0000000..8e19e95
--- /dev/null
+++ b/Metadata/AOTBrowser/AOTBrowser/AxTable/ARBAOTObjects.xml
@@ -0,0 +1,136 @@
+
+
+ ARBAOTObjects
+
+
+/// ACM AOT Objects table
+///
+public class ARBAOTObjects extends common
+{
+}
+
+]]>
+
+
+ @AOTBrowser:AOTObjectsDevDoc
+
+
+ Allow
+
+ Name
+ Type
+ TypeNameIdx
+ TypeNameIdx
+ No
+
+
+
+ AutoReport
+
+
+ Name
+
+
+ Label
+
+
+ Type
+
+
+
+
+ AutoLookup
+
+
+ Name
+
+
+ Label
+
+
+ Type
+
+
+
+
+ AutoIdentification
+ Yes
+
+
+ Type
+
+
+ Name
+
+
+
+
+ AutoSummary
+
+
+ Name
+
+
+ Label
+
+
+ Type
+
+
+
+
+ AutoBrowse
+
+
+ Name
+
+
+ Label
+
+
+ Type
+
+
+
+
+
+
+ Name
+ No
+ TreeNodeName
+ Yes
+
+
+ Label
+ Description
+
+
+ Type
+ No
+ Yes
+ ARBAOTObjectType
+
+
+
+
+
+ TypeNameIdx
+ Yes
+
+
+ Type
+
+
+ Name
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Metadata/AOTBrowser/Descriptor/AOTBrowser.xml b/Metadata/AOTBrowser/Descriptor/AOTBrowser.xml
new file mode 100644
index 0000000..8b6c966
--- /dev/null
+++ b/Metadata/AOTBrowser/Descriptor/AOTBrowser.xml
@@ -0,0 +1,26 @@
+
+
+
+ Allow
+
+ AOTBrowser
+ 925963610
+
+ 8
+ false
+ AOTBrowser
+
+
+ ApplicationFoundation
+ ApplicationPlatform
+ ApplicationSuite
+ GeneralLedger
+
+ AOTBrowser
+ Arbela Technologies Corp.
+ 0
+ 1
+ 0
+ 0
+
\ No newline at end of file
diff --git a/Projects/AOTBrowser/AOTBrowser.sln b/Projects/AOTBrowser/AOTBrowser.sln
new file mode 100644
index 0000000..1ce2d9a
--- /dev/null
+++ b/Projects/AOTBrowser/AOTBrowser.sln
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FC65038C-1B2F-41E1-A629-BED71D161FFF}") = "AOTBrowser (ISV) [AOTBrowser]", "AOTBrowser\AOTBrowser.rnrproj", "{C5965394-4359-4F9A-97D4-A609B58EDC8D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Arbela.Dynamics.AX.Xpp.Support", "Arbela.Dynamics.AX.Xpp.Support\Arbela.Dynamics.AX.Xpp.Support.csproj", "{2F618DA7-59BC-4ABE-8F24-72D2D59F9AD4}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C5965394-4359-4F9A-97D4-A609B58EDC8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5965394-4359-4F9A-97D4-A609B58EDC8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C5965394-4359-4F9A-97D4-A609B58EDC8D}.Release|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5965394-4359-4F9A-97D4-A609B58EDC8D}.Release|Any CPU.Build.0 = Debug|Any CPU
+ {2F618DA7-59BC-4ABE-8F24-72D2D59F9AD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2F618DA7-59BC-4ABE-8F24-72D2D59F9AD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2F618DA7-59BC-4ABE-8F24-72D2D59F9AD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2F618DA7-59BC-4ABE-8F24-72D2D59F9AD4}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Projects/AOTBrowser/AOTBrowser/AOTBrowser.rnrproj b/Projects/AOTBrowser/AOTBrowser/AOTBrowser.rnrproj
new file mode 100644
index 0000000..ab756e2
--- /dev/null
+++ b/Projects/AOTBrowser/AOTBrowser/AOTBrowser.rnrproj
@@ -0,0 +1,162 @@
+
+
+
+ Debug
+ AnyCPU
+ $(MSBuildProgramFiles32)\MSBuild\Microsoft\Dynamics\AX
+ AOTBrowser
+ v4.6
+ bin
+ 2.0
+ {c5965394-4359-4f9a-97d4-a609b58edc8d}
+ AOTBrowser
+ AOTBrowser
+ Class
+
+
+ Debug
+ False
+ False
+
+
+ initial
+ AnyCPU
+ False
+ False
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Content
+ AOTBrowser.en-US.label.txt
+ AxLabelFile\AOTBrowser_en-US
+
+
+ Content
+ ARBAOTObjectPopulateController
+ Classes\ARBAOTObjectPopulateController
+
+
+ Content
+ ARBAOTObjectPopulateService
+ Classes\ARBAOTObjectPopulateService
+
+
+ Content
+ ARBDMFEntity_EventHandler
+ Classes\ARBDMFEntity_EventHandler
+
+
+ Content
+ ARBFormControlPersonalization_EventHandler
+ Classes\ARBFormControlPersonalization_EventHandler
+
+
+ Content
+ ARBAOTProperties
+ Extended Data Types\ARBAOTProperties
+
+
+ Content
+ ARBAOTPropertyValue
+ Extended Data Types\ARBAOTPropertyValue
+
+
+ Content
+ ARBAOTObjectType
+ Base Enums\ARBAOTObjectType
+
+
+ Content
+ DMFEntity.AOTBrowser
+ Form Extensions\DMFEntity.AOTBrowser
+
+
+ Content
+ FormControlPersonalization.AOTBrowser
+ Form Extensions\FormControlPersonalization.AOTBrowser
+
+
+ Content
+ ARBAOTBrowser
+ Forms\ARBAOTBrowser
+
+
+ Content
+ AOTBrowser_en-US
+ Label Files\AOTBrowser_en-US
+
+
+ Content
+ CommonMenu.AOTBrowser
+ Menu Extensions\CommonMenu.AOTBrowser
+
+
+ Content
+ ARBAOTObjectPopulate
+ Action Menu Items\ARBAOTObjectPopulate
+
+
+ Content
+ ARBAOTBrowser
+ Display Menu Items\ARBAOTBrowser
+
+
+ Content
+ ARBAOTBrowserMaintain
+ Security Duties\ARBAOTBrowserMaintain
+
+
+ Content
+ ARBAOTBrowserMaintain
+ Security Privileges\ARBAOTBrowserMaintain
+
+
+ Content
+ ARBAOTBrowserUser
+ Security Roles\ARBAOTBrowserUser
+
+
+ Content
+ ARBAOTObjectProperties
+ Tables\ARBAOTObjectProperties
+
+
+ Content
+ ARBAOTObjectPropertiesMatrix
+ Tables\ARBAOTObjectPropertiesMatrix
+
+
+ Content
+ ARBAOTObjects
+ Tables\ARBAOTObjects
+
+
+
+
+ Arbela.Dynamics.AX.Xpp.Support
+ {2f618da7-59bc-4abe-8f24-72d2d59f9ad4}
+ True
+
+
+
+
+
\ No newline at end of file
diff --git a/Projects/AOTBrowser/Arbela.Dynamics.AX.Xpp.Support/Arbela.Dynamics.AX.Xpp.Support.csproj b/Projects/AOTBrowser/Arbela.Dynamics.AX.Xpp.Support/Arbela.Dynamics.AX.Xpp.Support.csproj
new file mode 100644
index 0000000..5151ebf
--- /dev/null
+++ b/Projects/AOTBrowser/Arbela.Dynamics.AX.Xpp.Support/Arbela.Dynamics.AX.Xpp.Support.csproj
@@ -0,0 +1,76 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {2F618DA7-59BC-4ABE-8F24-72D2D59F9AD4}
+ Library
+ Properties
+ Arbela.Dynamics.AX.Xpp.Support
+ Arbela.Dynamics.AX.Xpp.Support
+ v4.5.2
+ 512
+ SAK
+ SAK
+ SAK
+ SAK
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ C:\AosService\PackagesLocalDirectory\Bin\AOSKernel.dll
+ K:\AosService\PackagesLocalDirectory\Bin\AOSKernel.dll
+ False
+
+
+ C:\AosService\PackagesLocalDirectory\Bin\Microsoft.Dynamics.AX.Metadata.dll
+ K:\AosService\PackagesLocalDirectory\Bin\Microsoft.Dynamics.AX.Metadata.dll
+ False
+
+
+ C:\AOSService\PackagesLocalDirectory\Bin\Microsoft.Dynamics.AX.Metadata.Storage.dll
+ K:\AOSService\PackagesLocalDirectory\Bin\Microsoft.Dynamics.AX.Metadata.Storage.dll
+
+
+ C:\AosService\PackagesLocalDirectory\Bin\Microsoft.Dynamics.AX.Xpp.Support.dll
+ K:\AosService\PackagesLocalDirectory\Bin\Microsoft.Dynamics.AX.Xpp.Support.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Projects/AOTBrowser/Arbela.Dynamics.AX.Xpp.Support/MetadataSupport.cs b/Projects/AOTBrowser/Arbela.Dynamics.AX.Xpp.Support/MetadataSupport.cs
new file mode 100644
index 0000000..7096552
--- /dev/null
+++ b/Projects/AOTBrowser/Arbela.Dynamics.AX.Xpp.Support/MetadataSupport.cs
@@ -0,0 +1,200 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.Dynamics.AX.Metadata.Kernel;
+using Microsoft.Dynamics.AX.Metadata.MetaModel;
+using System.Collections.Specialized;
+using Microsoft.Dynamics.AX.Metadata.Storage;
+
+namespace Arbela.Dynamics.Ax.Xpp
+{
+ public static class MetadataSupport
+ {
+ public static IEnumerable GetViewExtensionsForView(string viewName)
+ {
+ return Accessor.GetViewExtensionsForView(viewName);
+ }
+
+ public static IEnumerable GetEnumExtensionsForEnum(string enumName)
+ {
+ return Accessor.GetEnumExtensionForEnum(enumName);
+ }
+
+ public static IEnumerable GetDataEntityViewExtensionsForDataEntityView(string dataEntityView)
+ {
+ return Accessor.GetDataEntityViewExtensionsForDataEntityView(dataEntityView);
+ }
+
+ public static IEnumerable GetEdtExtensionsForEdt(string edt)
+ {
+ var extensionLoader = new EdtExtensionLoader(Accessor.MetadataProvider);
+ return extensionLoader.GetExtensionsForBaseObject(edt);
+ }
+
+ public static IEnumerable GetQueryExtensionsForQuery(string query)
+ {
+ var extensionLoader = new QuerySimpleExtensionLoader(Accessor.MetadataProvider);
+ return extensionLoader.GetExtensionsForBaseObject(query);
+ }
+
+ public static IEnumerable GetMenuItemDisplayExtensionsForMenuItemDisplay(string menuItemDisplay)
+ {
+ var extensionLoader = new MenuItemDisplayExtensionLoader(Accessor.MetadataProvider);
+ return extensionLoader.GetExtensionsForBaseObject(menuItemDisplay);
+ }
+
+ public static IEnumerable GetMenuItemActionExtensionsForMenuItemAction(string menuItemAction)
+ {
+ var extensionLoader = new MenuItemActionExtensionLoader(Accessor.MetadataProvider);
+ return extensionLoader.GetExtensionsForBaseObject(menuItemAction);
+ }
+
+ public static IEnumerable GetMenuItemOutputExtensionsForMenuItemOutput(string menuItemOutput)
+ {
+ var extensionLoader = new MenuItemOutputExtensionLoader(Accessor.MetadataProvider);
+ return extensionLoader.GetExtensionsForBaseObject(menuItemOutput);
+ }
+
+ public static IEnumerable GetFormExtensionsForForm(string form)
+ {
+ IList formExtensionNames = Accessor.GetFormExtensionNames(form);
+ List formExtensions = new List();
+ foreach(var formExtensionName in formExtensionNames)
+ {
+ formExtensions.Add(Accessor.GetFormExtension(formExtensionName));
+ }
+
+ return formExtensions;
+ }
+
+ public static IEnumerator MenuNames()
+ {
+ return Accessor.GetMenuNames().GetEnumerator();
+ }
+
+ public static IEnumerable GetMenuExtensionsForMenu(string menu)
+ {
+ IList menuExtensionNames = Accessor.GetMenuExtensionNames(menu);
+ List menuExtensions = new List();
+ foreach (var menuExtensionName in menuExtensionNames)
+ {
+ menuExtensions.Add(Accessor.GetMenuExtension(menuExtensionName));
+ }
+
+ return menuExtensions;
+ }
+
+ public static IEnumerator TileNames()
+ {
+ return Accessor.GetTileNames().GetEnumerator();
+ }
+
+ public static IEnumerator TableCollectionNames()
+ {
+ return Accessor.GetTableCollectionNames().GetEnumerator();
+ }
+
+ public static AxTableCollection GetTableCollection(string tableCollection)
+ {
+ return Accessor.GetTableCollection(tableCollection);
+ }
+
+ public static IEnumerator CompositeDataEntityNames()
+ {
+ return Accessor.GetCompositeEntityViewNames().GetEnumerator();
+ }
+
+ public static AxCompositeDataEntityView GetCompositeDataEntity(string compositeDataEntity)
+ {
+ return Accessor.GetCompositeDataEntityView(compositeDataEntity);
+ }
+
+ public static IEnumerator SecurityDutyNames()
+ {
+ return Accessor.GetSecurityDutyNames().GetEnumerator();
+ }
+
+ public static IEnumerator SecurityPrivilegeNames()
+ {
+ return Accessor.GetSecurityPrivilegeNames().GetEnumerator();
+ }
+
+ public static AxSecurityDuty GetSecurityDuty(string securityDuty)
+ {
+ return Accessor.GetSecurityDuty(securityDuty);
+ }
+
+ public static AxSecurityPrivilege GetSecurityPrivilege(string securityPrivilege)
+ {
+ return Accessor.GetSecurityPrivilege(securityPrivilege);
+ }
+
+ public static IEnumerable GetSecurityDutyExtensionsForSecurityDuty(string securityDuty)
+ {
+ return Accessor.GetSecurityDutyExtensionForSecurityDuty(securityDuty);
+ }
+
+ public static IEnumerable GetSecurityRoleExtensionsForSecurityRole(string securityrole)
+ {
+ return Accessor.GetSecurityRoleExtensionForSecurityRole(securityrole);
+ }
+
+ public static IEnumerator AggregateDataEntityNames()
+ {
+ return Accessor.GetAggregateDataEntityNames().GetEnumerator();
+ }
+
+ public static IEnumerable GetWorkflowApprovalExtensionsForWorkflowApproval(string workflowApproval)
+ {
+ IList extensionNames = Accessor.GetWorkflowApprovalExtensionNames(workflowApproval);
+ List extensions = new List();
+ foreach (var extensionName in extensionNames)
+ {
+ extensions.Add(Accessor.GetWorkflowApprovalExtension(extensionName));
+ }
+
+ return extensions;
+ }
+
+ public static IEnumerable GetWorkflowTaskExtensionsForWorkflowTask(string workflowTask)
+ {
+ IList extensionNames = Accessor.GetWorkflowTaskExtensionNames(workflowTask);
+ List extensions = new List();
+ foreach (var extensionName in extensionNames)
+ {
+ extensions.Add(Accessor.GetWorkflowTaskExtension(extensionName));
+ }
+
+ return extensions;
+ }
+
+ public static IEnumerable GetWorkflowTemplateExtensionsForWorkflowTemplate(string workflowTemplate)
+ {
+ IList extensionNames = Accessor.GetWorkflowTemplateExtensionNames(workflowTemplate);
+ List extensions = new List();
+ foreach (var extensionName in extensionNames)
+ {
+ extensions.Add(Accessor.GetWorkflowTemplateExtension(extensionName));
+ }
+
+ return extensions;
+ }
+
+ public static AxService GetService(string service)
+ {
+ return Accessor.GetService(service);
+ }
+
+ public static AxServiceGroup GetServiceGroup(string serviceGroup)
+ {
+ return Accessor.GetServiceGroup(serviceGroup);
+ }
+
+ public static IEnumerator ServiceGroupNames()
+ {
+ return Accessor.GetServiceGroupNames().GetEnumerator();
+ }
+ }
+}
diff --git a/Projects/AOTBrowser/Arbela.Dynamics.AX.Xpp.Support/Properties/AssemblyInfo.cs b/Projects/AOTBrowser/Arbela.Dynamics.AX.Xpp.Support/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..ca02b1c
--- /dev/null
+++ b/Projects/AOTBrowser/Arbela.Dynamics.AX.Xpp.Support/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Arbela.Dynamics.AX.Xpp.Support")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Arbela.Dynamics.AX.Xpp.Support")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("2f618da7-59bc-4abe-8f24-72d2d59f9ad4")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Scripts/Mount.ps1 b/Scripts/Mount.ps1
new file mode 100644
index 0000000..7cc6550
--- /dev/null
+++ b/Scripts/Mount.ps1
@@ -0,0 +1,53 @@
+if (Test-Path -Path K:\AosService)
+{
+ $LocalDeploymentFolder = "K:\AosService"
+}
+elseif (Test-Path -Path C:\AosService)
+{
+ $LocalDeploymentFolder = "C:\AosService"
+}
+elseif (Test-Path -Path E:\AosService)
+{
+ $LocalDeploymentFolder = "E:\AosService"
+}
+else
+{
+ throw "Cannot find the AOSService folder in any known location"
+}
+Write-Host "using $LocalDeploymentFolder as the deployment folder"
+
+$LocalPackagesFolder = Join-Path $LocalDeploymentFolder "PackagesLocalDirectory"
+
+# Get the list of models to junction
+$ModelsToJunction = Get-ChildItem "..\Metadata\"
+Write-Host "Enabling editing of the following models:" $ModelsToJunction
+
+foreach ($Model in $ModelsToJunction)
+{
+ $LocalModelPath = Join-Path $LocalPackagesFolder $Model
+ $RepoPath = Join-Path "..\Metadata" $Model
+
+ if (!(Test-Path $LocalModelPath -PathType Container))
+ {
+ Write-Host "Creating model folder: " $LocalModelPath
+ New-Item -ItemType Directory -Force -Path $LocalModelPath
+ }
+
+ $RepoSubfolders = Get-ChildItem $RepoPath
+ foreach ($RepoSubfolder in $RepoSubfolders)
+ {
+ $LocalSubfolderPath = Join-Path $LocalModelPath $RepoSubfolder
+ $RepoSubfolderPath = Join-Path $RepoPath $RepoSubfolder
+
+ if (Test-Path $RepoSubfolderPath -PathType Container)
+ {
+ # Use CMD and rmdir since Powershell Remove-Item tries to recurse subfolders
+ Write-Host "Removing existing $($Model)\$($RepoSubfolder) source code"
+ cmd /c rmdir /s /q $LocalSubfolderPath
+
+ # Create new symbolic links
+ Write-Host "Creating new symbolic link for $($Model)\$($RepoSubfolder)"
+ New-Item -ItemType:SymbolicLink -Path:$LocalSubfolderPath -Value:$RepoSubfolderPath
+ }
+ }
+}
\ No newline at end of file