从自定义按钮进行Salesforce Opportunity验证

从自定义按钮进行Salesforce Opportunity验证,salesforce,apex-code,Salesforce,Apex Code,我有一个自定义按钮“提交订单”,这是一个简单的更改机会阶段 但我想在更改阶段之前添加一些验证检查 这是我的课程 global class SubmitOrder { public SubmitOrder(ApexPages.StandardController controller) { } Webservice static string Submit(string oppId) { string message = ''; try { List&l

我有一个自定义按钮“提交订单”,这是一个简单的更改机会阶段

但我想在更改阶段之前添加一些验证检查

这是我的课程

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;
}
}
但是得到下面的错误

SObject行不允许出现错误

任何帮助都将不胜感激


提前感谢

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


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

naomi,如果使用新的Opportunity对象并向该对象添加验证,那么它将如何更新旧记录?我的意思是这样的。进入YourName->Setup->Customize->Opportunities->ValidationRules并创建一些验证规则。这将阻止更新进行,除非更新符合规则。然后,您的按钮需要做的只是一个简单的更新,验证规则将考虑是否允许该更新实际发生。如果我添加验证规则,那么这些规则也将应用于标准按钮“保存”,我希望在自定义按钮onlyOK上进行验证。那么您在上面的代码中所做的就非常正确了——在出错时将标志设置为false,然后仅在标志为true时更新记录。唯一的问题是您试图使用addError()函数。您需要找到另一种方法来提醒用户存在错误。可能是Javascript警报?namoi,我也使用了同样的Javascript警报,但Javascript警报后有大量的值,很难找到,所以最好在每个字段旁边显示错误,无论如何,谢谢
{!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 });