none
Связать список и библиотеку RRS feed

  • Вопрос

  • Задача: при нажатии кнопки в списке добавлять файл в библиотеку. В библиотеке создано поле id списка. 

    В списке создал кнопку при нажатии которой попадаю в форму загрузки документа в библиотеку:

    <script src="/_layouts/15/jquery-3.1.1.min.js" type="text/javascript"></script>
    <div>
    <button class="btn btn-default" onclick="openInDialogl()" type="button">
      <span aria-hidden="true" class="glyphicon glyphicon-plus"></span> Добавить документ
     </button>
    </div>
    <script type="text/javascript">
    function openInDialogl() 
    {    
     var pageUrl = "http://tpserver/PWA/ProjectBICenter/_layouts/15/Upload.aspx?List={996BAEDB-141C-441E-9E57-01732C078EE7}&RootFolder=?&IsDlg=1&Source=" + document.URL
     console.log(pageUrl)
     var needCallbackFunction = true; 
        var options = { 
         url: pageUrl, 
         width: 650,
         height: 350, 
         allowMaximize:  true ,
         showClose: true,
         dialogReturnValueCallback : dialogClosedl  
          };
        SP.SOD.execute('sp.ui.dialog.js', 'SP.UI.ModalDialog.showModalDialog', options);
    };
    function dialogClosedl(dialogResult, returnValue)
    {
      location.reload();  
    };
    </script>

    Скрипт отрабатывает на ура, но после нажатия "ок" мы попадаем в форму где непосредственно задаются характеристики документа (в том числе id списка). Вот тут и возникает проблема. Используемая мной конструкция не работает:

    <script src="/_layouts/15/jquery-3.1.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    _spBodyOnLoadFunctionNames.push("fillingFieldsh");
    function fillingFieldsh()
    {  
      var id =  getItemIdh()
      if (id != 0)
      {
     jQuery("[id^='N']").val(id)
      }
    }

    function getItemIdh()
    {
     var docurl = document.URL; 
     var beginindex = docurl.indexOf('ID=');  
     if (beginindex != -1)
     {  
      var str = docurl.slice(beginindex +3);
      var reg = /\D/;
      var endindex = str.search(reg);
      if(endindex != -1)
      {
       var itemid = str.slice(0, endindex);    
       return  itemid;
      }
      else{
        console.log("В выражении 'ID=' ничего не найдено.")
      return 0;
      }  
     }
     else
      {
       console.log("Выражение 'ID=' не найдено.")
       return 0;
     }
    };
    </script>

    Возможно есть возможность объединить в одной форме эти две операции что бы скрипт срабатывал, или может кто-нибудь подскажет иное решение проблемы :)

    10 ноября 2016 г. 15:59

Ответы

  • 1. При создании элемента списка в NewForm у элемента еще нет id, так как он назначается по факту создания.

    Поэтому вы не сможете родное поле id связать с папкой в библиотеке  в момент создания  элемента списка.

    Сможете это сделать только в форме просмотра элемента списка DispForm.

    Если я правильно понял задачу, то получается так:
    1. Создается элемент списка.
    2. По факту создания стартует WF который создает 3 папки в библиотеке получив id
    3. После создания элемента списка вы делаете редирект на форму просмотра элемента (js или изменение формы в дизайнере)
    4. В форме просмотра внизу делаете как раз свои ссылки на всплывающее окно загрузки документов. Только в этом случае возможно получить из url по контексту id элемента списка и подпихнуть его при отображении папки.

    А вообще нужен собственный Контент Тайп. 
    Так как все выше перечисленное сильно зависит от клиента



    16 ноября 2016 г. 13:31

Все ответы

  • Может быть проще сделать рабочий процесс ? 
    11 ноября 2016 г. 12:42
  • Для решения какой задачи вам нужны эти "костыли"?
    11 ноября 2016 г. 13:24
  • Существует список в котором регестрируются рекламации. К записи необходимо прикрепить документацию разделенную на три группы: входящее/исходящее/прочее. По этой причине вложения к списку не подходят. В связи с этим возникла идея рабочим процессом в специально созданной библиотеке генерить при создании элемента три папки с привязкой к ид. Списка.
    14 ноября 2016 г. 6:04
  • 1. При создании элемента списка в NewForm у элемента еще нет id, так как он назначается по факту создания.

    Поэтому вы не сможете родное поле id связать с папкой в библиотеке  в момент создания  элемента списка.

    Сможете это сделать только в форме просмотра элемента списка DispForm.

    Если я правильно понял задачу, то получается так:
    1. Создается элемент списка.
    2. По факту создания стартует WF который создает 3 папки в библиотеке получив id
    3. После создания элемента списка вы делаете редирект на форму просмотра элемента (js или изменение формы в дизайнере)
    4. В форме просмотра внизу делаете как раз свои ссылки на всплывающее окно загрузки документов. Только в этом случае возможно получить из url по контексту id элемента списка и подпихнуть его при отображении папки.

    А вообще нужен собственный Контент Тайп. 
    Так как все выше перечисленное сильно зависит от клиента



    16 ноября 2016 г. 13:31