function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
yuukiyuuki 

参照先レコードのIDを取得する方法

何度も投稿すいません…。

 

Visualforceページを2つ作成していて、1つのVisualforceページにはオブジェクトのレコードのリストを

表示させていて、もうひとつVisualforceページにはその遷移後の詳細情報を表示させようと考えています。

 

参照先のIDが取得できないせいで、遷移後のレコードに辿りつけません…。

 

何か良い方法はありますでしょうか?

 

宜しくお願い致します。

ue123ue123

apex:paramタグで遷移後のページコントローラにIDを渡していると想定した場合に、

 

 

ApexPages.currentPage().getParameters().get('パラメータ名')

 

 

で遷移後のページコントローラで取得できます。

yuukiyuuki

ご回答ありがとうございます。

 

ご教授頂いたように設定してみたのですが、遷移後のページのIDが

上手く取得できません。

 

【Visualforceページ(遷移前のページ)】

<apex:pageBlockTable title="自分の保守状況" value="{!customobject1}" var="u" rules="cols">
                <apex:column >
                    <apex:facet name="header">問合せ番号</apex:facet>
                    <apex:commandLink >{!u.name}
                        <apex:param name="id" value="{!customobject2.id}"/>
                    </apex:commandLink>
                </apex:column>
</apex:pageBlockTable>

 

【コントローラー】

public class testController{
    public List<CustomObject1__c> getCustomObject1(){
       
        return [select Id, Name,Field3__c, Field1__c, Field5__c, Field6__c, Field4__c from CustomObject1__c];
    }
   
    public CustomObject2__c getCustomObject2(){
   
        Id id = ApexPages.currentPage().getParameters().get('id');   
        return id == null ? new CustomObject2__c() : [select id, Name from CustomObject2__c where Id = :id];
    }
}

 

【Visualforceページ(遷移後のページ)】

<apex:page standardController="CustomObject1__c">
   <apex:detail subject="{!CustomObject1__c}" relatedList="false"/>
</apex:page>

 

 

タブは強調表示されるのですが、IDが取得できないせいで

詳細が表示されません。

 

どこがいけないのかご教授頂いてもよろしいでしょうか。

 

宜しくお願い致します。

 

ue123ue123

ちょっと確認させて下さい。

 

質問1.CustomObject1__cのリストを遷移前のページで表示し、遷移後のページにCustomObject1__cの詳細を表示するであってますか?

 

質問2.上記で違う場合、CustomObject2__cが何者なのかが不明のためCustomObject1__cとCustomObject2__cの関連性を教えて下さい。

 

また、ApexPages.currentPage().getParameters().get()はサーバーでリクエストを受けた時にパラメータの値を取得する方法で、ページのレンダリング時には取得できません。

そのためgetCustomObject2メソッドではidは常にnullになっていると思われます。

 

質問1.がYESの場合は下記の方法を試してみてください。

 

【Visualforceページ(遷移前のページ)】

 

 

<apex:commandLink value="{!'u.name'}" action="{!test}">
<apex:param name="id" value="{!u.id}"/>
</apex:commandLink>

 

 

【コントローラー】

 

Page.TEST2のTEST2は遷移後のページの名前に変えて下さい。

コントローラーからページ遷移する場合は戻り値がPageReferenceクラスになります。(自画面に戻る場合はnull)

 

 

    public PageReference test() {
PageReference pr = Page.TEST2;
pr.getParameters().put('id', ApexPages.currentPage().getParameters().get('id'));
return pr;
}

 

 

サーバー側で他に処理する必要がない場合は、下記でも可能です。

 

【Visualforceページ(遷移前のページ)】

 

 

<apex:outputLink value="{!$Page.TEST2}">{!u.name}
  <apex:param name="id" value="{!u.id}"/>
</apex:outputLink>

 

 

yuukiyuuki

ご回答ありがとうございます。

 

質問1の方の認識です。

説明不足で本当にすいません…。

 

提示頂いた手順できちんと遷移後のページを表示できました!!

 

PageReferenceのドキュメントなどがあるサイトまたはドキュメントなどはありまでしょうか?

 

また、ちょっと質問が変わってしまうですがカスタムオブジェクトのカスタムボタンから

Visualforceページを表示させる場合、そのカスタムオブジェクトの詳細ページのIDを

Visualforceページに渡す方法はありますでしょうか。

 

さらに質問してしまい申し訳ありませんが、宜しくお願い致します。

 

ue123ue123

ドキュメント類はUSサイトをご参照ください。(下記はApexとVisualforceに関してのドキュメントです。)

 

http://wiki.developerforce.com/index.php/Documentation#Apex_and_Visualforce

 

下記はVisualforceに関するクラスの説明です。

 

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_pages.htm

 

 

カスタムボタンからパラメータ付きでVisualforceを表示する場合ですが、この方法がよいかは微妙ですが、

下記の方法で実現できます。

 

動作:Javascriptを実行

内容のソース:OnClick JavaScript

 

 

location.href = '{!URLFOR('/apex/TEST2', null, [id=カスタムオブジェクトのID])}';

 TEST2は対象のVisualforceの名前に変更してください。(TEST2がハードコーディングになってしまうのがイマイチです。)

 

yuukiyuuki

ご回答本当にありがとうございます!!!

 

ご教授頂いた方法でできました★

 

最後に一つだけ質問させてください!!

 

location.href = '{!URLFOR('/apex/TEST2', null, [id=カスタムオブジェクトのID])}'; 

 

を別ウィンドウで表示させたいのですが、

 

var url = (location.href = '{!URLFOR('/apex/TEST2', null, [id=カスタムオブジェクトのID])}');

window.open(url);

 

とすると、元のページも変わってしまいます…。

 

これを、元のページはそのままで、新規ウィンドウだけに遷移後のページを表示させる事は

可能でしょうか?

 

宜しくお願いいたします。

ue123ue123

salesforceでなく、javascriptの問題になっちゃいましたね:smileywink:

 

URLFOR関数はその名の通りurlを返します。

「location.href」にurlをセットするとどうなるかを調べて頂けば、元のページが変わってしまう原因が解りますよ。

yuukiyuuki

ご教授本当にありがとうございました。

 

おかげさまで、別ウィンドウで表示する事ができました。

 

この方法で正しいか分かりませんが、下記のようにする事で出来ました。

 

myWin = window.open();

myWin.location.href = '{!URLFOR('/apex/TEST2', null, [id=カスタムオブジェクトのID])}';

 

本当にありがとうございました!!!

HMHM

少々前の投稿に質問してしまい申し訳ありません。

 

今、カスタムオブジェクトのあるレコードの詳細表示画面から、ヘルプリンクでVFで作成したヘルプページにこのレコードのIDを渡そうとしています。

 

カスタムリンクからのVFページ遷移の場合は、StandardControllerを利用したVFが利用でき、対象レコードの情報は簡単に取得出来るのですが、ヘルプからのVFページ遷移は、StandardControllerのVFが利用できず、Controllerを利用したVFであれば利用可能です。このController(例えば:MyControllerと命名)内で、ApexPages.currentPage().getParameters().get('id')をやっていますが、戻りはnullとなります。

 

ヘルプページで現在レコードIdを取得する場合はどのようにしたらよいでしょうか。

ご教授お願いします。

ikouikou

ヘルプページは詳細画面からだけではなく、タブホーム等のレコード詳細画面以外からも表示されるし、

URLパラメータを設定することも出来ないので難しそうですね。

 

レコードごとに異なるヘルプページを出したいのであれば、カスタムリンク等で擬似ヘルプ画面を実装した方がいいと思います。

HMHM

やはり、URLパラメータを設定することが出来ないようですね。

 

実現したいことが、SF標準かVFで作り込むかの判断の分かれ目で、

カスタムリンクではなくヘルプで異なるページが表示できれば、

SF標準(正確にはヘルプ画面はVF)で対応できそうな感じでしたので

質問させていただきました。

 

了解しました。

どうもご回答ありがとうございました。