Skip to content

Commit

Permalink
Fix #12, #13
Browse files Browse the repository at this point in the history
1. Update EPPlus to latest version (5.1.0), and added non-commercial flag, as per new licence https://www.epplussoftware.com/Home/LgplToPolyform
2. Convert to local time only if Kind is set on DateTime.
3. Update FXB Icon.
4. Shortcut to trigger export (F5).
5. Dialog to open generated Excel.
  • Loading branch information
rajyraman committed Apr 9, 2020
1 parent 5841bea commit 903d553
Show file tree
Hide file tree
Showing 8 changed files with 267 additions and 86 deletions.
3 changes: 2 additions & 1 deletion Ryr.XrmToolBox.Plugins/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -184,4 +184,5 @@ UpgradeLog*.htm

# Microsoft Fakes
FakesAssemblies/
/.vs/XrmToolBox/v15/sqlite3
/.vs/XrmToolBox/v15/sqlite3
/.vs/**/sqlite3
91 changes: 65 additions & 26 deletions Ryr.XrmToolBox.Plugins/Ryr.ExcelExport/ExcelExportPlugin.cs
Original file line number Diff line number Diff line change
@@ -1,33 +1,35 @@
using System;
using McTools.Xrm.Connection;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using Microsoft.Xrm.Sdk.Query;
using MsCrmTools.ViewLayoutReplicator.Helpers;
using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.Xml.Linq;
using McTools.Xrm.Connection;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using Microsoft.Xrm.Sdk.Query;
using MsCrmTools.ViewLayoutReplicator.Helpers;
using OfficeOpenXml;
using Tanguy.WinForm.Utilities.DelegatesHelpers;
using XrmToolBox.Extensibility;
using XrmToolBox.Extensibility.Args;
using XrmToolBox.Extensibility.Interfaces;

namespace Ryr.ExcelExport
{
public partial class ExcelExportPlugin : PluginControlBase, IMessageBusHost, IGitHubPlugin, IHelpPlugin
public partial class ExcelExportPlugin : PluginControlBase, IMessageBusHost, IGitHubPlugin, IHelpPlugin, IStatusBarMessenger, IShortcutReceiver
{
private static int fileNumber = 0;
private List<EntityMetadata> entitiesCache;
private string fetchXml;
private Dictionary<string, object> optionsetCache = new Dictionary<string, object>();

public ExcelExportPlugin()
{
InitializeComponent();
Expand Down Expand Up @@ -246,17 +248,18 @@ private void RequestFileDetails()
ExecuteMethod(ExportCurrentViewToExcel, dialog.FileName);
}
}

private void WriteToExcel(List<string> headers, List<List<string>> rows, string fileName)
{
ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
using (var outputFile = new ExcelPackage())
{
var ws = outputFile.Workbook.Worksheets.Add("Result");

//write headers first
for (var columnNumber = 0; columnNumber < headers.Count; columnNumber++)
{
ws.Cells[1, columnNumber+1].Value = headers[columnNumber];
ws.Cells[1, columnNumber + 1].Value = headers[columnNumber];
}

//actual data rows
Expand All @@ -270,14 +273,14 @@ private void WriteToExcel(List<string> headers, List<List<string>> rows, string

if (!rows.Any()) return;

outputFile.File = fileNumber > 0 ?
new FileInfo(fileName.Replace(".xlsx", $"_{fileNumber}.xlsx")) :
outputFile.File = fileNumber > 0 ?
new FileInfo(fileName.Replace(".xlsx", $"_{fileNumber}.xlsx")) :
new FileInfo(fileName);
fileNumber++;
outputFile.Save();
}
}

private void ExportCurrentViewToExcel(string fileName)
{
WorkAsync(new WorkAsyncInfo("Retrieving records..", (w, e) =>
Expand All @@ -294,9 +297,9 @@ private void ExportCurrentViewToExcel(string fileName)
linkElement.SetAttributeValue("alias", "e" + string.Join("", Guid.NewGuid().ToString().Split('-')));
}
}

var fetchToQuery = new FetchXmlToQueryExpressionRequest { FetchXml = fetchElements.ToString() };
var retrieveQuery = ((FetchXmlToQueryExpressionResponse) Service.Execute(fetchToQuery)).Query;
var retrieveQuery = ((FetchXmlToQueryExpressionResponse)Service.Execute(fetchToQuery)).Query;
var fetchXmlCount = Convert.ToInt32(fetchElements.Attribute("count")?.Value ?? "0");
var fetchXmlPageNumber = Convert.ToInt32(fetchElements.Attribute("page")?.Value ?? "1");
retrieveQuery.PageInfo = new PagingInfo
Expand Down Expand Up @@ -339,7 +342,7 @@ private void ExportCurrentViewToExcel(string fileName)
}
rowValues.Add(attributeValue);
}

rows.Add(rowValues);

if (rows.Count == maxRowsPerFile.Value)
Expand All @@ -355,7 +358,7 @@ private void ExportCurrentViewToExcel(string fileName)

if (fetchXmlCount > 0) break;
} while (results.MoreRecords);

//Write any leftover rows
if (rows.Any())
{
Expand All @@ -365,7 +368,22 @@ private void ExportCurrentViewToExcel(string fileName)

})
{
PostWorkCallBack = (c) => MessageBox.Show($"{c.Result} records exported"),
PostWorkCallBack = (c) =>
{
if (c.Error != null)
{
MessageBox.Show(this, "An error occured while exporting the Excel file: " + c.Error.ToString(), "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
SendMessageToStatusBar(this, new StatusBarMessageEventArgs($"{c.Result} records exported.."));
if (DialogResult.Yes == MessageBox.Show(this, "Do you want to open exported file?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{
Process.Start(fileName);
}
}
},
ProgressChanged = (c) => SetWorkingMessage(c.UserState.ToString())
});
}
Expand All @@ -385,7 +403,7 @@ private List<AttributeInfo> RetrieveAttributeMetadata(XElement fetchElements, Ba
{
w.ReportProgress(0, $"Retrieving metadata for {attribute.AttributeName}...");
var attributeResponse =
(RetrieveAttributeResponse) Service.Execute(new RetrieveAttributeRequest
(RetrieveAttributeResponse)Service.Execute(new RetrieveAttributeRequest
{
LogicalName = attribute.AttributeName,
EntityLogicalName = attribute.EntityName
Expand All @@ -396,7 +414,7 @@ private List<AttributeInfo> RetrieveAttributeMetadata(XElement fetchElements, Ba
w.ReportProgress(0,
$"Retrieving metadata for {attributeResponse.AttributeMetadata.AttributeOf}...");
attributeResponse =
(RetrieveAttributeResponse) Service.Execute(new RetrieveAttributeRequest
(RetrieveAttributeResponse)Service.Execute(new RetrieveAttributeRequest
{
LogicalName = attributeResponse.AttributeMetadata.AttributeOf,
EntityLogicalName = attribute.EntityName
Expand All @@ -411,11 +429,11 @@ private List<AttributeInfo> RetrieveAttributeMetadata(XElement fetchElements, Ba

private object UnwrapAttribute(string attributeName, string entityName, object attributeValue)
{
var cacheKey = string.Empty;
if (attributeValue == null)
{
return string.Empty;
}
string cacheKey;
switch (attributeValue)
{
case EntityReference e:
Expand All @@ -442,7 +460,7 @@ private object UnwrapAttribute(string attributeName, string entityName, object a
case AliasedValue a:
return UnwrapAttribute(attributeName, entityName, a.Value);
case DateTime d:
return d.ToLocalTime().ToString(CultureInfo.CurrentCulture.DateTimeFormat);
return d.Kind == DateTimeKind.Utc ? d.ToLocalTime().ToString(CultureInfo.CurrentCulture.DateTimeFormat) : d.ToString(CultureInfo.CurrentCulture.DateTimeFormat);
default:
return attributeValue;
}
Expand Down Expand Up @@ -550,7 +568,28 @@ private void FormatXML(bool silent)
}
}

public void ReceiveKeyDownShortcut(KeyEventArgs e)
{
if (e.KeyCode == Keys.F5 && tsbExportExcel.Enabled)
{
RequestFileDetails();
}
}

public void ReceiveKeyPressShortcut(KeyPressEventArgs e)
{
}

public void ReceiveKeyUpShortcut(KeyEventArgs e)
{
}

public void ReceivePreviewKeyDownShortcut(PreviewKeyDownEventArgs e)
{
}

public event EventHandler<MessageBusEventArgs> OnOutgoingMessage;
public event EventHandler<StatusBarMessageEventArgs> SendMessageToStatusBar;

public string RepositoryName => "mscrmexporttoexcel";

Expand Down
102 changes: 84 additions & 18 deletions Ryr.XrmToolBox.Plugins/Ryr.ExcelExport/ExcelExportPlugin.resx
Original file line number Diff line number Diff line change
Expand Up @@ -161,24 +161,90 @@
</data>
<data name="tsbEditInFxb.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
YII=
</value>
</data>
</root>
15 changes: 14 additions & 1 deletion Ryr.XrmToolBox.Plugins/Ryr.ExcelExport/LICENCE.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,15 @@
Excel Icon from http://findicons.com/icon/158499/xlsx
Creative Commons Attribution
Creative Commons Attribution

# EPPlus 5

## Announcement: new license model from version 5
EPPlus has from this new major version changed license from LGPL to [Polyform Noncommercial 1.0.0](https://polyformproject.org/licenses/noncommercial/1.0.0/).

With the new license EPPlus is still free to use in some cases, but will require a commercial license to be used in a commercial business.

This is explained in more detail [here](https://www.epplussoftware.com/Home/LgplToPolyform).

Commercial licenses, which includes support, can be purchased at (https://www.epplussoftware.com/).

The source code of EPPlus has moved to a [new github repository](https://github.com/EPPlusSoftware/EPPlus)
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
Expand Down Expand Up @@ -32,5 +31,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("2.5.0")]
[assembly: AssemblyFileVersion("2.5.0")]
[assembly: AssemblyVersion("2.6.0")]
[assembly: AssemblyFileVersion("2.6.0")]
Loading

0 comments on commit 903d553

Please sign in to comment.