0

销售大师:

我正在编写一个 Salesforce visualforce 页面扩展控制器来实现验证和其他业务逻辑。但是,我的代码没有按预期工作。似乎从未达到验证子类别和序列号的代码。尽管我在 VF 页面中有输入值,但系统调试日志显示子类别始终为空。你能帮忙吗?非常感谢!

public class CaseCreationExtension {
    ApexPages.StandardController stdCtrl;
    Case newCase;

    public CaseCreationExtension(ApexPages.StandardController controller){
        if (!Test.isRunningTest()){
            controller.addFields(new List<String>{'Categ__c', 'Sub_Category__c', 'Id', 'Serial_Number__c', 'Refund_Required__c', 'Total_Value__c', 'Per_Month__c'});
            system.debug('AddFields');
        }
        system.debug('Initial Controller');
        this.stdCtrl = controller;
        newCase = (Case)stdCtrl.getRecord();
        system.debug('AccountId' + newCase.AccountId);
    }

    public PageReference validateSaveRedirect(){

        system.debug('Sub Category:' + newCase.Sub_Category__c);
        system.debug('Serial Number:' + newCase.Serial_Number__c);

        if(newCase.Sub_Category__c == 'Cancellations' && newCase.Serial_Number__c == null){
            system.debug('Adding error message');
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Error: Serial Number must be specified for cancellation case.');
            ApexPages.addMessage(myMsg);
            system.debug('finished Adding error message');
            return null;
        }else{
            if(null==stdCtrl.save()){
                return null;
            }
            /*try{
                stdCtrl.save();
            }
            catch(system.Exception e){
                ApexPages.Message msg = new apexPages.Message(Apexpages.Severity.ERROR, e.getdmlMessage(0));
                ApexPages.addMessage(msg);
                return null;
            }*/
            stdCtrl.save();
            system.debug('New Case Id:' + newCase.Id);
            PageReference pr = new PageReference('/' + newCase.Id);
            pr.setRedirect(true);
            return pr;
       }
    }

    public PageReference cancelRedirect(){
        stdCtrl.cancel();
        system.debug('New Case Id:' + newCase.Contact);
        PageReference pr = new PageReference('/' + newCase.Contact);
        pr.setRedirect(true);
        return pr;
    }
}
4

1 回答 1

0

您的 VF 表格基于什么?<apex:inputField value="{!case.Sub_Category__c}"/>? 似乎该newCase变量是私有的+它没有任何getter/setter。

从我记得调用(Case)stdCtrl.getRecord();“解耦”变量的行为来看。它更像是一个副本而不是对同一对象的引用。因此,stdCtrl您可能已经设置了 has then 值,但它们没有传递给,因为在用户编辑数据之前newCase它已被“克隆”出来。stdCtrl将 aSystem.debug(stdCtrl);插入您的方法中;如果我是对的 - 你会在那里看到你的新价值观。

您可以将其(Case)stdCtrl.getRecord();移入该方法。

或者 - 将您的顶点更改为说public Case newCase {get;set;}并修改 VF 表格以引用{!newCase.Sub_Category__c}等。

于 2017-08-29T10:53:15.533 回答