Memos About SalesForce

Salesforceにハマってたこと!

Salesforce 〇〇を知れば、APEXクラス サーバー通信できる 取得できない

こんにちは、管理人の@Salesforce.Zです。

APEXクラスとVF画面をペアで開発するのが案件次第ですが、多い場合もある

しかし、普段はね

APEXクラス側で、下記のように(抜粋)

public class MyController{
    public String userName {get;set;}

ようにすれば、

VF画面で下記のようにして、APEXとVFは通信できるはず

<apex: page controller=”MyController”>
    <apex:form>
        <apex:inputText value="{!userName}"/>
    </apex:form
</apex;page

たまにはできない場合がある、それはHTML tagを使う場合

salesforceの普通に通信できない、これも当たり前が、

ApexタグをVF側に使っているのに 通信できない場合もある

今回、それの対策や確認すべき点を共有します。

読んだら得ること

★ HTMLタグを使っていないのにクラスメンバ変数はAPEXで画面に入力した値を取れない

目次

通信できない時

HTML タグ?

HTMLタグを使っているなら、

apex:actionFunctionでパラメータを使用し、わざわざ、js経由で タグの値を取得し、actionFuntionのパラメータでクラスのメソッドに渡して、処理するなどで対応可能

APEXタグを使っているのに

これ一番厄介ですね。

普段は自動的に通信するはずじゃん

こんな時に、apex:commondlinkやapexcommondbuttonを使っているか?

使っている場合、immediate属性をtrueにしているか?

trueにしている場合、ビンゴ、これだ!

<apex:page controller="ContactsListController">
    <apex:form>
        <apex:pageBlock title="Contacts List" id="contacts_list">
            <!-- Contacts List -->
            <apex:pageBlockTable value="{! contacts }" var="ct">
                 <apex:column >
                    <apex:commondLink value="edit" action="{!editLink}"  immediate="true"/>
                 </apex:column >
                <apex:column value="{! ct.FirstName }"/>
                <apex:column value="{! ct.LastName }"/>
                <apex:column value="{! ct.Title }"/>
                <apex:column value="{! ct.Email }"/>
    
            </apex:pageBlockTable>
            
        </apex:pageBlock>
    </apex:form>
</apex:page>

ページの項目に関連付けられている入力規則を処理することなく、このコンポーネントに関連付けられているアクションをすぐに実行するかどうかを指定する boolean 値。true に設定すると、アクションがすぐに実行され、入力規則はスキップされます。指定されていない場合、この値はデフォルトの false に設定されます。

どういうことというと、必須項目のチェックをそのリンクやボタンなどで行って欲しくない時に、trueにする

することによって、apexとvfの通信がしなくなる、一方で、画面に入力した値もapex側で取得できない

APEXのことをサーバーと思っていいかなと思います。

VFはフロント側

APEXとVFの通信は サーバーとの通信のことです。

もしimmediateが原因で、通信しない場合、immediateをtrueにする必要がもう一度検討し、やっぱりする必要がある場合

actionFuncionでやるしかないかなと思います。

場合によって、actionsupportなども考えられる

モヤもしするより、これで、スッキリになったでしょうか

レファレンス

Visualforce ページの postback 要求の実行順序