2011-04-12

Force.com : 標準の salesforce のページから Visualforce のページへ遷移したい

 
標準の salesforce のページから Visualforce のページへ遷移したい
  • カスタムボタン・リンクの設定
  • [controller]属性を指定した Visualforce ページを表示したい



○ カスタムボタン・リンクの設定

■ 準備
  • [standardController]属性を指定した Visualforce ページを用意する
  • [standardController]属性のオブジェクトとVisualforce のページを表示したいオブジェクトは一緒のこと

■ 設定
  1. [設定]→[アプリケーションの設定]→[(Visualforce のページを表示したいオブジェクト)]を押下
  2. オブジェクトのカスタムボタンとカスタムリンクの[新規]ボタンを押下
  3. カスタムボタン・リンクの設定
    • 表示ラベル : 画面で表示される名称
    • 名前 : システムで使われる名称
    • 説明 : ボタン・リンクの任意の説明
    • 表示の種類 : ボタン・リンクを表示する場所を指定
      • 詳細ページリンク
      • 詳細ページボタン
      • リストボタン
    • 動作 : 画面の表示方法を指定 
      • 新規ウィンドウに表示
      • 現在のウィンドウにサイドバー付きで表示
      • 現在のウィンドウにサイドバーなしで表示
      • 現在のウィンドウにサイドバーおよびヘッダなしで表示
      • JavaScript を実行 : [内容のソース]で「Visualforce ページ」を選択できない
      (※ サイドバー、ヘッダの表示・非表示は <apex:page> タグで指定したほうがよさ気)
    • 内容のソース : 「Visualforce ページ」を選択
    • コンテンツ : 準備した Visualforce ページを選択
  4. カスタムボタンまたはカスタムリンクの編集の[保存]ボタンを押下
  5. 必要があればオブジェクトのカスタムボタンとカスタムリンク欄の[作成したボタン・リンク]を押下し、[ウィンドウオープンプロパティ]ボタンからウィンドウのプロパティの設定を行う
  6. オブジェクトのページレイアウトにボタン・リンクを配置する



○ [controller]属性を指定した Visualforce ページを表示したい

  • Ex. [取引先]オブジェクトの標準 salesforce のページに[ContactListController]クラスを呼び出すカスタムボタン・リンクを作成したい
■ Visualforce ページ
<apex:page standardController="Account" extensions="ConatctListController" tabStyle="Contact" action="{!view}">
    <apex:sectionHeader title="取引先責任者一覧" />
    <apex:pageMessages id="messagearea" showDetail="false" />
    <apex:outputpanel >
        <apex:pageBlock title="" rendered="{!(dtos.size == 0)}">レコードはありません。</apex:pageBlock>
        <apex:pageBlock title="{!pageBlockTitle}" rendered="{!(dtos.size > 0)}">
            <apex:pageblockTable value="{!dtos}" var="d">
                <apex:column style="width:120px;">
                    <apex:facet name="header"><apex:outputText value="{!$ObjectType.Contact.fields.Name.label}"  /></apex:facet>
                    <apex:outputLink value="/{!d.contact.Id}"><apex:outputField value="{!d.contact.Name}" /></apex:outputLink>
                </apex:column>
            </apex:pageblockTable>
        </apex:pageBlock>
    </apex:outputpanel>
</apex:page>

<apex:page controller="ConatctListController" tabStyle="Contact" action="{!view}">
としたいところを、
<apex:page standardController="Account" extensions="ConatctListController" tabStyle="Contact" action="{!view}">
とすればよいらしい。

■ ContactListController クラス
public with sharing  class ConatctListController {

    /** コンストラクタ */
    public ConatctListController(ApexPages.StandardController controller) {
    }

    /** 画面表示用クラス */
    public class DTO {
        public Contact contact { get; set; }
        public DTO() {
            contact = new Contact();
        }
    }
    public List<DTO> dtos { get; set; }

    /** タイトル */
    public String pageBlockTitle { get; set; }

    /** 処理 */
    public void view() {
        String paramId = ApexPages.currentPage().getParameters().get('id');
        Id id;
        try {
            id = paramId;
        } catch (System.StringException e) {
            ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'ID の取得に失敗'));
        }
        pageBlockTitle = [SELECT Name FROM Account WHERE Id = :id].Name;
        Contact[] contacts = [SELECT Id, Name FROM Contact WHERE AccountId = :id ORDER BY Name LIMIT 200];
        dtos = new List<DTO>();
        for(Contact c : contacts) {
            DTO d = new DTO();
            d.contact = c;
            dtos.add(d);
        }
    }
}
※ 下記のコンストラクタを追加すればよいらしい
    /** コンストラクタ */
    public ConatctListController(ApexPages.StandardController controller) {
    }
※ パラメータの[id]は[取引先]オブジェクトの ID がやってきた

■ 設定
  • 上記(○ カスタムボタン・リンクの設定)を参照



◇ 環境

  • Salesforce - Developer Edition - API バージョン 21.0



◇ 参考

 

0 件のコメント:

コメントを投稿