質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

4251閲覧

kintone JSを使ってCSVインポートとUPSERT処理を行いたい。

k.taka_cam

総合スコア15

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

1クリップ

投稿2018/12/21 03:21

編集2018/12/21 06:24

前提・実現したいこと

お世話になります。
初心者ながら失礼致します。

現在、kintone JSを使ってCSVインポートを行いたいと考えております。
実現したいことに関しては、下記の通りです。

1/ CSVインポートを行う。CSV外部ファイルをインポートする。主キーは、【quote_number】
2/ POSTボタンを押下した時点で、quote_numberがある場合は、上書きを行い、
ない場合は、新規で登録したい。

こういった処理が初めてなことで、色々と学びながら実現をしたいです。

ご教示頂けましたら幸いです。宜しくお願いいたします。

該当のソースコード

javascript

1jQuery.noConflict(); 2(function ($) { 3 "use strict"; 4 5 kintone.events.on(['app.record.index.show'], function (event) { 6 var appId = event.appId; 7 8 //ダイアログでファイルが選択された時の処理 9 $('#selfile').bind('change', function (evt) { 10 //読み込んだファイルをテキストエリアに表示 11 var reader = new FileReader(); 12 reader.readAsText(evt.target.files[0]); 13 reader.onerror = function () { 14 alert('ファイル読み取りに失敗しました') 15 } 16 reader.onload = function (ev) { 17 $('textarea[name=\"txt\"]').val(reader.result); 18 }; 19 }); 20 //「post」ボタン押下時の処理 21 $('#post_btn').bind('click', function () { 22 var text_val = $('textarea[name=\"txt\"]').val(); 23 text_val = text_val.replace(/"/g, ""); 24 var jsonArray = csv2json(text_val.split('\n')); 25 var obj = []; 26 var j = 0; 27 for (var i = 0; i < jsonArray.length; i++) { 28 if (jsonArray[i]['quote_number']) { 29 j++ 30 obj[j - 1] = { 31 'app': appId, 32 'records': [{ 33 'quote_number': { 34 type: 'SINGLE_LINE_TEXT', 35 value: jsonArray[i]['quote_number'] 36 }, 37 'contract_amount' : { 38 type: 'NUMBER', 39 value: jsonArray[i]['contract_amount'] 40 } 41 }] 42 } 43 } 44 } 45 if (window.confirm('データを登録します。よろしいでしょうか?')) { 46 // ログアプリへの登録処理 47 kintone.api('/k/v1/records', 'POST', { 48 app: appId, 49 records: obj 50 }, function (resp) { 51 location.reload(); 52 }); 53 } else { 54 window.alert('キャンセルされました'); // 警告ダイアログを表示 55 } 56 }); 57 //パース処理 58 function csv2json(csvArray) { 59 var jsonArray = []; 60 var items = csvArray[0].split(','); 61 for (var i = 1; i < csvArray.length; i++) { 62 var a_line = {}; 63 var csvArrayD = csvArray[i].split(','); 64 // 各データをループ処理する 65 for (var j = 0; j < items.length; j++) { 66 //要素名:items[j] 67 //データ:csvArrayD[j] 68 a_line[items[j]] = csvArrayD[j]; 69 } 70 jsonArray.push(a_line); 71 } 72 return jsonArray; 73 } 74 }); 75})(jQuery);

試したこと

一つ一つ考えるために、上記のコードにしてみました。
その後デバック操作で確認をしてみましたら、登録処理の箇所でエラーが発生しておりました。

イメージ説明

補足情報

下記のコードにすることで、まずは外部のCSVファイルのインポート(POST)は出来ました。

javascript

1jQuery.noConflict(); 2(function ($) { 3 "use strict"; 4 5 kintone.events.on(['app.record.index.show'], function (event) { 6 var appId = event.appId; 7 8 //ダイアログでファイルが選択された時の処理 9 $('#selfile').bind('change', function (evt) { 10 //読み込んだファイルをテキストエリアに表示 11 var reader = new FileReader(); 12 reader.readAsText(evt.target.files[0]); 13 reader.onerror = function () { 14 alert('ファイル読み取りに失敗しました') 15 } 16 reader.onload = function (ev) { 17 $('textarea[name=\"txt\"]').val(reader.result); 18 }; 19 }); 20 //「post」ボタン押下時の処理 21 $('#post_btn').bind('click', function () { 22 var text_val = $('textarea[name=\"txt\"]').val(); 23 text_val = text_val.replace(/"/g, ""); 24 var jsonArray = csv2json(text_val.split('\n')); 25 var obj = [] 26 for (var i = 0; i < jsonArray.length; i++) { 27 if (jsonArray[i]['quote_number']) { 28 obj[i] = { 29 'quote_number': { 30 value: jsonArray[i]['quote_number'] 31 }, 32 'contract_amount': { 33 value: jsonArray[i]['contract_amount'] 34 }, 35 36 } 37 } 38 } 39 if (window.confirm('データを登録します。よろしいでしょうか?')) { 40 // ログアプリへの登録処理 41 kintone.api('/k/v1/records', 'POST', { 42 app: appId, 43 records: obj 44 }, function (resp) { 45 location.reload(); 46 }); 47 } else { 48 window.alert('キャンセルされました'); // 警告ダイアログを表示 49 } 50 }); 51 //パース処理 52 function csv2json(csvArray) { 53 var jsonArray = []; 54 var items = csvArray[0].split(','); 55 for (var i = 1; i < csvArray.length; i++) { 56 var a_line = {}; 57 var csvArrayD = csvArray[i].split(','); 58 // 各データをループ処理する 59 for (var j = 0; j < items.length; j++) { 60 //要素名:items[j] 61 //データ:csvArrayD[j] 62 a_line[items[j]] = csvArrayD[j]; 63 } 64 jsonArray.push(a_line); 65 } 66 return jsonArray; 67 } 68 }); 69})(jQuery);
vitaminD👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

色々と私の内容を拝見くださいましてありがとうございます。クリップもありがとうございました。
kintoneUtilityを使い下記のコードにしましたところ、UPSERT処理が無事通りました。

ありがとうございました。

javascript

1jQuery.noConflict(); 2(function ($) { 3 "use strict"; 4 5 kintone.events.on(['app.record.index.show'], function (event) { 6 var appId = event.appId; 7 8 //ダイアログでファイルが選択された時の処理 9 $('#selfile').bind('change', function (evt) { 10 //読み込んだファイルをテキストエリアに表示 11 var reader = new FileReader(); 12 reader.readAsText(evt.target.files[0]); 13 reader.onerror = function () { 14 alert('ファイル読み取りに失敗しました') 15 } 16 reader.onload = function (ev) { 17 $('textarea[name=\"txt\"]').val(reader.result); 18 }; 19 }); 20 //「post」ボタン押下時の処理 21 $('#post_btn').bind('click', function () { 22 var text_val = $('textarea[name=\"txt\"]').val(); 23 text_val = text_val.replace(/"/g, ""); 24 var jsonArray = csv2json(text_val.split('\n')); 25 var obj = []; 26 var record = event.records; 27 for (var i = 0; i < jsonArray.length; i++) { 28 obj[i] = { 29 updateKey: { 30 field: 'quote_number', 31 value: jsonArray[i]['客先注文番号'] 32 }, 33 record: { 34 '数値_1': { 35 value: jsonArray[i]['税率'] 36 } 37 } 38 }; 39 } 40 if (window.confirm('データを登録します。よろしいでしょうか?')) { 41 var param = { 42 app: appId, 43 records: obj, 44 isGuest: false 45 }; 46 kintoneUtility.rest.upsertRecords(param).then(function (resp) { 47 // 成功時の処理を記載する 48 location.reload(); 49 }).catch(function (error) { 50 // エラー時の処理を記載する 51 console.log(error.message); 52 }) 53 } else { 54 window.alert('キャンセルされました'); // 警告ダイアログを表示 55 } 56 }); 57 //パース処理 58 function csv2json(csvArray) { 59 var jsonArray = []; 60 var items = csvArray[0].split(','); 61 for (var i = 1; i < csvArray.length; i++) { 62 var a_line = {}; 63 var csvArrayD = csvArray[i].split(','); 64 // 各データをループ処理する 65 for (var j = 0; j < items.length; j++) { 66 //要素名:items[j] 67 //データ:csvArrayD[j] 68 a_line[items[j]] = csvArrayD[j]; 69 } 70 jsonArray.push(a_line); 71 } 72 return jsonArray; 73 } 74 }); 75})(jQuery);

投稿2018/12/21 09:19

k.taka_cam

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問