none
Обновление формулы в вычисляемом стоблце RRS feed

  • Вопрос

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

    Подскажите пожалуйста, стоит формула =ТДАТА() - сегодня в вычисляемом столбце.

    Обновление происходит только когда ходишь в этот редактирование этого столбца и сохраняешь.

    Как сделать что бы автоматически был перерасчет даты.

    Спасибо.

    27 сентября 2015 г. 6:58

Ответы

  • Спасибо. А если доступа нет к серверу (только к узлу).

    Тогда написать консольное приложение с использованием CSOM и так же поставить его в планировщик на СВОЁМ компьютере, в этом случае у вас должен быть доступ на изменение элементов списка (или у учетной записи от чьего имени запускается exe).

    Подключите к проекту:

    camlex.client.dll, Microsoft.SharePoint.Client.dll, Microsoft.SharePoint.Client.Runtime.dll

    Код с использованием CSOM:

    using CamlexNET;
    using Microsoft.SharePoint.Client;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.IO;
    using System.Linq;
    using System.Net;

    private void UpdateItems() { farm = new ClientContext("http://portal.com"); farm.Credentials = CredentialCache.DefaultCredentials; farm.Load(farm.Site, s => s.Url); farm.ExecuteQuery(); List olist = farm.Web.Lists.GetByTitle("Название списка"); // именно название! farm.Load(olist); farm.ExecuteQuery(); var getByQuery = Camlex.Query() .Where(x => (string)x["Название поля для поиска обновляемых элементов"] == "Значение") .ToCamlQuery(); ListItemCollection olditems; try { olditems = olist.GetItems(getByQuery); farm.Load(olditems); farm.ExecuteQuery(); if (olditems.Count > 0) { foreach (var x in olditems) { x["Updated"] = true; // обновляем столбец служебной информации x.Update(); farm.ExecuteQuery(); } } } catch (Exception ex) { Console.WriteLine("Ошибка обновления: " + ex.ToString()); } }

    Added: Забыл - я использовал Camlex.NET

    Вариант без автоматизации - написать JSOM скрипт и поместить его в веб-часть, в этом случае обновление будет либо по нажатию кнопки, либо по обращению к странице (ни в коем-случае не на странице списка).




    • Изменено Maxim Shusharin 28 сентября 2015 г. 6:59
    • Помечено в качестве ответа Castromen 28 сентября 2015 г. 10:30
    28 сентября 2015 г. 6:50

Все ответы

  • Проверьте настройки пересчета.


    • Изменено AZyre 27 сентября 2015 г. 20:30
    • Предложено в качестве ответа Alexander RusinovModerator 27 сентября 2015 г. 21:43
    27 сентября 2015 г. 20:30
  • Проверьте настройки пересчета.

    Добрый день, это не Excel, а SharePoint.

    Покажите настройки столбца и формулу.

    28 сентября 2015 г. 2:47
  • Дело в том, что значение [Сегодня] проставляется в момент модификации элемента, и фактически равняется значению Modified (Изменено).

    Решение - написать консольную утилиту для обновления элементов и поместить её в планировщик на сервере.

    The Truth about using [Today] in SharePoint Calculated Columns

    Dynamically Updating a SharePoint Calculated Column Containing a “Today” Reference

    Код минимальный (делаем обновление всех элементов списка)

    class Program
         {
              static void Main(string[] args)
              {
                   SPSite site = new SPSite("portal.com");
                   SPWeb web = site.OpenWeb("siteUrl");
                   SPList list = web.Lists["ListName"]; // Название обновляемого списка
                   web.AllowUnsafeUpdates = true;
                   foreach (SPListItem item in list.Items)
                   {
                       item.SystemUpdate();
                   }
                  web.AllowUnsafeUpdates = false;
              }
         }

    Так же можно написать таймер, но там кода больше будет.

    Еще один способ - написать PowerShell скрипт, тогда студия не нужна будет.

    28 сентября 2015 г. 3:26
  • $web = Get-SPWeb http://portal.com
    $list = $web.Lists["ListName"]
    $web.AllowUnsafeUpdate = $True;
    foreach ($item in $list.Items)
    {
      $item.Update();
    }
    $web.AllowUnsafeUpdate = $False;
    Done.
    28 сентября 2015 г. 3:31
  • $web = Get-SPWeb http://portal.com
    $list = $web.Lists["ListName"]
    $web.AllowUnsafeUpdate = $True;
    foreach ($item in $list.Items)
    {
      $item.Update();
    }
    $web.AllowUnsafeUpdate = $False;
    Done.
    Спасибо. А если доступа к серверу не имею (только к узлу).
    28 сентября 2015 г. 6:08
  • Спасибо. А если доступа нет к серверу (только к узлу).

    28 сентября 2015 г. 6:29
  • Спасибо. А если доступа нет к серверу (только к узлу).

    Тогда написать консольное приложение с использованием CSOM и так же поставить его в планировщик на СВОЁМ компьютере, в этом случае у вас должен быть доступ на изменение элементов списка (или у учетной записи от чьего имени запускается exe).

    Подключите к проекту:

    camlex.client.dll, Microsoft.SharePoint.Client.dll, Microsoft.SharePoint.Client.Runtime.dll

    Код с использованием CSOM:

    using CamlexNET;
    using Microsoft.SharePoint.Client;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.IO;
    using System.Linq;
    using System.Net;

    private void UpdateItems() { farm = new ClientContext("http://portal.com"); farm.Credentials = CredentialCache.DefaultCredentials; farm.Load(farm.Site, s => s.Url); farm.ExecuteQuery(); List olist = farm.Web.Lists.GetByTitle("Название списка"); // именно название! farm.Load(olist); farm.ExecuteQuery(); var getByQuery = Camlex.Query() .Where(x => (string)x["Название поля для поиска обновляемых элементов"] == "Значение") .ToCamlQuery(); ListItemCollection olditems; try { olditems = olist.GetItems(getByQuery); farm.Load(olditems); farm.ExecuteQuery(); if (olditems.Count > 0) { foreach (var x in olditems) { x["Updated"] = true; // обновляем столбец служебной информации x.Update(); farm.ExecuteQuery(); } } } catch (Exception ex) { Console.WriteLine("Ошибка обновления: " + ex.ToString()); } }

    Added: Забыл - я использовал Camlex.NET

    Вариант без автоматизации - написать JSOM скрипт и поместить его в веб-часть, в этом случае обновление будет либо по нажатию кнопки, либо по обращению к странице (ни в коем-случае не на странице списка).




    • Изменено Maxim Shusharin 28 сентября 2015 г. 6:59
    • Помечено в качестве ответа Castromen 28 сентября 2015 г. 10:30
    28 сентября 2015 г. 6:50