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の内容にコメントすると、ワークフローも続行されます...

誰かがアイデアを持っているなら、それはクールでしょう。

よろしく、ロイック

編集:コードの問題

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 に答える