Создание элемента списка на основании имеющегося элемента списка

Есть определенный список в Sharepoint, в нем сделан рабочий процесс, который запускается при создании элемента.

Появилась необходимость создавать новый элемент списка на основании уже существующего элемента, с переносом части данных в создаваемый элемент, последующим заполнением остальных полей и запуском РП по сохранению.

На основе РП это сделать нельзя, так как будет создан элемент с заполненными полями и уже сохранен в списке. Далее пользователю нужно будет открыть этот новый элемент добавить поля и заново сохранить, а в силу логики данного списка РП должен работать, только при создании элемента.

Решение следующее:

    1. Копируем NewForm.aspx данного списка в NewFormCopy.aspx
    2. В дополнительных действиях добавляем меню с именем “Копировать”  и типом действия “Перейти к URL-адресу” /Lists/List1/NewFormCopy.aspx?ID={ItemId}
    3. Далее в NewFormCopy.aspx, после <asp:Content ContentPlaceHolderId=”PlaceHolderMain” runat=”server”>  добавляем код который-
      1. Из строке URL вытащит наш ID элемента из которого мы хотим скопировать часть данных.
      2. Через AJAX выполнит REST запрос и получит данные нашего элемента.
      3. Запишет в нужные поля данные из соответствующих поле копируемого элемента.
function getQueryString() {
          var key = false, res = {}, itm = null;
          // get the query string without the ?
          var qs = location.search.substring(1);
          // check for the key as an argument
          if (arguments.length > 0 && arguments[0].length > 1)
            key = arguments[0];
          // make a regex pattern to grab key/value
          var pattern = /([^&=]+)=([^&]*)/g;
          // loop the items in the query string, either
          // find a match to the argument, or build an object
          // with key/value pairs
          while (itm = pattern.exec(qs)) {
            if (key !== false && decodeURIComponent(itm[1]) === key)
              return decodeURIComponent(itm[2]);
            else if (key === false)
              res[decodeURIComponent(itm[1])] = decodeURIComponent(itm[2]);
          }
          return key === false ? res : null;
}

$( document ).ready(function() {
	var id = getQueryString('ID'); //получаем ID из URL
	var siteurl = _spPageContextInfo.webAbsoluteUrl; //получаем адрес корня сайта
       $.ajax //Делаем REST запрос
	({
           url: siteurl + "/_api/web/lists/getbytitle('List1')/items("+id+")",
           method: "GET",
           headers: { "Accept": "application/json; odata=verbose" },
           success: function (data)
           {
             if (data.d.Created.length)
        	{
		//Записываем значения в поля
		$('input[title="Поле 1"]').val(data.d.field1); //filed1 - изначальное название поля в SP
		$('input[title="Поле 2"]').val(data.d.field2); //filed2 - изначальное название поля в SP
		...
                }        
           },
           error: function (error) 
           {alert("Error: "+ JSON.stringify(error));}
        });

});

Изначально ID элемента из URL получал следующим кодом

var url_string = window.location.href;
var url = new URL(url_string);
var id = url.searchParams.get("ID");

Но он не отрабатывает в IE 11, а именно new URL. Поэтому нашел функцию, которая извлекает параметр ID.

На этом все.

Теперь пользователи, зайдя в список могут нажать меню элемента, выбрать “Копировать”, в открывшемся элементе будут скопированные поля.

Далее пользователь заполняет оставшиеся поля и сохраняет новый элемент.

После сохранения запускается РП, настроенный на запуск при создании элемента.