Workflow SPRootWeb Решение, которое вызвало больше вопросов | ОШИБКА: запрос не найден в TrackedRequests - PullRequest
1 голос
/ 15 декабря 2010

Я на самом деле уже решил это, но я нахожу решение странным, если не сказать больше. Если обнаружил, что я получаю ой так хорошо

"ОШИБКА: запрос не найден в TrackedRequests. Возможно, мы создаем и закрываем веб-сайты в разных потоках"

Что было бы очень знакомо большинству разработчиков SharePoint. В этом случае это для рабочего процесса. Мне удалось решить это, но это было немного загадочно для меня. После некоторых проб и ошибок это, по-видимому, решило проблему.

Предыдущий код:

SPWeb = workflowPriperties.Site.RootWeb;

Текущий код:

Guid siteId = workflowProperties.Site.ID;

using (SPSite site = new SPSite(siteId))
{
  using (SPWeb web = site.OpenWeb(site.RootWeb.ID))
  {
    //Do Something
  }
}

Это решило проблемы, которые исходили из моего конкретного метода. Хотя теперь я получил сообщение об ошибке, которое, похоже, не пришло из моего собственного пользовательского кода (я до сих пор не знаю, почему), я озадачен, поскольку у меня сложилось впечатление, что объект workflowProperties, который был создан, как показано ниже:

public Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties workflowProperties = new Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties();

все сродни получению их от SPContext, что означает, что их не нужно утилизировать или закрывать. Означает ли это, что некоторые свойства объекта SPWorkflowActivationProperties фактически являются новыми экземплярами объектов SPRequest или являются производными от новых объектов SPRequest?

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

Спасибо.

1 Ответ

0 голосов
/ 16 декабря 2010

Хорошо, я не о проблеме со свойствами рабочего процесса, но, тем не менее, обнаружил ошибку.

Проблема была из-за этого кода

public void readusersFromItems(SPListItem item)
{
 Guid siteid = item.Web.Site.ID;
 Guid webId = item.ParentList.ParentWeb.ID;

Получение Guid на основе объектов SPListItem из свойств рабочего процесса и передача его в класс библиотеки, по-видимому, приводит к той проблеме, при которой объект Site и Web создаются, прежде чем дать вам идентификатор. Такое поведение - только мое предположение, потому что когда я перешел в Guid непосредственно в метод, это решило проблему.

Возьмите за правило, что SPWeb и SPSite Guid всегда будут передаваться в методы вне рабочего процесса в классах библиотеки, поскольку их получение из объектов SPListItem приведет к ошибкам, которые трудно отследить.

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