Захват текущего элемента списка в infopath с помощью C#

#c# #sharepoint #infopath

#c# #sharepoint #infopath

Вопрос:

Я пытаюсь захватить текущий элемент списка, который является формой infopath. Пока что я подключаюсь к сайту sharepoint, открываю список и пытаюсь захватить текущий элемент, но я продолжаю получать ошибку index out of range. Вот мой код

             SPSite WebApp = new SPSite("http://site/");
            SPWeb site = WebApp.OpenWeb();
            site.AllowUnsafeUpdates = true;
            SPList list = Site.Lists.TryGetList("List_Library");

            WebApp.AllowUnsafeUpdates = true;

            SPListItem item = list.Items[list.Items.Count];
  

Мой вопрос в том, как я могу получить текущий список? Этот код находится в коде формы infopath и находится в методе FormEvents_Submit, который вызывается при запуске события отправки. Я попытался переместить код в нижнюю часть метода, чтобы убедиться, что форма будет отправлена первой, но по-прежнему получал сообщение об ошибке «вне диапазона».

Ответ №1:

элемент списка имеет нулевой индекс: количество-1

Ответ №2:

Примечание: это серверная форма (Forms Server) или клиентская? Если это клиентская форма, вам не следует использовать OM на стороне сервера SharePoint, если только ваша форма не будет всегда выполняться на сервере.

FormEvents_Submit должен полностью обрабатывать отправку формы. Таким образом, ваш код несет ответственность за сохранение элемента первым любым способом, который вам нужен. Обычно в результате сохранения объекта вы получаете некоторую идентификацию, которую можно использовать для его повторного просмотра (например, SPList.AddItem уже возвращает вам разделяемый элемент)

Комментарии:

1. Как мне добавить текущий элемент с помощью AddItem? У меня возникли проблемы с поиском объекта, представляющего текущий элемент. Я полагаю, что это клиентская форма.

2. Сам InfoPath не имеет понятия «текущий элемент», поэтому трудно что-то посоветовать. Если вы выясните, что определяет «текущий элемент» в вашем случае, можно было бы предложить способы его получения из SharePoint. ПРИМЕЧАНИЕ: как я уже упоминал, если форма выполняется в InfoPath client, а не с использованием SharePoint OM на стороне сервера, скорее всего, неправильно: используйте веб-службы или клиентскую OM (новую в 2010 году).

Ответ №3:

Оказывается, я пытался получить доступ к элементу списка ДО отправки формы InfoPath, поэтому он еще не существовал в списке. Чтобы обойти это, мне пришлось бы поместить свой код в конец события Form_Submit и убедиться, что список.Обновление () было завершено до попытки захвата элемента.