Контекстная база данных и Sharepoint в консольном приложении C # - PullRequest
0 голосов
/ 01 октября 2019

Вкратце: у меня есть консольное приложение 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
        {

        }
    }

1 Ответ

0 голосов
/ 02 октября 2019

Я думаю, что "контекст" не должен быть проблемой, основываясь на моем опыте.

Поскольку вы перехватили исключение, попробуйте проверить любое исключение. Вы можете попробовать отладить код, прикрепив к owstimer процесс также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...