为什么我的sharepoint工作流在使用此代码时总是停止?

为什么我的sharepoint工作流在使用此代码时总是停止?,sharepoint,workflow,spsite,spweb,Sharepoint,Workflow,Spsite,Spweb,我需要在列表中找到一个用户来设置assignedto任务属性,这些信息在列表中。所以我用这个方法: public static SPUser GetSPUser(SPListItem item, string key){ SPFieldUser field = item.Fields[key] as SPFieldUser; if (field != null) { SPFieldUserValue fieldValue = field.GetFiel

我需要在列表中找到一个用户来设置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 
                };
        }

    }


}
使用(SPSite站点=新SPSite(我的站点的地址))
{                
使用(SPWeb=site.OpenWeb())
{
SPList list=web.list[“项目执行者”];
SPView view=cobj_listedascteursdupjet.DefaultView;
SPListItemCollection itemcollection=list.GetItems(视图);
foreach(itemcollection中的SPListItem项)
{                       
SPUser-lobj_-acteur=Utilities.GetSPUser(项目“acteur”);
//字典
ActEursDupJet[项目[“Rôle”]。ToString()]=
新ActEursDupJet()
{ 
Login=lobj_acteur.LoginName,
电子邮件=lobj_acteur.Email
};
}
}
}
如果我对foreach的内容发表评论,我的工作流也会继续

如果有人有主意,那就太酷了

问候,, 洛伊奇


编辑:代码中有问题

我试着在上面对此进行注释,但格式不太好,所以就在这里

这可能很好,但我觉得这很可疑:

// Dictionary<string,class>
ActeursDuProjet[item["Rôle"].ToString()] = 
    new ActeursDuProjet()
    { 
     Login = lobj_acteur.LoginName, 
     Email = lobj_acteur.Email 
    };
//字典
ActEursDupJet[项目[“Rôle”]。ToString()]=
新ActEursDupJet()
{ 
Login=lobj_acteur.LoginName,
电子邮件=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);
}
//在前面的某个地方声明的字典
字典角色=新字典();
//车内
字符串角色=项[“Rôle”]。ToString();
如果(!roles.ContainsKey(角色))
{
ActEursDupJet foo=新ActEursDupJet();
foo.Login=lobj_acteur.LoginName;
foo.Email=lobj_acteur.Email;
角色。添加(角色,foo);
}

以下是一些可能有帮助的调试提示:

ULS日志

任何例外情况都应在此处详细报告

为所有.NET代码启用调试

这将导致调试器在SharePoint和代码中发生异常时中断。缺点是调试器会在“正常”异常时中断,而这些异常不会导致任何副作用。所以不要被误导

要启用:转到调试、异常并勾选公共语言运行时异常。另外,请转到工具、选项、调试和取消选中仅启用我的代码。然后连接到w3wp.exe

评论代码


您还可以注释掉所有代码。如果工作流步骤失败,您就知道其他地方有问题。如果工作流步骤通过,则开始取消对代码的注释,直到失败为止—这样您就知道该去哪里查找。

您是否尝试过调试代码?只需将Visual Studio连接到w3wp进程(如果需要,请将debug.pdb文件复制到包含上述代码的.dll的存储位置(bin目录或GAC)是的,当然没有错误…所以你在运行工作流时进行了调试,没有错误发生?你怎么知道它会在特定的循环内容处停止?它只是停止执行?在这个代码活动之后,我有一个工作流任务,任务的方法调用会执行,但之后就不会执行了。在sharepoint中,工作流的状态是minate,即使我试图在任务的调用事件中修改我的任务,Utilities.GetSPUser在一个单独的DLL(即共享DLL?)中也不会发生任何事情。如果是这样,是否正确加载(从GAC?)是的,也可能是这样:)我只使用3.5框架中的对象初始值设定项。但问题似乎并不在于此:)我看到的主要内容是“ActEursDupJet[item[“Rôle”].ToString()”。这个修改是什么集合(看起来它将它存储在与类同名的ActEursDupJet中)?我犯了一个错误,我的字典名为acturers定义:Public IDictionary cobj_acteursdupjet=new dictionary();我使用此命令存储此列表:我想存储登录名(用于任务的属性)以及列表第一个字段中的用户的电子邮件。尼斯:)我的类未标记为可序列化,因此我在五分钟前遇到了序列化异常。我尝试注释我的代码,发现问题来自我的字典或我的类:)