почему мой рабочий процесс SharePoint всегда останавливается, когда я использую этот код?
-
12-09-2019 - |
Вопрос
Мне нужно найти пользователя в списке, чтобы установить свойство назначенной задачи, эта информация находится в списке.Поэтому я использую этот метод:
public static SPUser GetSPUser(SPListItem item, string key){
SPFieldUser field = item.Fields[key] as SPFieldUser;
if (field != null)
{
SPFieldUserValue fieldValue = field.GetFieldValue(item[key].ToString()) as SPFieldUserValue;
if (fieldValue != null)
{
return fieldValue.User;
}
}
return null;
}
Проблема в том, что когда я использую этот метод или эту часть кода, мой рабочий процесс останавливается, ничего не говоря.Вот пример кода, когда я его использую:
using (SPSite site = new SPSite(adress_of_my_site))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Acteurs du projet"];
SPView view = cobj_ListeDesActeursDuProjet.DefaultView;
SPListItemCollection itemcollection = list.GetItems(view);
foreach (SPListItem item in itemcollection)
{
SPUser lobj_acteur = Utilities.GetSPUser(item,"acteur");
// Dictionary<string,class>
ActeursDuProjet[item["Rôle"].ToString()] =
new ActeursDuProjet()
{
Login = lobj_acteur.LoginName,
Email = lobj_acteur.Email
};
}
}
}
Если я прокомментирую содержимое моего foreach, мой рабочий процесс также продолжится...
Если у кого-нибудь есть идеи, это будет круто.
С уважением, Loïc
редактировать:проблема в коде
Решение
Вот несколько советов по отладке, которые могут помочь:
журналы ULS
Обо всех исключениях следует сообщать здесь более подробно.
Включить отладку для всего кода .NET.
Это приведет к прекращению работы отладчика при возникновении исключения в SharePoint, а также в вашем коде.Обратной стороной является то, что отладчик прерывает работу на «обычных» исключениях, которые не вызывают побочных эффектов.Так что не вводитесь в заблуждение!
Включить:Перейдите в раздел «Отладка», «Исключения» и отметьте «Исключения среды общего языка».Также перейдите в «Инструменты», «Параметры», «Отладка» и снимите флажок «Включить только мой код».Затем прикрепите к w3wp.exe.
Комментирование кода
Вы также можете закомментировать весь свой код.Если на этапе рабочего процесса произошел сбой, вы знаете, что проблема где-то в другом месте.Если этап рабочего процесса пройден, начните раскомментировать код до тех пор, пока он не завершится неудачно — тогда вы знаете, где искать.
Другие советы
Я пытался прокомментировать это выше, но оно не было хорошо отформатировано, поэтому вот оно.
Наверное, это нормально, но мне это кажется подозрительным:
// Dictionary<string,class>
ActeursDuProjet[item["Rôle"].ToString()] =
new ActeursDuProjet()
{
Login = lobj_acteur.LoginName,
Email = lobj_acteur.Email
};
Я думаю, это будет что-то вроде:
// dictionary declared somewhere earlier
Dictionary<string,ActeursDuProjet> roles = new Dictionary<string,ActeursDuProjet>();
// inside the foreach
string role = item["Rôle"].ToString();
if (!roles.ContainsKey(role))
{
ActeursDuProjet foo = new ActeursDuProjet();
foo.Login = lobj_acteur.LoginName;
foo.Email = lobj_acteur.Email;
roles.Add(role, foo);
}