新規投稿
フォローする

業務日報アプリのサブテーブルを訪問管理アプリで参照したいです

長文失礼いたします。

 

いつも大変お世話になっております。

当方プログラム経験はなく、kintoneの設計は約半月目になる初心者です。

 

下記のケースで運用可能か、またプログラムを書いてみたのですが全然うまくいかず、ご教示いただければ幸いです。

流れ

①業務日報で必要事項入力。レコード保存。(赤枠が欲しい情報です)②訪問管理で会社名を入力(赤枠内です)しましたら、下記のスペースに①の赤枠の情報を表示させるようにしたい。ここから、会社毎の訪問率の出力や訪問漏れを防ぐためリマインド機能を使って訪問履歴を管理していきたいと考えております。

-------------------------------------------------------------------------------------------------------

(function() {
"use strict";
// スペースにレコード表示イベント作成

kintone.events.on('app.record.detail.show', function(event){

// houmonはスペースの要素IDです
kintone.app.record.setFieldShown('houmon', true);
});

// REST APIリクエスト送信
var params = {
"app": 28
};

kintone.api('/k/v1/record', 'GET', params).then(function(resp) {
// success:レコード番号を表示する
alert(resp['record']['record_no']['value']);
}, function(error) {
//error:エラーの場合はメッセージを表示する
var errmsg = 'レコード取得時にエラーが発生しました。';
// レスポンスにエラーメッセージが含まれる場合はメッセージを表示する
if (error.message !== undefined) {
errmsg += '\n' + error.message;
}
alert(errmsg);
});

// REST API(レコードの一括取得)
var body = {

// 下記アプリID28は参照元の業務日報です
"app": 28,
"fields": ["訪問日時", "終了日時", "お客様社名","支店・事業所名", "お客様担当者名", "訪問目的","コメント", "訪問数"]
};

kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});
})();

------------------------------------------------------------------------------------------------------一番の理想としましては、業務日報のテーブルの結果をそのまま訪問管理に持ってこれるとありがたいのですが、調べててもちんぷんかんぷんになってまいりまして。。。

以前こちらのフォーラムで投稿いただいた下記手順で作成いたしました。

  1. アプリの設定 > フォームの編集でスペースの設置
  2. 設置したスペースの設定で、要素のIDを指定
  3. JavaScriptでレコードの表示イベントのハンドラーに、4,5の処理を記述
  4. REST APIリクエストREST API(レコードの一括取得)を利用して、業務日報アプリからレコードを取得する
  5. 取得したレコードを1,2で設置したスペースに表示する

以上、宜しくお願い致します。

0

5件のコメント

Avatar
江田篤史

岩上様

お世話になっております.
cstapの江田と申します.

以下のようなコードで実装できるかと思います. レイアウトはCSSで調節してください.

(function(){
  "use strict";
  kintone.events.on('app.record.detail.show', function(event){
    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
      app: 28,
      query: 'お客様社名 in ("' + event.record.お客様社名.value + '")'
    }).then(function(response){
      kintone.app.record.getSpaceElement('houmon').innerHTML =
        '<table>' +
        '<tr>' +
        '<th>訪問日時</th>' +
        '<th>終了日時</th>' +
        '<th>お客様社名</th>' +
        '<th>支店・事業所名</th>' +
        '<th>お客様担当者名</th>' +
        '<th>訪問目的</th>' +
        '<th>コメント</th>' +
        '<th>訪問数</th>' +
        '</tr>' +
        response.records.reduce(function(histories, record){
          return histories.concat(record.Table.value.filter(function(row){
            return row.value.お客様社名.value === event.record.お客様社名.value;
          }));
        }, []).reduce(function(html, row){
          return(
            html +
            '<tr>' +
            '<td>' + row.value.訪問日時.value + '</td>' +
            '<td>' + row.value.終了日時.value + '</td>' +
            '<td>' + row.value.お客様社名.value + '</td>' +
            '<td>' + row.value.支店事業所名.value + '</td>' +
            '<td>' + row.value.お客様担当者名.value + '</td>' +
            '<td>' + row.value.訪問目的.value + '</td>' +
            '<td>' + row.value.コメント.value + '</td>' +
            '<td>' + row.value.訪問数.value + '</td>' +
            '</tr>'
          )
        }, '') +
        '</table>';
    });
  });
})();

ただし,サブテーブルのフィールドコードは「Table」としています.

江田篤史により編集されました
0
Avatar
岩上

江田様

 

いつも大変お世話になっております。

ご返信ありがとうございます!

またご連絡が遅くなりまして申し訳ありません。

 

頂いた修正内容で、試したところ思っていた通りの動作となりました!

※私のミスで一部全角が混ざっておりそちらを修正したら動作しました。

 

レイアウト変更の件、一度CSSについて調べてみます。

 

本当に助かりました。有難うございます。

以上、今後ともよろしくお願いいたします。

0
Avatar
岩上

江田様

いつも大変お世話になっております。

あの後、cssやカスタマイズビュー、htmlについて調べておりまして、javascriptを使って、文字のサイズや背景色・外枠の作成はできたのですが、

エクセルの表のように格子状(グリッド)にしたいのですが、javascriptのみでの追加は無理なのでしょうか。

 

現状

更新後

カスタマイズビューは、https://developer.cybozu.io/hc/ja/articles/202905604 こちらをご参考にさせて頂き作成したのですが

うまくいかず、要素としてレコード内のものというより他のアプリからとってきたスペースの要素を取ってくる考えで

またしてもつまずいてしまいました。

 

現状の、javascriptは下記内容で作成しております。念の為記載いたします。

(function() {
"use strict";


kintone.events.on(['app.record.detail.show'], function(event) {
var space = kintone.app.record.getSpaceElement('houmon').parentNode;
space.style.background = '#ddd';
space.style.width = '800px';
space.style.height = '500px';
 space.style.border = "solid thick black";
return event;
});
})();

 

度々申し訳ありませんがご教示の程、宜しくお願い致します。

0
Avatar
江田篤史

岩上様

お世話になっております.

JavaScriptのみで指定できなくもありませんが,基本的にはstyleはCSSファイルに記述した方が良いかと思います.
JavaScriptでスペースフィールドにclassを追加して,CSSでstyleを記述します.

・JavaScript

(function(){
  "use strict";
  kintone.events.on('app.record.detail.show', function(event){
    kintone.app.record.getSpaceElement('houmon').classList.add('houmon-space'); //追加
    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
      app: 28,
      query: 'お客様社名 in ("' + event.record.お客様社名.value + '")'
    }).then(function(response){
      ...
    });
  });
})();

・CSS

.houmon-space{
  background: #ddd;
  width: 800px;
  height: 500px;
}
.houmon-space th,
.houmon-space td{
  border: 1px #000 solid;
}
0
Avatar
岩上

江田様

いつも大変お世話になっております。

上記プログラムで無事やりたかったことが実現できました!

本当にありがとうございます。

また、行間については、paddingで見やすくできました。

 

JavascriptとCSSの使い分けや概念について理解が足りなったです。

これからもっと実践を積んで、理解していきたいと思いました。

 

以上、今後とも宜しくお願い致します。

0
ログインしてコメントを残してください。