Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to view source code (in environments where it is availble) #6

Merged
merged 7 commits into from
Jan 15, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ public class ARBAOTBrowserConstants
public static const str DisplayStr = 'Display';
public static const str Action = 'Action';
public static const str Output = 'Output';
public static const str Source = 'Source';
public static const str ClassDeclaration = 'ClassDeclaration';
public static const str Declaration = 'Declaration';
}
]]></Declaration>
<Methods />
Expand Down
106 changes: 68 additions & 38 deletions Metadata/AOTBrowser/AOTBrowser/AxClass/ARBAOTObjectTree.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ using System.Linq.Enumerable;
public class ARBAOTObjectTree
{
public static Microsoft.Dynamics.AX.Metadata.Providers.IMetadataProvider MetadataProvider;
public static Microsoft.Dynamics.AX.Metadata.Providers.IMetadataProvider BackupMetadataProvider;
protected FormTreeControl treeControl;
protected ARBAOTObjectType aotObjectType;
protected boolean extensionsInline;
Expand All @@ -29,10 +30,28 @@ public class ARBAOTObjectTree
<Name>typenew</Name>
<Source><![CDATA[
static void typenew()
{
ARBAOTObjectTree::updateProvider(false);
}

]]></Source>
</Method>
<Method>
<Name>updateProvider</Name>
<Source><![CDATA[
static void updateProvider(boolean _useDiskProvider)
{
Microsoft.Dynamics.ApplicationPlatform.Environment.IApplicationEnvironment applicationEnvironment = Microsoft.Dynamics.ApplicationPlatform.Environment.EnvironmentFactory::GetApplicationEnvironment();
Microsoft.Dynamics.AX.Metadata.Storage.MetadataProviderFactory metadataProviderFactory = new Microsoft.Dynamics.AX.Metadata.Storage.MetadataProviderFactory();
MetadataProvider = metadataProviderFactory.CreateRuntimeProvider(new Microsoft.Dynamics.AX.Metadata.Storage.Runtime.RuntimeProviderConfiguration(applicationEnvironment.Aos.PackageDirectory, false));
BackupMetadataProvider = metadataProviderFactory.CreateRuntimeProvider(new Microsoft.Dynamics.AX.Metadata.Storage.Runtime.RuntimeProviderConfiguration(applicationEnvironment.Aos.PackageDirectory, false));
if (_useDiskProvider)
{
MetadataProvider = metadataProviderFactory.CreateDiskProvider(applicationEnvironment.Aos.MetadataDirectory);
}
else
{
MetadataProvider = BackupMetadataProvider;
}
}

]]></Source>
Expand Down Expand Up @@ -109,121 +128,127 @@ public class ARBAOTObjectTree
/// </summary>
/// <param name = "_aotNodeName">The name of the AOT Object</param>
/// <returns>The AOT Object</returns>
public anytype getAOTObject(TreeNodeName _aotNodeName)
public anytype getAOTObject(TreeNodeName _aotNodeName, Microsoft.Dynamics.AX.Metadata.Providers.IMetadataProvider _metadataProvider = MetadataProvider)
{
anytype aotObject;
switch (aotObjectType)
{
case ARBAOTObjectType::Table:
aotObject = MetadataProvider.Tables.Read(_aotNodeName);
aotObject = _metadataProvider.Tables.Read(_aotNodeName);
break;
case ARBAOTObjectType::View:
aotObject = MetadataProvider.Views.Read(_aotNodeName);
aotObject = _metadataProvider.Views.Read(_aotNodeName);
break;
case ARBAOTObjectType::DataEntity:
aotObject = MetadataProvider.DataEntityViews.Read(_aotNodeName);
aotObject = _metadataProvider.DataEntityViews.Read(_aotNodeName);
break;
case ARBAOTObjectType::BaseEnum:
aotObject = MetadataProvider.Enums.Read(_aotNodeName);
aotObject = _metadataProvider.Enums.Read(_aotNodeName);
break;
case ARBAOTObjectType::ExtendedDataType:
aotObject = MetadataProvider.Edts.Read(_aotNodeName);
aotObject = _metadataProvider.Edts.Read(_aotNodeName);
break;
case ARBAOTObjectType::Class:
aotObject = MetadataProvider.Classes.Read(_aotNodeName);
aotObject = _metadataProvider.Classes.Read(_aotNodeName);
break;
case ARBAOTObjectType::Form:
aotObject = MetadataProvider.Forms.Read(_aotNodeName);
aotObject = _metadataProvider.Forms.Read(_aotNodeName);
break;
case ARBAOTObjectType::Query:
aotObject = MetadataProvider.Queries.Read(_aotNodeName);
aotObject = _metadataProvider.Queries.Read(_aotNodeName);
break;
case ARBAOTObjectType::Map:
aotObject = MetadataProvider.Maps.Read(_aotNodeName);
aotObject = _metadataProvider.Maps.Read(_aotNodeName);
break;
case ARBAOTObjectType::Tile:
aotObject = MetadataProvider.Tiles.Read(_aotNodeName);
aotObject = _metadataProvider.Tiles.Read(_aotNodeName);
break;
case ARBAOTObjectType::Menu:
aotObject = MetadataProvider.Menus.Read(_aotNodeName);
aotObject = _metadataProvider.Menus.Read(_aotNodeName);
break;
case ARBAOTObjectType::TableCollection:
aotObject = MetadataProvider.TableCollections.Read(_aotNodeName);
aotObject = _metadataProvider.TableCollections.Read(_aotNodeName);
break;
case ARBAOTObjectType::CompositeDataEntity:
aotObject = MetadataProvider.CompositeDataEntityViews.Read(_aotNodeName);
aotObject = _metadataProvider.CompositeDataEntityViews.Read(_aotNodeName);
break;
case ARBAOTObjectType::MenuItemDisplay:
aotObject = MetadataProvider.MenuItemDisplays.Read(_aotNodeName);
aotObject = _metadataProvider.MenuItemDisplays.Read(_aotNodeName);
break;
case ARBAOTObjectType::MenuItemAction:
aotObject = MetadataProvider.MenuItemActions.Read(_aotNodeName);
aotObject = _metadataProvider.MenuItemActions.Read(_aotNodeName);
break;
case ARBAOTObjectType::MenuItemOutput:
aotObject = MetadataProvider.MenuItemOutputs.Read(_aotNodeName);
aotObject = _metadataProvider.MenuItemOutputs.Read(_aotNodeName);
break;
case ARBAOTObjectType::SecurityRole:
aotObject = MetadataProvider.SecurityRoles.Read(_aotNodeName);
aotObject = _metadataProvider.SecurityRoles.Read(_aotNodeName);
break;
case ARBAOTObjectType::SecurityDuty:
aotObject = MetadataProvider.SecurityDuties.Read(_aotNodeName);
aotObject = _metadataProvider.SecurityDuties.Read(_aotNodeName);
break;
case ARBAOTObjectType::SecurityPrivilege:
aotObject = MetadataProvider.SecurityPrivileges.Read(_aotNodeName);
aotObject = _metadataProvider.SecurityPrivileges.Read(_aotNodeName);
break;
case ARBAOTObjectType::AggregateDataEntity:
aotObject = MetadataProvider.AggregateDataEntities.Read(_aotNodeName);
aotObject = _metadataProvider.AggregateDataEntities.Read(_aotNodeName);
break;
case ARBAOTObjectType::WorkflowCategory:
aotObject = MetadataProvider.WorkflowCategories.Read(_aotNodeName);
aotObject = _metadataProvider.WorkflowCategories.Read(_aotNodeName);
break;
case ARBAOTObjectType::WorkflowApproval:
aotObject = MetadataProvider.WorkflowApprovals.Read(_aotNodeName);
aotObject = _metadataProvider.WorkflowApprovals.Read(_aotNodeName);
break;
case ARBAOTObjectType::WorkflowTask:
aotObject = MetadataProvider.WorkflowTasks.Read(_aotNodeName);
aotObject = _metadataProvider.WorkflowTasks.Read(_aotNodeName);
break;
case ARBAOTObjectType::WorkflowAutomatedTask:
aotObject = MetadataProvider.WorkflowAutomatedTasks.Read(_aotNodeName);
aotObject = _metadataProvider.WorkflowAutomatedTasks.Read(_aotNodeName);
break;
case ARBAOTObjectType::WorkflowType:
aotObject = MetadataProvider.WorkflowTemplates.Read(_aotNodeName);
aotObject = _metadataProvider.WorkflowTemplates.Read(_aotNodeName);
break;
case ARBAOTObjectType::WorkflowHierarchyAssignmentProvider:
aotObject = MetadataProvider.WorkflowHierarchyAssignmentProviders.Read(_aotNodeName);
aotObject = _metadataProvider.WorkflowHierarchyAssignmentProviders.Read(_aotNodeName);
break;
case ARBAOTObjectType::WorkflowParticipantAssignmentProvider:
aotObject = MetadataProvider.WorkflowParticipantAssignmentProviders.Read(_aotNodeName);
aotObject = _metadataProvider.WorkflowParticipantAssignmentProviders.Read(_aotNodeName);
break;
case ARBAOTObjectType::WorkflowQueueAssignmentProvider:
aotObject = MetadataProvider.WorkflowQueueAssignmentProviders.Read(_aotNodeName);
aotObject = _metadataProvider.WorkflowQueueAssignmentProviders.Read(_aotNodeName);
break;
case ARBAOTObjectType::WorkflowDueDateCalculationProvider:
aotObject = MetadataProvider.WorkflowDueDateCalculationProviders.Read(_aotNodeName);
aotObject = _metadataProvider.WorkflowDueDateCalculationProviders.Read(_aotNodeName);
break;
case ARBAOTObjectType::Resource:
aotObject = MetadataProvider.Resources.Read(_aotNodeName);
aotObject = _metadataProvider.Resources.Read(_aotNodeName);
break;
case ARBAOTObjectType::LicenseCode:
aotObject = MetadataProvider.LicenseCodes.Read(_aotNodeName);
aotObject = _metadataProvider.LicenseCodes.Read(_aotNodeName);
break;
case ARBAOTObjectType::ConfigKey:
aotObject = MetadataProvider.ConfigurationKeys.Read(_aotNodeName);
aotObject = _metadataProvider.ConfigurationKeys.Read(_aotNodeName);
break;
case ARBAOTObjectType::ConfigKeyGroup:
aotObject = MetadataProvider.ConfigurationKeyGroups.Read(_aotNodeName);
aotObject = _metadataProvider.ConfigurationKeyGroups.Read(_aotNodeName);
break;
case ARBAOTObjectType::Service:
aotObject = MetadataProvider.Services.Read(_aotNodeName);
aotObject = _metadataProvider.Services.Read(_aotNodeName);
break;
case ARBAOTObjectType::ServiceGroup:
aotObject = MetadataProvider.ServiceGroups.Read(_aotNodeName);
aotObject = _metadataProvider.ServiceGroups.Read(_aotNodeName);
break;
case ARBAOTObjectType::Report:
aotObject = MetadataProvider.Reports.Read(_aotNodeName);
aotObject = _metadataProvider.Reports.Read(_aotNodeName);
break;
}

if (aotObject == null
&& _metadataProvider != BackupMetadataProvider)
{
aotObject = this.getAOTObject(_aotNodeName, BackupMetadataProvider);
}

return aotObject;
}

Expand Down Expand Up @@ -442,6 +467,11 @@ public class ARBAOTObjectTree
/// <returns>The tree index of the new node</returns>
public TreeItemIdx addTreeNode(anytype _object, TreeItemIdx _idx, int _formTreeAdd = FormTreeAdd::Sort, boolean _skipAddHeader = false, str _extensionName = '')
{
if (_object == null)
{
return 0;
}

System.Type t = _object.GetType();

var props = t.GetProperties();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ class ARBAOTObjectTreeDataEntity extends ARBAOTObjectTree
/// <returns>The tree index of the new node</returns>
public TreeItemIdx addTreeNode(anytype _object, TreeItemIdx _idx, int _formTreeAdd = FormTreeAdd::Sort, boolean _skipAddHeader = false, str _extensionName = '')
{
if (_object == null)
{
return 0;
}

str objectName = this.getObjectName(_object);
boolean insertIntoMap = false;
if (_object is AxQuerySimpleRootDataSource)
Expand Down
37 changes: 37 additions & 0 deletions Metadata/AOTBrowser/AOTBrowser/AxClass/ARBAOTObjectTreeForm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,42 @@ using CoreMetaModel = Microsoft.Dynamics.AX.Metadata.Core.MetaModel;
class ARBAOTObjectTreeForm extends ARBAOTObjectTree
{
Map controlMap = new Map(Types::String, Types::Integer);
str selectedControlName;

}
]]></Declaration>
<Methods>
<Method>
<Name>parmSelectedControl</Name>
<Source><![CDATA[
public str parmSelectedControl(str _selectedControlName = selectedControlName)
{
selectedControlName = _selectedControlName;

return selectedControlName;
}

]]></Source>
</Method>
<Method>
<Name>update</Name>
<Source><![CDATA[
/// <summary>
/// Update the object tree
/// </summary>
/// <param name = "_aotNodeName">The name of the AOT object</param>
public void update(TreeNodeName _aotNodeName)
{
super(_aotNodeName);

if (selectedControlName && controlMap.exists(selectedControlName))
{
treeControl.select(controlMap.lookup(selectedControlName));
}
}

]]></Source>
</Method>
<Method>
<Name>addExtensionCollection</Name>
<Source><![CDATA[
Expand Down Expand Up @@ -70,6 +102,11 @@ class ARBAOTObjectTreeForm extends ARBAOTObjectTree
/// <returns>The tree index of the new node</returns>
public TreeItemIdx addTreeNode(anytype _object, TreeItemIdx _idx, int _formTreeAdd = FormTreeAdd::Sort, boolean _skipAddHeader = false, str _extensionName = '')
{
if (_object == null)
{
return 0;
}

str objectName = this.getObjectName(_object);
boolean insertIntoMap = false;
if (_object is AxFormDesign)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ class ARBAOTObjectTreeMenu extends ARBAOTObjectTree
/// <returns>The tree index of the new node</returns>
public TreeItemIdx addTreeNode(anytype _object, TreeItemIdx _idx, int _formTreeAdd = FormTreeAdd::Sort, boolean _skipAddHeader = false, str _extensionName = '')
{
if (_object == null)
{
return 0;
}

str objectName = this.getObjectName(_object);
boolean insertIntoMap = false;
if (_object is AxMenu)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ class ARBAOTObjectTreeQuery extends ARBAOTObjectTree
/// <returns>The tree index of the new node</returns>
public TreeItemIdx addTreeNode(anytype _object, TreeItemIdx _idx, int _formTreeAdd = FormTreeAdd::Sort, boolean _skipAddHeader = false, str _extensionName = '')
{
if (_object == null)
{
return 0;
}

str objectName = this.getObjectName(_object);
boolean insertIntoMap = false;
if (_object is AxQuerySimpleRootDataSource)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ class ARBAOTObjectTreeView extends ARBAOTObjectTree
/// <returns>The tree index of the new node</returns>
public TreeItemIdx addTreeNode(anytype _object, TreeItemIdx _idx, int _formTreeAdd = FormTreeAdd::Sort, boolean _skipAddHeader = false, str _extensionName = '')
{
if (_object == null)
{
return 0;
}

str objectName = this.getObjectName(_object);
boolean insertIntoMap = false;
if (_object is AxQuerySimpleRootDataSource)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class ARBFormControlPersonalization_EventHandler
args.parmEnumType(enumNum(ARBAOTObjectType));
args.parmEnum(ARBAOTObjectType::Form);
args.parm(sender.formRun().args().caller().name());
args.parmObject(sender.formRun().args().parmObject());
args.caller(sender.formRun());

new MenuFunction(menuItemDisplayStr(ARBAOTBrowser), MenuItemType::Display).run(args);
Expand Down
Loading