이 코드를 사용할 때 SharePoint 워크 플로가 항상 중지되는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1104111

문제

할당 된 작업 속성을 설정하려면 목록에서 사용자를 찾아야합니다.이 정보는 목록에 있습니다. 그래서 나는이 방법을 사용합니다.

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

    }


}

내 워크 플로의 내용을 계속 말하면 계속해서 ...

아이디어가 있으면 시원 할 것입니다.

안부, loïc

편집 : 코드의 문제

도움이 되었습니까?

해결책

다음은 도움이 될 수있는 몇 가지 디버깅 팁입니다.

ULS 로그

예외는 여기에 자세히 설명되어야합니다.

모든 .NET 코드에 대한 디버깅을 활성화하십시오

따라서 코드뿐만 아니라 SharePoint에서 예외가 발생할 때마다 디버거가 끊어집니다. 단점은 디버거가 부작용을 일으키지 않는 '정상적인'예외를 중단한다는 것입니다. 그러니 오해하지 마세요!

활성화하려면 : 디버그, 예외로 이동하여 공통 언어 런타임 예외를 선택하십시오. 또한 도구, 옵션, 디버깅 및 UNTK를 사용하여 내 코드 만 활성화하십시오. 그런 다음 w3wp.exe에 연결하십시오.

주석 코드

모든 코드를 주석화시킬 수도 있습니다. 워크 플로 단계가 실패하면 다른 곳에 문제가 있다는 것을 알고 있습니다. 워크 플로우 단계가 통과되면 실패 할 때까지 무너진 코드를 시작하십시오.

다른 팁

나는 이것을 위에서 언급하려고 시도했지만 여기에는 멋지게 형식화되지 않았다.

아마 괜찮지 만 이것은 나에게 비린내처럼 보입니다.

// 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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top