初心者で申し訳ないのですが、色々調べたのですが分からず
ご存じの方がいましたら教えていただけますでしょうか。
現在カスタムビューを現在作成しているのですが、最終系は下記カスタムビューの
各セルに計算された数値をセットしたいのですが、その前段として赤枠に部分に
数値をセットしたいと思っておりますが、表示されない状況です。
※2013年1月のセル計算式 ⇒ 各レコードの合計(期間指定含む 2013年1月)
※2013年2月のセル計算式 ⇒ 各レコードの合計(期間指定含む 2013年2月)
※対年1月のセル計算式 ⇒ 2013年1月の各レコードの合計 / 2013年の各レコードの合計 (パーセント表示)
※売上の月部分(行)と売上の縦列は固定としたいです。
※デバックすると「ReferenceError: row is not defined」で行が定義できていない?
■HTML
<div id="my-customized-view">
<table border="1">
<colgroup><col id = "data"><col id = "Place"></colgroup>
<colgroup><col id = span = "12" id ="count"></colgroup>
<tr>
<th>売上</th>
<th>1月</th><th>2月</th><th>3月</th><th>4月</th><th>5月</th><th>6月</th>
<th>7月</th><th>8月</th><th>9月</th><th>10月</th><th>11月</th><th>12月</th>
</tr>
<tbody id="my-tbody2013">
<tr>
<td>2013年</td>
<td></td><td></td><td>3</td><td>4</td><td>5</td><td>6</td>
<td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td>
</tr>
</tbody>
<tbody id="my-tbody2013T">
<tr>
<td>対年</td>
<td></td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td>
<td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td>
</tr>
</tbody>
<tr>
<td>対前年</td>
<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td>
<td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td>
</tr>
<tr>
<td>2014年</td>
<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td>
<td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td>
</tr>
<tr>
<td>対年</td>
<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td>
<td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td>
</tr>
<tr>
<td>対前年</td>
<td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td>
<td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td>
</tr>
</table>
</div>
■JavaScript
※セル1つにすら表示させることができず。。。。
(function() {
"use strict";
kintone.events.on('app.record.index.show', function(event) {
if (!document.getElementById('my-customized-view')) { //102cus HTMLとイコールにする。
return;
}
var records = event.records;
if (records.length === 0) {
document.getElementById('my-customized-view').innerText = '表示するレコードがありません';
return;
}
//※※※※※※※※※※
var myRecordSpace = document.getElementById('my-tbody2013');
myRecordSpace.innerText = '';
var cell2 = row.insertCell(1);
cell2.innerText = record.小計1.value;
}
);
})();
宜しくお願いいたします。
18件のコメント
t.satoさん
お世話になっております。
仰る通り、rowが定義されていないのかと思います。
今回のようにHTMLの記述で既に<td>要素まで作成している場合は、row.insertCell()で追加の作成はせずに、getElementsByTagName()などで取得するとよいかと思います。
HTMLで<td>要素に id 属性を付き、
それを document.getElementById()でアクセスするやり方もあると思います。
江田様
お世話になっております。
早速のご返信ありがとうございます。
お教えいただきました、getElementsByTagName()を使用して 2013年行の1月、2月、3月とテストで表示させることができました。
すみません追加でご質問させていただきたいのですが、、、、

カスタムビューを表示する同じアプリ内に、見積合計のフィールドがありまして表示させようとすると
以下のように表示されない状態になってしまいます。(goukei2013で宣言)
※「Uncaught TypeError: Cannot read property '見積合計' of undefined」プロパティに問題あり?
※「見積合計」は各フィールド「小計1~20」を合計したフィールドになります(テーブル未使用)
最終的に見積日から年度を取得し、集計したいのですが、この場合「query」などを使った方が
集計しやすいのでしょうか(まだquery部分はわからないところもあり使ったことがありません。。)
宜しくお願いいたします。
Lorenz Ras様
お世話になっております。
先日に引き続きありがとうございます。
勉強不足で申し訳ないのですが、document.getElementById()を使うとき、
<td id = 〇〇>みたいな形で、1ずつ割り当てていくイメージでしょうか?
t.sato様
そうです。そのほかに .rows() と .cells() の組み合わせもできます。
https://developer.mozilla.org/ja/docs/Web/HTML/Element/table
console.log(event); の結果は何でしょうか。
日本語をまだ勉強中ですみません。
Lorenz Ras様
お世話になっております。
日本語お上手です、コメントいただいた内容は理解できますので安心してください。
色々と情報ありがとうございます。参考にさせていただきます。
↓ご質問いただきました件ですが、、、
>console.log(event); の結果は何でしょうか。
こちらの件は、色々調べたところ、以下のように修正いたしましたが、
■修正前
var goukei2013 = Number(record['見積合計'].value);
■修正後
var goukei2013 = Number(record[見積合計].value);
新たにConsoleで確認したところ「Uncaught ReferenceError: 見積合計 is not defined」と表示されました。
アプリ内で、加算されているフィールドは、直接使用することはできないのでしょうか?
t.sato様
というエラーでしたら、フィールドコードが間違っているか、呼び方がeventのJSONの構造にあっていないことだと思います。
その文法ですと、コンパイラーが変数型として見えるので、宣言されていない変数型というエラーが出ます。以下のコードでそのエラーがなくなると思います。
文法は以下のいずれも出来ます。結果は同じです。
で、イベントのJSONリスポンスのスキーマ(構造?)が分かります。
app.record.index.showというイベントなら、event.recordではなくevent.recordsがあっていると思います。
console.log(event); で、フィールドコードも確認しましょう。
Lorenz Ras様
お世話になっております。
すみません、console.log(event); はどのように使えば良いですか?
エラーの内容はいつもGoogleChromeのデバックモードのConsoleから確認していました。
現状の内容は以下のような感じです。
緑色の部分は、値が表示されていますが、
赤は表示されず、その影響でオレンジも表示されない状況です。
以下内容が、GoogleChromeのデバックモードのConsoleから確認した内容です。
下記が、一覧に表示させたい「見積合計」のフィールドになります。
t.sato様
recordは宣伝されていないようです。
var records と違います。
そして、このコードは
record[見積合計].value
以下のコードに
records[0]['見積合計'].value
変化してみてください。
[0] は 配列から頭のレコードを取得します。全部取得したいなら、
反復処理が必要です。https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Loops_and_iteration
そしてrecords の 内容を確認てください。
確認するには、var records ... 宣言の下にconsole.log(records)を追加し、GoogleChromeのデバックモードのConsoleでrecordsの行を開いてください。
console.log()のメソッドは主に、渡された値をコンソールに表示するために使用します。これで、返ってきたeventのJSONの内容を確認することが出来ます。そこから、どういう風に欲しい値を取得出来るかわかります。
わかりづらい日本語で申し訳ございません。
Lorenz Ras様
お世話になっております。
返信ありがとうございます。console.log()の件、records[0]の件、意味を理解でき表示できました。
今は、レコードの「見積合計」を全部取得したいので、反復処理を作成しているのですが、
本来、9500と表示して欲しいのですが、3000と6500が文字列として??で表示されます。
コードは以下の通りなのですが、numberやparseIntも使ってみたのですが、うまく表示されませんでした。
お手数おかけしますが教えていただけますでしょうか。
t.sato様
「見積合計」の内容を確認してください。undefined があるかもしれません。
対策としてこのコードは
このコードに変化してみてください。
「見積合計」は数字じゃないものがあると、また違う対策が必要です。
Lorenz Ras様
いつもお世話になっております。
下記の内容に変更しましたが、変わりない状況でした。
goukei2013 += record['見積合計'].value || 0;
見積合計のフィールドは計算タイプにしており、
まだテスト段階で、2レコードのみで 3000 と 6500 のみになりまして
文字は入力されていない状況です。
他の対策が必要な形でしょうか。。
文字列(1行)の計算タイプですか。
本当に数字だけなら、
で十分だと思います。+record['見積合計'].value の + は 文字列 → 数値 の効果があります。
Lorenz Ras様
ご連絡ありがとうございます。
下記のいただいたコードで記載しましたが、変わりませんでした。。。。
文字列(1行)タイプは使っておらず、数値か計算タイプとなります。
kintone上で設定している内容は以下の通りですが、わかりますでしょうか。
t.sato様
内容は大丈夫そうですね。
宣言の問題でしょう。
このコードは
var goukei2013 = '';
ストリングになっていますので、このコードに
変更してみてください。
Lorenz Ras様
いつもありがとうございます。
ご指摘通り変更したところ無事集計されました。大変勉強になりました。
すみません、集計の件でアドバイスをいただきたいのですが・・・
今回のカスタムビューは、各セルに対して、kintoneの対象フィールドを全レコード取得し、
その中で日付を指定して抽出したいのですが、どのようか方法がいいのでしょうか。
現状のコードは以下の通りなのですが、for文を2回繰り返す形でしょうか?
使ったことはないのですが、「query」を使用??
日付取得は以下のイメージでして、見積日を元に期間指定した見積合計数を取得したいと思っています。
2021-05-01 ~ 2021-05-01 合計8000円
2021-06-01 ~ 2021-06-30 合計5000円
宜しくお願いいたします。
t.sato様
レコードは100以下ならfor文で十分だと思います。
Lorenz Ras様
返信遅くなりました、いつもありがとうございます。
レコードは、1年間で集計すると10倍の1000件程度になりそうです。
他の年度も対象とすると1000件以上はなりそうですが、その場合は、
以下のgetAllRecordsか、カーソルAPIと言う認識でしょうか?
※getAllRecordsの方が私には優しいかもしれないですね・・・
■getAllRecords
■カーソルAPI
https://developer.cybozu.io/hc/ja/articles/360031191791#use_cursor