別ウインドウの新規レコードに値を設定する方法について

「アクションの設定」で表示中アプリ(A)から他アプリ(B)の新規レコードを表示後、
フィールドの関連付けでコピー先のフィールドに値を設定することができますが、
表示中アプリ(A)のレコード情報によりアクションの実行可能/不可能を制御したい為、
JavaScriptでボタンを作成したいと考えています。

①表示中アプリ(A)のレコード情報によりボタンの表示/非表示を制御
②表示中アプリ(A)から別ウインドウを起動後他アプリ(B)の新規レコードを表示
③②で表示したウインドウのフィールド(3箇所)に値を設定

上記手順で①②は実装できたのですが③で躓いております。

そもそも③は実装可能なのか、
実装可能な場合その方法をご存じの方がいらっしゃいましたら
ご教示いただければと思います。

※他アプリ(B)に新規レコード作成後画面遷移の方法を検討しましたが
必須入力項目の初期値が設定しにくい為、上記方法でできればと考えております。

宜しくお願い致します。

chocoさん
cstapの瀧ヶ平です。

やるとすれば②で別ウィンドウを起動する際に

var _window = window.open(url);

のようにしておき、

var _kintone = _window.kintone;
var record = _kintone.app.record.get();

のようにして別ウィンドウのレコードを取得し、編集したのち、

_kintone.app.record.set(record);

を実行する流れになるかと思います。

ただし、window.open();の実行直後はkintoneオブジェクトが定義されていないので、

var _window = window.open(url);
_window.addEventListener("load", function(){
window.postMessage(_window.kintone != null, location.origin);
});
window.addEventListener("message",function(e){
if(){
var _kintone = _window.kintone;
var _record = _kintone.app.record.get();
// _recordの編集処理
_kintone.app.record.set(_record);
}
});

のようにして新規windowのloadイベントで元windowとpostMessageを利用して読み込みのタイミングを同期し、そのタイミングで処理をすると良いかと思います。

上の例では直接kintoneオブジェクトからレコードを取得していますが、これはwindowのloadイベントの発火時点ではすでにapp.record.create.showイベントのタイミングを過ぎているためです。
それ以降に発生しうるイベントであればkintone.events.onでのイベントハンドラーの登録も可能で、例えば新ウィンドウでのレコード登録時にそのレコードを取得してこちら側のウィンドウで利用するということも可能だと思われます。

以上、参考になりますでしょうか

cstap 瀧ヶ平様

いつもお世話になっております。
chocoです。
早速のご回答を頂き誠にありがとうございます。

ご教示頂きましたコード参照させていただき試してみます。
ありがとうございました。

cstap 瀧ヶ平様

お世話になっております。
chocoです。

ご教示頂いたコードを参考にさせて頂き試したところ
実装したい内容が実現できました!
ありがとうございました。

また、丁寧に解説して頂きましたお陰で今後試したいことが増えました。
今回の要件にはないのでまた機会がありましたら
「新ウィンドウでのレコード登録時にそのレコードを取得して
こちら側のウィンドウで利用するということも可能」
に挑戦してみたいと思います。

この度はありがとうございました。
またご質問させて頂くことがあるかと思いますが
どうぞよろしくお願い致します。