none
SP 2010 - Проверка элементов списка при открытии RRS feed

  • Вопрос

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

    Есть список, в котором есть вычисляемый столбец. Он смотрит и проверяет, если дата в столбце больше текущей, то происходит ответ в другом. И всё работает вроде как. Но вот проверяет он это только при добавлении элемента.
    Т.е. если я поставлю сегодня дату 31.11.2016 , то ответ будет типа "дата нормальная".
    Если я ставлю дату 02.12.2016, то ответ будет "дата не нормальная".
    Но вот если я зайду в этот список 03 числа, то дата так же будет считаться "не нормальной", хотя по логике она должна быть "нормальной".
    В общем как сделать так, чтобы проверка выполнялась регулярно (например каждый день ночью) и в вычисляемом столбце было всё как надо?

    1 декабря 2016 г. 3:31

Ответы

Все ответы

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

    Вычисления в вычисляемых полях происходят только в момент создания или обновления записи. В данном случае можно инициировать обновление записи, для подобного рода задачи можно написать кастомный Timer Job, который будет запускаться по расписанию раз в сутки, проходить по каждому элементу списка и производить Update. В таком случае вычисляемое поле будет обновляться.

    1 декабря 2016 г. 6:35
  • Согласен с  Alexander Karakulov
    Для выполнения задания по расписанию подходит задание timer job

    Закинул пару ссылок для 2013. Но вроде все подойдет для 2010

    How to: Create a Web Application-Scoped Timer Job

    Create and Deploy Custom Timer Job Definition in SharePoint Programatically

    Step by Step procedures to create a Timer Job in SharePoint 2013

    How to Create Timer Job in SharePoint 2013



    1 декабря 2016 г. 8:00
  • Интересное решение. Оно будет обновлять всё веб-приложение (и все его списки и библиотеки)? Как указать что нужно только один список обновлять.
    И не выйдет ли там, как было показано на одном из скринов из ссылок, что элементы будут проверятся и как бы заново создаваться каждую минуту после запуска Job`a? Или на скрине там показано что они изменились и всегда будет после этого значок New

    1 декабря 2016 г. 9:21
  • В этом куске кода:

    public override void Execute(Guid targetInstanceId)
    {
      // Execute the timer job logic.
      SPWebApplication webApp = this.Parent as SPWebApplication;
      SPList taskList = webApp.Sites[0].RootWeb.Lists["Tasks"];
      SPListItem newTask = taskList.Items.Add();
      newTask["Title"] = DateTime.Now.ToString();
      newTask.Update();
    }

    Показано, как в таймере найти текущий WebApp, в нем найти нужный список, и в этом списке создать запись.

    Надпись NEW "висит" у всех элементов, которые были созданы не позднее 2 дней назад.


    1 декабря 2016 г. 11:01
  • т.е. если у меня список List8 то строка будет такой:

    SPList taskList = webApp.Sites[0].RootWeb.Lists["List8"];

    да?

     

    А можно кнопку сделать такую, чтобы при нажатии обновлялся? Я видел есть такое решение для SP 2013, но там очень много лишнего кода т.к. хотели сделать нечто иное. И вроде как работает только для веб-части.
    Можете подсказать как в моём случае сделать?

    • Изменено 3aIIIu6ucb 2 декабря 2016 г. 3:48
    2 декабря 2016 г. 3:06
  • т.е. если у меня список List8 то строка будет такой:

    SPList taskList = webApp.Sites[0].RootWeb.Lists["List8"];

    да?

    Надо смотреть какое указано Имя, т.к. когда Вы создаете новый список и задаете имя на кириллице, то SP автоматически переименовывает в ссылке на list1, list2, ..., list2. Таким образом имя может быть на русском одно, а в ссылке написано http://sitesp/site/TestSite/list1
    2 декабря 2016 г. 4:01
  • т.е. если у меня список List8 то строка будет такой:

    SPList taskList = webApp.Sites[0].RootWeb.Lists["List8"];

    А можно кнопку сделать такую, чтобы при нажатии обновлялся? Я видел есть такое решение для SP 2013, но там очень много лишнего кода т.к. хотели сделать нечто иное. И вроде как работает только для веб-части.
    Можете подсказать как в моём случае сделать?

    Тут я вижу два варианта:

    1. Добавить на представление списка веб-часть "редактор контента", в которую добавить кнопку с javascript'ом. На клик этой кнопки навесить обновление элементов списка средствами js (для работы со списками посредством js очень удобно работать с https://spservices.codeplex.com/) - сразу могу предупредить по поводу данного способа, если много элементов в списке, например больше 100, то данный способ не очень подойдет. Пример, как добавить js в веб-часть, можно посмотреть тут

    2. Создать кастомную веб-часть с кнопкой "обновить", при клике на эту кнопку уже средствами C# обновлять записи (по принципу аналогичному в примере про timer job) - в данном случае, по мне проще написать timer job вместо этого варианта.



    2 декабря 2016 г. 4:14
  • Спасибо.

    Называю при создании списка именем testov, потом переименовываю его в параметрах как Тестовый, и в итоге код правильный будет

    SPList taskList = webApp.Sites[0].RootWeb.Lists["testov"];

    2 декабря 2016 г. 4:26
  • Спасибо.

    Называю при создании списка именем testov, потом переименовываю его в параметрах как Тестовый, и в итоге код правильный будет

    SPList taskList = webApp.Sites[0].RootWeb.Lists["testov"];

    В данном случае надо искать по имени Тестовый.
    2 декабря 2016 г. 4:37
  • мне почему-то казалось что SP не понимает кириллицу в этом случае.

    Спасибо. Буду пробовать на след. неделе

    2 декабря 2016 г. 4:44
  • В этой коллекции списков webApp.Sites[0].RootWeb.Lists поиск нужного списка происходит по имени, в данном случае, это имя Тестовый.
    2 декабря 2016 г. 5:19