Example #1
0
        /// <summary>
        /// Get checkpoints that have been created.
        /// </summary>
        /// <returns>Existing checkpoints.</returns>
        public Checkpoint[] GetCheckpoints()
        {
            SalesForceAPI.Tooling.queryResponse response = _client.ToolingClient.query(new SalesForceAPI.Tooling.queryRequest(
                                                                                           new SalesForceAPI.Tooling.SessionHeader()
            {
                sessionId = _client.SessionId
            },
                                                                                           String.Format("SELECT Id, ActionScript, ActionScriptType, ExecutableEntityId, ExpirationDate, IsDumpingHeap, Iteration, Line, ScopeId FROM ApexExecutionOverlayAction WHERE ScopeId = '{0}'", _client.User.Id)));

            List <Checkpoint> result = new List <Checkpoint>();

            if (response.result.records != null)
            {
                // get file names
                Dictionary <string, string> idToFileNameMap = new Dictionary <string, string>();
                foreach (SalesForceAPI.Tooling.sObject record in response.result.records)
                {
                    if (!idToFileNameMap.ContainsKey((record as SalesForceAPI.Tooling.ApexExecutionOverlayAction).ExecutableEntityId))
                    {
                        idToFileNameMap.Add(
                            (record as SalesForceAPI.Tooling.ApexExecutionOverlayAction).ExecutableEntityId,
                            String.Empty);
                    }
                }

                DataSelectResult names = _client.Data.Select(String.Format(
                                                                 "SELECT Id, Name FROM ApexClass WHERE Id IN ('{0}')",
                                                                 String.Join("','", idToFileNameMap.Keys)));
                foreach (DataRow row in names.Data.Rows)
                {
                    idToFileNameMap.Remove(row["Id"] as string);
                    idToFileNameMap.Add(row["Id"] as string, row["Name"] as string);
                }

                names = _client.Data.Select(String.Format(
                                                "SELECT Id, Name FROM ApexTrigger WHERE Id IN ('{0}')",
                                                String.Join("','", idToFileNameMap.Keys)));
                foreach (DataRow row in names.Data.Rows)
                {
                    idToFileNameMap.Remove(row["Id"] as string);
                    idToFileNameMap.Add(row["Id"] as string, row["Name"] as string);
                }

                // create checkpoints
                foreach (SalesForceAPI.Tooling.sObject record in response.result.records)
                {
                    result.Add(new Checkpoint(
                                   record as SalesForceAPI.Tooling.ApexExecutionOverlayAction,
                                   idToFileNameMap[(record as SalesForceAPI.Tooling.ApexExecutionOverlayAction).ExecutableEntityId]));
                }
            }

            return(result.ToArray());
        }
Example #2
0
        /// <summary>
        /// Get the code coverage for the entire org.
        /// </summary>
        /// <returns>The code coverage for the entire org.</returns>
        public CodeCoverage[] GetCodeCoverage()
        {
            // get all apex classes and triggers
            SourceFile[] files = _client.Meta.GetSourceFiles(
                new SourceFileType[] { new SourceFileType("ApexClass", null), new SourceFileType("ApexTrigger", null) },
                false);
            Dictionary <string, SourceFile> fileMap = new Dictionary <string, SourceFile>();

            foreach (SourceFile file in files)
            {
                if (!String.IsNullOrWhiteSpace(file.Id))
                {
                    fileMap.Add(file.Id, file);
                }
            }

            // get the code coverage
            SalesForceAPI.Tooling.queryResponse response = _client.ToolingClient.query(new SalesForceAPI.Tooling.queryRequest(
                                                                                           new SalesForceAPI.Tooling.SessionHeader()
            {
                sessionId = _client.SessionId
            },
                                                                                           "SELECT ApexClassorTriggerId, Coverage FROM ApexCodeCoverageAggregate"));

            List <CodeCoverage> result = new List <CodeCoverage>();

            if (response != null && response.result != null && response.result.records != null)
            {
                foreach (SalesForceAPI.Tooling.sObject obj in response.result.records)
                {
                    SalesForceAPI.Tooling.ApexCodeCoverageAggregate coverage = obj as SalesForceAPI.Tooling.ApexCodeCoverageAggregate;
                    if (coverage != null)
                    {
                        if (!String.IsNullOrWhiteSpace(coverage.ApexClassOrTriggerId) &&
                            fileMap.ContainsKey(coverage.ApexClassOrTriggerId))
                        {
                            CodeCoverage cc = new CodeCoverage(fileMap[coverage.ApexClassOrTriggerId], coverage);
                            if (cc.LinesUncovered.Length != 0 || cc.LinesCovered.Length != 0)
                            {
                                result.Add(cc);
                            }
                        }
                    }
                }
            }

            return(result.ToArray());
        }
Example #3
0
        /// <summary>
        /// Get the logs for the given user.
        /// </summary>
        /// <param name="userId">The id of the user to get logs for.</param>
        /// <returns>The log for the given user.</returns>
        public Log[] GetLogs(string userId)
        {
            SalesForceAPI.Tooling.queryResponse response = _client.ToolingClient.query(new SalesForceAPI.Tooling.queryRequest(
                                                                                           new SalesForceAPI.Tooling.SessionHeader()
            {
                sessionId = _client.SessionId
            },
                                                                                           String.Format("SELECT Id, StartTime, DurationMilliseconds, Operation, Status FROM ApexLog WHERE LogUserId = '{0}' ORDER BY StartTime DESC", userId)));

            List <Log> result = new List <Log>();

            if (response.result.records != null)
            {
                // create logs
                foreach (SalesForceAPI.Tooling.ApexLog log in response.result.records)
                {
                    result.Add(new Log(log));
                }
            }

            return(result.ToArray());
        }
Example #4
0
        /// <summary>
        /// Get the overall code coverage percent.
        /// </summary>
        /// <returns>The overall code coverage percent.</returns>
        public int GetOverallCodeCoveragePercent()
        {
            // get the code coverage
            SalesForceAPI.Tooling.queryResponse response = _client.ToolingClient.query(new SalesForceAPI.Tooling.queryRequest(
                                                                                           new SalesForceAPI.Tooling.SessionHeader()
            {
                sessionId = _client.SessionId
            },
                                                                                           "SELECT PercentCovered FROM ApexOrgWideCoverage"));

            if (response != null &&
                response.result != null &&
                response.result.records != null &&
                response.result.records.Length == 1)
            {
                SalesForceAPI.Tooling.ApexOrgWideCoverage coverage = response.result.records[0] as SalesForceAPI.Tooling.ApexOrgWideCoverage;
                if (coverage != null && coverage.PercentCovered.HasValue)
                {
                    return(coverage.PercentCovered.Value);
                }
            }

            return(0);
        }
Example #5
0
        /// <summary>
        /// Get all of the log listeners that currently exist.
        /// </summary>
        /// <returns>The currently existing log listeners.</returns>
        public LogListener[] GetLogListeners()
        {
            SalesForceAPI.Tooling.queryResponse response = _client.ToolingClient.query(new SalesForceAPI.Tooling.queryRequest(
                                                                                           new SalesForceAPI.Tooling.SessionHeader()
            {
                sessionId = _client.SessionId
            },
                                                                                           String.Format("SELECT Id, ApexCode, ApexProfiling, Callout, Database, ExpirationDate, ScopeId, System, TracedEntityId, Validation, Visualforce, Workflow FROM TraceFlag WHERE ExpirationDate > {0}", DateTime.UtcNow.ToString("yyyy-MM-ddThh:mm:ssZ"))));

            List <LogListener> result = new List <LogListener>();

            if (response.result.records != null)
            {
                // get entity names
                Dictionary <string, string> names = new Dictionary <string, string>();
                foreach (SalesForceAPI.Tooling.TraceFlag traceFlag in response.result.records)
                {
                    if (traceFlag.ScopeId != null && !names.ContainsKey(traceFlag.ScopeId))
                    {
                        names.Add(traceFlag.ScopeId, String.Empty);
                    }
                    if (traceFlag.TracedEntityId != null && !names.ContainsKey(traceFlag.TracedEntityId))
                    {
                        names.Add(traceFlag.TracedEntityId, String.Empty);
                    }
                }

                DataSelectResult nameData = _client.Data.SelectAll(String.Format(
                                                                       "SELECT Id, Name FROM User WHERE Id IN ('{0}')",
                                                                       String.Join("','", names.Keys)));
                foreach (DataRow row in nameData.Data.Rows)
                {
                    names[row["Id"] as string] = String.Format("{0} (user)", row["Name"]);
                }

                nameData = _client.Data.SelectAll(String.Format(
                                                      "SELECT Id, Name FROM ApexClass WHERE Id IN ('{0}')",
                                                      String.Join("','", names.Keys)));
                foreach (DataRow row in nameData.Data.Rows)
                {
                    names[row["Id"] as string] = String.Format("{0} (class)", row["Name"]);
                }

                nameData = _client.Data.SelectAll(String.Format(
                                                      "SELECT Id, Name FROM ApexTrigger WHERE Id IN ('{0}')",
                                                      String.Join("','", names.Keys)));
                foreach (DataRow row in nameData.Data.Rows)
                {
                    names[row["Id"] as string] = String.Format("{0} (trigger)", row["Name"]);
                }


                // create log listener
                foreach (SalesForceAPI.Tooling.TraceFlag traceFlag in response.result.records)
                {
                    result.Add(new LogListener(
                                   traceFlag,
                                   (traceFlag.ScopeId != null) ? names[traceFlag.ScopeId] : String.Empty,
                                   (traceFlag.TracedEntityId != null) ? names[traceFlag.TracedEntityId] : String.Empty));
                }
            }

            return(result.ToArray());
        }