/** * Garoon JavaScript APIを使ったサンプルプログラム * 「grkin.js」ファイル * Copyright (c) 2017 Cybozu * * Licensed under the MIT License * https://opensource.org/licenses/mit-license.php */ (function($) { 'use strict'; // 「grkin_common.js」の値を取得 var KINTONE_APP_ID = window.garoonWFkintone.appId.kintone; var GR_SEARCH_FIELD = window.garoonWFkintone.fieldCode.search.garoon; var KIN_SEARCH_FIELD = window.garoonWFkintone.fieldCode.search.kintone; var SELECT_ITEM = window.garoonWFkintone.fieldCode.selectItems.kintone; var GAROON_TABLE_INFO = window.garoonWFkintone.table.garoon; var KINTONE_TABLE_INFO = window.garoonWFkintone.table.kintone; var FIELD_RELATION = window.garoonWFkintone.relation.fields; var SUBTABLE_RELATION = window.garoonWFkintone.relation.subTable; // 空の配列を作成 var FIELD_TYPE_INFO = []; var FIELD_LABEL_INFO = []; // Garoonのワークフローで表示している独自のボタンの文言 var GR_BUTTON_SEARCH_ON_KINTONE = 'kintone検索'; var DIALOG_BUTTON_CANCEL = 'キャンセル'; var DIALOG_BUTTON_OK = 'OK'; var DIALOG_BUTTON_SELECT = '選択'; // [kintone検索結果]ダイアログで利用している文言 var DIALOG_MESSAGE_NODATA = 'データがありません。選択された項目はクリアされます。'; var DIALOG_MESSAGE_SUB_TOP = 'フォームに取り込む値を選択してください。'; var DIALOG_MESSAGE_TOP = 'kintone検索結果'; var DIALOG_MESSAGE_COUNT = '件'; // エラーメッセージ var ERROR_MESSAGE_SEARCH_ON_KINTONE = 'kintoneデータの取得に失敗しました。'; var ERROR_MESSAGE_GET_FORM_IFNO = 'form情報の取得に失敗しました。'; var ERROR_MESSAGE_SETTING_NOT_MATCHED = 'kintoneのサブテーブルとGaroon側の設定が合っていません。'; var ERROR_MESSAGE_NO_BUTTON = 'kintone検索用のボタンが無いか\nまたはフィールドコードが誤っています。'; var ERROR_MESSAGE_NO_SEARCH_FIELD = 'kintone検索文字列用のフィールドが無いか\nまたはフィールドコードが誤っています。'; // 空のオブジェクトを作成 var RADIO_VALUES = {}; /** * @param {string} htmlStr * @return {string} htmlStr */ function escapeHtml(htmlStr) { if (htmlStr === null) { return ''; } try { return htmlStr.replace(/&/g, '&').replace(//g, '>') .replace(/"/g, '"').replace(/'/g, ''').replace(',', '%,'); } catch (e) { return htmlStr; } } /** * @param {string} str * @return {string} str */ function escapeCanma(str) { if (str === null) { return ''; } try { return str.replace('%', '%c').replace(',', '%d'); } catch (e) { return str; } } /** * @param {string} grField * @param {string} value */ function setRadioItem(grField, value) { $('.js_customization_input_item_' + grField).find('input').val([value]); } var Spin = { spinner: new Spinner({ 'lines': 13, 'length': 28, 'width': 14, 'radius': 42, 'scale': 1, 'corners': 1, 'color': '#FFF', 'opacity': 0.25, 'rotate': 0, 'direction': 1, 'speed': 1, 'trail': 60, 'fps': 20, 'zIndex': 2e9, 'className': 'spinner', 'top': '50%', 'left': '50%', 'shadow': false, 'hwaccel': false, 'position': 'fixed' }), showSpinner: function() { if ($('.kintone-spinner').length === 0) { var spinBgDiv = $('
'); $(document.body).append(spinBgDiv); } $('.kintone-spinner').show(); this.spinner.spin($('html')[0]); }, hideSpinner: function() { $('.kintone-spinner').hide(); this.spinner.stop(); } }; var SettingGaroonData = { /** * Set data in Garoon * @param {object} data * @param {object} request */ setGaroonData: function(data, request) { var req = request; RADIO_VALUES = {}; for (var grField in FIELD_RELATION) { if (!FIELD_RELATION.hasOwnProperty(grField)) { continue; } var kinField = FIELD_RELATION[grField]; var fieldType = FIELD_TYPE_INFO[kinField]; var kinData = data[kinField].value; req = SettingGaroonData.setItem(grField, fieldType, kinData, req); } if (!$.isEmptyObject(GAROON_TABLE_INFO) && !$.isEmptyObject(KINTONE_TABLE_INFO)) { req = SettingGaroonData.setTableData(data, req); } garoon.workflow.request.set(req); for (var key in RADIO_VALUES) { setRadioItem(key, RADIO_VALUES[key]); } }, /** * Set data to Garoon from the dialog * @param {object} data * @param {object} request */ setGaroonDataForDialog: function(data, request) { var req = request; RADIO_VALUES = {}; for (var grField in FIELD_RELATION) { if (!FIELD_RELATION.hasOwnProperty(grField)) { continue; } var kinField = FIELD_RELATION[grField]; var kinData = data[kinField]; var fieldType = FIELD_TYPE_INFO[kinField]; if (!data.hasOwnProperty(kinField)) { continue; } req = SettingGaroonData.setItem(grField, fieldType, kinData, req); } if (!$.isEmptyObject(GAROON_TABLE_INFO) && !$.isEmptyObject(KINTONE_TABLE_INFO)) { req = SettingGaroonData.setTableDataForDialog(data, req); } garoon.workflow.request.set(req); for (var key in RADIO_VALUES) { setRadioItem(key, RADIO_VALUES[key]); } }, /** * Set sub table data in Garoon * @param {object} data * @param {object} request * @return {object} req */ setTableData: function(data, request) { var req = request; for (var tableCode in KINTONE_TABLE_INFO) { if (!KINTONE_TABLE_INFO.hasOwnProperty(tableCode)) { continue; } var kinTableData = data[tableCode].value; var kinFieldTypes = KINTONE_TABLE_INFO[tableCode]; var grTableCode = SUBTABLE_RELATION[tableCode]; var maxRow = GAROON_TABLE_INFO[grTableCode][0]; var maxColumn = GAROON_TABLE_INFO[grTableCode][1]; var rowIdx = 1; if (maxRow < kinTableData.length || maxColumn < kinFieldTypes.length) { swal('Error!', ERROR_MESSAGE_SETTING_NOT_MATCHED, 'error'); return req; } req = SettingGaroonData.clearSubtableData(grTableCode, kinFieldTypes, maxRow, maxColumn, req); req = SettingGaroonData.loopSubtableData(kinTableData, kinFieldTypes, grTableCode, rowIdx, req); } return req; }, /** * Loop processing of sub table data * @param {object} kinTableData * @param {string} kinFieldTypes * @param {string} grTableCode * @param {number} rowNum * @param {object} request * @return {object} req */ loopSubtableData: function(kinTableData, kinFieldTypes, grTableCode, rowNum, request) { var req = request; var rowIdx = rowNum; for (var i = 0; i < kinTableData.length; i++) { var tableValue = kinTableData[i].value; var columIdx = 1; for (var j = 0; j < kinFieldTypes.length; j++) { var fieldValue = tableValue[kinFieldTypes[j]].value; var fieldType = tableValue[kinFieldTypes[j]].type; var grFieldCode = grTableCode + '_' + 'ITEM' + rowIdx + '_' + columIdx; req = SettingGaroonData.setItem(grFieldCode, fieldType, fieldValue, req); if (fieldType !== 'RADIO_BUTTON') { req = SettingGaroonData.setItem(grFieldCode, fieldType, fieldValue, req); } else { RADIO_VALUES[grFieldCode] = fieldValue; } columIdx++; } rowIdx++; } return req; }, /** * Set sub table data in Garoon from the dialog * @param {object} data * @param {object} request * @return {object} req */ setTableDataForDialog: function(data, request) { var req = request; for (var key in KINTONE_TABLE_INFO) { if (!KINTONE_TABLE_INFO.hasOwnProperty(key)) { continue; } var kinTableData = data[key]; var fieldTypes = KINTONE_TABLE_INFO[key]; var grField = SUBTABLE_RELATION[key]; var maxRow = GAROON_TABLE_INFO[grField][0]; var maxColumn = GAROON_TABLE_INFO[grField][1]; var rowIdx = 1; if (maxRow < kinTableData.length || maxColumn < fieldTypes.length) { swal('Error!', ERROR_MESSAGE_SETTING_NOT_MATCHED, 'error'); return req; } req = SettingGaroonData.clearSubtableData(grField, fieldTypes, maxRow, maxColumn, req); req = SettingGaroonData.loopSubtableDataForDaialog(kinTableData, fieldTypes, grField, rowIdx, req); } return req; }, /** * Loop processing of sub table data from the dialog * @param {object} kinTableData * @param {string} fieldTypes * @param {string} grField * @param {number} rowNum * @param {object} request * @return {object} req */ loopSubtableDataForDaialog: function(kinTableData, fieldTypes, grField, rowNum, request) { var req = request; var rowIdx = rowNum; for (var i = 0; i < kinTableData.length; i++) { if (kinTableData[i] === undefined) { continue; } var fieldData = kinTableData[i].split(','); var columIdx = 1; for (var j = 0; j < fieldData.length; j++) { var fieldType = FIELD_TYPE_INFO[fieldTypes[j]]; var kinData = (fieldData[j]).replace('%c', '%').replace('%d', ','); var grCode = grField + '_' + 'ITEM' + rowIdx + '_' + columIdx; if (fieldType !== 'RADIO_BUTTON') { req = SettingGaroonData.setItem(grCode, fieldType, kinData, req); } else { RADIO_VALUES[grCode] = kinData; } columIdx++; } rowIdx++; } return req; }, /** * Clear sub table data set on Garoon * @param {string} grField * @param {string} fieldTypes * @param {number} maxRow * @param {number} maxColumn * @param {object} req * @return {object} req */ clearSubtableData: function(grField, fieldTypes, maxRow, maxColumn, req) { for (var j = 1; j <= maxRow; j++) { for (var k = 1; k <= maxColumn; k++) { var fieldType = FIELD_TYPE_INFO[fieldTypes[k - 1]]; var grCode = grField + '_' + 'ITEM' + j + '_' + k; switch (fieldType) { case 'DATE': req.items[grCode].value = null; break; case 'DATETIME': req.items[grCode].value = null; break; default: req.items[grCode].value = ''; break; } } } return req; }, /** * Set the value * @param {string} grField * @param {string} fieldTypes * @param {object} kinData * @param {object} req * @return {object} req */ setItem: function(grField, fieldType, kinData, req) { switch (fieldType) { case 'DATE': if (kinData === 'null') { break; } req.items[grField].value = kinData; break; case 'DATETIME': if (kinData === '') { break; } var date = moment(kinData).format('YYYY-MM-DD HH:mm'); var d = moment(date).year() + '-' + (moment(date).month() + 1) + '-' + moment(date).date(); var t = moment(date).hours() + ':' + moment(date).minutes(); req.items[grField].value = { date: d, time: t }; break; case 'DROP_DOWN': if (kinData === 'null') { break; } req.items[grField].value = kinData; break; case 'RADIO_BUTTON': RADIO_VALUES[grField] = kinData; break; default: req.items[grField].value = kinData; break; } return req; } }; /** * If there is no search data, clear the setting value for sub data * @param {object} request * @return {object} request */ function clearSubFieldData(request) { var req = request; for (var key in KINTONE_TABLE_INFO) { if (!KINTONE_TABLE_INFO.hasOwnProperty(key)) { continue; } var fieldTypes = KINTONE_TABLE_INFO[key]; var grField = SUBTABLE_RELATION[key]; var maxRow = GAROON_TABLE_INFO[grField][0]; var maxColumn = GAROON_TABLE_INFO[grField][1]; req = SettingGaroonData.clearSubtableData(grField, fieldTypes, maxRow, maxColumn, req); } return req; } /** * If there is no search data, clear the setting value * @param {object} request * @return {object} request */ function clearFiledData(request) { var req = request; req.items[GR_SEARCH_FIELD].value = ''; for (var grField in FIELD_RELATION) { if (!FIELD_RELATION.hasOwnProperty(grField)) { continue; } var kinField = FIELD_RELATION[grField]; var fieldType = FIELD_TYPE_INFO[kinField]; switch (fieldType) { case 'DATE': req.items[grField].value = null; break; case 'DATETIME': req.items[grField].value = null; break; default: req.items[grField].value = ''; break; } if (!$.isEmptyObject(GAROON_TABLE_INFO) && !$.isEmptyObject(KINTONE_TABLE_INFO)) { req = clearSubFieldData(request); } } return req; } /** * Dialog function */ var SelectDialog = { /** * get values from the dialog * @param {object} el * @return {object} dataInfo */ getDialogData: function(el) { var dataInfo = []; for (var key in FIELD_RELATION) { if (!FIELD_RELATION.hasOwnProperty(key)) { continue; } var kinField = FIELD_RELATION[key]; dataInfo[kinField] = el.find('#' + kinField).val(); } if (!$.isEmptyObject(GAROON_TABLE_INFO) && !$.isEmptyObject(KINTONE_TABLE_INFO)) { for (var tableCode in KINTONE_TABLE_INFO) { if (!KINTONE_TABLE_INFO.hasOwnProperty(tableCode)) { continue; } var valueArr = []; var num = $(el).find('input[id^=' + tableCode + '_]').length; for (var i = 0; i < num; i++) { valueArr.push(el.find('#' + tableCode + '_' + i).val()); } dataInfo[tableCode] = valueArr; } } return dataInfo; }, /** * Display data in dialog * @param {string} dataHtml * @param {object} request */ showDialog: function(dataHtml, request, dataFlag) { var req = request; var buttonName; var $dateDialog = $('' +
count + DIALOG_MESSAGE_COUNT + ' | ' +
CreateHtml.createHeading() +
'
---|