java - 如何使用 apex 为 apex 调度程序创建自定义对象? (编译错误: Comparison arguments must be compatible types)

标签 java salesforce apex-code scheduler visualforce

我是 apex 新手,正在尝试构建一个每天运行的 apex 时间表类(class)。如果佣金帐户审核日期还有两周(14 天),调度员将向我们的销售部门发送电子邮件。

我几乎完成了该程序,但我不断收到此错误:

错误:编译错误:比较参数必须是兼容类型:Schema.SObjectField,日期位于第 9 行第 9 列

这是我的代码:

global class AccountReviewScheduler implements Schedulable
{
    global void execute (SchedulableContext ctx) 
    {
        sendEmail();
    }
public void sendEmail()
{
    if (Account__r.Next_Account_Review_Date__c == System.today().addDays(14))
    {
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        Mail.setTemplateId('00XF0000000LfE1');
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail });
    }
}

}

我做了一些研究,另一个讨论板上的评论者告诉我,它不起作用,因为 Account__r.Next_Account_Review_Date__c 只是一个字段。

我必须将它与记录一起使用才能使其有值(value)。然后我可以将该值与 system.today() 进行比较。

我不确定这意味着什么......创建自定义对象?我不知道该怎么做。这是我修改后的代码,我遇到了问题。这是我修改后的代码:

这是修改后的代码(星号**表示更改)

global class AccountReviewScheduler implements Schedulable
{
    global void execute (SchedulableContext ctx) 
    {
        sendEmail();
    }
public void sendEmail()
{
    **CustomObj__c co = [select Account__r.Next_Account_Review_Date__c from CutomObj__c limit 1];**
    **if(co.Account__r.Next_Account_Review_Date__c == system.today().addDays(14))** 
    {
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        Mail.setTemplateId('00XF0000000LfE1');
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail });
    }
}

}

更改以粗体显示...我知道自定义 obj 代码可能是错误的...我从其他人那里得到了它,但我不知道该怎么做。

注意:基于时间的工作流程在此不起作用,因为此电子邮件必须每年(多年来)在帐户审核日期前 14 天发送。基于时间的工作流程将在设置为触发一年后运行一次,但不会重复。它们不会按设计重复出现。请参阅:http://success.salesforce.com/questionDetail?qId=a1X30000000JnPMEA0

我已阅读调度文档:http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_scheduler.htm

并浏览了 Apex 工作簿教程:http://blogs.developerforce.com/developer-relations/2010/02/spring-10-saw-the-general-availability-of-one-of-my-favorite-new-features-of-the-platform-the-apex-schedulerwith-the-apex-s.html 以及官方 Apex 指南中的教程 14,但我仍然遇到麻烦。

任何对我的代码的帮助/见解/新资源的链接将不胜感激。

最佳答案

问题在于 Account__r.Next_Account_Review_Date__c 在这种情况下使用它,它只是一个字段标记,不引用任何数据。此标记与 Apex 中的架构/元数据方法一起使用,以获取有关字段本身的信息,例如其类型、标签等。帮助的这一部分应该为您提供有关该主题的更多信息 http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#CSHID=apex_methods_system_fields_describe.htm

您遇到此问题的原因是您没有从数据库中选择任何数据进行处理。我猜你的发送电子邮件方法如果看起来更像这样就会起作用

public void sendemail(){
  for(Account acc : [SELECT Id FROM Account WHERE Next_Review_Date__c = :system.today().addDays(14)]){

    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
    mail.setTemplateId('00XF0000000LfE1');
    mail.setTargetObjectId(acc.Id);
    Messaging.sendEmail(new Messaging.SingleEmailMessage[] {mail });


  }

}

这将选择下次审核日期等于 14 天时间的所有帐户。然后它将循环它们并发送电子邮件。我假设 Next_Review_Date__c 字段位于帐户对象上,并且我还假设电子邮件模板需要到期帐户才能成功创建自身。

希望这对您有帮助。

关于java - 如何使用 apex 为 apex 调度程序创建自定义对象? (编译错误: Comparison arguments must be compatible types),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11506075/

相关文章:

java - 使用合作伙伴 WSDL 创建 SFDC 机会

java - 如何在 Blackberry Eclipse 中创建 jar

java - 如何在 Intellij IDEA 中使用 Junit 删除自动代码完成

java - 获取 url 的正则表达式模式不起作用

javascript - 为什么我的 sql 语句在编辑器中有效,但在 JS 函数中无效?

pdf-generation - Salesforce PDF 生成支持哪些字体?

java - 如何使用java 9流来实现简单mvc的观察者/可观察模式?

Java 字符串格式说明符与 SOQL 通配符冲突

c# - Foreach 带有方括号中的 select/from?

salesforce - 检查顶点列表是否包含对象