# How do I create a related record from csv flat file data?

**URL:** <https://forums.knack.com/t/how-do-i-create-a-related-record-from-csv-flat-file-data/9891>\
**Category:** Get Answers\
**Created:** [July 31, 2018, 10:32pm UTC](https://forums.knack.com/t/how-do-i-create-a-related-record-from-csv-flat-file-data/9891 "2018-07-31T22:32:45Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Franbill68198](https://avatars.discourse-cdn.com/v4/letter/f/a87d85/32.png) [@Franbill68198](https://forums.knack.com/u/Franbill68198)\
**Post date:** [July 31, 2018, 10:32pm UTC](https://forums.knack.com/t/how-do-i-create-a-related-record-from-csv-flat-file-data/9891/1 "2018-07-31T22:32:45Z")

</div>

I receive&nbsp; a csv flat file that contains the data for a complete invoice.&nbsp; &nbsp;I have created a relational database with 5 objects that have connections between them that makes up my invoice data base.&nbsp; Is there an automated method of inputting this data into the various objects so they form a related record.&nbsp; The way I do this now is to open a form,&nbsp; manually enter data into the fields and then when I have done this I submit the form,&nbsp; by doing this Knack sets up,&nbsp; behind the scenes,&nbsp; &nbsp;the necessary primary and foriegn key fields that relate the data correctly together.&nbsp; &nbsp;Is there a way to do it automatically using a scripting program or other means.

Thank you&nbsp; &nbsp;&nbsp;

---

<div class="post-metadata">

**Author:** ![Sunny\_Singla](https://sea2.discourse-cdn.com/flex020/user_avatar/forums.knack.com/sunny_singla/32/1007_2.png) [@Sunny\_Singla](https://forums.knack.com/u/Sunny_Singla)\
**Post date:** [August 3, 2018, 6:53am UTC](https://forums.knack.com/t/how-do-i-create-a-related-record-from-csv-flat-file-data/9891/2 "2018-08-03T06:53:27Z")

</div>

Hello Franbill,

&nbsp;

I droped a mail you at given address.

Let me know if you got it or not.&nbsp;

Regards,

Sunny Singla

[ssingla1985@gmail.com](mailto:ssingla1985@gmail.com)

+919855089359

---

<div class="post-metadata">

**Author:** ![Franbill68198](https://avatars.discourse-cdn.com/v4/letter/f/a87d85/32.png) [@Franbill68198](https://forums.knack.com/u/Franbill68198)\
**Post date:** [August 3, 2018, 6:27am UTC](https://forums.knack.com/t/how-do-i-create-a-related-record-from-csv-flat-file-data/9891/3 "2018-08-03T06:27:13Z")

</div>

Thank you so much,&nbsp; yes I tried to email you to ask for further assistance but I didn't hear back,&nbsp; so please email me at [franbill@bell.net](mailto:franbill@bell.net).&nbsp;&nbsp;

I look forward to contacting you.

Fran

---

<div class="post-metadata">

**Author:** ![Sunny\_Singla](https://sea2.discourse-cdn.com/flex020/user_avatar/forums.knack.com/sunny_singla/32/1007_2.png) [@Sunny\_Singla](https://forums.knack.com/u/Sunny_Singla)\
**Post date:** [August 1, 2018, 1:55am UTC](https://forums.knack.com/t/how-do-i-create-a-related-record-from-csv-flat-file-data/9891/4 "2018-08-01T01:55:11Z")

</div>

Hello&nbsp;Franbill,

&nbsp;

Yes this can be achive using Custom Javascript code like below.&nbsp;

var Object\_FiledIds = ['field\_123', 'field\_456'];  
var File\_Headers = ['KEY', 'VALUE'];  
   
var FieldToUpdateIfUnique = 1;  
var object\_id = 'object\_123';  
var fileSeperator = ",";

// var x = 0;  
var FileInputs = [];  
var header\_arr;  
var processedrows = 1;  
var UpdateRecords = 0;  
var InsertedRecord = 0;

$("#view\_123 input[type=submit]").live("click", function () {  
 FileInputs = [];  
 UpdateRecords = 0;  
 InsertedRecord = 0;  
 processedrows = 1;  
 UniqueColumns = [];  
 LoadFile();  
 Knack.showSpinner();  
 getRecords(1);  
 return false;  
});

var UniqueColumns = [];

function RunOneByOne(y) {  
 if (FileInputs[y] == undefined)  
 return;  
 var col\_arr = FileInputs[y].split(fileSeperator);  
 var obj\_insert = {};  
 var isFound = 0;  
 var id = "";  
   
 for (var z = 0; z \< col\_arr.length; z++) {  
 //console.log(Object\_FiledIds[z]);  
 if (col\_arr[z] != "")  
 obj\_insert[Object\_FiledIds[z]] = $.trim(col\_arr[z].replace(/"/g, ''));  
 }

//console.log(obj\_insert);

InsertNewRecord(obj\_insert);  
}

function getRecords(pageNumber) {  
 var getUniqueColumns = baseUrl\_toFindDuplicate.replace("[OBJ]", object\_id).replace("page=1", "page=" + pageNumber);  
 $.ajax({  
 url: getUniqueColumns,  
 type: 'GET',  
 headers: {  
 'X-Knack-Application-Id': API\_ID, // change to your app's API info  
 'X-Knack-REST-API-Key': API\_Key  
 },

success: function (response) {  
 var objects = response.records;

for (var x = 0; x \< objects.length; x++) {  
 var Unique = {};  
 Unique.value = objects[x][Object\_FiledIds[UniqueColumn]];  
 Unique.id = objects[x].id;  
 UniqueColumns.push(Unique);

}  
 if (pageNumber \< response.total\_pages) {  
 getRecords(pageNumber + 1);  
 }  
 else {  
 RunOneByOne(1);

}  
 }  
 });  
}

function LoadFile() {  
 var fileInput = document.getElementById('field\_bcbc\_upload');

var file = fileInput.files[0];  
 if (file == undefined) {  
 alert('Please upload file first!');  
 return false;  
 }

var reader = new FileReader();

reader.onload = function (e) {  
 var Rawarray = reader.result.split("\n");  
 FileInputs = Rawarray.filter(function (entry) { return entry.trim() != ''; });;  
 //console.log(FileInputs);

var header\_arr = FileInputs[0].split(fileSeperator);  
 //console.log(header\_arr, File\_Headers);  
 for (var x = 0; x \< 5; x++) {  
 //console.log(File\_Headers[x].toString(), header\_arr[x].toString());  
 if (File\_Headers[x].toString().replace(/ /g, "") != header\_arr[x].toString().replace(/ /g, "")) {  
 //alert('header not match!!');  
 return false;  
 }  
 }  
 }  
 reader.readAsText(file);  
}

function InsertNewRecord(object) {  
 $.ajax({  
 url: '[https://us-api.knack.com/v1/objects/](https://us-api.knack.com/v1/objects/)' + object\_id + '/records',  
 type: 'POST',  
 data: object,  
 headers: {  
 'X-Knack-Application-Id': API\_ID, // change to your app's API info  
 'X-Knack-REST-API-Key': API\_Key  
 },

success: function (response) {

processedrows = processedrows + 1;  
 RunOneByOne(processedrows);  
 if (processedrows \>= FileInputs.length - 1) {  
 Knack.hideSpinner();  
 $(".kn-form-confirmation").show();  
 $(".kn-form-confirmation .kn-message p").html('Upload Successful:\<br/\>Records Updated ' + UpdateRecords + ' \<br/\> Records Inserted ' + InsertedRecord);  
 $("#view\_123 form[method=post]").hide();  
 $(".kn-form-reload").hide();  
 //setTimeout(function () {

// location.href = '#claims-master/';  
 //}, 3000);  
 }  
 }  
 });  
}

Mail me for further assistance .

&nbsp;

Thanks,

Sunny Singla

[ssingla1985@gmail.com](mailto:ssingla1985@gmail.com)

+919855089359
