自定义按钮的Salesforce机会验证

时间:2012-04-18 12:00:07

标签: salesforce apex-code

我有一个自定义按钮“提交订单”,只需更改商机阶段。

但我想在更改Stage

之前添加一些验证检查

这是我的顶级课程

global class SubmitOrder {

public SubmitOrder(ApexPages.StandardController controller)
{
}

Webservice static string Submit(string oppId)
{
    string message = '';
    try
    {
        List<Opportunity> listOpp = new List<Opportunity>();
        Opportunity oppNew = [SELECT id, StageName, Destination_Zone__c, Sold__c  FROM Opportunity WHERE Id = :oppId];

        boolean flag = true;
        if(oppNew.StageName!= 'To Be Searched' && oppNew.StageName != 'Search')
        {
            oppNew.StageName.addError('Stage should be \'To Be Searched\' or \'Presentation\' or \'Search');
            flag = false;
        }
        if( oppNew.Destination_Zone__c == '')
        {
            oppNew.Destination_Zone__c.addError('Destination Zone is required');
            flag = false;
        }
        if(oppNew.Sold__c < 0)
        {
            oppNew.Sold__c.addError('Sold is required');
            flag = false;
        }

        if(flag)
        {
            oppNew.StageName = 'Ticketing';
            listOpp.add(oppNew);
            if (listOpp != null && !listOpp .isEmpty())
            {
               Database.update(listOpp);
            }
            message ='Saved Successfully';
    }
    catch(System.CalloutException e)
    {
        message = e.getMessage();
    }
    return message;
}
}

调用自定义按钮是

{!REQUIRESCRIPT("/soap/ajax/10.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/10.0/apex.js")}

var oppId= "{!Opportunity.Id}";
var result = sforce.apex.execute("SubmitOrder","Submit",{oppId:oppId });

但得到以下错误

SObject行不允许出错

任何帮助将不胜感激

提前致谢

1 个答案:

答案 0 :(得分:0)

问题在于您正在获取ID并将其传递给一个方法,该方法使用该数据库中已有的ID检索OLD行,并尝试对其使用addError()。它不起作用,因为addError()不适用于数据库中已有的行。

在不知道您的确切要求的情况下,我会提出这个建议 - 将验证规则放在Opportunity对象上。然后,您可以编写按钮,只需更新记录即可。验证规则将负责其余的工作。