When i try to add a row to my embedded cloudtable using row.add() there are some problems
When i try to add a row to my embedded cloudtable using row.add() there are some problems
I have an embedded cloudtable and am trying to add a row to it using javascript and "table.row.add()". When I try to add a row, the row shows up in my table on the web page with most fields populated. One of the fields is a unique sequence field where the next number in sequence is not there. Another field is a date-time field where the date and time is not filled in. If I select the added row and hit edit, the edit button hangs and I get the following message in my console.log: "Uncaught Unable to find row identifier For more information, please refer to https://datatables.net/tn/14". Finally if i reload the page, the added row is not there any more. For testing I have hardcoded the following row.add() code which runs when i hit a button.Please ignore the commented out stuff.
editEmailButton2Element = document.getElementById("editEmailButton2Id");
$('#editEmailButton2Id').on( 'click', function () {
console.log("Adding row");
table2.row.add( {
"dp-25": "pmarks906d@aol.com",//email2Element.innerHTML,// cust email
"dp-50": "Saved", // to/from cust
//firstName2Element.innerHTML+" "+lastName2Element.innerHTML, name
"dp-26": "phil marks",
"dp-24": rowIdNumber, // email id (sequence, unique, positive integer)
"dp-52": "", // email date/time (date time required)
"dp-29": "", // image (deault empty)
"dp-30": "Painting",//artworkTitle2Element.innerHTML, // art img name
"dp-51": 00101, //artIdElement.innerHTML, // art id #
"dp-34": "", //imageUrlElement.innerHTML, // img url (must url default empty)
"dp-35": "2x2", //titleSize2Element.innerHTML, // orig size
"dp-78": 20.00, //titlePrice2Element.innerHTML, // orig price
//titleAvail2Element.innerHTML,//orig available
"dp-38": "Avail",
"dp-53": "Gen", //radio2Element.innerHTML, // reason
"dp-85": "yes", //titleBuy2Element.innerHTML, // buy original
"dp-39": "1x1", //print1Size2Element.innerHTML, // print1 size
"dp-79": 5.00,//print1Price2Element.innerHTML, // print1 price
"dp-55": 10, //print1Qty2Element.innerHTML, // print1 qty
"dp-41": "3x3", //print2Size2Element.innerHTML, // print2 size
"dp-80": 5.00,//print2Price2Element.innerHTML,//print2 price
"dp-56": 2, //print2Qty2Element.innerHTML, // print2 qty
"dp-43": "5x5", //print3Size2Element.innerHTML, // print3 size
"dp-81": 9.00,//print3Price2Element.innerHTML,//print3 price
"dp-57": 3, //print3Qty2Element.innerHTML, // print3 qty
"dp-45": "6x6", //print4Size2Element.innerHTML, // print4 size
"dp-82": 7.00,//print4Price2Element.innerHTML,//print4 price
"dp-58": 1, //print4Qty2Element.innerHTML, // print4 qty
"dp-47": "2x2", //print5Size2Element.innerHTML, // print5 size
"dp-83": 3.00,//print5Price2Element.innerHTML,//print5 price
"dp-59": 90, //print5Qty2Element.innerHTML, // print5 qty
//msgFromCustomer2Element.innerHTML,//msg from customer
"dp-60": "from cust",
"dp-61": "to cust",//msgToCustomer2Element.innerHTML,//msg to customer
"dp-62": "phil", //firstName2Element.innerHTML, // 1st name
"dp-63": "marks", //lastName2Element.innerHTML, // last name
"dp-64": "1582 rd", //address12Element.innerHTML, // address1
"dp-65": "apt 3", //address22Element.innerHTML, // address2
"dp-66": "pb", //city2Element.innerHTML, // city
"dp-67": "fl", //state2Element.innerHTML, // state
"dp-68": "usa", //country2Element.innerHTML, // country
"dp-84": 32909, //zip2Element.innerHTML, // zip
"dp-70": 2.00, //buyOrigShipping2Element.innerHTML, // master shipping
"dp-71": 1.00, //print1Shipping2Element.innerHTML, // print 1 shipping
"dp-72": 1.00, //print2Shipping2Element.innerHTML, // print 2 shipping
"dp-73": 1.00, //print3Shipping2Element.innerHTML, // print 3 shipping
"dp-74": 1.00, //print4Shipping2Element.innerHTML, // print 4 shipping
"dp-75": 4.00, //print5Shipping2Element.innerHTML, // print 5 shipping
"dp-76": 5000.00, //totalCostWithShipping2Element.innerHTML // total cost
}).invalidate().draw();
console.log("Added row");
});
Note that one of the fields is an image field which i will eventually need to figure out how to fill. Note on the page there are two tables. The table I am talking about is at the bottom of the page and has an email address in the leftmost column. my web page is "philipmarksart.com/email". The fields in my embedded cloudtable are displayed/hidden as follows:
function initColumnVisibility2() {
//make most embedded cloudTable columns visible. Some column-handling code
//only accesses columns which are set to "visible(true)";
table2.column( 0 ).visible( true ); // expansion button
table2.column( 1 ).visible( false );
table2.column( 2 ).visible( true ); // cust email
table2.column( 3 ).visible( true ); // to/from cust
table2.column( 4 ).visible( true ); // cust name
table2.column( 5 ).visible( true ); // email id
table2.column( 6 ).visible( true ); // email date/time
table2.column( 7 ).visible( true ); // image
table2.column( 8 ).visible( true ); // art img name
table2.column( 9 ).visible( true ); // art id #
table2.column( 10 ).visible( true ); // img url
table2.column( 11 ).visible( true ); // orig size
table2.column( 12 ).visible( true ); // orig price
table2.column( 13 ).visible( true ); // orig available
table2.column( 14 ).visible( true ); // reason
table2.column( 15 ).visible( true ); // buy original
table2.column( 16 ).visible( true ); // print1 size
table2.column( 17 ).visible( true ); // print1 price
table2.column( 18 ).visible( true ); // print1 qty
table2.column( 19 ).visible( true ); // print2 size
table2.column( 20 ).visible( true ); // print2 price
table2.column( 21 ).visible( true ); // print2 qty
table2.column( 22 ).visible( true ); // print3 size
table2.column( 23 ).visible( true ); // print3 price
table2.column( 24 ).visible( true ); // print3 qty
table2.column( 25 ).visible( true ); // print4 size
table2.column( 26 ).visible( true ); // print4 price
table2.column( 27 ).visible( true ); // print4 qty
table2.column( 28 ).visible( true ); // print5 size
table2.column( 29 ).visible( true ); // print5 price
table2.column( 30 ).visible( true ); // print5 qty
table2.column( 31 ).visible( true ); // msg from customer
table2.column( 32 ).visible( true ); // msg to customer
table2.column( 33 ).visible( true ); // 1st name
table2.column( 34 ).visible( true ); // last name
table2.column( 35 ).visible( true ); // address1
table2.column( 36 ).visible( true ); // address2
table2.column( 37 ).visible( true ); // city
table2.column( 38 ).visible( true ); // state
table2.column( 39 ).visible( true ); // country
table2.column( 40 ).visible( true ); // zip
table2.column( 41 ).visible( true ); // master shipping
table2.column( 42 ).visible( true ); // print 1 shipping
table2.column( 43 ).visible( true ); // print 2 shipping
table2.column( 44 ).visible( true ); // print 3 shipping
table2.column( 45 ).visible( true ); // print 4 shipping
table2.column( 46 ).visible( true ); // print 5 shipping
table2.column( 47 ).visible( true ); // total cost
};
This question has an accepted answers - jump to answer
Answers
row.add()
is used to add a row to the table in the DOM, it won't be reflected in the backend data - so a page refresh would just remove it.Instead of
row.add()
, you'll need to use the Editor API instead to create (create()
) the record, you would then set the field values (set()
), and then submit (submit()
) the record back to the server.The code you've got in your first block is very similar, it just needs those different methods.
Colin
Thanks Colin. I am having trouble finding the syntax for the "editor.create()", "editor.set()" and "editor.submit()" javascript commands. could you give me a quick example of what the code should look like?
The following may be the syntax; but I haven't managed to add a row with it yet.
It seems the issue is that it doesn't like all the fields grouped together. I'm not sure why. I've raised it internally (CT-1603 for my reference) and we'll report back here when there's an update.
As a workaround, you can list the fields individually, like this (example here):
Colin
Hi again. So I've got the code ready to go shown following. When I hit the button it executes with no console errors, but nothing is added to the table. What am I missing?
Hi,
Are you able to PM me a link to the page showing the issue so I can take a look? There isn't an obvious issue there.
Allan
Here is a syntax which works (Thanks allan amd colin):
Note that datatable fields defined as numbers are passed to the set command as strings. Also datatable fields defined as date-time are passed in as the direct result of a newly defined date. The image being passed in here is just a null, because I am still trying to figure out a way to pass in an uploaded img file. The email id field is a unique sequence type, whose dummy value gets replaced automatically with the number next in sequence (starting at 0 and always increasing by 1.
Awesome thanks. Good to hear you got it working.
I should note that I never really anticipated CloudTable's Editor being used quite this way. I don't think it will cause any issues going forward, but my preference would be for the REST API to be used rather than Editor directly (just in case I ever change anything in how CloudTables).
Regards,
Allan