0

我需要在列表中找到一个用户来设置assignedto任务属性,这些信息在一个列表中。所以我使用这种方法:

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 的内容,我的工作流程也会继续......

如果有人有想法会很酷。

问候,洛伊克

编辑:代码中的问题

4

2 回答 2

1

以下是一些可能有帮助的调试技巧:

ULS 日志

任何异常都应在此处详细报告。

为所有 .NET 代码启用调试

这将导致调试器在 SharePoint 和您的代码中发生异常时中断。缺点是调试器会在没有副作用的“正常”异常上中断。所以不要被误导!

要启用:转到调试、异常并勾选公共语言运行时异常。还可以转到工具、选项、调试并取消选中启用我的代码。然后附加到 w3wp.exe。

注释代码

你也可以注释掉你所有的代码。如果工作流程步骤失败,您就知道其他地方存在问题。如果工作流程步骤通过,则开始取消注释代码,直到它失败 - 然后你知道在哪里看。

于 2009-07-10T08:43:20.353 回答
0

我尝试在上面对此进行评论,但它的格式不正确,所以就在这里。

这可能很好,但这对我来说看起来很可疑:

// 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);
}
于 2009-07-09T17:18:32.687 回答