почему мой рабочий процесс sharepoint всегда останавливается, когда я использую этот код? - PullRequest
0 голосов
/ 09 июля 2009

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

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, мой рабочий процесс также продолжится ...

Если у кого-то есть идея, это будет круто.

С уважением, Лоик

редактировать: проблема в коде

Ответы [ 2 ]

1 голос
/ 10 июля 2009

Вот несколько советов по отладке, которые могут помочь:

Журналы ULS

О любых исключениях следует сообщать здесь более подробно.

Включить отладку для всего кода .NET

Это приведет к сбою отладчика при возникновении исключения в SharePoint, а также в вашем коде. Недостатком является то, что отладчик будет работать с «нормальными» исключениями, которые не вызывают побочных эффектов. Так что не обманывайтесь!

Чтобы включить: перейдите в раздел «Отладка, исключения» и отметьте «Общие исключения для среды выполнения». Также зайдите в Инструменты, Параметры, Отладка и снимите флажок Включить только мой код. Затем присоедините к w3wp.exe.

Код комментария

Вы также можете закомментировать весь ваш код. Если шаг рабочего процесса завершается неудачно, вы знаете, что есть проблема в другом месте. Если шаг рабочего процесса пройден, тогда начинайте комментировать код до тех пор, пока он не даст сбой - тогда вы знаете, где искать.

0 голосов
/ 09 июля 2009

Я попытался прокомментировать это выше, но он не отформатировался так, вот он.

Это, наверное, хорошо, но мне это кажется подозрительным:

// 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);
}
...