none
Создание файла через рабочий процесс с использованием HTTP REST RRS feed

  • Вопрос

  • Добрый день.

    Мне необходимо после выполнения рабочего процесса сделать файл в библиотеке документов.

    Делаю это с помощью HTTP REST методом POST.

    http://<сайт>/_api/web/GetFolderByServerRelativeUrl('/Folder')/Files/add(url='a.txt',overwrite=true)

    Создается пустой файл.

    Как мне при создании файла заполнить его содержимое?

    Если я задаю параметр "RequestContent", а он может быть только словарем, то в файле появляется содержимое словаря. Но мне нужно вывести определенные поля списка с определенным текстом.

    Заранее Спасибо.


    18 июня 2021 г. 9:00

Ответы

  • Добрый день.

    А как из рабочего процесса в Sharepont designer`е запустить JS?

    Я такого не знаю.

    По кнопке на странице, да можно, но при работе рабочего процесса...

    Мне нужно, что бы в конце рабочего процесса создавался файл и в него вносились данные из поле списка и переменных рабочего процесса.

    Вы не сможете решить данную задачу стандартными средствами, в данном случае необходима разработка, каким образом её следует сделать зависит от задачи. В данном случае оптимальным решением является Event Reciever, в котором будут указаны условия его запуска, создание текстового файла и наполнение его содержимым текущего элемента списка.

          public override void ItemAdded(SPItemEventProperties properties)
            {
                using (SPWeb web = properties.OpenWeb())
                {
                    try
                    {
                        //getcurrentitem
                        SPListItem currentItem = properties.ListItem;
                        //create variable
                        string title = currentItem["Title"].ToString();
                        string server = currentItem["Server"].ToString();
                        DateTime Created = DateTime.Parse(currentItem["Created"].ToString());
                        //create text file
                        string path = @"C:\Temp\" + title + ".txt";
                        Encoding encoding = Encoding.GetEncoding("UTF-8");
                        if (!File.Exists(path))
                        {
                            using (FileStream fs = new FileStream(path, FileMode.CreateNew))
                            {
                                using (StreamWriter writer = new StreamWriter(fs, encoding))
                                {
                                    writer.WriteLine("Наименование: " + title);
                                    writer.WriteLine("Сервер: " + server);
                                    writer.WriteLine("Дата создания: " + Created);
                                    writer.Close();
                                }
                            }
                            //Add file to library
                            SPList lib_destination = (SPDocumentLibrary)web.Lists["Документы"];
                            //var list = web.Lists.TryGetList(listTitle);
                            var targetFolder = lib_destination.RootFolder;
                            var fileContent = File.ReadAllBytes(path);
                            var fileUrl = Path.GetFileName(path);
                            targetFolder.Files.Add(fileUrl, fileContent);
                            //remove cash file
                            File.Delete(path);
                        }
                    }
                    catch (Exception ex)
                    {
                        File.WriteAllText(@"C:\Temp\error.txt", ex.ToString());
                    }
                }
            }


    22 июня 2021 г. 12:02

Все ответы

  • Здравствуйте,

    А откуда будет писаться информация в текстовый файл? Возможно вам подойдет использовать метод PUT?

    $targetSite="https://xxx.sharepoint.com/sites/dev"
    $User="admin@xxx.onmicrosoft.com"
    $serverRelativeUrl="/sites/dev"
    $folderName="Shared Documents"
    $fileName="NiceDay.txt"
    $data="Wow!Today is a nice day!-Updated"
    $restUrl="/_api/web/GetFileByServerRelativeUrl('"+$serverRelativeUrl+"/"+$folderName+"/"+$fileName+"')/`$value"
    $newFile=Update-SPObject -targetSite $targetSite -User $User -restUrl $restUrl -data $data -putonly $true

    Также посмотрите в сторону списков:



    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    18 июня 2021 г. 17:14
    Модератор
  • Спасибо за ответ!

    Это я видел и там все понятно, загоняешь содержимое файла в data и вызываешь функцию, но, забыл сказать, все делается через Sharepoint Designer... 

    Там есть "Вызов Web-службы" вот через него и делаю. Но я так и не понял, как в этот вызов вставить содержимое файла. Сам файл создается, но пустой.

    Информацию буду брать из полей списка, плюс шаблонная текстовка.

    18 июня 2021 г. 18:50
  • Окей, а если rest api вызвать в Sharepoint designer'e и сделать через JS:

    Create text file and upload it to document library using REST API with JavaScript


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.


    21 июня 2021 г. 8:28
    Модератор
  • Добрый день.

    А как из рабочего процесса в Sharepont designer`е запустить JS?

    Я такого не знаю.

    По кнопке на странице, да можно, но при работе рабочего процесса...

    Мне нужно, что бы в конце рабочего процесса создавался файл и в него вносились данные из поле списка и переменных рабочего процесса.

    22 июня 2021 г. 11:19
  • Добрый день.

    А как из рабочего процесса в Sharepont designer`е запустить JS?

    Я такого не знаю.

    По кнопке на странице, да можно, но при работе рабочего процесса...

    Мне нужно, что бы в конце рабочего процесса создавался файл и в него вносились данные из поле списка и переменных рабочего процесса.

    Вы не сможете решить данную задачу стандартными средствами, в данном случае необходима разработка, каким образом её следует сделать зависит от задачи. В данном случае оптимальным решением является Event Reciever, в котором будут указаны условия его запуска, создание текстового файла и наполнение его содержимым текущего элемента списка.

          public override void ItemAdded(SPItemEventProperties properties)
            {
                using (SPWeb web = properties.OpenWeb())
                {
                    try
                    {
                        //getcurrentitem
                        SPListItem currentItem = properties.ListItem;
                        //create variable
                        string title = currentItem["Title"].ToString();
                        string server = currentItem["Server"].ToString();
                        DateTime Created = DateTime.Parse(currentItem["Created"].ToString());
                        //create text file
                        string path = @"C:\Temp\" + title + ".txt";
                        Encoding encoding = Encoding.GetEncoding("UTF-8");
                        if (!File.Exists(path))
                        {
                            using (FileStream fs = new FileStream(path, FileMode.CreateNew))
                            {
                                using (StreamWriter writer = new StreamWriter(fs, encoding))
                                {
                                    writer.WriteLine("Наименование: " + title);
                                    writer.WriteLine("Сервер: " + server);
                                    writer.WriteLine("Дата создания: " + Created);
                                    writer.Close();
                                }
                            }
                            //Add file to library
                            SPList lib_destination = (SPDocumentLibrary)web.Lists["Документы"];
                            //var list = web.Lists.TryGetList(listTitle);
                            var targetFolder = lib_destination.RootFolder;
                            var fileContent = File.ReadAllBytes(path);
                            var fileUrl = Path.GetFileName(path);
                            targetFolder.Files.Add(fileUrl, fileContent);
                            //remove cash file
                            File.Delete(path);
                        }
                    }
                    catch (Exception ex)
                    {
                        File.WriteAllText(@"C:\Temp\error.txt", ex.ToString());
                    }
                }
            }


    22 июня 2021 г. 12:02