Announcement

Collapse
No announcement yet.

VB und Sharepoint

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VB und Sharepoint

    Hi,

    ich greife inzwischen erfolgreich über VB auf SharePoint (in dem Falle Sharepoint Online) zu. Ich habe eine Crawler gebaut, der über den SharePoint drüber geht und Dateinamen sammelt. Klappt genau wie ich das haben will. Stellt Euch vor, ich habe jetzt zig hundert Dateinamen in einer Liste. Jetzt gehe ich ein paar Tage später mit der Liste über den SharePoint drüber und will schauen, ob die Dateien noch da sind. Klappt auch.

    Aber: Da ich nicht weiß, auf welche Ebene die Credentials "greifen" versuche ich es immer von "unten nach oben" und teste auf die Credentials. Code steht unten.

    Was mich nachhaltig stört ist natürlich, dass es dabei immer auch mal zu abgelehnten Zugriffen kommen kann, wenn die Berechtigungen auf der Ebene nicht gesetzt sind. Das kostet jede Menge Zeit.

    Meine konkrete Frage: Weiß jemand, wie ich fix rausbekommen kann, auf welcher Ebene in einem Verzeichnispfad die Credentials liegen bzw. angefragt werden müssen? Vielleicht stelle ich mich auch viel zu umständlich an, bin mir da nicht sicher.

    Beispiel:

    Datei: https://company-my.sharepoint.com/pe...1OneDrive.xlsx

    1. Versuch:

    https://company-my.sharepoint.com/personal/vorname_nachname_mycompany_onmicrosoft_com/Documents/ --> Geht schief, keine "Credentials"

    2. Versuch

    https://company-my.sharepoint.com/pe...microsoft_com/ --> Klappt, Credentials vorhanden, ich kann zugreifen.

    Vielen Dank im Voraus!

    Bat


    Function GetSharepointClientContextFromFile(ByVal filename As String, ByVal SUsername As String, ByVal sKennwort As String,
    ByRef spClientContext As ClientContext, ByRef errorstack As String) As Boolean


    errorstack = ""
    Dim a() As String

    ' Erst mal den Pfad aus der Datei holen
    Dim pth As String
    pth = Left(filename, filename.Length() - Path.GetFileName(filename).Length())

    If Right(pth, 1) = "/" Then pth = Left(pth, Len(pth) - 1)
    a = pth.Split("/")
    If a.GetUpperBound(0) = 0 Then Return False
    If a(0).ToUpper() <> "HTTP:" And a(0).ToUpper() <> "HTTPS:" Then Return False

    If a.GetLowerBound(0) + 2 > a.GetUpperBound(0) Then Return False

    For i As Long = a.GetUpperBound(0) To a.GetLowerBound(0) + 2 Step -1
    Dim s As String
    s = ""
    For j As Long = a.GetLowerBound(0) To i
    s = s & a(j) & "/"
    Next j
    Debug.Print("Test: " & s)
    If GetSharepointClientContextSub(s, SUsername, sKennwort, spClientContext, errorstack) Then
    Debug.Print("Found")
    Return True
    End If
    Next i

    return false
    end function

    Und die Func ist so:



    Private Function GetSharepointClientContextSub(ByVal pth As String, ByVal SUsername As String, ByVal sKennwort As String,
    ByRef spClientContext As ClientContext, ByRef errorstack As String) As Boolean

    Try
    spClientContext = New ClientContext(pth)

    Dim passWord As SecureString = New SecureString()
    For i As Long = 0 To Len(sKennwort) - 1
    passWord.AppendChar(sKennwort.Chars(i))
    Next
    spClientContext.Credentials = New SharePointOnlineCredentials(SUsername, passWord)

    Dim Web As Web = spClientContext.Web
    spClientContext.Load(Web)
    spClientContext.ExecuteQuery()

    Return True
    Catch ex As Exception
    errorstack = errorstack & IIf(errorstack <> "", ", ", "") & "(Pfad: " & pth & ": " & ex.HResult & " - " & ex.Message & ")"
    Return False
    End Try
    End Function


Working...
X