モバイル版でのアプリアクションの再現

初めて質問させて頂きます。質問者としてのマナーについてもご指導頂ければ幸いです。

タイトルの通りモバイル版で使用した際に、アプリアクションと同等の動作を再現したいと考えております。

Tipsや過去ログなど一通り検索してみましたが、別のアプリの登録画面を呼び出して値を渡すというJSを

書く必要があるのかなというところで、別のアプリの登録画面を呼び出す部分が記述で躓いています。

必要な情報のリンクやサンプルなどご教示頂ければ幸いです。

また、別の良い方法があればアドバイスをお願い致します。

 

Y.Moriさん

 

セッションストレージに移動元のアプリの情報をセットして、ボタンクリック等で登録画面に遷移して、ストレージの値を初期値としてセットするという方法が考えられそうです。

 

こちらにちょっと近い内容があります。 https://cybozudev.zendesk.com/hc/ja/community/posts/202159360

山下様

 

ご返信ありがとうございます。

教えて頂いた方法でチャレンジしてみます!

まずはお礼まで。

山下様

 

ご報告遅くなりました。

セッションストレージやルックアップフィールド、ジョイゾー様webサイト上のサンプルを活用して、希望の処理を作成できました。

ありがとうございました。

作成したコードを掲載しておきますので、問題点があればご指摘頂けると幸いです。

 

・コピー元アプリ

function createButton(event){
var elButton = kintone.mobile.app.getHeaderSpaceElement();
var bt_div = document.createElement('div');
bt_div.setAttribute('id', 'addButton');
bt_div.setAttribute('name', 'addButton');
var bt = document.createElement('button');
bt.setAttribute('id','bt1');
//表示させたい一覧のURLを指定
bt.setAttribute('onClick','newRecordCreate();');
//ボタンの表示名
bt.innerHTML = '新規作成';
bt_div.appendChild(bt);
elButton.appendChild(bt_div);

}

kintone.events.on('mobile.app.record.detail.show', createButton);

function newRecordCreate(){
var record = kintone.mobile.app.record.get();
if(window.sessionStorage){
// 保存したい文字列
var str = record['record']['userid']['value'];

// 文字列を保存
window.sessionStorage["userid_key"] = str;

// 文字列を読み込み
var check = window.sessionStorage["userid_key"];

// 保存確認
console.log(check);
}

// 新しいウィンドウを開いて別ページに移動
window.open( [コピー先アプリの編集画面URL], "_blank" ) ;

}

 ・コピー先アプリ

(function() {
"use strict";
kintone.events.on('mobile.app.record.create.show', function(event) {

if(window.sessionStorage){
// 文字列を読み込み
var str = window.sessionStorage["userid_key"];

// 出力テスト
console.log(str);
}

var record = event.record;
record['userid']['value'] = str; // ルックアップフィールドの値
record['userid']['lookup'] = true;
return event;
});
})();

素晴らしいですね。

今となっては釈迦に説法になりそうですが、ちなみに、複数の値をまとめて受け渡したい場合には、JSON.stringify/parseとWebStorageの組合せでの対応になると思いますので、増やしたい場合にはお試しください。

山下様

 

遅くなりましたが、補足情報ありがとうございます。

前述の処理では新規レコードの保存時にレコードの保存自体は行われているようですが、

「指定したレコードがありません」というエラーが毎回出ることがわかりました。

何かお気づきの点などございましたご指摘頂ければ幸いです。

> 「指定したレコードがありません」というエラーが毎回出ることがわかりました。

どのタイミングで出るメッセージでしょうか。

 

また、モバイルでもデバッガー動かせると思いますが、ブレークポイントはって原因追う等はされていますか。

>どのタイミングで出るメッセージでしょうか。

コピー先のアプリで標準の保存をタップした際に表示されます。

 

>また、モバイルでもデバッガー動かせると思いますが、ブレークポイントはって原因追う等はされていますか。

ブラウザでモバイル版表示にした状態でデバッガーは動かしているのですが、

前述の通りJSは正常に通り過ぎた後に、保存を押したタイミングで発生するので

追いきれなくなっております。

 

その後の状況です。

未だに保存ボタンが押された後のエラー表示は改善しておりませんが何が原因かはわかりました。

>レコード追加画面で保存を行うと、レコード一覧画面を表示した後にレコード詳細画面を表示する仕様のため、こちらのイベントが発生します。

上記のスマホ版での保存後の動作仕様により、一覧画面が表示された後に登録した詳細情報を開こうとする際のURLを確認すると、レコードIDは呼び出し先のアプリで保存したレコードIDになっていますが、アプリIDが呼び出し元のアプリIDになっていました。

保存後に詳細情報を表示しないようにするもしくはIDの不一致を正すなどの方法が考えられますが実現できずにおります。

アドバイス頂ければ幸いです。