从自定义按钮进行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 });