Hello Techies,
I created a custom form which has dynamic subform as well. for eg the custom form consist of 3 sections:
- Parent form
- Attachment control
- Sub form with add/remove button for creating multiple subforms.
Here how my script works for adding the data:
- Parent form gets submitted and it returns item ID using jsom.
- And based on that item ID, Attachments are added to parent form and sub-form data gets added in another list.
But sometimes, i am facing conflict issue while adding multiple attachments of 2-3mb and here is the code:
- if (flag == true) {
- oLoader = SP.UI.ModalDialog.showWaitScreenWithNoClose("Working on it", "Creating a new Request...");
- var data = [];
- var fileArray = [];
- $("#attachFilesContainer input:file").each(function () {
- if ($(this)[0].files[0]) {
- fileArray.push({ "Attachment": $(this)[0].files[0] });
- }
- });
- arraycount += fileArray.length;
-
- data.push({
- "Column1": $("#txtColumn1").val(),
- "Column2": $("#Column2drpdown option:selected").text(),
- "Column3": $("#Column3drpdown option:selected").text(),
- "Column4": $("#Column4Drpdown :selected").text(),
- "Column5": newReqDate,
- "Column6": AccountName,
- "Column7": $("#Column7drpQuoteRequired :selected").text(),
- "Files": fileArray
- });
-
- createItemWithAttachments("Parent", data).then(
- function () {
-
- oLoader.close();
- window.location.replace(_spPageContextInfo.webAbsoluteUrl + "/Lists/Parent/AllItems.aspx");
-
-
-
-
- },
-
-
- function (sender, args) {
- console.log('Error occured' + args.get_message());
- }
-
- )
-
-
-
-
-
-
- }
- function createSubformItem(listName,i) {
- var listItem = {
- __metadata: { "type": "SP.Data.SubFormListItem" },
- "ParentID": id,
- "SubColumn1":$("input[id='txtSubColumn1" + i + "']").val(),
- "SubColumn2":$("input[id='txtSubColumn2" + i + "']").val(),
- "SubColumn3":$("#SubColumn3drpdown" + i + " option:selected").val(),
- "SubColumn4":$("#SubColumn4drpdown" + i + " option:selected").val()!="null" ? { "__metadata": { "type": "Collection(Edm.String)" }, "results": $("#SubColumn4drpdown"+i+"").val() } : { "__metadata": { "type": "Collection(Edm.String)" }, "results": [""] },
- "SubColumn5":$("#SubColumn5drpdown" + i + " option:selected").val(),
- "SubColumn6":$("input[id='txtSubColumn6" + i + "']").val(),
- "SubColumn7":$("#SubColumn7drpdown" + i + " option:selected").val(),
- "SubColumn8":$("input[id='txtSubColumn8" + i + "']").val(),
- "SubColumn9":$("textarea[title='SubColumn9" + i + "']").val(),
-
- };
- return $.ajax({
- url:"http://devapp/app/_api/web/lists/getbytitle('SubForm')/items",
- type: "POST",
- contentType: "application/json;odata=verbose",
- data: JSON.stringify(listItem),
- headers: {
- "Accept": "application/json;odata=verbose",
- "X-RequestDigest": $("#__REQUESTDIGEST").val()
- }
- });
- }
-
- var createItemWithAttachments = function (listName, listValues) {
- var fileCountCheck = 0;
- var fileNames;
- var context = new SP.ClientContext.get_current();
- var dfd = $.Deferred();
- var targetList = context.get_web().get_lists().getByTitle(listName);
- context.load(targetList);
- var singleUser = listValues[0].Column6 != "" ? SP.FieldUserValue.fromUser(listValues[0].Column1) : null;
- var itemCreateInfo = new SP.ListItemCreationInformation();
- var listItem = targetList.addItem(itemCreateInfo);
- listItem.set_item("Column1", listValues[0].Column1);
- listItem.set_item("Column2", listValues[0].Column2);
- listItem.set_item("Column3", listValues[0].Column3);
- listItem.set_item("Column4", listValues[0].Column4);
- listItem.set_item("Column5", listValues[0].Column5);
- listItem.set_item("Column6", singleUser);
- listItem.set_item("Column7", listValues[0].Column7);
-
- listItem.update();
- for (i = 0; i <= count; i++)
- {
-
- createSubformItem("SubForm",i);
-
- }
-
- context.executeQueryAsync(
- function () {
- id = listItem.get_id();
- if (listValues[0].Files.length != 0) {
- if (fileCountCheck <= listValues[0].Files.length - 1) {
- loopFileUpload(listName, id, listValues, fileCountCheck).then(
- function () {
- },
- function (sender, args) {
- console.log("Error uploading");
- dfd.reject(sender, args);
- }
- );
- }
- }
- else {
- dfd.resolve(fileCountCheck);
- }
- },
- function (sender, args) {
- console.log('Error occured' + args.get_message());
- }
- );
- return dfd.promise();
- }
-
-
-
-
- function loopFileUpload(listName, id, listValues, fileCountCheck) {
- var dfd = $.Deferred();
- uploadFile(listName, id, listValues[0].Files[fileCountCheck].Attachment).then(
- function (data) {
- var objcontext = new SP.ClientContext();
- var targetList = objcontext.get_web().get_lists().getByTitle(listName);
- var listItem = targetList.getItemById(id);
- objcontext.load(listItem);
- objcontext.executeQueryAsync(function () {
- console.log("Reload List Item- Success");
- fileCountCheck++;
- if (fileCountCheck <= listValues[0].Files.length - 1) {
- loopFileUpload(listName, id, listValues, fileCountCheck);
- } else {
- console.log(fileCountCheck + ": Files uploaded");
- attcount += fileCountCheck;
- if (arraycount == attcount) {
- for (i = 0; i <= count; i++)
- {
- createSubformItem("SubForm",i);
-
- }
- oLoader.close();
- window.location.replace(_spPageContextInfo.webAbsoluteUrl + "/Lists/ParentList/AllItems.aspx");
-
- }
-
- }
- },
- function (sender, args) {
- console.log("Reload List Item- Fail" + args.get_message());
- });
-
- },
- function (sender, args) {
- console.log("Not uploaded");
- dfd.reject(sender, args);
- }
- );
- return dfd.promise();
- }
- function uploadFile(listName, id, file) {
- var deferred = $.Deferred();
- var fileName = file.name;
- getFileBuffer(file).then(
- function (buffer) {
- var bytes = new Uint8Array(buffer);
- var binary = '';
- for (var b = 0; b < bytes.length; b++) {
- binary += String.fromCharCode(bytes[b]);
- }
- var scriptbase = _spPageContextInfo.webServerRelativeUrl + "/_layouts/15/";
- console.log(' File size:' + bytes.length);
- $.getScript(scriptbase + "SP.RequestExecutor.js", function () {
- var createitem = new SP.RequestExecutor(_spPageContextInfo.webServerRelativeUrl);
- createitem.executeAsync({
- url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/GetByTitle('" + listName + "')/items(" + id + ")/AttachmentFiles/add(FileName='" + file.name + "')",
- method: "POST",
- binaryStringRequestBody: true,
- body: binary,
- success: fsucc,
- error: ferr,
- state: "Update"
- });
- function fsucc(data) {
- console.log(data + ' uploaded successfully');
- deferred.resolve(data);
- }
- function ferr(data) {
- console.log(fileName + "not uploaded error");
- deferred.reject(data);
- }
- });
-
- },
- function (err) {
- deferred.reject(err);
- }
- );
- return deferred.promise();
- }
- function getFileBuffer(file) {
- var deferred = $.Deferred();
- var reader = new FileReader();
- reader.onload = function (e) {
- deferred.resolve(e.target.result);
- }
- reader.onerror = function (e) {
- deferred.reject(e.target.error);
- }
- reader.readAsArrayBuffer(file);
- return deferred.promise();
- }
Please let me know where am I going wrong.