kintone開発 | アプリアクションをカスタマイズする
アプリアクションとは?
アプリアクションはボタン押下でアプリ間のデータコピーを実施する機能です。
もともとkintoneが持ってるデフォルトの機能です。
「Aアプリの〇〇フィールド値をBアプリの〇〇フィールドにコピーしたい。」というケースは結構あるので、そういう場合にアプリアクションで実現させます。
詳しくは以下を参照してください。
アプリアクションで出来ない事
基本的にはコピー元とコピー先のフィールドタイプは同じである必要があります。異なるフィールドにはコピー出来ません。(数字→文字列1行など)
また、サブテーブルのフィールドをコピーする場合には、コピー先もサブテーブルで同じフィールドタイプである必要があります。
(あくまでサブテーブル1個 対 サブテーブル1個で対応)
以下、アプリアクションで設定できるフィールドの組み合わせと注意事項です。
こんなケースで困った
今回お客様の要望で、「アプリアクションでデータコピー時にAアプリの2つの別々のサブテーブルのレコードをBアプリの1つのサブテーブルに5行までで纏めてコピーしたい。」と言われました。
当初はアプリアクションだけでは出来ないから、JavaScriptのカスタマイズボタンを作ってやってしまおうと何となく思っていたんです。2つのサブテーブルを1つにまとめて行数指定など出来ないので。
Aアプリにカスタマイズボタン作ってクリックイベントでBアプリにPOSTするREST API実行スクリプトを書いてしまおうと。
でも、プログラムでPOST(レコード登録)してしまうと、当然ながら項目に何を設定するか色々決めないといけない。必須項目が色々あるので、これは。。。
お客様的には、サブテーブルと一部の基本的なフィールドはコピーしてもらいたいけど、その他の項目は自分で手入力したい。との事。
む~。
レコード登録しなければ良いのか。コピーだけしたい。。。
ん?
アプリアクションはボタン押下するとコピー先のアプリ編集画面が開いて、フィールドにデータが設定された状態で立ち上がります。
お客様はまさしくこの状態で複数サブテーブルの行数制限コピーを想定している訳で。。。
アプリアクションはカスタマイズ出来る
やり方はシンプルです。
AアプリからBアプリにデータコピーするアプリアクションは通常通り設定します。(通常動作で実行できるもののみ)
今回のような複数テーブルを一つに纏めるコピー処理は、BアプリにJavaScriptカスタマイズで実装します。
アプリアクション実行時には、クエリストリングで 「action」というパラメータが指定されてくるので、
レコード追加 ( app.record.create.show) イベント時にそのパラメータが指定されていたら実行する処理を書いてあげれば良いのです。
「action」パラメータの値は、該当のアプリアクションを一回実行して、URLを確認すれば分かります。
実際のコードは以下のようになるかと。。。
kintone.events.on(['app.record.create.show'], function (event) { // アプリアクションボタンで追加画面を表示してるか判定 if((/action/).test(window.location.search)){ // 文頭?を除外 var queryStr = window.location.search.slice(1); var queries = {}; // クエリ文字列を & で分割して処理 queryStr.split('&').forEach(function(query) { // = で分割してkey,valueをオブジェクトに格納 var queryArr = query.split('='); queries[queryArr[0]] = queryArr[1]; }); // アプリアクションボタンによる追加画面表示時 if(queries['action'] === actionIdA|| queries['action'] === actionIdB){ console.log('action exe!!'); // アプリアクションカスタム処理 customAction(queries.record); } }else{ console.log('not action...'); } return event; });
コメントを投稿するにはログインしてください。