キンコミ kintone user community

みんなの投稿

2022/12/28 21:55

複数subTable間で表示用のフィールド名が重なるCSVデータのアップロードエラー 回避方法伺い;



添付の図に示すように、1月から12月までの月毎のカラムを含むようなsubTableが複数有るkintone-formにSubTableのデータをkintone画面から入力した状態で、
kintoneの機能でCSVダウンロード出力した後、csvアップロードしたら、GAIA_II02エラーになって、CSVアップロードできませんでした。
つきましては、後段の回避処置より ベターな 回避処置を教示いただけませんでしょうか?
また、kintoneに仕様改善を要望できそうな 方策も教示いただければ、幸いです。

<問題現象>

以下のエラーが発生しました。手元のファイルを修正して再度アップロードしてください。
GAIA_II02: ファイルの2行目に、複数のテーブルの値が含まれています。

また、Kintoneのドキュメント不備として、GAIA_II02の説明が無い。
さらに、GAIA_II02のメッセージテキストと、私の使ったデータとに齟齬が在ります。
使ったCSVファイルは、KIntoneからダウンロードしたファイルで、4個あるSUBTABLEのデータが 同一レコードには入って居ません。 CSVファイル中の1個目のsubTableの”4月”のフィールドが、kintoneサーバ側の4個のSUBTABLE中の各々の”4月”のフィールドにマッチしてしまったのを、GAIA_II02の発生条件と誤認識しているようです。
<回避失敗した 操作>
CSVファイル中の4個のSUBTableの列を 一つ一つのファイルに分割し、4個のSUBTABLEへのCSVアップロードを4回に分けてアップロードした場合、CSVファイル内の1行目の見出し行には 重複する見出しを無くしているにも関わらず、CSVファイル中の1個目のsubTableの”4月”のフィールドが、kintoneサーバ側の4個のSUBTABLE中の各々の”4月”のフィールドにマッチしてしまったったようで、GAIA_II02エラーになりました。
<回避できたが、可成り面倒な操作方法>
kintoneからダウンロードしたCSVファイルの1行目の見出しが、kintone画面定義での表示用の”フィールド名”となっている処を、フィールドコードに書換、kintoneのCSVアップロード画面で、各々のフィールドコードをkintoneのフィールド名に対応付けて、アップロードすると、アップロード出来ました。
ただし、この方法では、月毎の1年分のsubTableが4個ある場合、48個ものフィールドコードとフィールド名の対応付けをEXCEL-CSVファイル編集操作と、kintoneのCSVアップロード操作とで 何度も 操作しなければならず、可成り 面倒でした。

2件のコメント (新着順)

後からすみません。GAIA_II02の説明があったのでココにお知らせします。
https://jp.cybozu.help/k/ja/id/040726.html#import_records_import_recors_failed_1030

・エラーメッセージ
GAIA_II02:ファイルのXX行目に、複数のテーブルの値が含まれています。



・対処方法
読み込むファイルでは、1行に複数のテーブルの値を記載しないようにしてください。


2023/01/05 15:40

私はKintoneの仕様不備だと思うのだが、、、問題現象を 誤認識されている方もいらっしゃるようなので、補足しておきます。
これで、「仕様改善要望の投票が増える」とか「仕様改善要望が受け入れやすい対策案」とかが出てくることを期待します。

<問題現象の再現手順1>
・同名のフィールドコードを含むsubTableを2個以上含むようなkintoneフォームを作り、2個のsubTableにデータを登録する。
 (例えば{4月、5月}のような12か月分の見出しを2対)
・KintoneのCSVファイル出力機能で、CSVファイルをダウンーロする。
・ダウンロードしたCSVファイルの4行目削除する。
 これによって、
 1行目は、見出し行。
 2行目は、subTableを除く フォームの主データで、二つのsubTableに対応する列は空
 3行目名、1番目のsubTableに対応するデータが含まれるが、2番目以降のsubTabeに対応する列は空
 つまり、見出しだけは複数のsubTableの見出しが含まれるが、GAIA_II02エラーの説明にあった「読み込むファイルでは、1行に複数のテーブルの値を記載しないようにしてください」という条件に反していないデータです。



・CSVファイルの読み込みの設定と進め、添付のように、自動的に見出しとフォームのフィールドの対応付けが抽出されたことを確認。※この段階で、kintoneの自動的なmappingの挙動が怪しい。
・CSVファイル読み込みボタンを押すと、1番目のsubTableのデータしか含まれていない2行目に対して、下記のエラーメッセージがでました。

以下のエラーが発生しました。手元のファイルを修正して再度アップロードしてください。
GAIA_II02: ファイルの2行目に、複数のテーブルの値が含まれています。

<問題現象の再現手順2>
・上記データから さらに、2番目以降のsubTableに対応する列を、見出しごと 全行削除し、kintoneのCSV設定画面で、1番目のsubTableに対応するフィールドへのCSVカラムの対応付けが無い状態のデータを作る。
・kintoneフォームのフィールド名に対するCSVカラムの対応付けを、kintoneによる自動的な対応付けに任せと、CSVファイル中には1番目のsubTable分の見出ししか含まれてないのに、2番目のsubTableの同名のフィールド名に対応付けされること”モ”ある。
※これが、仕様不備による誤動作の始まり。
・CSVファイルの読み込みをボタンを押すと、GAIA_II02エラーになる。

こんにちは!
推測するに、ᴂさんはkintone以外でデータベース構築あるいは管理のご経験があり、お詳しいのではないかと思います。
kintoneで他のデータベースと全く同様のものを再現しようとするのは、そもそもの「考え方」が異なりますので、kintoneはkintoneだと割り切ってkintoneのデータの持ち方に合わせた構成を検討されると、うまくいくと思います。

◆エラーの原因と対応について
さて私で分かる限りで(ユーザー個人の意見と思ってください)回答します。
まず、CSVアップロード時に、CSVファイルの1行目と文言が一致する「フィールド名」を自動でマッピングしてくれるのは、kintoneの仕様の一つです。非エンジニアからしてみると便利な機能の一つ、と私は思っています。
実際にやってみられているので理解されていると思いますが、同じフィールド名が2つ以上あればランダム自動マッピングされますので、同じCSV内に同じフィールド名が含まれていれば、思った通りにいかないこともあります。
一番シンプルなのは、全てのフィールド名を一意にすることですが、キャプチャを拝見すると、おそらくそうしてしまうとユーザーからして見づらい見た目になると思います。
今の通りの構成でいきたいのであれば、お示しの<回避できたがかなり面倒な方法>でやることになりますが、現実的ではないと思いますので、後ほど一つ案をお伝えします。

◆エラーの原因としてもう一つ考えられることと
「ダウンロードしたCSVをアップロードしたらエラーになった」とのことですが、ダウンロードしたCSVファイルの行を削除したり統合したりされていないでしょうか?
下記ヘルプに、テーブルが複数ある場合の注意点が書かれています。
当てはまることがあれば、修正したうえで上記フィールド名の問題を解決すればうまくいくのではないかと思います。

https://jp.cybozu.help/k/ja/user/using_app/import_records/import_file_table.html#import_records_import_file_table_1020

◆提案
キャプチャを見ただけだとどんな業務に使うアプリなのかは分かりませんが、
絶対にテーブルが4つある構成にしないといけないでしょうか?
各テーブルには「メニュー」「単位」「月(年月?)」と、同じ項目が並んでいるように見えますので、
このテーブルの1行に入力している情報を1レコードとして登録する別のアプリを用意されてはいかがでしょうか。
4月、5月…もフィールドにするのではなく、日付フィールドで入力するようにして、
4つのテーブルに分けられるように分類用の項目などをドロップダウンなどで何か用意して、元のアプリには関連レコード一覧で表示させる方法では解決できないでしょうか。
そうすると、1つのCSVにテーブルが複数…という形ではなく、レコードの最小単位が1行になるので、複雑な作りのCSVファイルを作らなくてよくなるのではないかと思います。
一つのアプリに全ての情報入力フォームを集約しようとするのではなく、入力と表示を別のアプリで作ってみると
いう考え方も一つではないかと思います。



【参考ヘルプ】
https://jp.cybozu.help/k/ja/user/using_app/import_records/import_csv.html

https://jp.cybozu.help/k/ja/trouble_shooting/app_qa/export_table.html

https://jp.cybozu.help/k/ja/user/app_settings/form/related_records/set_relatedrecords.html




2023/01/04 15:51

応答 ありがとうございます。
ですが、冒頭に示した<回避できたが、可成り面倒な操作方法>より工数削減できそうな方策の提案は 未だなようですね。

ただ、「12か月分の4系統の情報を入力するフィールドとしてsubTableを用いる」という方式だと、「アプリのレコード長の上限が1Mバイト未満」という制約から派生して、subTableの上限行数が2百行前後(4系統毎subTableの平均行数は約50)だということも分かってきたので、何時かは関連テーブル化するような再設計も必要になろうか、、、とも思います。
(※中小規模の会社でも取引先の会社数や消費素材種が50件という制限では、実用性に欠けると言えるでしょう)

でも、例えば「CRUD更新可能な関連レコード・プラグイン」的なモノの要件として、下記のようなsubTableの良さの継承を想定するなら、その開発コストは<回避できたが、可成り面倒な操作方法>の手間を遥かに超えるでしょう。

・CRUD更新可能な関連レコードの追加仕掛状態や削除仕掛状態で、宙に浮いたガベーッジ・レコードが生じないこと。 あるいは、もし宙に浮いたガベーッジ・レコードが発生したら、削除ツールも実装するコト。
・主たるフォームの一つのレコードを、同時期に複数の利用者が更新しうるが、「楽観的排他制御による先勝ち格納」等、ガベーッジ・レコードも発生しないように、更新制御された、表のCRUD UIの実装であること。
・CRUD更新可能な関連レコード用の入力用フィールドの項目定義において、関連レコードをストアするアプリのフォーム定義との整合性を確保できること(アプリ側で必須な項目は、表中でも必須カラムとなること等)
・CRUD更新可能な関連レコードの追加時、ユニークキー制約違反等を、主フォームの保存前にリジェクトできるコト。
・主たるフォームのアプリのレコードの履歴機能と連動して、古い時期のCRUD更新可能な関連レコードの組み合わせ内容を復元して、参照制約の維持ができるコト。
 ※このロールバック的な機能は、ワークフロー的な状態管理機能と組みあわせる為には、重要な要件です。

こうゆう派生的な面倒さも考えると、、ヤハリ、、、kintoneに仕様改善を要望できそうな 方策に傾けたほうが良いでしょうか?