ボタン1つでファイルへ出力したい

一覧画面にボタンを設定して、クリックしたら

csvに出力することは可能でしょうか?

ご存じの方ご教授下さい。

ちゃいな嬢さん

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

下記記事が参考になるかと思います。
https://developer.cybozu.io/hc/ja/community/posts/360043150672

江田さま

ありがとうございます。試してみます!

ちなみに項目名は全部書かないとダメなんですか?

全ての項目って無理なんですかね・・

ボタン1つでバックアップのイメージなので。

あと他のアプリを出力はできませんか?

AアプリでAとBを出力と

すみません、よろしくお願いします。

ちゃいな嬢さん

> ちなみに項目名は全部書かないとダメなんですか?

フォームの設定の取得APIまたは一覧の設定の取得APIを用いれば、フォーム設定や一覧設定をもとに項目を自動で設定することも可能です。

 

> 他のアプリを出力はできませんか?

27行目あたりでkintone.app.getId()にて自アプリのidを指定している箇所を、他アプリのidに変更すれば出力できます。

ありがとうございます!試してみます。

また壁にぶつかったら質問させていただきます。

江田さま

違う内容の質問ですが、詳しそうなので聞いてもよろしいでしょうか?

あるファイルのフラグを一括で更新したいのですが、レコードの一括更新のAPI説明には

ひとつずつ配列に記述してputとなっています

https://developer.cybozu.io/hc/ja/articles/201941784#step2 

ファイルを1件読み込んで更新という方法をしたくてコードを組みましたが

結果はうまく行ったのですが、JSEdit for kintoneのワーニングエラーで「Dont’ make functions with in a loop」

と表示されるのでダメな記述なんだろうなと思っています。

どう書くのが正しいのか教えてもらえませんか?

やりたいことは一括でフラグ更新で、更新件数があれば再表示したいけどそこもうまく行かず・・

関数化しているのはフラグをオンにするのとオフにするパターンを行いたい為です。

一部コードは省略しています。

 

kintone.events.on(‘app.record.index.show’, function (event) {
  let vButton = document.getElementById(‘button’)

  //一括オフ クリック時
  vButton.onclick = function () {
    vPutCnt = ApKanriAllPut(0) ;

    if (vPutCnt > 0) {
       location.reload();
    }

    return ;
  }
});

function ApKanriAllPut(vFlg){
  let vPutCnt = 0 ;

  //自分のアプリID
  let vMyId = kintone.app.getId() ;

  //パラメータ
  let requestParam = {
      ‘app’: vMyId ,
      ‘query’: kintone.app.getQuery()
  };

  //対象のレコードを読み込む
  kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, requestParam,
  function(resp) {
    for (let i=0 ; i < resp.records.length ; i++) {
       let vRecId = resp.records[i].レコード番号.value ;

       //パラメータ
       let requestParam1 = {
            ‘app’: vMyId ,
            ‘id’: vRecId ,
            ‘record’: {
               ‘フラグ’: {‘value’: vFlg  }
            }
       };

       //指定レコードIDを更新する
       kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, requestParam1,
         function(resp1) {
            console.log(“PUT OK”) ;
            vPutCnt = vPutCnt + 1 ;
         } ,
           function(err1) {
             console.log(“PUT NG”) ;
         }
);
}
} ,
function(err) {
console.log(“GET NG”) ;
}
)

return vPutCnt ;
}

 

ちゃいな嬢さん

「Dont’ make functions with in a loop」というエラーは、JSEdit for kintoneで使用しているリントツールが出しているエラーかと思います。
リントツールは、バグが起きやすい書き方などに対して警告してくれるツールです。

恐らく今回は、forループの中でfunction(resp1) {}やfunction(err1) {}を記述している箇所がエラーになっているのかと思います。
純粋にエラーに対処するのであれば、forループ外でfunction(resp1) {}などに名前をつけて宣言し、forループの中では呼び出しをするだけにすれば良いかと思います。

ただし今回については、レコードの一括更新のAPIを用いるよう変更するのが良いかと思います。
現状では、レコードの更新(1件)のAPI(‘/k/v1/record’)を使っていると思うので、レコードの一括更新のAPI(‘/k/v1/records’)を使う形に書き換えるのが良いかと思います。

レコードの一括更新のAPI(‘/k/v1/records’)の使い方は、ちゃいな嬢さんがご提示してくださったリンクや下記などを参考にすると良いかと思います。
https://developer.cybozu.io/hc/ja/articles/201941784#step2
https://developer.cybozu.io/hc/ja/articles/204537310

 

追加のご質問ということでしたが、話題が変わる場合は新規にスレッドを立てて頂いた方が良いかと思います。
他の方が後からご覧になることもあるかと思いますので、タイトルがついている方が探しやすいかと思います。

江田さま

話題変わったとき立てるべきでした!

立て直したのですが、何かに引っかかっているのか承認待ちで投稿できません(問合せ中)

いつ立つかわからないのですみませんがこちらに書かせてもらいます。

forループ外でfunction(resp1) {}などに名前をつけて宣言というのは、ここだけ関数にするということですか?

一括更新で行う場合は、読込みでrecordsの配列を先に作るってことですよね?

 

あと、csv出力うまく行かなくて、そちらの方に質問を入れさせてもらいました。

 

ちゃいな嬢さん

> forループ外でfunction(resp1) {}などに名前をつけて宣言というのは、ここだけ関数にするということですか?
ちゃいな嬢さんがご提示した書き方でも、関数を作成していることになります。
function(resp1) {}のような関数式を用いて関数を作成し、そのままkintone.api()の第4引数と第5引数に指定されている状態です。
forループ内で関数を作成していることによるエラーだと思うので、作成する記述だけループの外に出せばエラーは消えると思います。

> 一括更新で行う場合は、読込みでrecordsの配列を先に作るってことですよね?
申し訳ございません。「読込みで」というのがわかりませんでした。
レコード更新のAPIを実行する前にrecordsの配列を作るという意味でしたら、仰る通りです。

江田さま

最初の回答は分かったような分からないような(笑)

なんとなく理解しました。

2つ目は全てのレコード番号を取得して、配列を作成し、一括更新のパラメータに

その配列を渡せばできるって事ですね。

通常プログラミング組むのをkintoneで実現するのは大変ですね。

かなりの知識が必要だ・・ありがとうございます、助かります!