いつもお世話になっております。
サブテーブルの入力内容を下記のようにフィールドコードで取得しているのですが、フィールドコードが多い場合にコードの入力が面倒に感じております。
サブテーブルで使用しているフィールドコード名を簡単に取得できればと思ったのですが、方法はありますでしょうか。
data[i][0] = record.テーブル.value[i].value.フィールドコード.value;
いつもお世話になっております。
サブテーブルの入力内容を下記のようにフィールドコードで取得しているのですが、フィールドコードが多い場合にコードの入力が面倒に感じております。
サブテーブルで使用しているフィールドコード名を簡単に取得できればと思ったのですが、方法はありますでしょうか。
data[i][0] = record.テーブル.value[i].value.フィールドコード.value;
let fieldColumns = Object.keys(record['テーブル'].value[0]?.value || {});
こちらでサブテーブルのフィールドが配列で取得できます。1行目の連想配列を取得する形になっているので、1行目が存在しない状態だと取得できません(サブテーブルを含まないcsvインポートや、後からフォーム設定で追加したサブテーブルは0行のデータになっているので、そのままdetail.showイベントで使用すると取得できません)。
もしくはforループで都度サブテーブルのフィールドコードから書いていくのが手間ということでしょうか?それであればforEachを使用すれば
record['テーブル'].value.forEach((row, index) => {
data[index][0] = row.value['フィールドコード'].value; // このrowはforループの「record['テーブル'].value[i]」と同じ意味で、indexは配列のインデックス番号です
});
こんな感じで使用できます。
mls-hashimoto様コメントいただきましてありがとうございます。
説明不足で大変申し訳ございません。
前後のコードを省略しておりましたが、実際にはforループでコードを書いておりました。
例えば、テーブルが10列ある場合は下記のようにコードを書いており、フィールドコードが変更となった場合や他のアプリで流用する場合にフィールドコードを修正したりするのが面倒に思っておりました。
for (let i = 0; i < tablerow; i++) {
data[i][0] = record.テーブル.value[i].value.フィールドコード1.value;
data[i][1] = record.テーブル.value[i].value.フィールドコード2.value;
data[i][2] = record.テーブル.value[i].value.フィールドコード3.value;
data[i][3] = record.テーブル.value[i].value.フィールドコード4.value;
data[i][4] = record.テーブル.value[i].value.フィールドコード5.value;
data[i][5] = record.テーブル.value[i].value.フィールドコード6.value;
data[i][6] = record.テーブル.value[i].value.フィールドコード7.value;
data[i][7] = record.テーブル.value[i].value.フィールドコード8.value;
data[i][8] = record.テーブル.value[i].value.フィールドコード9.value;
data[i][9] = record.テーブル.value[i].value.フィールドコード10.value;
}
もし下記のようにフィールドコードを取得できれば、テーブルの全データを簡単に取得できると思い質問させていただきました。
//フィールドコード名を取得
for (let i = 0; i < tablerow; i++) {
fieldcode[i] = record.テーブル.value[i].フィールドコード名;
}
//テーブルデータを多次元配列に入れる
for (let i = 0; i < tablerow; i++) {
for (let j = 0; j < fieldcode.length; j++) {
data[i][j] = record.テーブル.value[i].value.fieldcode[j].value;
}
}
konno さま
それであれば、私が記載した内容で問題ないかと思います。勘違いがあったら申し訳ありません。
let data = [];
let fieldColumns = Object.keys(record['テーブル'].value[0]?.value || {});
record['テーブル'].value.forEach((row, index) => {
data[index] = [];
fieldColumns.forEach((fieldCode, fieldIndex) => {
data[index][fieldIndex] = row.value[fieldCode].value;
});
});
console.log(data);
mls-hashimoto様、コメントいただきありがとうございました。
教えていただいたコードで解決できました。
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。