0

オポチュニティ ステージを簡単に変更できるカスタム ボタン [Submit Order] があります。

しかし、ステージを変更する前にいくつかの検証チェックを追加したい

これが私の頂点クラスです

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 行はエラーを許容しません

どんな助けでもいただければ幸いです

前もって感謝します

4

1 に答える 1

0

問題は、ID を取得し、それを、データベースに既に存在するその ID を持つ OLD 行を取得するメソッドに渡し、その上で addError() を使用しようとしていることです。addError() はデータベースに既に存在する行では機能しないため、機能しません。

あなたの正確な要件を知らなくても、私はこの提案をします - Opportunity オブジェクトに検証ルールを置きます。次に、レコードを更新するだけのボタンをコーディングできます。残りは検証ルールによって処理されます。

于 2012-04-18T14:08:41.880 に答える