Triggers Future方法不更新字段的值

Triggers Future方法不更新字段的值,triggers,salesforce,visualforce,force.com,Triggers,Salesforce,Visualforce,Force.com,我想使用apex在salesforce中实现同步 我的要求是,我必须从future方法更新一个字段 我在数据库中有一个名为Counter_c的字段,我正在调用一个方法,该方法将调用3 future方法。未来的方法将尝试将计数器c的值增加1。但field并没有得到更新 这是我的密码: 公共无效生成器报表(){ } @future 公共静态无效生成器报表1(Id){ List lstRep=[选择计数器rom ReportHistory,其中Id=:Id]; 如果(!lstRep.isEmpty()

我想使用apex在salesforce中实现同步

我的要求是,我必须从future方法更新一个字段

我在数据库中有一个名为Counter_c的字段,我正在调用一个方法,该方法将调用3 future方法。未来的方法将尝试将计数器c的值增加1。但field并没有得到更新

这是我的密码:

公共无效生成器报表(){

}

@future
公共静态无效生成器报表1(Id){
List lstRep=[选择计数器rom ReportHistory,其中Id=:Id];
如果(!lstRep.isEmpty()){
++lstRep[0]。计数器c;
}
更新lstRep;
}
@未来
公共静态无效生成器报表2(Id){
List lstRep=[选择计数器rom ReportHistory,其中Id=:Id];
如果(!lstRep.isEmpty()){
++lstRep[0]。计数器c;
}
更新lstRep;
}
@未来
公共静态无效生成器报表3(Id){
List lstRep=[选择计数器rom ReportHistory,其中Id=:Id];
如果(!lstRep.isEmpty()){
++lstRep[0]。计数器c;
}
更新lstRep;
}
执行上述代码后,我希望计数器c应该是3。但它仍然是0或者有时是1

请帮助我,如果有任何方法,我可以控制未来调用,以便每个未来调用都将计数器c的值更新1

谢谢,
Vivek

从示例代码中可以看出,
lstRep.isEmpty()
检查缺少否定

例如,添加一个
在if条件下

@future
public static void generateReport1(Id id) {

    List<ReportHistory__c> lstRep = [select Counter__c rom ReportHistory__c where Id = :id];
    if(!lstRep.isEmpty()) {
        lstRep[0].Counter__c++;
    }
    update lstRep;
}
@future
公共静态无效生成器报表1(Id){
List lstRep=[选择计数器rom ReportHistory,其中Id=:Id];
如果(!lstRep.isEmpty()){
lstRep[0]。计数器_uuC++;
}
更新lstRep;
}
您未来的方法也可能被从队列中拉出来,并由不同的应用程序服务器并行处理。如果是这种情况,您的系统将出现并发问题。读一读。您可以尝试将
FOR UPDATE
关键字添加到SOQL查询中,但这可能会导致将来的某些方法超时

@future
public static void generateReport1(Id id) {

List<ReportHistory__c> lstRep = [select Counter__c rom ReportHistory__c where Id = :id];
     if(!lstRep.isEmpty()) {
        ++lstRep[0].Counter__c;
     }
     update lstRep;
}


@future
public static void generateReport2(Id id) {

List<ReportHistory__c> lstRep = [select Counter__c rom ReportHistory__c where Id = :id];
     if(!lstRep.isEmpty()) {
        ++lstRep[0].Counter__c;
     }
     update lstRep;
}


@future
public static void generateReport3(Id id) {

List<ReportHistory__c> lstRep = [select Counter__c rom ReportHistory__c where Id = :id];
     if(!lstRep.isEmpty()) {
        ++lstRep[0].Counter__c;
     }
     update lstRep;
}
@future
public static void generateReport1(Id id) {

    List<ReportHistory__c> lstRep = [select Counter__c rom ReportHistory__c where Id = :id];
    if(!lstRep.isEmpty()) {
        lstRep[0].Counter__c++;
    }
    update lstRep;
}