新規投稿
フォローする

日付を条件に計算フィールドの値をテーブルにコピーしたい

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

 

現在、小口現金の申請用アプリを作成しているのですが、毎月の小口残高を月が変わったときに自動で繰り越せるようにしたいと思っております。

具体的には

〆日(日付フィールド)が2022/09/30に設定されているレコード(以下 9月分)と〆日が2022/10/31に設定されているレコード(以下 10月分)があります。

現在の日付が10月1日になったタイミングで9月分にある残高(計算フィールド)の値を10月分のテーブル(申請フォーマット)1行目の支払時点残高にコピーしたいと思っております。

 

とても中途半端なところでコードが止まってしまい(1行目の取得がわからず)コードがぐちゃぐちゃな状態ではありますがご教授して頂けますと幸いです。

使用コード

(function() {
  'use strict';
     //現在日時を取得
    var now = new Date();
    var nowDate = now.getTime();

if(records( 〆日.value )< now.getTime ){
    subtable.push({
      value: {
        "残高": { value: tableRecords[i].value['10月分テーブルの一行目'].value },
     
  }
 });
    return event;
  };
})();

レコード画像

 

0

12件のコメント

Avatar
TO

nekoko

あるレコードの1行目は、

record.テーブルのフィールドコード.value[0].value

で取得できます([0]が1番め、という意味)。
ただ、要求する内容をみるに、
具体的にどのタイミング(アプリを開いた時?)でやるのか、
アプリの構造(◯月分がいっぱいあるのか、重複があるのか、など)がどうなっているか、
などによってやり方が変わってくると思います。

1
Avatar
nekoko

TO様

こんにちは、お世話になっております。

返信遅くなり申し訳ありません。

 

>あるレコードの1行目は、

record.テーブルのフィールドコード.value[0].value

で取得できます([0]が1番め、という意味)。

ご教示頂きありがとうございます。

 

>具体的にどのタイミング(アプリを開いた時?)でやるのか

10月なら10月でその月一番最初にアプリを開いた時に実装できればと思っております。

 

>アプリの構造(◯月分がいっぱいあるのか、重複があるのか、など)がどうなっているか、

現在2022年の1月~12月分までそれぞれあり、2023年になったら2023年の1月~12月分までを作成する予定です。

 

nekokoにより編集されました
0
Avatar
TO

nekoko様

・月の一番最初にアプリを開いたら実行
・12レコード/年生成,年始にレコード生成
となると,
①一覧表示後または一覧表示後にボタンをクリックしたとき(ボタンは一覧表示後に生成)
②「締め日が当月のレコード」を取得
③「締め日が前月のレコード」を取得
④前月のレコードの残金を当月のレコードのテーブル1行目にコピー
という流れでしょうか.
②,③についてはAPIでできそうに思います.

1
Avatar
nekoko

TO様

こんにちは、お世話になっております。

 

教えて頂いた流れに沿ってコードを作成していこうと思います。

①、④に関しては過去に作成したコード参考に実装できると思われます。

②、③に関してはチュートリアル等を参考に組んでみようと思います。

 

全体の流れを簡潔にまとめたうえで、ご教授して頂きありがとうございます。

分からない事が出てきましたら再度ご質問させていただきますので、その際は宜しくお願い致します。

0
Avatar
nekoko

TO様

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

 

流れに沿ってコードを作成してみたのですが上手くボタンが表示されません。

ボタン配置のみのコードはしっかりと動作することは確認できました。

助言を頂けないでしょうか。

 

(コード)

(() => {
  'use strict';
  //現在日時を取得
    var now = new Date();
    var nowDate = now.getTime();
 //1ボタンの設置
  kintone.events.on('app.record.index.show', (event) => {
    if (document.getElementById('my_index_button') !== null) {
    }
    const myIndexButton = document.createElement('button');
    myIndexButton.id = 'my_index_button';
    myIndexButton.innerText = '繰越ボタン';
    //2当月のレコードを取得
    kintone.app.getFieldElements(now.getTime = '〆日' );
    //3前月のレコードを取得
 kintone.app.getFieldElements('〆日' < now.getTime-'months', 1 );
    //4 ボタンクリック時の処理
    myIndexButton.onclick = () => {
     kintone.app.record.set(record.申請フォーマット.value[7].value
    )};
     kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
     return event;
  });
})();

 

エラー

一つ目のエラー(Uncaught SyntaxError: Unexpected token '}')

 kintone.app.getFieldElements('〆日' < now.getTime-'months', 1 );

二つ目のエラー(index.js:125

{throw a;},0)},dl=function(a,b){al||bl();cl||(al(),cl=!0);Wk.add(a,b)},bl=function(){if(m.Promise&&m.Promise.resolve){var a=m.Promise.resolve(void 0);al=function(){a.then(el)}}else al=function(){var b=el;"function"!==typeof m.setImmediate||

 

宜しくお願い致します。

 

nekokoにより編集されました
0
Avatar
TO

nekoko様

kintone.app.getFieldElements(now.getTime = '〆日' );

getFieldElementsにはフィールドコードしか指定できないのですが,これだとフィールドコードの指定になっていないと思います.
レコード一覧情報取得(…の「フィールド要素を取得する」参照)
当月も同様と思います.

ボタン押して…となると,event.recordsが使えないので,
APIを使って,
”フィールドコード「〆め日」の値が先月末から今月末”
という条件(クエリ)でレコードを取得(GET)します.
レコードの取得(GET)
(引用は一括取得ですが,1件ずつ取得する(前月,当月で2回分)でも良いと思います)
GETさえできれば,あとは値を格納してAPIでPUTするような流れになるのかな?と思います.
ちなみにrecord.setは一覧画面では使えないみたいです.
レコード詳細情報取得(…の「レコードに値をセットする」の利用できる画面に一覧画面はありませんでした)

「ボタン」ならこうなりますが,アプリ起動時であれば,revent.recordsでレコード情報が取得(表示されているだけ)できて,
値をセットするのもreturn eventで済むので,楽といえば楽です.

どちらが良いかは,nekokoさんの環境などを加味して検討ください.

1
Avatar
nekoko

TO

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

環境上、ボタンを設置しての運営の方が使い勝手が良いので貼ってくださったリンクを参考にボタンを設置しようと思います。

 

>ちなみにrecord.setは一覧画面では使えないみたいです。
レコード詳細情報取得(…の「レコードに値をセットする」の利用できる画面に一覧画面はありませんでした)

この件に関してなのですが、ボタンを詳細画面に設置する場合には、 record.set は使用することが出来るのでしょうか。

nekokoにより編集されました
0
Avatar
TO

nekoko

レコード詳細情報取得
ここにある通り、record.setは追加、編集でしか使えないようです。

詳細画面でも、一覧画面(ボタンなら)でもAPIのPUTを使うことになると思います。
レコードの更新(PUT)

1
Avatar
nekoko

TO

お世話になってります。

返信遅くなり申し訳ございません。

 

record.set は使用できないとの事ですので教えて頂いたリンクを参考にAPIのPUTを用いてコードを作成していこうと思います。

リンク付きでのご教授ありがとうございます。

 

0
Avatar
nekoko

TO様 

お世話になっております

 

メインで使用する者とはなし、レコードの編集画面にボタンを配置することになり、コードの作成をしたのですが複数エラーが出ており、現在修正をしている状況です。18行目 getQuery(〆日 = THIS_MONTH(LAST)); にて

Uncaught ReferenceError: THIS_MONTH is not defined at myIndexButton.onclick

というエラーが出ており、このエラーだけ修正することが出来ておりません。

また取得した現在日時をIF条件に組み込む必要があるのでしょうか。

ご教授して頂けますと幸いです。

 

(() => {
  'use strict';
  //現在日時を取得
    var now = new Date();
    var nowDate = now.getTime();
 
 //1ボタンの設置
    kintone.events.on('app.record.edit.show', (event) => {
    // メニューの上側の空白部分にボタンを設置
    const myIndexButton = document.createElement('button');
    myIndexButton.id = 'my_index_button';
    myIndexButton.innerText = '繰越';
    
    //ボタンクリック時の処理
    myIndexButton.onclick = () => {
      
      //当月のレコードを取得
 kintone.app.getQuery(〆日 = THIS_MONTH(LAST));
    
    //前月のレコードを取得
 kintone.app.getQuery(〆日 = LAST_MONTH(LAST));
 ///条件付き処理
 if (〆日 = THIS_MONTH(LAST)) {
 if (〆日 = LAST_MONTH(LAST)) {
var record = kintone.app.record.get(残高);
    kintone.app.record.set(record.入金記録.value[7].value = '残高' )};
  };
  };
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);
return event;
  
});
})();

 

 

nekokoにより編集されました
0
Avatar
TO

nekoko様

getQueryには引数が無いようです.
kintone.app.getQuery

また,kintone.app.record.get,setもコードの記載が適切ではないようです.
レコード詳細情報取得

上記を参考にされると良いかと思います.

1
Avatar
nekoko

TO様 

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

>getQueryには引数が無いようです.

そうだったのですね、引数があると思っておりました。

 

教えて頂いたリンクを見ながら一つ一つコードを作成していこうと思います。

 

何度も質問に答えて頂きありがとうございます。

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