public void LoadDataUsage(bool useQueries) { dgvData.Rows.Clear(); lvEntities.Enabled = false; tsbLoadEntities.Enabled = false; tsbExportToExcel.Enabled = false; pnlData.Visible = true; pnlAggregateQueryRecordLimit.Visible = false; tssCancel.Visible = useQueries; tsbCancel.Visible = useQueries; WorkAsync(new WorkAsyncInfo { Message = "Loading data usage...", AsyncArgument = new Tuple <EntityMetadata, bool>((EntityMetadata)lvEntities.SelectedItems[0].Tag, useQueries), Work = (w, e) => { de = new DetectiveEngine(Service); var emd = ((Tuple <EntityMetadata, bool>)e.Argument).Item1; var useStdQueries = ((Tuple <EntityMetadata, bool>)e.Argument).Item2; DetectionResults result = de.GetUsage(emd, useStdQueries, settings, w); w.ReportProgress(0, "Loading forms definitions..."); result.Forms = MetadataHelper.GetFormsDefinitions(emd.ObjectTypeCode.Value, Service); e.Result = result; }, PostWorkCallBack = e => { SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs("")); lvEntities.Enabled = true; tsbLoadEntities.Enabled = true; if (e.Error != null) { MessageBox.Show(this, $@"An error occured: {e.Error.Message}", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } tsbExportToExcel.Enabled = true; var results = (DetectionResults)e.Result; var currentEntityResult = globalResults.FirstOrDefault( r => r.Entity == ((EntityMetadata)lvEntities.SelectedItems[0].Tag).LogicalName); if (currentEntityResult != null) { globalResults.Remove(currentEntityResult); } globalResults.Add(results); if (results.Fault != null) { if (results.IsAggregateQueryRecordLimitReached) { pnlData.Visible = false; pnlAggregateQueryRecordLimit.Visible = true; lblWathNextOnPremise.Visible = !ConnectionDetail.UseOnline; lblWhatNextOnline.Visible = ConnectionDetail.UseOnline; llHowToUpdateAggregateQueryRecordLimit.Visible = !ConnectionDetail.UseOnline; } else { MessageBox.Show(results.Fault.Message); lblCount.Text = results.Fault.Message; } return; } foreach (var result in results.Results) { dgvData.Rows.Add(result.Attribute.DisplayName.UserLocalizedLabel?.Label, result.Attribute.LogicalName, result.Attribute.AttributeType.Value, results.AttributeIsContainedInForms(result.Attribute.LogicalName), result.Percentage); } lblCount.Text = string.Format(lblCount.Tag.ToString(), results.Total); }, ProgressChanged = e => { SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(e.UserState.ToString())); SetWorkingMessage($"Loading data usage...\n{e.UserState.ToString()}"); } }); }
public void ExportToExcel() { WorkAsync(new WorkAsyncInfo { Message = "Starting export...", AsyncArgument = lvEntities.CheckedItems.Cast <ListViewItem>().Select(i => (EntityMetadata)i.Tag), Work = (w, e) => { var emds = (IEnumerable <EntityMetadata>)e.Argument; var excelEngine = new ExcelEngine(); foreach (var emd in emds) { w.ReportProgress(0, "Exporting entity " + emd.LogicalName); de = new DetectiveEngine(Service); var result = globalResults.FirstOrDefault(r => r.Entity == emd.LogicalName); if (result == null) { result = de.GetUsage(emd, false, settings); if (result.IsAggregateQueryRecordLimitReached) { result = de.GetUsage(emd, true, settings); } } w.ReportProgress(0, "Loading forms definitions..."); result.Forms = MetadataHelper.GetFormsDefinitions(emd.ObjectTypeCode.Value, Service); excelEngine.AddEntity(emd, result); e.Result = excelEngine; } }, PostWorkCallBack = e => { SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs("")); if (e.Error != null) { MessageBox.Show(e.Error.ToString()); } var sfd = new SaveFileDialog { Filter = "Excel Workbook|*.xlsx" }; if (sfd.ShowDialog() == DialogResult.OK) { ((ExcelEngine)e.Result).Save(sfd.FileName); if ( MessageBox.Show(this, "File saved! Would you like to open it?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { Process.Start(sfd.FileName); } } }, ProgressChanged = e => { SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(e.UserState.ToString())); SetWorkingMessage(e.UserState.ToString()); } }); }