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
吉田 丈治吉田 丈治 

Visualforceページにリレーションの貼ってある情報を表示したい

http://www.saaspie.com/2015/03/02/filtering-records-related-list-using-visualforce/

ここに書いてある事とほぼおなじなのですが、リストが表示されず、どこが間違っているのかご教示下さい。こちらとの違いはカスタムオブジェクトを用いているという部分です。

カスタムオブジェクト ObjectA
にリレーションが貼ってあり
Aに対して、子となるカスタムオブジェクト ObjectBが複数存在するとします。
ObjectBには、カスタム項目で参照関係が登録してあり、ObjectBtoA__c という項目にObjectAのIdが指定されているとします。

class
public class getBFromA {
    public ObjectA__c obj_a;
    public List <ObjectB__c> obj_bs { get; set; }
    public getBFromA(ApexPages.StandardController controller) {
        this.obj_a = (ObjectA__c)controller.getRecord();
    }
    
    public List<ObjectB__c> getBonlyA(){
        obj_bs = new List <ObjectB__c> ();
        obj_bs = [SELECT Id,
                            Name
                        FROM ObjectB__c
                        WHERE ObjectBtoA__c = :obj_a.Id
                    ];
        System.debug('ObjectB' + obj_bs);
        return obj_bs;
    }
}

VisualforcePage
<apex:page standardController="ObjectA" extensions="getBFromA" title="getBFromA">
    <apex:form >
        <apex:pageBlock title="getBFromA" id="getBFromA">
            <apex:pageBlockTable value="{!obj_bs}" var="b">
                <apex:column value="{!b.Id}"/>
                <apex:column value="{!b.Name}"/>
            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>

https://myOrg.visual.force.com/apex/getBfromA?id=*******obj_aのid******
こんなURLでアクセスしています。

ログを見たところ、this.obj_aまでは取れているようでした
15:11:03:017 VARIABLE_ASSIGNMENT [5]|this.obj_a|{"s":1,"v":{"CurrencyIsoCode":"JPY","Id":"*******obj_aのid******","Name":"ObjectAの名前"}}|0x4f25b83e

ページ側には空のapex:pageBlockが表示されます。
何がまずいのでしょうか。
Best Answer chosen by 吉田 丈治
Ryosuke KobayashiRyosuke Kobayashi
こんにちは。

以下のようにしてみてはどうでしょうか。
public class getBFromA {
    public ObjectA__c obj_a;
    public List <ObjectB__c> obj_bs { get; set; }
    public getBFromA(ApexPages.StandardController controller) {
        this.obj_a = (ObjectA__c)controller.getRecord();
        getBonlyA();
    }
    
    public void getBonlyA(){
        this.obj_bs = new List <ObjectB__c> ();
        this.obj_bs = [SELECT Id,
                            Name
                        FROM ObjectB__c
                        WHERE ObjectBtoA__c = :obj_a.Id
                    ];
      }
}


記載いただいたプログラムですと、getBOnlyAがどこからも呼び出されていないので、
空で表示されていたのだと思います。
コンストラクタの中で、getBOnlyAを呼び出してあげれば、テーブルに値が表示されるかと思います。

All Answers

吉田 丈治吉田 丈治
WorkbenchのSOQL Queryで試してみるとObject_bのデータが返ってくる事は確認しています。
SELECT Name FROM Object_b WHERE ObjectBtoA__c = '*******obj_aのid******'
Ryosuke KobayashiRyosuke Kobayashi
こんにちは。

以下のようにしてみてはどうでしょうか。
public class getBFromA {
    public ObjectA__c obj_a;
    public List <ObjectB__c> obj_bs { get; set; }
    public getBFromA(ApexPages.StandardController controller) {
        this.obj_a = (ObjectA__c)controller.getRecord();
        getBonlyA();
    }
    
    public void getBonlyA(){
        this.obj_bs = new List <ObjectB__c> ();
        this.obj_bs = [SELECT Id,
                            Name
                        FROM ObjectB__c
                        WHERE ObjectBtoA__c = :obj_a.Id
                    ];
      }
}


記載いただいたプログラムですと、getBOnlyAがどこからも呼び出されていないので、
空で表示されていたのだと思います。
コンストラクタの中で、getBOnlyAを呼び出してあげれば、テーブルに値が表示されるかと思います。
This was selected as the best answer
吉田 丈治吉田 丈治
Ryosuke Kobayashi様

本当にありがとうございます。
頂いたコードで試してみたところ、無事に解決致しました!
初歩的な質問だったと思うのですが、助言いただきありがとうございました。
勉強続けたいと思います。