質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Visualforce

Visualforceは、Force.comプラットフォームの機能の一つ。Salesforceのアプリケーションにネイティブにホストできるカスタムユーザインターフェースの作成が可能になります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

487閲覧

Visualforce:リモートアクションのコールバックが安定して動作しない

muro1866

総合スコア1

Visualforce

Visualforceは、Force.comプラットフォームの機能の一つ。Salesforceのアプリケーションにネイティブにホストできるカスタムユーザインターフェースの作成が可能になります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2024/03/11 07:10

こちらでの質問は初めてになります。
納期の関係で少々急ぎのため、マルチポストになることをお許しください。

少々特殊な環境下で動作するVFページを実装しています。
動作環境の都合でJavascriptから値を取得する必要があり、Remote Actionを使用しました。
Apexでひとしきり処理を実行し、実行結果を文字列で返してalert()で出力したいと思っています。
検索やCopilotなどの助けを借りて下記JavascriptコードをVFに埋め込みました。

Javascript

1function method1(method){ 2 // 環境特有の処理 3 method002(param1, param2).then(function(result){ 4 alert(result); 5 }).catch(function(event){ 6 alert(event.message); 7 }); 8} 9function method2(param1, param2){ 10 alert('No.1'); 11 return new Promise(function(resolve, reject){ 12 Visualforce.remoting.Manager.invokeAction( 13 '{!$RemoteAction.VisualforcePageController.apexRemoteActionethod}', 14 param1, 15 param2, 16 function(result, event){ 17 alert('No.2'); 18 if (event.status) { 19 alert('No.3-1'); 20 resolve(result); 21 } else { 22 alert('No.3-2'); 23 reject(event); 24 } 25 }, 26 { buffer: true, escape: true, timeout: 30000 } 27 ); 28 }); 29}

この状態でmethod1を実行したところalertが出力されるのですが、No.1のみ出力される場合とNo.3-1まで出力される場合が感覚ランダムで発生します。
Apex側に問題はなく、No.1のみの場合もNo.3-1まで実行された場合も想定されたメッセージが返されていることは確認できています。
No.3-1まで必ず実行できるようにするにはどうすればよいでしょうか。

また、このVFページにはapex:selectRadioが配置してあります(選択した値は別のJavascriptメソッド・変数経由でmethod2のparam2に入ります)。
method1実行後、画面上ではラジオボタンの選択がされたままなものの選択された値そのものは空、という状況になっております。
こちらの解消もしたいと思っているので、ご教示いただければと思います。
(先の問題を解消すればこちらも解消されるとは思いますが)

Visualforce

1<apex:page controller="VisualforcePageController" standardStylesheets="true"> 2 <apex:includeScript value="{!$Resource.JavascriptFile}"/> 3 <script> 4 var selectedValue = ''; 5 function selectValue(value){ 6 selectedValue = value; 7 } 8 </script> 9 <apex:outputPanel layout="block" style=""> 10 <apex:form > 11 <apex:pageBlock > 12 <apex:pageBlockSection collapsible="false" columns="1"> 13 <apex:selectRadio onchange="selectValue(this.value)" layout="pageDirection"> 14 <apex:selectOptions value="{!selectList}"/> 15 </apex:selectRadio> 16 <apex:commandButton onclick="method1();" value="実行"/> 17 </apex:pageBlockSection> 18 </apex:pageBlock> 19 </apex:form> 20 </apex:outputPanel> 21</apex:page>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

結局どうにもならなかったのでapex:actionFunctionに切り替えたところすんなりいきました。
この4日間はいったい何だったのか…

Visualforce

1<apex:page controller="VisualforcePageController" standardStylesheets="true"> 2 <script> 3 function executeApexMethod(){ 4 //環境特有の処理 5 6 apexMethodFromJavascript(document.getElementById('formId').elements['radio'].value, javascriptValue); 7 } 8 </script> 9 <apex:outputPanel id="panel" layout="block" style="text-align: center; width:280px; font-size: 80%;"> 10 <apex:pageMessages /> 11 <apex:form > 12 <apex:pageBlock > 13 <apex:pageBlockSection collapsible="false" columns="1"> 14 <apex:selectRadio value="{!selectedValue}" layout="pageDirection" id="radio"> 15 <apex:selectOptions value="{!selectList}"/> 16 </apex:selectRadio> 17 <apex:commandButton onclick="executeApexMethod(); return false;" value="処理実行"/> 18 <apex:actionFunction name="apexMethodFromJavascript" action="{!apexRemoteActionMethod}" reRender="j_id0:panel"> 19 <apex:param name="param1" assignTo="{!selectedValue}" value=""/> 20 <apex:param name="param2" assignTo="{!javascriptValue}" value=""/> 21 </apex:actionFunction> 22 </apex:pageBlockSection> 23 </apex:pageBlock> 24 </apex:form> 25 </apex:outputPanel> 26</apex:page>

投稿2024/03/12 10:16

編集2024/03/12 10:19
muro1866

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問