我在匿名执行中执行以下内容:
Database.executeBatch(new TransferACDCAccountOppOwnerBatch(), 200);
课程如下。它使用可批处理接口。我输入了一堆调试语句,但在控制台的日志中看不到任何内容。 我还在 Apex 等的调试级别创建调试日志,也没有看到任何 system.debug 输出。 我知道 SOQL 本身可以工作,并且应该只在我设置的开发人员沙盒测试数据中返回一行。
可批处理接口是否有不允许 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,销售人员无助地删除调试行以试图将大小减小到限制以下。
如果你有一个特别嘈杂的类,你可以覆盖该类的日志记录。
在此处查看文档:https://help.salesforce.com/articleView?id=code_setting_debug_log_levels.htm&type=0&language=en_US&release=206.20
我有时使用的一个快速简便的技巧是将 debog 级别设置为 ERROR
,然后每次您想要调试时,您只需执行System.debug(LoggingLevel.ERROR, 'Debug message goes here');
只是不要忘记在完成后清除调试行,以免使问题变得更糟。
事实证明,在执行方法中,当查询针对机会时,我传递的是列表而不是列表。
此外,似乎设置 LoggingLevel.INFO 至少有助于在匿名执行中运行此可批处理类时将调试消息发送到开发人员控制台。
感谢您的提示!
System.dubug 在 batch apex 中受支持。由于批处理顶点异步运行,因此它会根据批处理大小创建多个日志。因此,请查看批处理 apex 完成其执行时创建的每个日志文件。