Exemplo n.º 1
0
        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()}");
                }
            });
        }
Exemplo n.º 2
0
        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());
                }
            });
        }