我在匿名执行中执行以下命令:
Database.executeBatch(new TransferACDCAccountOppOwnerBatch(), 200);
课程如下。它使用可批处理接口。我输入了一堆调试语句,但在控制台的日志中没有看到任何内容。我还在 Apex 等的调试级别创建调试日志,并且也没有看到任何 system.debug 输出。我知道 SOQL 本身可以工作,并且应该只返回我设置的开发人员沙箱测试数据中的一行。
批处理接口是否存在不允许 system.debug 输出的情况?我知道它是异步的,但是作业完成了并且我看到了大量的日志信息。我只是没有看到任何 system.debug 输出。
global class TransferACDCAccountOppOwnerBatch implements Database.Batchable<sObject> {
String query;
static String type = 'Accountant';
static String stageName = 'Closed Won';
static String numberEmployees = '<5';
global TransferACDCAccountOppOwnerBatch() {
query = 'SELECT Id, Num_Active_Orgs__c, Num_Active_Paying_Orgs__c,Number_of_Bookkeeping_Clients__c, Number_Bookkeeping_Clients_SR__c,' +
'Num_Targeted_Orgs__c, AccountId, Account_State__c, Biz_Dev_Owner__c,CloseDate, IsClosed, Name, Type, OPS_ID__c, Org_Creator__c,' +
'Org_s_Geographical_State__c, OwnerId, StageName, Tier__c, IsWon,First_targeted_Org__r.NumberEmployees__c, Account.name, Account.owner.name' +
' FROM Opportunity' +
' WHERE StageName = :stageName' +
' And type = :type' +
' And CloseDate < Last_90_Days' +
' And First_targeted_Org__r.NumberEmployees__c = :numberEmployees';
}
global Database.QueryLocator start(Database.BatchableContext BC) {
System.debug('start query');
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC, List<Account> scope) {
System.debug('execute batch transfer');
TransferACDCAccountOppOwnerHandler hierarchy_handler = new TransferACDCAccountOppOwnerHandler();
hierarchy_handler.setup(scope, BC.getJobId());
System.debug('after hierarchy handler setup');
// hierarchy_handler.runMatching();
// hierarchy_handler.processConsoles();
// hierarchy_handler.processGlobalConsoles();
// hierarchy_handler.commitUpdates();
}
global void finish(Database.BatchableContext BC) {
System.debug('finish bath');
}
}
如果调试日志超过该大小,则调试日志将被限制为 2MB,销售人员会无助地删除调试行,试图将大小减小到限制以下。
如果您有一个特别吵闹的类,您可以覆盖该类的日志记录。
我有时使用的一个快速简单的技巧是将调试级别设置为
ERROR
,然后每次你想调试时就这样做System.debug(LoggingLevel.ERROR, 'Debug message goes here');
事实证明,在 Execute 方法中,当查询针对 Opportunity 时,我传递的是 List 而不是 List。
此外,似乎设置 LoggingLevel.INFO 至少有助于在匿名执行中运行此可批处理类时将调试消息发送到开发人员控制台。
感谢您的提示!
批处理 apex 支持 System.dubug。 由于批处理 apex 异步运行,因此它会根据批处理大小创建多个日志。因此,请查看批处理 apex 完成执行时创建的每个日志文件。