新規投稿
フォローする

別アプリのレコードを取得・更新

はじめまして

kintoneアプリストアの営業支援パックを利用して下記のような事をしたいのですが、可能でしょうか

 

・案件管理の案件に紐付く活動履歴の下に最終活動日の欄を追加

 

・活動履歴の保存時に案件管理レコード番号(関連レコード一覧紐付け用)に値があれば活動履歴の対応日時の値を該当の案件管理レコードの最終活動日として更新したい

 

REST APIのチュートリアルを行いながら、活動履歴の保存時に案件管理のレコード番号の取得は出来ましたが、このレコード番号から該当案件の$idを取得して最終活動日を更新したいのですが、どのようにすればよいでしょうか

 

案件が停滞している際のアラートを出すために案件は更新されないが、活動をしている場合があるためこのようにしたいのですが、他の方法でも実現可能であればそれでも構いません、お知恵をお貸しくださいよろしくお願いします

0

10件のコメント

Avatar
村濱一樹

可能です。

 

> 活動履歴の保存時に案件管理のレコード番号の取得は出来ましたが

とのことですので保存時のイベントを利用されてますでしょうか。submitイベントでは、保存直前に他のアプリのデータを変更することができます。

putについてはこちらの記事が参考になるとおもいます

https://developer.cybozu.io/hc/ja/articles/204537310-%E7%AC%AC11%E5%9B%9E-kintone-REST-API%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E6%9B%B4%E6%96%B0 

 

記事内では複数のPutを行ってますが、単数のputをすれば問題ないはずです。

1
Avatar
しんざん

村濱様

ありがとうございます!

ご紹介頂いた記事を参考にやってみましたが、うまく行かない部分があり再度お知恵をお貸しください

記事内の更新したいレコードIDと更新したいレコード情報をセットにしたオブジェクトを作成する関数内で

 

              id: record.$id.value,
                record: {
                    "最終活動日": {
                        value: '2020-01-08'
                    }

 

とした場合の動作までは確認出来ましたが

’2020-01-08'の部分を 

event.record['対応日時'].value

のような形にしたいのですが undefinedとなってしまします。

どのようにすればよいのでしょうか

0
Avatar
村濱一樹
              id: record.$id.value,
                record: {
                    "最終活動日": {
                        value: event.record['対応日時'].value
                    }


ということでしょうか?

undefinedとなるということなので、そもそも

event.record['対応日時'].value

これに想定される値がはいっているか確認できますか?

0
Avatar
しんざん

序盤部分で

    kintone.events.on(['app.record.create.submit.success', 'app.record.edit.submit.success', 'app.record.index.edit.submit.success'], function(event) {

            //レコードの一括取得(100件まで)

            var paramGet = {

            'app': updateAppID,

            'query': 'レコード番号 = ' + event.record['案件管理レコード番号_関連レコード一覧紐付け用'].value

            };

            window.alert(event.record['対応日時'].value)

として内容の確認をしました

0
Avatar
村濱一樹

event.record['対応日時'].value

念の為ですが、この値にはなにがはいってるんでしょうか?

 

あと、コード全体みせてもらったほうがお力になれるかもしれません。

 

 

 

0
Avatar
しんざん

結果として

エラーは下記の内容です

0
Avatar
しんざん

コードはご紹介頂いた記事とほぼほぼ同じ内容です

(function() {

    'use strict';

  

     //案件管理アプリのID

    var updateAppID = 109;

    /**

     * kintone REST APIで一括更新するrecordsデータを作成する関数

     * @param records kintone REST APIで一括取得したrecordsデータ

     * @returns {Array} kintone REST APIで一括更新するrecordsデータ

     */

    function createPutRecords(records) {

        var putRecords = [];

        for (var i = 0, l = records.length; i < l; i++) {

            var record = records[i];

            putRecords[i] = {

                id: record.$id.value,

                record: {

                    "最終活動日": {

                        value: record['対応日時'].value

                    }

                }

            };

        }

        return putRecords;

    }

    kintone.events.on(['app.record.create.submit.success', 'app.record.edit.submit.success', 'app.record.index.edit.submit.success'], function(event) {

            //レコードの一括取得(100件まで)

            var paramGet = {

            'app': updateAppID,

            'query': 'レコード番号 = ' + event.record['案件管理レコード番号_関連レコード一覧紐付け用'].value

            };

            window.alert(event.record['対応日時'].val)

            

        return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', paramGet).then(function(resp2) {

        //案件管理の更新

        var records = resp2.records;

        var paramPut = {

            'app': updateAppID,

            'records': createPutRecords(records)

        };

        return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', paramPut);

        }).then(function(resp3) {

            //処理成功

            alert('案件管理の更新が完了しました!');

            return event;

        }).catch(function(error) {

            //エラーを表示

            alert('案件管理の更新でエラーが発生しました。\n' + error.message);

            return event;

        });   

    });

})();
よろしくお願い致します。
0
Avatar
村濱一樹

送っているレコードが怪しいですね。

Developertools(下記参照)はつかってますか?console.logでcreatePutRecords関数の中で値がどうなってるかみたほうがよさそうです。

https://developer.cybozu.io/hc/ja/articles/207613916-%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84-%E3%81%9D%E3%82%93%E3%81%AA%E6%99%82%E3%81%AF%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86-%E5%85%A5%E9%96%80%E7%B7%A8

0
Avatar
しんざん

村濱様

何とか実現できました!
ありがとうございました!!

最終的に下記のようにしました

(function() {

  'use strict';

  //案件管理アプリのID

  var updateAppID = 109;

  kintone.events.on(['app.record.create.submit.success', 'app.record.edit.submit.success', 'app.record.index.edit.submit.success'], function(event) {

          //レコードの一括取得(100件まで)v

          var paramGet = {

          'app': updateAppID,

          'query': 'レコード番号 = ' + event.record['案件管理レコード番号_関連レコード一覧紐付け用'].value

          };

      return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', paramGet).then(function(resp2) {

          //案件管理の更新

          var query = {

              '最終活動日': {

                  value: event.record['対応日時'].value

              }

          };

          var paramPut = {

              'app': updateAppID,

              'id': resp2.records[0].$id.value,

              'record': query

          };

      return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', paramPut);

      }).then(function(resp3) {

          //処理成功

          alert('案件管理の更新が完了しました! \n' + event.record['対応日時'].value);

          return event;

      }).catch(function(error) {

          //エラーを表示

          alert('案件管理の更新でエラーが発生しました。\n' + error.message);

          return event;

      });

    });

})();
0
Avatar
村濱一樹

無事にできたようでなによりです〜!

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