2

こんにちは。標準のリードコントローラーをコントローラーとして使用して、ビジュアルフォースページを作成し、拡張しました。これを実行したいので、apex:detailコントロールを引き続き利用でき、標準のリード情報や関連リストなどを処理する際に車輪の再発明を行う必要はありません。

apex:commandbuttonを追加し、saveを呼び出すようにしました。このボタンをクリックすると、関数が呼び出されていることがはっきりとわかります。ただし、インライン編集を介してリード情報に加えられたすべての変更はキャプチャされません。

たとえば、インライン編集を使用してLastNameを編集し、apex:commandボタンをクリックすると、新しいLastName値が保存されません。これは、apex:commandbuttonによって呼び出されている保存関数がデータの変更を認識していないのとほぼ同じです。

以下は私の視覚的な力のページへのコードです。

<apex:page standardController="Lead" extensions="LeadTestExtensionController">
<apex:form >
    <apex:commandButton action="{!save}" value="Save" id="btnSave"/>
    <apex:detail subject="{!Lead.Id}" relatedList="true" showchatter="true" inlineEdit="true" />
</apex:form>
</apex:page>

以下は、共有クラスLeadTestExtensionController {privateApexpages.StandardControllercontroller;を使用したコントローラーパブリックへのコードです。プライベートPageReferenceページ; プライベート文字列ID; プライベートファイナルリードmyLead; public String position {get; セットする;}

public LeadTestExtensionController(ApexPages.StandardController stdController) {
    this.controller = stdController;
    this.myLead = (Lead)stdController.getrecord();
    this.page = ApexPages.currentPage();
    this.id = page.getParameters().get('id');
    List<Lead> myLeads = [select Opportunity_Stage__c from lead where id = :id];
    if(myLeads.size() > 0)
    {
        positions = myLeads[0].Opportunity_Stage__c;
    }
}

public PageReference save() {
    this.controller.save();
    PageReference newPage = New PageReference('/apex/RCS');
    newPage.getParameters().put('id',ApexPages.currentPage().getParameters().get('id'));
    newPage.setRedirect(true);
    return newPage;
 }

}

apex:commandボタンをクリックすると、ページがapex / RCSにリダイレクトされるので、呼び出されていることがわかります。ただし、同じリードに戻っても、姓は変更されません。次の行は、姓の更新を処理する必要がある標準コントローラーの保存関数を呼び出しているという印象を受けました。

this.controller.save();

私は何を間違っているのか、そしてどうすればこれを達成できますか。上記のコードは、私の実際のコードを大幅に簡略化したものです。私が実際のコードでやろうとしているのは、特定のフィールドの値をチェックし、それが特定の基準を満たしている場合は、何かを実行したいということです。しかし、新しい値が入力されているのがわかりません。

ありがとうございました。

4

1 に答える 1

1

標準コントローラーでsave()を呼び出しても、詳細セクションのインライン編集はコミットされません。標準のコントローラーのみを使用して問題を再現したので、オーバーライドする方法は問題ではありません。

この理由は、apex:detailが、標準のコントローラーのレコードへの参照を使用するのではなく、それ自体でデータベースからレコードを取得するためだと思います

インライン編集では、独自の保存ボタンが提供されるはずです。最善の策は、それをデザインに組み込むことだと思います。

于 2012-05-11T09:15:01.377 に答える