Copy items from list and library control to datatable

@Margo
Good day, this code is in the button. How can i execute code firstly,and then save the form ? for now in console returns only 'save' text. it saves the form and nothing happened...

fd.spBeforeSave(function (spForm) {
console.log("123");
if (fd.field("SaveAccese").value === "Da") {
  var userId = fd.field("Nume_x0020_prenume").value.EntityData.SPUserID;
  fd.control("SPDataTable1")
    ._widget.dataSource.read()
    .then(function () {
      var item = fd.control("SPDataTable1").widget.dataItems();
      for (let i = 0; i < item.length; i++) {
        var dateColumn1 = item[i].Dat_x0103__x0020__x00ee_nceput;
        var dateColumn2 = item[i].Dat_x0103__x0020_sf_x00e2_r_x021;
        var title = item[i].Title + " " + fd.field("ID").value;
        console.log("start");
        pnp.sp.web.lists
          .getByTitle("Excep%C8%9Bii%20Suspendare%20Accese%20Concedii")
          .items.add({
            Title: title,
            DeLa: new Date(
              dateColumn1.split(".")[2],
              dateColumn1.split(".")[1] - 1,
              dateColumn1.split(".")[0]
            ),
            P_x00e2_n_x0103_La: new Date(
              dateColumn2.split(".")[2],
              dateColumn2.split(".")[1] - 1,
              dateColumn2.split(".")[0]
            ),
            AngajatId: userId, //item[i].Nume_x0020_prenume[0].id,
            NrTabel: fd.field("Num_x0103_r_x0020_de_x0020_tabel").value,
            Func_x021b_ia: fd.field("Func_x021b_ia").value,
            Subdiviziunea: fd.field("Subdiviziunea").value,
          });
      }
      console.log("nextTick");
return fd._vue.$nextTick();
    });
  console.log("end");
}

if (fd.field("Notificati").value) {
  fd.field("NotifiedCheck").value = "Da";
}
fd.field("IDWorkflow").value = "Aprobare DRUO";
fd.field("Starea_x0020_cererii").value = "Aprobată";

});

console.log("save");
// return fd.save();


Hello @ixxxl,

Is that the complete code taht you using in the button's Onclick property?

If so, use the code outside of the spBeforeSave() event.

Also, since you have an asynchronous function, you have to make sure it is complete and then save the form. In your case, you cna try using the setTimeout() function:

setTimeout(fd.save(), 1000);

@Margo
Yes it is the complete code in button.
i tried to put the code outside. strange nothing result and with setTimeout() the same. i put 5000 but it saves momentally.


  console.log("123");
  if (fd.field("SaveAccese").value === "Da") {
    var userId = fd.field("Nume_x0020_prenume").value.EntityData.SPUserID;
    fd.control("SPDataTable1")
      ._widget.dataSource.read()
      .then(function () {
        var item = fd.control("SPDataTable1").widget.dataItems();
        for (let i = 0; i < item.length; i++) {
          var dateColumn1 = item[i].Dat_x0103__x0020__x00ee_nceput;
          var dateColumn2 = item[i].Dat_x0103__x0020_sf_x00e2_r_x021;
          var title = item[i].Title + " " + fd.field("ID").value;
          console.log("start");
          pnp.sp.web.lists
            .getByTitle("Excep%C8%9Bii%20Suspendare%20Accese%20Concedii")
            .items.add({
              Title: title,
              DeLa: new Date(
                dateColumn1.split(".")[2],
                dateColumn1.split(".")[1] - 1,
                dateColumn1.split(".")[0]
              ),
              P_x00e2_n_x0103_La: new Date(
                dateColumn2.split(".")[2],
                dateColumn2.split(".")[1] - 1,
                dateColumn2.split(".")[0]
              ),
              AngajatId: userId, //item[i].Nume_x0020_prenume[0].id,
              NrTabel: fd.field("Num_x0103_r_x0020_de_x0020_tabel").value,
              Func_x021b_ia: fd.field("Func_x021b_ia").value,
              Subdiviziunea: fd.field("Subdiviziunea").value,
            });
        }

      });
    console.log("end");
  }
  
  if (fd.field("Notificati").value) {
    fd.field("NotifiedCheck").value = "Da";
  }
  fd.field("IDWorkflow").value = "Aprobare DRUO";
  fd.field("Starea_x0020_cererii").value = "Aprobată";


  setTimeout(fd.save(), 5000);

Hello @ixxxl,

You can try out Promise.all() method like so:

fd.spBeforeSave(function() {

    if (fd.field("Notificati").value) {
        fd.field("NotifiedCheck").value = "Da";
    }
    fd.field("IDWorkflow").value = "Aprobare DRUO";
    fd.field("Starea_x0020_cererii").value = "Aprobată";

    if (fd.field("SaveAccese").value === "Da") {
        var userId = fd.field("Nume_x0020_prenume").value.EntityData.SPUserID;
        var requests = [];
        return fd.control("SPDataTable1")
            ._widget.dataSource.read()
            .then(function() {
                var item = fd.control("SPDataTable1").widget.dataItems();
                for (let i = 0; i < item.length; i++) {
                    var dateColumn1 = item[i].Dat_x0103__x0020__x00ee_nceput;
                    var dateColumn2 = item[i].Dat_x0103__x0020_sf_x00e2_r_x021;
                    var title = item[i].Title + " " + fd.field("ID").value;
                    console.log("start");
                    var request = pnp.sp.web.lists
                        .getByTitle("Excep%C8%9Bii%20Suspendare%20Accese%20Concedii")
                        .items.add({
                            Title: title,
                            DeLa: new Date(
                                dateColumn1.split(".")[2],
                                dateColumn1.split(".")[1] - 1,
                                dateColumn1.split(".")[0]
                            ),
                            P_x00e2_n_x0103_La: new Date(
                                dateColumn2.split(".")[2],
                                dateColumn2.split(".")[1] - 1,
                                dateColumn2.split(".")[0]
                            ),
                            AngajatId: userId, //item[i].Nume_x0020_prenume[0].id,
                            NrTabel: fd.field("Num_x0103_r_x0020_de_x0020_tabel").value,
                            Func_x021b_ia: fd.field("Func_x021b_ia").value,
                            Subdiviziunea: fd.field("Subdiviziunea").value,
                        });
                   requests.push(request);
                }
                console.log(requests)
                Promise.all(requests)
            });
        console.log("end");
    }


});

@Margo
i tried, but console is empty, after pressing button submit, nothing happens.

Hello @ixxxl,

I can't tell what is wrong. You can remove all the conditions and test the code from the browser console, specifically this part with pnp function:

var userId = fd.field("Nume_x0020_prenume").value.EntityData.SPUserID;
        var requests = [];
        return fd.control("SPDataTable1")
            ._widget.dataSource.read()
            .then(function() {
                var item = fd.control("SPDataTable1").widget.dataItems();
                for (let i = 0; i < item.length; i++) {
                    var dateColumn1 = item[i].Dat_x0103__x0020__x00ee_nceput;
                    var dateColumn2 = item[i].Dat_x0103__x0020_sf_x00e2_r_x021;
                    var title = item[i].Title + " " + fd.field("ID").value;
                    console.log("start");
                    var request = pnp.sp.web.lists
                        .getByTitle("Excep%C8%9Bii%20Suspendare%20Accese%20Concedii")
                        .items.add({
                            Title: title,
                            DeLa: new Date(
                                dateColumn1.split(".")[2],
                                dateColumn1.split(".")[1] - 1,
                                dateColumn1.split(".")[0]
                            ),
                            P_x00e2_n_x0103_La: new Date(
                                dateColumn2.split(".")[2],
                                dateColumn2.split(".")[1] - 1,
                                dateColumn2.split(".")[0]
                            ),
                            AngajatId: userId, //item[i].Nume_x0020_prenume[0].id,
                            NrTabel: fd.field("Num_x0103_r_x0020_de_x0020_tabel").value,
                            Func_x021b_ia: fd.field("Func_x021b_ia").value,
                            Subdiviziunea: fd.field("Subdiviziunea").value,
                        });
                   requests.push(request);
                }
                console.log(requests)
                Promise.all(requests)
1 Like

@Margo
tried in browser, have an error.

i make like this. it seems is working

var totalItemsAdded = 0;
if (fd.field("SaveAccese").value === "Da") {
  var userId = fd.field("Nume_x0020_prenume").value.EntityData.SPUserID;
  fd.control("SPDataTable1")
    ._widget.dataSource.read()
    .then(function () {
      var item = fd.control("SPDataTable1").widget.dataItems();
      for (let i = 0; i < item.length; i++) {
        var dateColumn1 = item[i].Dat_x0103__x0020__x00ee_nceput;
        var dateColumn2 = item[i].Dat_x0103__x0020_sf_x00e2_r_x021;
        var title = item[i].Title + " " + fd.field("ID").value;
        pnp.sp.web.lists
          .getByTitle("Excep%C8%9Bii%20Suspendare%20Accese%20Concedii")
          .items.add({
            Title: title,
            DeLa: new Date(
              dateColumn1.split(".")[2],
              dateColumn1.split(".")[1] - 1,
              dateColumn1.split(".")[0]
            ),
            P_x00e2_n_x0103_La: new Date(
              dateColumn2.split(".")[2],
              dateColumn2.split(".")[1] - 1,
              dateColumn2.split(".")[0]
            ),
            AngajatId: userId, //item[i].Nume_x0020_prenume[0].id,
            NrTabel: fd.field("Num_x0103_r_x0020_de_x0020_tabel").value,
            Func_x021b_ia: fd.field("Func_x021b_ia").value,
            Subdiviziunea: fd.field("Subdiviziunea").value,
          })
          .then(function () {
            totalItemsAdded++;
          });
      }

      if (fd.field("Notificati").value) {
        fd.field("NotifiedCheck").value = "Da";
      }
      fd.field("IDWorkflow").value = "Aprobare DRUO";
      fd.field("Starea_x0020_cererii").value = "Aprobată";

      var sleepyAlert = setInterval(function () {
        console.log("tick");
        if (item.length === totalItemsAdded) {
          clearInterval(sleepyAlert);
          return fd.save();
        }
      }, 1000);
    });
} else {
  if (fd.field("Notificati").value) {
    fd.field("NotifiedCheck").value = "Da";
  }
  fd.field("IDWorkflow").value = "Aprobare DRUO";
  fd.field("Starea_x0020_cererii").value = "Aprobată";
  return fd.save();
}
1 Like