Вкратце: у меня есть консольное приложение C #, которое я использовал для тестирования и записи данных из SQL в списки SharePoint.
Все работает нормально, пока оно запускается как консольное приложение. Я получаю соединение с SQL, создается контекст, затем я подключаюсь к сайту SharePoint и продолжаю обновлять определенные поля.
Теперь, когда я развертываю рабочее решение в виде тайм-джоба (.wsp) для sharepoint, икогда я обновляю его на ферме серверов и развертываю как функцию на сайте, и запускаю как задание таймера, он работает, но только, так сказать, «один раз».
Когда я запускаю задание таймера, он получает контекст SQL, подключается и обновляет списки SharePoint. Но когда я изменяю данные в таблице SQL (например, поле с именем «цена» с 10.99 до 11.99) и снова запускаю timerjob, он все равно только обновляет «старые» данные, а точнее - значение 10.99.
Теперь, делая это с консольным приложением .exe на сервере, независимо от того, сколько изменений в БД я выполняю, он всегда обновляет самые новые данные, но как timerJob кажется, что он «переносит» в предыдущий контекстподключение и обновляет только предыдущие данные.
Нужно ли указывать в коде удаление контекста после окончания запуска таймера, чтобы он мог вызывать тот же, но "свежий" контекст при следующем запуске.
Здесьэто начальный код в .wsp
class TimerJobPromoToolsDefinition : SPJobDefinition
{
public TimerJobPromoToolsDefinition() : base()
{
}
public TimerJobPromoToolsDefinition(string jobName, SPService service) : base(jobName, service, null, SPJobLockType.None)
{
this.Title = "PromoTools_Timer_Job";
}
public TimerJobPromoToolsDefinition(string jobName, SPWebApplication webapp) : base(jobName, webapp, null, SPJobLockType.ContentDatabase)
{
this.Title = "PromoTools_Timer_Job";
}
public override void Execute(Guid targetInstanceId)
{
System.Diagnostics.Trace.Assert(false);
Main();
}
private static TimerJobConnection _context;
public static void Main()
{
PrintInitializing();
_context = new TimerJobConnection();
string siteURL = "http://somesite.com/";
try
{
using (SPSite site = new SPSite(siteURL))
{
using (SPWeb web = site.OpenWeb())
{
var catalogs = GetArtikliFromPromoTools(web);
var articlesFiltered = GetArtikliFromDB(catalogs);
PrintFinishedLoadingArticles();
GetSharePointCatalogHeaders(web);
UpdateArticles(catalogs, articlesFiltered, web);
PrintEndOfOperation();
Console.WriteLine("Press any key to continue...");
}
}
}
catch (Exception)
{
PrintErrorSharepointConnection();
PrintPressKeyToExit();
}
finally
{
}
}