いつも大変お世話になっております。
秋山と申します。
標題の件についてご存知の方がいらっしゃいましたら教えて頂きたく思っております。
詳細については下記に記載しております。
(QA詳細)
-背景-
アプリAからアプリBに遷移した際にサブテーブルをコピーしたい。
その対応として、アプリBにサブテーブルを用意し、画面表示時などで値をコピーした。
しかし、サブテーブルに約40行以上の行が存在した場合、ブラウザによっては処理落ちしてしまい、
応答がない場合の警告ダイアログが表示されてしまう。
-背景に対する改修案-
アプリBにサブテーブルではなく、フィールドコードを付与したスペースを用意する。
kintone.app.record.getSpaceElementを利用し、用意したスペースにサブテーブル情報を直書きコピーする。
以上を踏まえたうえで、
スペースにサブテーブルの情報をコピーするスクリプトを簡単に作成してみたのですが…
kintoneではスクリプト利用(特にDOM操作)によって、
アップデートの際に動かなくなる可能性があることを知りました。
そこで下記スクリプトソースを利用していくうえで、懸念事項などがありましたら、
ご教示願いたく思っております。
※1:今回はスペースにHTML設計を行う際のリスクのみお聞きしております。
「アプリBからアプリAの情報を取得する」などの操作については、
こちらで別途リスクに対して対応していく所存です。
※2:アプリBでは、サブテーブルの情報を閲覧するだけの用途で設置したいと考えております。そのため、「アプリAへのリンクがない」や「コピーした値を利用できない」などは懸念から取り除いて頂きたく思います。
-スクリプトソース-
var aSpace = kintone.app.record.getSpaceElement('フィールドコード');
var spacetxt = "";
spacetxt += "<div>";
spacetxt += "<table class='cssデータ'>";
spacetxt += "<caption>【キャプション】</caption>";
spacetxt += '<thead><tr>';
spacetxt += '<th scope="cols">1列目</th>';
spacetxt += '<th scope="cols">2列目</th>';
spacetxt += '<th scope="cols">3列目</th>';
spacetxt += '<th scope="cols">4列目</th>';
spacetxt += '<th scope="cols">5列目</th>';
spacetxt += '</tr></thead>';
spacetxt += '<tbody>';
for(var i = 0; i < アプリAのテーブル.length; i++) {
spacetxt += '<tr>';
spacetxt += '<th scope="row">' + アプリAのテーブル[i]["value"]["1列目のフィールドコード"]["value"] + '</th>';
spacetxt += '<td>' + アプリAのテーブル[i]["value"]["2列目のフィールドコード"]["value"] + '</td>';
spacetxt += '<td>' + アプリAのテーブル[i]["value"]["3列目のフィールドコード"]["value"] + '</td>';
spacetxt += '<td>' + アプリAのテーブル[i]["value"]["4列目のフィールドコード"]["value"] + '</td>';
spacetxt += '<td>' + アプリAのテーブル[i]["value"]["5列目のフィールドコード"]["value"] + '</td>';
spacetxt += '</tr>';
}
spacetxt += '</tbody>';
spacetxt += '</table>';
spacetxt += "</div>";
aSpace.innerHTML = spacetxt;
4件のコメント
秋山さん
スペース要素へのカスタマイズはカスタマイズビュー上と同様自分でDOMを作り出すことになるので、特に問題はないかと思います。
> kintoneではスクリプト利用(特にDOM操作)によって、
アップデートの際に動かなくなる可能性があることを知りました。
こちらは「kintoneが使用しているDOMを使ってカスタマイズしてしまった場合」のことだと思います。
Ryu Yamashitaさん
ご教示ありがとうございます!
>こちらは「kintoneが使用しているDOMを使ってカスタマイズしてしまった場合」のことだと思います。
今回だとkinotneから提供されたAPI(kintone.app.record.getSpaceElement)の範囲内で
やりくりしているはずなので確かに大丈夫そうですね!
次回以降もDOMの操作をしていく際には、上記ご助言をふまえてカスタマイズしていこうと思います。
ありがとうございました!!
秋山さんこんにちは。
Ryu Yamashitaさんのおっしゃるとおりスペースフィールドの中身をカスタマイズする分には
基本的にはアップデートの影響は受けないと考えてよいと思います。
例外としては、デザイン変更のときにスペースフィールドのスタイルが変わり、幅や高さなどが変わってしまうことは考えられます。
蛇足ですが、
>spacetxt += '<th scope="row">' + アプリAのテーブル[i]["value"]["1列目のフィールドコード"]["value"] + '</th>';
このコードですと、値にタグ文字が入っているときにXSSが発生します。
以下を参考に値をエスケープするか、値の部分にinnerTextをつかってください。
https://cybozudev.zendesk.com/hc/ja/articles/201850320
門屋 亮さん
新しいご意見ありがとうございます!
>このコードですと、値にタグ文字が入っているときにXSSが発生します。
>以下を参考に値をエスケープするか、値の部分にinnerTextをつかってください。
こちら、ご指摘ありがとうございます!
まだJava Scriptに疎い部分があり、気づきませんでした。。
教えて頂きましたURL等を参考にし、回避したいと思います。