みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
FileMaker19を使用しています。
webビューワーに、入力フォームが表示されていて
入力フォームの内容を javascript を利用して
ファイルメーカーのフィールドに登録したいのですがうなくいきません
ご教授願えませんか?よろしくお願いいたします。
●スクリプトワークスペースで新規のスクリプトを作成
WEBビュワーのオブジェクト 「web」
webビューアの設定 オプション
処理 URLをへ移動
→ webアドレス 「指定」ボタン → 計算式の指定
"javascript:
function fmToWeb(param) {
console.log(param)
const fmParam = JSON.parse(param)
document.getElementById('name').value = fmParam.name;
document.getElementById('age').value = fmParam.age;
FileMaker.PerformScript('setResultFromWeb', JSON.stringify(fmParam));
}"
●スクリプトワークスペースで新規のスクリプトを作成
fmToWeb という名前
変数を設定 [ $param ; 値: JSONSetElement ( "" ; [ "name" ; webviewer::name ; JSONString ] ; [ "age" ; webviewer::age ; JSONNumber ] ) ]
Web ビューアで JavaScript を実行 [ オブジェクト名: "web" ; 関数名: "fmToWeb" ; 引数: $param ]
●スクリプトワークスペースで新規のスクリプトを作成
setResultFromWeb という名前
変数を設定 [$param; 値: Get(スクリプト引数)]
フィールド設定[webviewer::result ; $param]
よろしくお願いいたします。
連携動作がわかりやすいように少し分解してみましたので、以下のようにやってみて下さい。
まず新しいスクリプトで、
テキストを挿入[ターゲット: $$html] 内容は以下のhtml文を丸っとコピペで
(filemakerに戻す関数を追加しています)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="btn">FMへ戻す</button>
<script>
//filemakerからキックする関数
function fmToWeb(param) {
console.log(param)
const fmParam = JSON.parse(param)
document.getElementById('name').value = fmParam.name;
document.getElementById('age').value = fmParam.age;
}
//filemakerに値を渡す関数
function webToFm() {
const name2 = document.getElementById('name').value;
const age2 = document.getElementById('age').value
const obj = {name: name2, age:age2};
FileMaker.PerformScript('setResultFromWeb', JSON.stringify(obj));
}
//ボタンに関数を割り当てる
window.addEventListener("load",() => {
const btn = document.getElementById('btn');
btn.addEventListener('click', () => {
webToFm();
})
})
</script>
</body>
</html>
次にwebビューワーの設定でwebアドレスを指定するボックスに
"data:text/html," & $$html
と記述して下さい。
そして設定でJavascriptによるFileMakerスクリプトの実行を許可のチェックボックスを忘れずにチェック。
これでwebビューワーは$$htmlを常に見るようになり、webビューワー側からFileMakerのスクリプトを叩けます。
あとは2番目のスクリプトを実行すればFileMakerのnameとageフィールドの値がwebビューワーに渡ります。
動作がわかりやすいようにJavascritpに関数webToFm()、そしてそれを発動するボタンを追加してるので、そのボタンでwebビューワー側で入力したnameとageを捉えてFileMakerに戻すようにします。
3番目のwebビューワーから受け取るスクリプトですが、
例えば
変数を設定 $fromWb = Get(スクリプト引数)
フィールド設定webviewer::name JSONGetElement ($fromWb; "name")
フィールド設定webviewer::age JSONGetElement ($fromWb; "age")
にすると、webビューワー上の値が元のFMフィールドに上書きされます。
注意点として、webビューワーは現在実行しているレイアウト上に配置して下さい。
動作検証していませんが、流れとしてはこんな感じにすると双方の動きが掴みやすいと思います。
Offline
大事なの忘れていました。
htmleの<body>タグの直下に
<input id="name" placeholder="name"/>
<input id="age" placeholder="age"/>
を追加してください。
Offline
ありがとうございます。
試してみます!
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 561.7 KiB (Peak: 586.27 KiB) ]