ユーザー選択のレコード取得時のqueryについて

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

タイトルの件について、kintone Utility for JavaScriptを使用し、値のカウントを行っております。

現在下記のようなコードで設定していますが、ユーザー選択のレコード取得が出来ない状況です。

※下記コードだと0件で表示されます。

kintoneUtility.rest.getAllRecordsByQuery(param).then(function(resp) {
    var Count1 = resp.records.filter(function(data){ return data.ユーザー選択.value === "山田 太郎";}).length;
    var Count2 = resp.records.filter(function(data){ return data.ユーザー選択.value === "山田 花子";}).length;
    console.log(Count1 + "件");
    console.log(Count2 + "件");
}).catch(function(error) {
    window.alert(error.message);
});

ユーザー選択フィールドの場合の指定方法についてご教授いただければ幸いでございます。

よろしくお願いいたします。

2つ確認ないし修正された方がいいポイントがあると思います。

 

1つめはタイトルの通りparamsにセットされているであろうqueryは意図通りセットされいるかどうか。クエリについてはドキュメント通り指定できているか確認されると良いかと思います。また、一覧の絞り込み設定を使ってクエリを導く方法も有用ですのでチェックされると良いと思います。

 

2つめはユーザー選択の値の取得の方法です。ユーザー選択フィールドは複数の値をセットできるフィールドですので、ユーザー選択.valueは配列になっています。さらに配列の要素の各オブジェクトはcodeとname(今回はnameを使うことになりそうですね)を持っています。正しく値を取得するには、consoleにdataを出したり、フィールド形式のドキュメントを確認しながら進められるのが良いと思います。

Ryu Yamashita様

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

アドバイスいただきました下記について

1つめparamsのqueryは意図通りセットができておりまりました。※ユーザー選択以外のフィールドはカウントが出来ていました。

2つめについて、ご教授いただいたページを参考に下記のように書き換えたところ

var Count1 = resp.records.filter(function(data){ return data.ユーザー選択.value[0].name === "山田 太郎";}).length;
var Count2 = resp.records.filter(function(data){ return data.ユーザー選択.value[0].name === "山田 花子";}).length;

「data.ユーザー選択.value[0] is undefined」とエラーが出ました。

上記エラーは指定のユーザー名が無いということでしょうか?

度々申し訳ございませんが、再度ご確認いただければ幸いでございます。

よろしくお願いいたします。

 

 

undefinedの原因はおっしゃる通りだと想像します。

value.lengthが0だとそうなりますので、0より大きいかどうか(もしくは1の時)の判定は入れた方がいいと思います。

Ryu Yamashita様

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

確かに、ユーザー選択フィールドにいくつか空白があるので、それが原因だと思いました。

判定の指定方法ですが、

var Count1 = resp.records.filter(function(data){ return (data.担当者.value.length > 0) ? data.ユーザー選択.value[0].name === "山田 太郎";}).length;
var Count2 = resp.records.filter(function(data){ return (data.担当者.value[0].name !== undefined) ? data.ユーザー選択.value[0].name === "山田 花子";}).length

上記のように2方法で試したのですがどちらも「SyntaxError: missing : in conditional expression」とエラーが出ました。

判定方法について、ご教授いただければ幸いでございます。

度々申し訳ございませんが、ご確認の程、よろしくお願いいたします。

 

> SyntaxError: missing : in conditional expression

三項演算子の使い方が間違っていることによるエラーメッセージですが、

エラーが出たら出た箇所の正しい記述方法(今回だと演算子の使い方)をチェックしたり、エラーメッセージから原因を調べるようにしましょう。

Ryu Yamashita様

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

三項演算子について調べると、確かに記述方法が下記のようになるので、

=【真偽値式】?【真の式】:【偽の式】

var user1 = resp.records.filter(function(data){ return (data.担当者.length > 0) ? data.担当者.value[0].name === "山田 太郎": 0;}).length;

仮に上記で設定した場合、0で値が返されました。

三項演算子を使用した場合、真偽値式の判定で1レコードどとではなくどちらか(真偽)の式にしか対応しないとなると

この方法での値のカウントは出来ないということでしょうか。

その場合、paramsに設定しているqueryでユーザー選択フィールドに空白がないように絞込をする方法しかないのでしょうか。

お手数でございますが、アドバイスいただければ幸いでございます。

よろしくお願いいたします。

filterに対しては、trueかfalseを返すことになるので、0の部分はfalseにすることになると思います。

 

> その場合、paramsに設定しているqueryでユーザー選択フィールドに空白がないように絞込をする方法しかないのでしょうか。

クエリであらかじめ絞るのもアリだと思いますが、取得データを絞り込むことが多いように感じます。

Ryu Yamashita様

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

本件について、paramsに設定しているqueryで絞込をし、設定が出来ました。

取得データを絞り込む方法については、もう少し三項演算子の記述方法等を勉強し、設定したいと思います。

ありがとうございました。今後ともよろしくお願いいたします。