あるアプリAに添付されている画像ファイルをAPIで取得し、アプリBのカスタマイズビューの一覧上に背景画像(background-imageとして)で表示をしたいと考えています。
何か良い方法はございませんでしょうか?
「カスタマイズビューの一覧上」というのは「レコードを追加するボタン」等がある場所ということで良いでしょうか?
現在kintoneのapiではその要素を取得できないようなので、クラス名から取得するしかないようです。そのため、kintoneの仕様が変わった場合は動かなくなる可能性がありますが、不可能ではなさそうです。
アプリAに以下のJavaScriptをアップロードします。(アプリIDやビュー名等書き換えてください)
クエリで画像の添付されたレコードを指定→添付ファイルのfileKeyを取得→ファイルをダウンロードして背景に指定、という手順を踏んでいます。
- (function(){
- ‘use strict’;
- function sendParams(url, type, func){
- var request = new XMLHttpRequest();
- request.open(‘GET’, url, true);
- request.responseType = type;
- request.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’);
- request.onload = function(event) {
- if (request.status === 200) {
- // success
- var data = request.response;
- func(data);
- } else {
- // error
- func(undefined);
- }
- };
- request.send();
- }
- kintone.events.on(‘app.record.index.show’, function(event) {
- var viewName = ‘一覧1’; // 対象ビュー名
- var appId = 2; // 画像が添付されているアプリID
- var query = ‘order by $id desc limit 1’ // 最新のレコードを取得
- if (event.viewName == viewName) {
- var body = {
- ‘app’: appId,
- ‘query’: query,
- ‘totalCount’: true
- };
- kintone.api(kintone.api.url(‘/k/v1/records’, false), ‘GET’, body, function(resp) {
- if (0 < resp.totalCount) {
- var records = resp.records;
- var record = records[0];
- var files = record[‘添付ファイル’].value; // 添付ファイル
- if (0 < files.length) {
- var file = files[0];
- var fileKey = file.fileKey;
- var url = kintone.api.url(‘/k/v1/file’, false) + ‘?fileKey=’ + fileKey;
- sendParams(url, ‘blob’, function(data){
- if (data !== undefined) {
- var url = window.URL || window.webkitURL;
- var blobUrl = url.createObjectURL(data);
- var elements = document.getElementsByClassName(‘gaia-argoui-app-toolbar’); // 一覧上部のクラス名
- if (0 < elements.length) {
- elements[0].style.background = ‘url(’ + blobUrl + ‘)’;
- }
- }
- });
- }
- }
- });
- }
- });
- })();