private StandardTableDataCM ParseQueryResult(QueryResult <object> queryResult)
        {
            var parsedObjects = new List <JObject>();

            if (queryResult.Records.Count > 0)
            {
                parsedObjects = queryResult.Records.Select(record => ((JObject)record)).ToList();
            }

            var countOfObjectTableCell = new TableCellDTO()
            {
                Cell = new KeyValueDTO()
                {
                    Key   = "Count of Objects",
                    Value = queryResult.Records.Count.ToString()
                }
            };

            List <TableRowDTO> list = new List <TableRowDTO>();

            foreach (var row in parsedObjects.Select(parsedObject => parsedObject.Properties().Where(y => y.Value.Type == JTokenType.String && !string.IsNullOrEmpty(y.Value.Value <string>())).Select(y => new TableCellDTO
            {
                Cell = new KeyValueDTO
                {
                    Key = y.Name, Value = y.Value.Value <string>()
                }
            }).ToList()))
            {
                row.Add(countOfObjectTableCell);
                list.Add(new TableRowDTO()
                {
                    Row = row
                });
            }

            if (!queryResult.Records.Any())
            {
                list.Add(new TableRowDTO()
                {
                    Row = new List <TableCellDTO>()
                    {
                        countOfObjectTableCell
                    }
                });
            }

            return(new StandardTableDataCM
            {
                Table = list
            });
        }
        public override async Task Run()
        {
            var eventCrate = Payload.CratesOfType <EventReportCM>().FirstOrDefault()
                             ?.Get <EventReportCM>()
                             ?.EventPayload;

            KeyValueListCM changedFiles = null;

            if (eventCrate != null)
            {
                changedFiles = eventCrate
                               .CrateContentsOfType <KeyValueListCM>(x => x.Label == "ChangedFiles")
                               .SingleOrDefault();
            }

            if (changedFiles == null)
            {
                RequestPlanExecutionTermination("File list was not found in the payload.");
            }

            if (ActivityUI.AllSpreadsheetsOption.Selected)
            {
                var rows = new List <TableRowDTO>();
                foreach (var changedFile in changedFiles.Values)
                {
                    var row = new TableRowDTO();
                    row.Row.Add(TableCellDTO.Create(SpreadsheetIdLabel, changedFile.Key));
                    row.Row.Add(TableCellDTO.Create(SpreadsheetNameLabel, changedFile.Value));

                    rows.Add(row);
                }

                var tableData = new StandardTableDataCM(false, rows);

                Payload.Add(Crate.FromContent(RunTimeCrateLabel, tableData));
                Success();
            }
            else
            {
                var hasFileId = changedFiles.Values.Any(x => x.Key == ActivityUI.SpreadsheetList.Value);
                if (!hasFileId)
                {
                    RequestPlanExecutionTermination();
                }
                else
                {
                    var rows        = new List <TableRowDTO>();
                    var changedFile = changedFiles.Values.Where(x => x.Key == ActivityUI.SpreadsheetList.Value).First();

                    var row = new TableRowDTO();
                    row.Row.Add(TableCellDTO.Create(SpreadsheetIdLabel, changedFile.Key));
                    row.Row.Add(TableCellDTO.Create(SpreadsheetNameLabel, changedFile.Value));
                    rows.Add(row);

                    var tableData = new StandardTableDataCM(false, rows);

                    Payload.Add(Crate.FromContent(RunTimeCrateLabel, tableData));
                    Success();
                }
            }
        }