我在Checkmarx中遇到错误。

              Source                                Destination
File          XXXX/classes/Monitoring.cls           XXXX/classes/Monitoring.cls
Line          212                                  217
Object        select                               select
public static void abortJob() //line no. 209
{
    list<CronTrigger> detailId=[select id FROM CronTrigger
                                where (CronJobDetail.Name='myJobName') AND NextFireTime = null]; //line 212

    if (detailId.size() > 0)
    {
        Id jobId = [SELECT Id from CronTrigger WHERE id = :detailId].get(0).Id; //and line 217
        System.abortJob(jobId);
        Monitoring.scheduleJob();
    }
}
在此方面帮助我如何通过Checkmarx审查。
谢谢

最佳答案

使用escapeSingleQuotes方法清理detailId(我建议重命名)集合中的每个元素

public static void abortJob() {
    list<CronTrigger> detailId=[select id FROM CronTrigger where (CronJobDetail.Name='myJobName' ) AND NextFireTime =null];
    Id jobId ;
    for (CronTrigger currentCron : detailId) {
        jobId = String.escapeSingleQuotes(currentCron.Id);
    }
    if (jobId !=null) {
        System.abortJob(jobId);
        Monitoring.scheduleJob();
    }
}
这是Salesforce Secure Coding参考,将非常有用
您可能还想尝试这种类型的循环以遍历查询结果的每一项
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_loops_for_SOQL.htm

09-28 04:27