Проверка исключения перед использованием GETITEMBYID () - PullRequest
1 голос
/ 14 марта 2010

Я получаю элемент от getiembyid ... но я хочу перед его использованием проверить, существует ли элемент или нет ... Я не хочу использовать запрос, поскольку основной целью использования Getitembyid является производительность ..... есть идеи как этого добиться ...

itemid = Response.QueryString["loc"];
    SPList mylist = myweb.GetList(SPUrlUtility.CombineUrl(myweb.ServerRelativeUrl, "/Lists/Location"));

// теперь id itemid не существует, он генерирует исключение ... поэтому я хочу проверить перед использованием следующего утверждения, что itemid существует ... Я знаю, что могу проверить throw SPQuery, но, как я уже сказал выше, из-за проблемы с производительностью только я используя itemid ....

  SPListItem myitem = mylist.GetItemById(Convert.ToInt32(itemid));

Есть идеи, как этого добиться?

1 Ответ

4 голосов
/ 14 марта 2010

SPQuery никоим образом не замедлит ваш код, поэтому в каждой другой статье по SharePoint вы найдете совет, как использовать SPQuery для повышения производительности. Чтобы сделать вещи еще более интересными, GetItemByID внутренне использует SPQuery для получения элемента обратно к вам, ниже приведен фрагмент кода, взятый из функции GetItemByID

  SPQuery query = new SPQuery();
  query.Query = "<Where><Eq><FieldRef Name=\"ID\"></FieldRef><Value Type=\"Integer\">" + id.ToString(CultureInfo.InvariantCulture) + "</Value></Eq></Where>";

Здесь важно отметить, что SPQuery имеет свойство Internal с именем SingleItemId, которое принимает Id идентификатора элемента, который вы хотите получить, дальнейшая трассировка того, как он используется, не может быть найдена, когда вызов в конечном итоге обнаруживается в COM-объекте.

Сказано, что у вас есть два варианта Вариант 1:

Оберните ваш код GetItemByID в блоке catch и проверьте наличие исключения. Если это произойдет, вы можете пометить флаг, чтобы обозначить, что Item Id является недействительным, и принять меры для него.

Вариант 2: Используйте SPQuery, вы можете проверить разницу во времени GetItemByID, а с помощью SPQuery вы увидите, что их нет, а совсем немного.

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