Skip to content

Commit

Permalink
Added Build this model feature
Browse files Browse the repository at this point in the history
  • Loading branch information
Administrator authored and Administrator committed Sep 1, 2020
1 parent c0c6bea commit 1a33f09
Show file tree
Hide file tree
Showing 9 changed files with 240 additions and 11 deletions.
137 changes: 137 additions & 0 deletions D365FONinjaDevTools/BuildCurrentModel/BuildCurrentModelCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel.Design;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using D365FONinjaDevTools.AddItemsToFolder;
using D365FONinjaDevTools.Kernel;
using Microsoft.Dynamics.AX.Metadata.Core.Messaging;
using Microsoft.Dynamics.AX.Metadata.MetaModel;
using Microsoft.Dynamics.Framework.Tools.Core;
using Microsoft.Dynamics.Framework.Tools.MetaModel.Core;
using Microsoft.Dynamics.Framework.Tools.ProjectSystem.ModelManagement;
using Microsoft.Dynamics.Framework.Tools.ProjectSystem.Wizard;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.Dynamics.Framework.Tools.ProjectSystem.Build.ViewModel;
using Microsoft.Dynamics.Framework.Tools.ProjectSystem.Build.View;

namespace D365FONinjaDevTools.AddPackageReference
{
internal sealed class BuildCurrentModelCommand
{

/// <summary>
/// Command ID.
/// </summary>
public const int CommandId = 0X0400;

/// <summary>
/// Command menu group (command set GUID).
/// </summary>
public static readonly Guid CommandSet = new Guid("5ed27ab2-7007-4c3d-a535-88720e97b49f");

/// <summary>
/// VS Package that provides this command, not null.
/// </summary>
private readonly Package _package;

/// <summary>
/// Initializes a new instance of the <see cref="AddPackageReferenceCommand"/> class.
/// Adds our command handlers for menu (commands must exist in the command table file)
/// </summary>
/// <param name="package">Owner package, not null.</param>
private BuildCurrentModelCommand(Package package)
{
if (package == null)
throw new ArgumentNullException(nameof(package));

this._package = package;

OleMenuCommandService commandService = CommandService();
if (commandService != null)
{
var menuCommandId = new CommandID(CommandSet, CommandId);
var menuItem = new OleMenuCommand(OnProjectContextMenuInvokeHandler, null,
OnProjectMenuBeforeQueryStatus, menuCommandId);
commandService.AddCommand(menuItem);
}
}

private OleMenuCommandService CommandService()
{
return ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
}

/// <summary>
/// Gets the instance of the command.
/// </summary>
public static BuildCurrentModelCommand Instance
{
get;
private set;
}

/// <summary>
/// Gets the service provider from the owner package.
/// </summary>
private IServiceProvider ServiceProvider => _package;

/// <summary>
/// Initializes the singleton instance of the command.
/// </summary>
/// <param name="package">Owner package, not null.</param>
public static void Initialize(Package package)
{
Instance = new BuildCurrentModelCommand(package);
}


private void OnProjectMenuBeforeQueryStatus(object sender, EventArgs e)
{
var menuCommand = sender as OleMenuCommand;
if (menuCommand == null)
return;


var project = LocalUtils.GetActiveProject();
if (project == null)
{
menuCommand.Visible = false;
return;
}

if (project.Kind != GuidUtils.D365OperationsProject.ToString("B"))
{
menuCommand.Visible = false;
return;
}

}

private void OnProjectContextMenuInvokeHandler(object sender, EventArgs e)
{
ModelInfo myModel = LocalUtils.GetActiveProjectNode().GetProjectsModelInfo();
BuildModelViewModel buildVm = new BuildModelViewModel();
BuildModelInfoViewModel modelVm = buildVm.Models.FirstOrDefault(model => model.ModelInfo.DisplayName == myModel.DisplayName);
modelVm.IsChecked = true;
ConstructorInfo[] constructors = typeof(BuildModelView).GetConstructors(
BindingFlags.NonPublic | BindingFlags.Instance);
BuildModelView buildView = (BuildModelView)constructors[0].Invoke( new []{ buildVm } );
buildView.ShowModal();
}







}

}
6 changes: 5 additions & 1 deletion D365FONinjaDevTools/D365FONinjaDevTools.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
<Compile Include="AddItemsToFolder\ElementTypes\SsrsReport.cs" />
<Compile Include="AddItemsToFolder\ElementTypes\Table.cs" />
<Compile Include="AddReferencePackages\AddPackageReferenceCommand.cs" />
<Compile Include="AddReferencePackages\AddMissingPackageReferenceCommand.cs" />
<Compile Include="BuildCurrentModel\BuildCurrentModelCommand.cs" />
<Compile Include="Kernel\AxElementType.cs" />
<Compile Include="AddItemsToFolder\ElementTypes\ElementType.cs" />
<Compile Include="AddItemsToFolder\ElementTypes\Enum.cs" />
Expand Down Expand Up @@ -540,4 +540,8 @@
<Copy SourceFiles="@(OutputFiles)" DestinationFiles="@(OutputFiles->'$(DynamicsVSToolsHintPath)\AddinExtensions\%(RecursiveDir)%(Filename)%(Extension)')" />
<Message Text="Copying finished" Importance="high" />
</Target>
<PropertyGroup>
<PostBuildEvent>xcopy /y "$(TargetDir)D365FONinjaDevTools.vsix" "$(SolutionDir)D365FONinjaDevTools_Package"
xcopy /y "$(TargetPath)" "$(SolutionDir)D365FONinjaDevTools_Package"</PostBuildEvent>
</PropertyGroup>
</Project>
2 changes: 1 addition & 1 deletion D365FONinjaDevTools/D365FoNinjaDevExtensionsPackage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected override void Initialize()
{
AddItemCommand.Initialize(this);
AddPackageReferenceCommand.Initialize(this);
AddMissingPackageReferenceCommand.Initialize(this);
BuildCurrentModelCommand.Initialize(this);
ExtendElementsCommand.Initialize(this);
NewFolder1.Command1.Initialize(this);
base.Initialize();
Expand Down
14 changes: 11 additions & 3 deletions D365FONinjaDevTools/D365FoNinjaDevExtensionsPackage.vsct
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,21 @@
</Strings>
</Button>

<Button guid="guidCommand1PackageCmdSet" id="cmdIdAddMissingPackageReference" priority="0x0100" type="Button">
<Button guid="guidCommand1PackageCmdSet" id="cmdIdBuildCurrentModelCommand" priority="0x0100" type="Button">
<Parent guid="guidCommand1PackageCmdSet" id="MyMenuGroup3" />
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<ButtonText>Build this model...</ButtonText>
</Strings>
</Button>

<!--<Button guid="guidCommand1PackageCmdSet" id="cmdIdAddMissingPackageReference" priority="0x0100" type="Button">
<Parent guid="guidCommand1PackageCmdSet" id="MyMenuGroup4" />
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<ButtonText>Add Missing Package...</ButtonText>
</Strings>
</Button>
</Button>-->

</Buttons>

Expand Down Expand Up @@ -111,7 +119,7 @@
<IDSymbol name="MyMenuGroup4" value="500" />
<IDSymbol name="cmdidCommand1" value="1025" />
<IDSymbol name="cmdIdAddPackageReference" value="0X0300" />
<IDSymbol name="cmdIdAddMissingPackageReference" value="0X0400" />
<IDSymbol name="cmdIdBuildCurrentModelCommand" value="0X0400" />
</GuidSymbol>

<GuidSymbol name="guidImages" value="{d7fde224-2a28-4562-9926-a6578a13cf0f}">
Expand Down
2 changes: 1 addition & 1 deletion D365FONinjaDevTools/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@
// 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: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]
4 changes: 2 additions & 2 deletions D365FONinjaDevTools/source.extension.vsixmanifest
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Id="VSIXNinja.Hichem CHEKEBKEB.4222811a-f639-47b5-af45-e7423cf05f2f" Version="1.1" Language="en-US" Publisher="HichemDax" />
<DisplayName>Ninja DevTools for Dynamics 365 for Operations</DisplayName>
<Identity Id="VSIXNinja.Hichem CHEKEBKEB.4222811a-f639-47b5-af45-e7423cf05f2f" Version="2020.9.1.07" Language="en-US" Publisher="Hichem Chekebkeb" />
<DisplayName>D365FO Ninja DevTools</DisplayName>
<Description xml:space="preserve">This extension enhances developer experience in Dynamics 365 for Operations.</Description>
<Icon>Resources\NinjaDevTools.png</Icon>
<PreviewImage>Resources\NinjaDevToolsBigThumb.png</PreviewImage>
Expand Down
4 changes: 4 additions & 0 deletions D365FONinjaDevToolsSetup/D365FONinjaDevTools_Setup.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
Expand All @@ -48,6 +51,7 @@
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="app.manifest" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Expand Down
5 changes: 2 additions & 3 deletions D365FONinjaDevToolsSetup/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ namespace D365FONinjaDevToolsSetup
class Program
{
private const string DllName = "D365FONinjaDevTools.dll";
private const string VsixName = "D365FONinjaDevTools.vsix";
private const string AddinFolder = "AddinExtensions";

static void Main(string[] args)
Expand All @@ -16,11 +17,9 @@ static void Main(string[] args)
{
string sourcePath = Path.Combine(Environment.CurrentDirectory, DllName);
string targetPath = Path.Combine(FindExtensionFolder(), DllName);

File.Copy(sourcePath, targetPath, true);

System.Diagnostics.Process.Start(VsixName);
Console.WriteLine("Setup finished! Close and enjoy!");

}
catch (Exception ee)
{
Expand Down
77 changes: 77 additions & 0 deletions D365FONinjaDevToolsSetup/app.manifest
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!--<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />-->
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->

</requestedPrivileges>
</security>
</trustInfo>

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on and is
is designed to work with. Uncomment the appropriate elements and Windows will
automatically selected the most compatible environment. -->

<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->

<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->

<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->

<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->

<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->

</application>
</compatibility>

<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->

<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->

</assembly>

0 comments on commit 1a33f09

Please sign in to comment.