2013-08-06 2 views
0

프로젝트의 기본 개념은 SharePoint에 액세스하고 특정 파일이 있는지 확인하고 다른 사용자가 파일을 고정하지 않았는지 확인한 다음 해당 파일이 두 조건이 충족되면 excel이 파일을 열고 파일과 함께 처리 한 다음 파일을 저장하고 다시 닫습니다.SharePoint 클레임 - 인증, 쿠키, C# 및 Excel-DLL/tld

문제는 프로그램이 SharePoint에 액세스하여 확인 단계를 실행하는 시점입니다. 처음에이 첫 번째 문제는 SOAP를 사용하는 VBA에서 직접적으로 발생했으며 2010 년부터 SharePoint를 2013 년으로 다운 그레이드하기 전까지는 매우 효과적이었습니다. 지금은 Visual Studio와 C#을 사용하여 동일한 작업을 수행하고 있습니다. SOAP은 SP2010에서하고있었습니다.

코드를 구현하려고 시도했습니다 : http://www.vrdmn.com/2013/01/authenticating-net-client-object-model.html, 그러나 나는 그것을 작동시킬 수 없습니다. 이 브라우저 창을 열고 유효한 쿠키를 확인하고 쿠키를 읽으면 사용자를 SharePoint에 로그인 한 다음 브라우저를 닫는 2010 인증 모델입니다. 계속해서.

public CookieCollection Show() 
    { 
     if (string.IsNullOrEmpty(this.LoginPageUrl)) throw new ApplicationException(Constants.MSG_NOT_CLAIM_SITE); 

     // navigate to the login page url. 
     this.webBrowser.Navigate(this.LoginPageUrl); 

     DisplayLoginForm = new Form(); 
     DisplayLoginForm.SuspendLayout(); 

     // size the login form 
     int dialogWidth = Constants.DEFAULT_POP_UP_WIDTH; 
     int dialogHeight = Constants.DEFAULT_POP_UP_HEIGHT; 

     if (PopUpHeight != 0 && PopUpWidth != 0) 
     { 
      dialogWidth = Convert.ToInt32(PopUpWidth); 
      dialogHeight = Convert.ToInt32(PopUpHeight); 
     } 

     DisplayLoginForm.Width = dialogWidth; 
     DisplayLoginForm.Height = dialogHeight; 
     DisplayLoginForm.Text = this.fldTargetSiteUrl; 

     DisplayLoginForm.Controls.Add(this.webBrowser); 
     DisplayLoginForm.ResumeLayout(false); 

     //DisplayLoginForm.Show(); 

     Application.Run(DisplayLoginForm); 

     // see ClaimsWebBrowser_Navigated event 
     //DisplayLoginForm.Dispose(); 
     return this.fldCookies; 
    } 

문제는 Application.Run (DisplayLoginForm)에서 발생합니다. 코드를 한 줄씩 살펴보면 모든 것이 잘 작동하고 VBA 코드 내에서 필요한 결과를 얻을 수 있습니다. 그러나 F5 (디버그 모드 또는 릴리스 모드로 빌드하여)로 프로그램을 실행하면 Application.Run (DisplayLoginForm)은 쿠키 항아리 (내 용어 및 가능성이 가장 높을 때)와 함께 응용 프로그램 (및 Excel과 함께)을 강제 종료합니다. 컴퓨터 용어가 아님) 유효한 쿠키가 있는지 검사했습니다.

코드에서 DisplayLoginForm.Show()를 사용하려고 시도했습니다. Application.Run보다는 오히려 내가 찾고자하는 파일에 대한 null 참조가 계속되었으므로 접근법이 작동하지 않습니다.

나는 (분명히 창 형태로 설정) 웹 브라우저, 필요한 경우 사용자에게 메시지를 표시, 쿠키를 찾아을 보여주고 가야합니까 어떻게, 웹 브라우저를 닫습니다

그래서 여기에 질문입니다 적절한 값 (file.exists 및 file.islockedbyuser.email, 둘 다 VBA에서 호출되는 함수에 있으며 둘 다 잘 작동 함)을 반환 할만큼 충분히 오래 지속 된 다음 종료하지 않고 프로그램을 마칩니다. 그 과정에서 Excel 다운?

+0

나는 두 번째 스레드에서 브라우저를 열어 가능한 해결책을 찾았다 고 생각합니다. 나는 그것을 통해 일하며 어떤 일이 일어날지를 볼 것입니다. 그동안 누군가에게 제안이 있으면 그것을 읽고 싶습니다. –

답변

0

이 질문에 대한 대답은 브라우저와 로그인 시퀀스를 운영 할 새로운 스레드를 설정하고, 기본 스레드 (그리고 Excel 스레드가 실행되는 스레드)로 돌아가서 자격 증명으로 컨텍스트를 반환하는 것입니다. 파일을 쿼리 할 수 ​​있습니다.