SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




"Fehler bei der Anmeldung" - beim Schreiben eines ListItems per Workflow von außen

Unbeantwortet Dieser Beitrag hat 5 Antworten

Ohne Rang
32 Beiträge
LeonardoDaMunici erstellt 2 Dez. 2010 15:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich versuche mit Hilfe eines Workflows, der im Dynamics CRM abläuft, einen Kundendatensatz (Kontakt) in eine Liste im Sharepoint zu übertragen. Beim Zugriff auf Sharepoint bekomme ich einen Authentifizierungsfehler. Ich habe im Moment keinen Lösungsansatz, wie ich den auflösen kann. Vielleicht kann mir jemand helfen. Das wäre sehr nett.

(Dynamics CRM 4.0 und SharePoint 2007 laufen in derselben Domain. Der Workflow läuft im CRM unter einem User, der auch im Sharepoint Schreibrechte hat.)

private string loadNewCustomer(contact conatctEntity)
{
    try
    {
    string spUrl = "http://mydomain:7777";
    SPSite spSite = new SPSite(spUrl);
    spSite = new SPSite(spUrl, spSite.SystemAccount.UserToken);   
    SPWeb spWeb = spSite.OpenWeb();
    spWeb.AllowUnsafeUpdates = true;                              // <-- hier kommt der Error
    SPList spList = spWeb.Lists["Telefonliste"];
    SPListItem spListItem = spList.Items.Add();
    spListItem["Title"]   = "Herr";    //conatctEntity.fullname;
    spListItem["Vorname"] = "Jan";     //conatctEntity.firstname;
    spListItem["Nachname"] = "Keller";  //conatctEntity.lastname;
    spListItem.Update();
    return ("Success");
    }
    catch (Exception e)
    {
      return ( e.ToString());
    }
}

An der markierten Stelle wird folgender Fehler ausgeworfen:

System.Data.SqlClient.SqlException: Die von der Anmeldung angeforderte 'WSS_Content_xxx'-Datenbank kann nicht geöffnet werden. Fehler bei der Anmeldung.
Fehler bei der Anmeldung für den Benutzer 'NT-AUTORITÄT\NETZWERKDIENST'.
   bei System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) ................... usw.

Ich bin leider fachlich nicht sooo fit, was die Programmierung angeht. Darum ist jede Hilfe herzlich willkommen.

Danke!

LeonardoDaMunici

Alle Antworten

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 2 Dez. 2010 16:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

hm wieso nutzt du da überhaupt

spWeb.AllowUnsafeUpdates = true;

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
32 Beiträge
LeonardoDaMunici Als Antwort am 2 Dez. 2010 16:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich muss gestehen, ich habe mir den Code im Netz zusammengesucht und die Zeile erschien mir nicht unsinnig.

Die besagte Zeile ist sicher nicht für den Fehler verantwortlich. Wenn ich sie auskommentiere, kommt derselbe Fehler eine Zeile weiter unten ...

 SPList spList = spWeb.Lists["Telefonliste"];

 

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 2 Dez. 2010 16:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Der Fehler kommt, sobald Du das erstemal auf das SPWeb-Objekt zugreifst -> ich gehe davon aus, dass das SPWeb Objekt nicht korrekt initialisiert wurde.

Das allowUnsafeUpdates benötigst du für das Anlegen eines neuen Listenelements eigentlich nicht.

Das Initialisieren des SPSite-Objekts sieht auch seltsam aus. Normalerweise sollte die erste Zeile reichen:

[quote user="LeonardoDaMunici"]SPSite spSite = new SPSite(spUrl);
    spSite = new SPSite(spUrl, spSite.SystemAccount.UserToken); [/quote]

Wo liegt deine Liste? Auf der obersten Ebene der SiteCollection? Dann würde ich folgendes
[quote user="LeonardoDaMunici"]SPWeb spWeb = spSite.OpenWeb();
[/quote]

durch
SPWeb spWeb = spSite.RootWeb;

ersetzen.

Edit:
Hier mal eine Übersicht wie man die SPWebs korrekt initalisiert
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.aspx

Die "usings" brauchst du nicht unbedingt, aber zu anschauung ist das denke ich gut.

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
32 Beiträge
LeonardoDaMunici Als Antwort am 3 Dez. 2010 11:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke Für Deine Hilfe, aber das nützt alles nix. Der Fehler liegt irgendwo anders.

Ich Anlehnung an die vor Dir empfohlene Webseite habe ich den Code leicht modifiziert und laufe auf denselben Fehler, wieder beim öffnen der SPList.

        private string loadNewCustomer(contact conatctEntity)
        {
            using (SPSite oSiteCollection = new SPSite("http://mydomain:7777"))
            {
                using (SPWeb oWebsiteRoot = oSiteCollection.RootWeb)      //.OpenWeb())     // (alternativ)
                {
                    try
                    {
                        SPList oList = oWebsiteRoot.Lists["Telefonliste"];               //  <-- hier tritt der Fehler auf
                        SPListItem oListItem = oList.Items.Add();
                        oListItem["Title"] = conatctEntity.fullname;
                        oListItem["Vorname"] = conatctEntity.firstname;
                        oListItem["Nachname"] = conatctEntity.lastname;
                        oListItem.Update();
                        return("Success");
                    }
                    catch (Exception e)
                    {
                        return (e.ToString());
                    }
                }
            }
        }

Error:

System.Data.SqlClient.SqlException: Die von der Anmeldung angeforderte 'WSS_Content_xxx'-Datenbank kann nicht geöffnet werden. Fehler bei der Anmeldung.
Fehler bei der Anmeldung für den Benutzer 'NT-AUTORITÄT\NETZWERKDIENST'.
   bei System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
.... usw.

Der Fehler muss irgendwas mit der Authentifizierung zu tun haben. Ich verstehe z.B. nicht, warum der User während der runtime NT-AUTORITÄT\NETZWERKDIENST heißt und nicht so, wie er richtig heißt.

Also es ist so, dass der Workflow im Dynamics CRM läuft und quasi von außen in die Sharepoint-Liste zu schreiben versucht. Der Systemuser hat aber Schreibrechte (in dem Fall sogar Adminrechte) auf beide Plattformen. Diese laufen auf demselben Server in derselben Domain, nur ein anderer Port.

Falls jemand eine Idee hat, ich wäre sehr dankbar dafür. :-))

-LeonardoDaMunici-

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 3 Dez. 2010 11:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="LeonardoDaMunici"]es ist so, dass der Workflow im Dynamics CRM läuft und quasi von außen in die Sharepoint-Liste zu schreiben versucht[/quote]

Und genau da scheint das Problem zu liegen. Offenbar laufen diese Workflows im Kontext des "Netzwerkdienst". Entweder Du schaffst es den Benutzerkontext über Impersonation zu ändern (ich weiß nicht, wie das dort geht), oder Du wirst auf andere Methoden ausweichen müssen, wie z.B. den Zugriff auf SharePoint über Webservices.

Viele Grüße
Andi
af @ evocom de
Blog