Sharepoint-Listen Zugriff

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sharepoint-Listen Zugriff

    Guten Morgen.

    Ich muss einen Migrator von Listen eines Sharepoint Portal Server (Microsoft) zu einer Wiki erstellen.
    Was sich Anfangs als 0815-Parser anhört stellt sich als deutlich schwerer als ich dachte.
    Ich habe leider keinen Zugriff auf die MsSQL-Datenbank und muss so andere Wege gehen.
    Im Forum fand ich dazu nur 1 Topic und dieser war leider unbeantwortet bzw. hat das Thema auch nicht wirklich getroffen. Aber ich habe dem Threadersteller mal eine PM geschrieben.

    Meine erste Idee war folgende:

    - Auf Server zugreifen, Quelltext speichern und per Regex die gewünschten Informationen herauszubekommen. Doch dies entpuppte sich als schwerer Weg, da die Authentifizierung bei dem Portal Server via NTLM funktioniert.
    Mit Hilfe einiger Website (1, 2 (pear),3) konnte ich am Ende zwar NTLM verstehen aber mit PHP anwenden war nicht so einfach.
    Letztendlich konnte ich es in Java hinkriegen und musste feststellen, dass die gewollten Informationen per Javascript in die Website eingeführt werden und so hatte ich nun zwar Zugriff auf den gewollten Quelltext bloß ohne wirklichen Inhalt.


    - Durch Zufall stoß ich dann auf die Webdienste vom Portal-Server ([Servername]/_vti_bin/Lists.asmx). Diesen spricht man per einfache SOAP-Anfrage an.

    Microsoft gibt folgendes Beispiel an:
    Code:
     POST /_vti_bin/Lists.asmx HTTP/1.1
    Host: Servername
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    SOAPAction: "http://schemas.microsoft.com/sharepoint/soap/GetList"
    
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <GetList xmlns="http://schemas.microsoft.com/sharepoint/soap/">
          <listName>string</listName>
        </GetList>
      </soap:Body>
    </soap:Envelope>
    
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <GetListResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
          <GetListResult>
            <xsd:schema>schema</xsd:schema>xml</GetListResult>
        </GetListResponse>
      </soap:Body>
    </soap:Envelope>
    Problematisch dabei ist, dass man sicher wieder per NTLM authentifizieren muss und hier bin ich auch stecken geblieben. Im Internet findet man zu diesem Thema nur VB.Net- oder C#-Skripte, die dies mit Hilfe von "System.Net.CredentialCache.DefaultCredentials" lösen. (Beispielskript, msdn: Sichere Datenübertragung mit XML Web Services)
    Aber wie ich das per PHP lösen könnte ist unauffindbar. Die Benutzerdaten weiß ich und möchte sie eigtl. nur in die SOAP-Anfrage mitgeben (Header oder sonst was)

    Mein MiniBeispiel-Code:
    PHP-Code:
    <?php
    $client 
    = new SoapClient('http://Servername/_vti_bin/Lists.asmx?WSDL');

    $credentials = array('username'=>'username','password'=>'passwort');

    $auth = new SoapVar($credentialsSOAP_ENC_OBJECT);

    $res $client->GetListCollection();

    var_dump($res); 

    ?>
    Gibt diese Fehlermeldung aus, da ich mich nicht authentifizieren kann bzw. es falsch anwende:
    Code:
    Fatal error: Uncaught SoapFault exception: [HTTP] Unauthorized in
    C:\Programme\xampp\htdocs\test.php:9 Stack trace: #0 [internal 
    function]: SoapClient->__doRequest('<?xml version="...', 
    'http://servername...', 'http://schemas....', 1, 0) #1 [internal function]: SoapClient->__call('GetListCollecti...', Array) #2 
    C:\Programme\xampp\htdocs\test.php(9): SoapClient->GetListCollection() #3 {main} thrown in 
    C:\Programme\xampp\htdocs\test.php on line 9
    Hat jemand eventuell nen Rat?

    nico



    ----
    Daten:
    PHP Version 5.2.3 (Testumgebung)
    PHP Version 5.2.1 (späterer Server)


    Zuletzt geändert von cholin; 05.10.2007, 10:42.

  • #2
    genau!

    Kommentar


    • #3
      Ich entnehme mal aus dem Post, dass keiner irgendwas verstanden hat.

      Also ich möchte die Webdienste des SharePoint-Portal Servers (Microsoft) nutzen.
      Genauer gesagt möchte ich per SOAP-Anfrage an die Daten der Listen kommen.
      Das einzige was ich dazu von Microsoft finden konnte war eine Dokumentation zur Sichere Datenübertragung mit XML Web Services und eine Beispiel SOAP-Anfrage, welche folgende ist:
      Code:
          POST /_vti_bin/Lists.asmx HTTP/1.1
          Host: Servername
          Content-Type: text/xml; charset=utf-8
          Content-Length: length
          SOAPAction: "http://schemas.microsoft.com/sharepoint/soap/GetList"
      
          <?xml version="1.0" encoding="utf-8"?>
          <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            <soap:Body>
              <GetList xmlns="http://schemas.microsoft.com/sharepoint/soap/">
                <listName>string</listName>
              </GetList>
            </soap:Body>
          </soap:Envelope>
      
          HTTP/1.1 200 OK
          Content-Type: text/xml; charset=utf-8
          Content-Length: length
      
          <?xml version="1.0" encoding="utf-8"?>
          <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            <soap:Body>
              <GetListResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
                <GetListResult>
                  <xsd:schema>schema</xsd:schema>xml</GetListResult>
              </GetListResponse>
            </soap:Body>
          </soap:Envelope>
      Doch scheitern jegliche Versuche eine SOAP-Anfrage zu schicken daran, dass man an der Authentifizierung scheitert.
      Im Internet findet man dazu nur Skripte in VB.NET oder C#. (Beispiel)
      Diese greifen auf das windowsintegrierte Authentifizierungszeugs per "System.Net.CredentialCache.DefaultCredentials" zurück und können sich so erfolgreich einloggen.

      Nun ist die Frage, wie ich mich in PHP, per SOAP-Header zum Beispiel (falls der Server das unterstützt), einloggen könnte, wenn ich die Benutzerdaten habe.
      Da ich wenig Informationen darüber finde, bin ich bisschen ratlos wie man das handhaben sollte.

      Ein anderer Weg wäre per Javascript. (Querying a SharePoint list with javascript)

      Nun wollte ich halt davor aber nochmal nachfragen, ob nicht jmd mit dem SharePoint-Portal Server Erfahrung hat und mir eventuell sagen könnte wie ich vorgehen sollte.
      Zuletzt geändert von cholin; 05.10.2007, 12:02.

      Kommentar


      • #4
        Hallo cholin,

        ich habe mein Problem mittlerweile gelöst und erstelle gerade eine Beschreibung die mir als Dokumentation dienen soll und die ich auch als Tutorial hier veröfentlichen wollte ... brauche aber noch etwas Zeit dafür.

        Hier das wichtigste in Kürze:

        PHP SOPA unterstützt keine NTLM Authentifizierung, daher musst du den Sharepoint auf Basisauthetifizierung umstellen. Nun kann per SOAP ein Benutzer angemeldet werden. Die Einstellungen sind in der Zentraladministration vom Sharepoint vorzunehmen.

        Danach sind einfache Anfragen wie GetList kein Problem mehr. Etwas schwieriger sind Anfragen die einen Parameter vom Typ schema erwarten. Hier habe ich per DOM die entsprechende Ausgabe erzeugt und als HTML ausgegeben.

        Bisher habe ich Daten mit einem Kalender ausgetauscht. Aus einer Webanwendung mit PHP schreibe ich Einträge in der Sharepoint Kalender und lasse mir die ID für die Webanwendung zurückgeben. Wenn in der Web Anwendung jetzt der Eintrag gelöscht wird, kann ich auch per SOAP der Eintrag im Sharepoint Kalender löschen - klappt wunderbar.

        Ich hoffe, du kommst damit weiter.

        Gruß
        Patrick

        Kommentar


        • #5
          SharePoint-Zugriff

          Befasse mich ebenfalls mit dem Thema und erhalte dauernd die Fehlermeldung

          Code:
          Uncaught SoapFault exception: [HTTP] Unauthorized
          Wie habt ihr die NTLM-Authentifizierung hinbekommen?

          Kommentar

          Lädt...
          X