为什么当我使用此代码时我的共享点工作流程总是停止?

发布于 2024-07-26 01:53:02 字数 1382 浏览 4 评论 0原文

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

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

编辑:代码中的问题

I need to find an user in a list to set the assignedto task property, these informations are in a list. So i use this method :

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;
 }

The problem is that when i use this method or this part of code, my workflow stop without saying anything. Here an exemple of code when i use it :

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 
                };
        }

    }


}

If i comment the content of my foreach my workflow continue as well...

If anybody have an idea it will be cool.

Regards,
Loïc

edit: problem in the code

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

多像笑话 2024-08-02 01:53:02

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

ULS 日志

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

对所有 .NET 代码启用调试

这将导致每当 SharePoint 以及您的代码中发生异常时调试器就会中断。 缺点是调试器会因“正常”异常而中断,而不会导致任何副作用。 所以不要被误导!

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

注释代码

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

Here are some debugging tips that might help:

ULS logs

Any exceptions should be reported here in some detail.

Enable debugging for all .NET code

This will cause the debugger to break whenever an exception occurs in SharePoint as well as your code. The downside is that the debugger will break on 'normal' exceptions that cause no side effects. So don't be misled!

To enable: Go to Debug, Exceptions and tick Common Language Runtime Exceptions. Also go to Tools, Options, Debugging and untick Enable Just My Code. Then attach to w3wp.exe.

Commenting code

You could also comment out all of your code. If the workflow step fails, you know there is a problem elsewhere. If the workflow step passes, then start uncommenting code until it fails - then you know where to look.

你是暖光i 2024-08-02 01:53:02

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

这可能没问题,但这对我来说看起来很可疑:

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

I tried commenting this above but it didn't format nicely so here it is.

It probably is fine, but this looks fishy to me:

// Dictionary<string,class>
ActeursDuProjet[item["Rôle"].ToString()] = 
    new ActeursDuProjet()
    { 
     Login = lobj_acteur.LoginName, 
     Email = lobj_acteur.Email 
    };

I would think it would be something like:

// 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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文