主となる工程表とその中のステップをサブとして管理するアプリがそれぞれあるような内容と推察されますが、サブチャートに対応するアプリをサブToDoのように表現したとします。
いずれのアプリもサンプルのToDoアプリをベースに作ったものとします。そして、主従関係を仮に「To_Do_Code」というフィールドコード(もとのサンプルにはありませんので追加ください)で関連づけたとします。また、関連レコードのフィールドコードを「related」としておきます。
関連レコードを引っ張ってくるにはAPIでサブToDoのレコードを引っ張ってくる方法が考えられます。関連レコードの参照先のアプリIDを引いてくるのにkintone.app.getRelatedRecordsTargetAppId()関数を利用します。
元のサンプルを書き換えると次のようになるかと思います。
(function () {
“use strict”;
function loadCSS(href) {
document.write(‘<link rel=“stylesheet” type=“text/css” href="’ + href + ‘" />’);
}
function loadJS(src) {
document.write(‘<script type=“text/javascript” src="’ + src + ‘"></script>’);
}
function convertDateTime(str) {
return ‘/Date(’ + (new Date(str)).getTime() + ‘)/’;
}
// レコード一覧表示時のイベント処理
kintone.events.on(‘app.record.index.show’, function(event){
// レコード一覧のメニューの下側の空白部分の要素を取得する
var elSpace = kintone.app.getHeaderSpaceElement();
// スタイルを調整する
elSpace.style.marginRight = '26px';
elSpace.style.border = 'solid 1px #ccc';
// ガントチャートのエレメントを検索する
var elGantt = document.getElementById ('gantt')
// エレメントがない場合、ガントチャートのエレメントを作成する
if (elGantt === null) {
elGantt = document.createElement('div');
elGantt.id = 'gantt';
elSpace.appendChild(elGantt);
}
var records = event.records;
var source = [];
for (var i = 0; i < records.length; i++) {
var r = records[i];
var obj = {
name: r['To_Do']['value'],
desc: '',
values: [{
from: convertDateTime(r['From']['value']),
to: convertDateTime(r['To']['value']),
label: r['To_Do']['value'],
customClass: 'gantt' + r['Color']['value']
}]
};
source.push(obj);
// 関連するサブToDoを取ってきて、オブジェクトに入れる
var query = 'To_Do_Code=' + r['To_Do_Code']['value'];
var appUrl = kintone.api.url('/k/v1/records') + '?app='+ kintone.app.getRelatedRecordsTargetAppId('related') + '&query=' + encodeURIComponent(query);
var xmlHttp;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", appUrl, false);
xmlHttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
xmlHttp.send(null);
var related = JSON.parse(xmlHttp.responseText);
for(var j=0; j<related['records'].length; j++){
var obj1 = {
name: '',
desc: related['records'][j]['To_Do']['value'],
values:[{
from: convertDateTime(related['records'][j]['From']['value']),
to: convertDateTime(related['records'][j]['To']['value']),
label: related['records'][j]['To_Do']['value'],
customClass: 'gantt' + related['records'][j]['Color']['value']
}]
};
source.push(obj1);
} // for j
} // for i
$(elGantt).gantt({
source: source,
navigate: "scroll",
scale: "days",
maxScale: "months",
minScale: "days",
left: "70px",
itemsPerPage: 20
});
});
// jQuery.Gantt の CSS ファイル
loadCSS(“https://rawgit.com/taitems/jQuery.Gantt/master/css/style.css”);
// jQuery の JavaScript ファイル
loadJS(“https://rawgit.com/taitems/jQuery.Gantt/master/js/jquery.min.js”);
// jQuery.Gantt の JavaScript ファイル
loadJS(“https://rawgit.com/taitems/jQuery.Gantt/master/js/jquery.fn.gantt.min.js”);
})();
ライブラリの読み込みにはRawGit経由でGitHubをCDN代わりにしていますので、ご注意ください。また、APIで関連レコードを引いてきていますので、このサンプルでは関連レコードは100件までしか引けないことにもご注意頂ければと思います。
説明足らずの部分もあろうかと思いますので、ご不明な点があれば再度お問い合わせ頂ければと思います。