レコード登録時のカスタマイズ テーブル内のある項目に伝票番号を追記して保存したいが、うまく更新されない

すみません、以下に投稿した内容の続きです。

https://developer.cybozu.io/hc/ja/community/posts/900002624983-CSV%E5%87%BA%E5%8A%9B-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E9%A0%85%E7%9B%AE%E3%81%AE%E7%B5%90%E5%90%88-

テーブル内のある項目(フィールドコード:CSJS001)の全ての行に伝票番号を追加して、保存したいのですが、

以下のように実装したところ、エラーが出ずに、次の画面に進むのですが、CSJS001には、伝票番号が追加されていません。

途中で出しているconsolelogには、値がちゃんと出ています。
ソースコードに何か問題がありますでしょうか?

それとも、そもそもこういうことはできないでしょうか?

(function() {
“use strict”;
kintone.events.on(‘app.record.create.submit.success’, function(event){

var appId = event.appId;
var recordId = event.recordId;
var keihi_table = event.record.テーブル.value;

keihi_table.forEach(function(val){
    val.value.CSJS100.value = val.value.CSJS100.value + recordId;
})
console.log(keihi_table);

//レコードの更新API
var body = {
    “app”: appId,
    “id”: recordId,
    “record”: {
    “テーブル”:  {
            “type”: “SUBTABLE”,
            “value”: keihi_table
     }
  }
};
console.log(body);

return kintone.api(kintone.api.url(‘/k/v1/record’,true), ‘PUT’, body).then(function(resp){
    alert(“申請No: " + recordId + " を登録しました。”);
    return event;
}, function(error) {
    alert(error.message);
    return event;
});

})

})();

 

body のconsole logの中身は以下のようになっています。

{app: 8,
 id: “72”,
record:{
        テーブル:{
               type: “SUBTABLE”,
               value: Array(2)
                          0:
                              id: “2107”
                             value:
                              CSJS100: {type: “SINGLE_LINE_TEXT”, value: “社内のみ打合せ飲食代(朝食/ランチ/カフェmtg)_10_72”}
                              CSJS201: {type: “CALC”, value: “6223”}
                              CSJS202: {type: “CALC”, value: “0”}

    ・・・

はじめまして!

こちら、フィールドコードだけ私のアプリと合わせて(CSJS100→名前の変更のみ)試してみたらうまくいきました。

コードは間違っていないと思います。

一体原因は何でしょうね:sweat_drops:

 

 

 kintone.events.on(‘app.record.create.submit.success’, function(event){

        var appId = event.appId;

        var recordId = event.recordId;

        var keihi_table = event.record.テーブル.value;

        

        keihi_table.forEach(function(val){

            val.value.名前.value = val.value.名前.value + recordId;

        })

        console.log(keihi_table);

        

        //レコードの更新API

        var body = {

            “app”: appId,

            “id”: recordId,

            “record”: {

            “テーブル”:  {

                    “type”: “SUBTABLE”,

                    “value”: keihi_table

             }

          }

        };

        console.log(body);

        

        return kintone.api(kintone.api.url(‘/k/v1/record’,true), ‘PUT’, body).then(function(resp){

            alert(“申請No: " + recordId + " を登録しました。”);

           return event;

        }, function(error) {

            alert(error.message);

          return event;

        });

        

        })

 

 

juridon

確認いただき、ありがとうございます。

テーブル内にルックアップのフィールドがあるのが原因だったりしますでしょうか?

テーブル全体でなく、CSJS100だけの項目だけ更新する方法があれば教えていただけると助かります。

最終的にやりたいことは、CSV出力時に、CSJS100に、伝票番号を追加して、出力したい、ということなのですが。

何かもっと良い方法があれば教えていただけますと幸いです。

fukuyama 様

テーブル内にルックアップのフィールドがあっても、ルックアップでコピーしてくるフィールドになっていなければ、大丈夫だと思います。

他に原因として考えられるとしたら、

何かプラグイン入れたりしていませんでしょうか(><)?プラグインとJavaScriptが喧嘩してうまく行かないこともあるみたいです。

 

>テーブル全体でなく、CSJS100だけの項目だけ更新する方法があれば教えていただけると助かります。

こちらですが、↓のページの「テーブルの1行の特定のフィールドのみを更新する」が参考になると思います!

https://developer.cybozu.io/hc/ja/articles/200752984

 

CSV出力に関しましては、すみません、思い浮かばず。。。(><):sweat_drops:

juridon様

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

プラグインですが、

kintoneルックアップ動的絞り込みプラグイン というものを入れておりました。

こちら、ルックアップを動的に絞り込むだけのものなので、保存ボタン押した時に何か操作はしてないと思うので、関係ないとは思いますが、

念の為、こちらのプラグインを一度削除してみましたが、結果は変わりませんでした><

 

ちなみに、実際には他にもJSでカスタマイズをしており、全体的には以下のような実装をしています。

それぞれの部分は、正常に動作しております。

もし書き方に問題があれば、教えていただけますと幸いです。

(function() {
“use strict”;

var eventsSubmit = [‘app.record.detail.show’,
‘app.record.create.show’,
‘app.record.edit.show’];

kintone.events.on(eventsSubmit, function(e) {
var record = e.record;

//グループフィールド開閉APIを用いて、〇〇グループフィールドを閉じる
kintone.app.record.setFieldShown(‘〇〇グループ’, false);

});

var events1 = [‘app.record.create.show’];
var events2 = [‘app.record.detail.show’]
var events3 = [‘app.record.create.submit.success’];

kintone.events.on(events1, function(event) {
var user = kintone.getLoginUser();
var params = {
codes : user.code
};
// ユーザーエクスポート APIでGaroonのユーザー情報を取得
//   ※省略

// 取得した従業員番号の値を社員番号フォームにセット
//   ※省略

//「社員番号」フィールドを編集不可にする
//   ※省略
});

kintone.events.on(events1, function(event){

// 入力画面に不要なテーブルのフィールドを非表示にする
kintone.app.record.setFieldShown(‘CSJS213’, false);
kintone.app.record.setFieldShown(‘補助科目コード’, false);
//   ※省略

// 優先する組織によって、費用負担部署を自動セット
var record = event.record;
switch (record.組織選択.value[0].name) {
case “メディア開発本部”:
record.費用負担部門.value = “メディア開発”;
break;
case “法務”:
record.費用負担部門.value = “法務”;
break;
//   ※省略
default:
record.費用負担部門.value = “”;
break;
}
record[‘費用負担部門’].lookup = true;
return event;
});

// 経理の確認完了タイミングで、「経理確認日」に現在日時を設定する
kintone.events.on(events2,function(event){
var record = event.record;
var nStatus = record.ステータス.value;

switch(nStatus){
case “完了”:
if (record[‘経理確認日時’][‘value’] === “”){
var url = ‘http://~~~’;

var headers = {
‘X-Cybozu-API-Token’:‘〜〜〜〜(省略)’,
‘Content-Type’: ‘application/json’
};

var param = {
“app” : kintone.app.getId(),
“id” : kintone.app.record.getId(),
“record”: {
“経理確認日時”: {
“value”: moment().format(“YYYY-MM-DDTHH:mmZ”)
}
}
};
console.log(param);

kintone.proxy(url, ‘PUT’, headers, param, function(body, status, headers) {
console.log(JSON.parse(body));
location.reload();
return event;
}, function(error) {
console.log(error);
return event;
}
);
}
break;
}
});

kintone.events.on(events3, function(event){
var appId = event.appId;

// 省略(ここに最初の質問に書いたJSを実装しています)

})

})();

うーん・・・、コードを見た感じ、影響がありそうなところがわからないですm(_ _)mスミマセン

そ、それとですが、URLマスクしておいたほうが良いかと思います:sweat_drops::sweat_drops:

 

juridon様

確認ありがとうございます!

URLマスク漏れてました。削除しました。ご指摘いただき、ありがとうございます。