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.




Anlegen eines privaten Bereichs und einem Blog

Geprüfte Antwort Dieser Beitrag hat 11 Antworten

Ohne Rang
194 Beiträge
Florian Lippert erstellt 15 Feb. 2011 09:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Servus allerseits,

zwei Punkte:

1.

Ich habe eine Liste mit Benutzern. Jeder dieser Benutzer muss einen persönlichen Bereich bekommen.

Die reguläre URL ist ja "http://servername/my/personal/Username/".. Ich habe es bis jetzt nur geschafft in "/my/" eine neue Site anzulegen, aber nicht unterhalb von "/personal/".

(Die Fehlermeldung hab ich leider nicht mehr...) Hat das schon mal jemand gemacht und kann mir da helfen?

Muss ich danach noch ne User - Site zuornung machen?

Noch eine andere Frage dazu: mit welchem User müsste ich arbeiten um die Berechtigungen zu umgehen und im persönlichen Bereich arbeiten zu können?

2.

In Zusammenhang mit Punkt 1 muss ich in den persönlichen Bereich noch jeweilis einen Blog anlegen.

Bisher habe ich dies versucht:

[quote]

userWeb.Site.AllWebs.Add("Blog", "Blog", "Blog", Convert.ToUInt32(1031), webTemp, true, true);

[/quote]

allerdings bekomme ich diese Meldung:

"Ein Ordner kann nicht umgewandelt werden, wenn eine Webvorlage angegeben wurde."

Wenn ich einfach nur ein Web ohne Vorlage und Co adde, dann funktioniert das...

Wie müsste ich es machen, dass auch die Erstellung mit einer Vorlage funktioniert?

(Am Ende soll die URL so aussehen: "http://servername/my/personal/username/blogname")

 

Ich danke euch schon im Voraus für die Hilfe.

VG

Florian

Alle Antworten

Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 16 Feb. 2011 14:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das UserProfil bekomme ich inzwischen angelegt, aber die PersonalSite wird einfach nicht erstellt.

Bei folgendem Code

[quote]

SPSite site = new SPSite(url);
SPUser thisUser = site.OpenWeb().SiteUsers.GetByEmail("example@email.de");


SPServiceContext serviceContext = SPServiceContext.GetContext(site);
UserProfileManager profileManager = new UserProfileManager(serviceContext);

if (profileManager.UserExists(thisUser.LoginName))
{
     UserProfile profile = profileManager.GetUserProfile(thisUser.LoginName);
     profile.CreatePersonalSite();
}

[/quote]

bekomme ich folgenden Fehler:

[quote]

Message    "Fehler beim Erstellen der Website."

InnerException    "Der Benutzer kann nicht gefunden werden."

StackTrace    "   bei Microsoft.Office.Server.UserProfiles.UserProfile.<>c__DisplayClass5.<CreateSite>b__3()\r\n   bei Microsoft.SharePoint.SPSecurity.<>c__DisplayClass4.<RunWithElevatedPrivileges>b__2()\r\n   bei Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)\r\n   bei Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)\r\n   bei Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode)\r\n   bei Microsoft.Office.Server.UserProfiles.UserProfile.CreateSite(String strRequestUrl, Boolean bCollision, Int32 lcid)\r\n   bei Microsoft.Office.Server.UserProfiles.UserProfile.CreatePersonalSite(Int32 lcid)\r\n

[/quote]

Kann mir jemand sagen wo das Problem ist? Danke!

Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 5 Apr. 2011 10:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich möchte mal wieder auf dieses Thema zurückkommen :P

Das selbe Problem besteht immer noch. Es heißt immer noch, dass der Benutzer nicht gefunden werden kann.

Im Internet finde ich zwar massenweise Beispiele zum Thema "CreatePersonalSite", aber dieser Fehler wird nirgends richtig behandelt oder erklärt. Es gibt öfters das Beispiel, dass beim anlegen Persmissions fehlen - da lautet der fehler aber anders.

Hier noch einmal mein aktueller Code: (Es handelt sich hierbei um eine Konsolen-Anwendung!)

[quote]

static void CreateMySite(string name)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                SPSite site = new SPSite("http://servername/");

                SPSite elevatedSite = new SPSite(site.Url, site.UserToken);
                site.Dispose();   
       
                using (elevatedSite)
                {
                    elevatedSite.AllowUnsafeUpdates = true;
                    elevatedSite.OpenWeb().AllowUnsafeUpdates = true;

                    SPServiceContext context = SPServiceContext.GetContext(elevatedSite);
                    UserProfileManager profileManager = new UserProfileManager(context);

                    if (profileManager.UserExists(name))
                    {
                        UserProfile spUser =
                        profileManager.GetUserProfile(name);
                        if (spUser.PersonalSite == null)
                        {
                            Console.WriteLine("Erstelle Seite...");
                            spUser.CreatePersonalSite();
                            Console.WriteLine("Erfolgreich!");
                        }
                        else
                        {
                            Console.WriteLine("Lösche Seite...");
                            spUser.PersonalSite.Delete();
                            Console.WriteLine("Erfolgreich!\rVorgang wird erneut gestartet.\r----------");
                            CreateMySite(name);
                        }
                    }

                    elevatedSite.AllowUnsafeUpdates = false;
                    elevatedSite.OpenWeb().AllowUnsafeUpdates = false;
                }
            });
        }

[/quote]

Ich hoffe, jemand hat eine Idee oder kann mir wenigstens die Richtung zeigen in die es gehen muss.

Vielen Dank!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Apr. 2011 10:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich kann Dir zwar nicht wirklich sagen wo das eigentliche Problem liegt, aber einiges zu Deinem Code:

In einer Konsolenanwendung ist RunWithElevatedPriviledges Quark. Der Code läuft immer im Kontext desjenigen, der die Anwendung ausführt. Meist braucht man dazu eine DOS-Box, die über Rechtsklick und "Als Administrator ausführen" gestartet wurde.

[quote user="Florian Lippert"]SPSite site = new SPSite("http://servername/");

                SPSite elevatedSite = new SPSite(site.Url, site.UserToken);
                site.Dispose();   
[/quote]

Das ist ebenfalls Quark. Die beiden erstellten SiteCollections sind absolut identisch, weil sie mit demselben UserToken arbeiten (für elevatedSite übernimmst Du einfach das von site).

[quote user="Florian Lippert"]elevatedSite.OpenWeb().AllowUnsafeUpdates = true;[/quote]

Du setzt damit eine Eigenschaft eines SPWeb, das Du niemals benutzt. Außerdem wird es nicht ordentlich aufgeräumt. Besser wäre sowas:

using (SPWeb web = elevatedSite.OpenWeb()) {
web.AllowUnsafeUpdates = true;

Aber wie gesagt, Du benutzt dieses Web ohnehin nicht. Und AllowUnsafeUpdates ist in einer Konsolenanwendung wohl auch nicht notwendig.

Zum eigentlichen Problem kann ich leider nichts sagen, aber ich tippe mal auf den ersten Punkt. Führe den Code unter einem User mit genügend Rechten aus.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 5 Apr. 2011 10:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für die Antwort.

Hatte mich da sehr dicht an einem Beispiel orientiert, dass ich im inet gefunden hatte...

Hast du evtl eine Idee wo er die Benutzer sucht?

Also ich arbeite mit dem lokalen Administrations-Account und der ist eig auch in SP überall als Admini eingestellt.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Apr. 2011 10:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Florian Lippert"]Hatte mich da sehr dicht an einem Beispiel orientiert, dass ich im inet gefunden hatte...[/quote]

Man sollte Beispiele aus dem Web aber niemals kritiklos übernehmen ;-)

[quote user="Florian Lippert"]Hast du evtl eine Idee wo er die Benutzer sucht?[/quote]

Wie meinst Du das? In SharePoint kommt es immer darauf an, wie man auf einen bestimmten Benutzer zugreift.

[quote user="Florian Lippert"]Also ich arbeite mit dem lokalen Administrations-Account und der ist eig auch in SP überall als Admini eingestellt[/quote]

Ihr habt einen SharePoint in der Domäne, aber als Farmadmin ein lokales Konto? Ganz schlechte Idee...

Ansonsten versuche mal meinen Hinweis mit der administrativen DOS-Box.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 5 Apr. 2011 11:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

[quote user="Florian Lippert"]Hatte mich da sehr dicht an einem Beispiel orientiert, dass ich im inet gefunden hatte...[/quote]

Man sollte Beispiele aus dem Web aber niemals kritiklos übernehmen ;-)

[/quote]

Ich habs ja angepasst :D

[quote user="Andi Fandrich"]

[quote user="Florian Lippert"]Hast du evtl eine Idee wo er die Benutzer sucht?[/quote]

Wie meinst Du das? In SharePoint kommt es immer darauf an, wie man auf einen bestimmten Benutzer zugreift.

[/quote]

Ich meine halt, ob er evtl versucht auf AD zuzugreifen oder ob er nur SP-Intern sucht...

[quote user="Andi Fandrich"]

[quote user="Florian Lippert"]Also ich arbeite mit dem lokalen Administrations-Account und der ist eig auch in SP überall als Admini eingestellt[/quote]

Ihr habt einen SharePoint in der Domäne, aber als Farmadmin ein lokales Konto? Ganz schlechte Idee..

[/quote]

Das is nur nen Test-System :D nichts produktives xD

[quote user="Andi Fandrich"]Ansonsten versuche mal meinen Hinweis mit der administrativen DOS-Box.[/quote]

also das ganze mal mit rechts klick - als admin ausführen? aber kommt da nichts das selbe bei raus, wenn ich eh als admin angemeldet bin?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Apr. 2011 11:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Florian Lippert"]Ich meine halt, ob er evtl versucht auf AD zuzugreifen oder ob er nur SP-Intern sucht...[/quote]

Hängt wie gesagt von der Methode ab. SPWeb.AllUsers nimmt z.B. nur die eines bestimmten Webs. SPWeb.EnsureUser schaut auch im AD.

[quote user="Florian Lippert"]Das is nur nen Test-System :D nichts produktives xD[/quote]

Trotzdem braucht es z.B. für alles rund um die Benutzerprofile (und vieles andere) Zugriff auf's AD. Domänenmitglieder dürfen das, lokale Konten nicht.

[quote user="Florian Lippert"]das ganze mal mit rechts klick - als admin ausführen? aber kommt da nichts das selbe bei raus, wenn ich eh als admin angemeldet bin?[/quote]

Seit Vista/Server2008 macht das sehr wohl einen Unterschied. Es sei denn man schaltet UAC komplett ab.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 5 Apr. 2011 11:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es scheint zu funktionieren! :) Danke!

Folgenden Code habe ich mit meinem "globalen" Benutzer ausgeführt - zusätzlich rechtsklick + Als Admin.

[quote]

static void CreateMySite(string name)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                SPSite site = new SPSite("http://servername/");
       
                using (site)
                {
                    site.AllowUnsafeUpdates = true;

                    SPServiceContext context = SPServiceContext.GetContext(site);
                    UserProfileManager profileManager = new UserProfileManager(context);

                    if (profileManager.UserExists(name))
                    {
                        UserProfile spUser =
                        profileManager.GetUserProfile(name);
                        if (spUser.PersonalSite == null)
                        {
                            Console.WriteLine("Erstelle Seite...");
                            try
                            {
                                spUser.CreatePersonalSite();
                                Console.WriteLine("Erfolgreich!");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("Fehlgeschlagen!");
                                Console.WriteLine(ex.Message);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Lösche Seite...");
                            spUser.PersonalSite.Delete();
                            Console.WriteLine("Erfolgreich!");
                            CreateMySite(name);
                        }
                    }

                    site.AllowUnsafeUpdates = false;
                }
            });
        }

[/quote]

Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 5 Apr. 2011 14:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Kurzer Nachtrag zu em Punkt "einen Blog in der PersonalSite anlegen":

[quote]

SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                SPSite site = new SPSite("http://servername/");

                using (site)
                {
                    site.AllowUnsafeUpdates = true;

                    SPServiceContext context = SPServiceContext.GetContext(site);
                    UserProfileManager profileManager = new UserProfileManager(context);

                    if (profileManager.UserExists(name))
                    {
                        UserProfile spUser =
                        profileManager.GetUserProfile(name);
                        if (spUser.PersonalSite != null)
                        {
                            Console.WriteLine("UserSite gefunden: " + spUser.PersonalSite.Url);
                            SPWeb userWeb = spUser.PersonalSite.OpenWeb();
                            Console.WriteLine("Lade Blog-Template...");
                            SPWebTemplate blogTemp = site.GetWebTemplates(Convert.ToUInt32(1031))[11];
                            Console.WriteLine("Erfolgreich!\r\n");

                            Console.WriteLine("Lege Blog im persönlichen Bereich an...");
                            userWeb.Webs.Add("Blog", "Blog", "Blog", Convert.ToUInt32(1031), blogTemp, true, false);
                            Console.WriteLine("Erfolgreich!");

                            Guid newBlogGuID = new Guid("863da2ac-3873-4930-8498-752886210911");
                            spUser.PersonalSite.Features.Add(newBlogGuID);
                        }
                        else
                        {
                            CreateMySite(name);
                        }
                    }

                    site.AllowUnsafeUpdates = false;
                }
            });

[/quote]

An den roten Stellen kann es evtl. zu Abeichungen kommen!

Das Feautre ist dafür da, dass auf der PersonalSite der Dialog "Blog erstellen" verschwindet!

Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 12 Apr. 2011 09:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es klappt alles...

Aber irgendwie ist mir eine Funktion verschwunden. Wenn man oben rechts auf seinen Namen klickt, kommt ja so nen Menü und hier gibts ja eigentlich das feld "Meine Website". Das Feld kommt bei mir leider nicht mehr. Ich hatte aber nichts umgestellt...

Ich hatte mir schon diesen Tipp angeschaut, aber der hat mir leider nicht weitergeholfen. Das Recht ist gesetzt...

Danke für eure Hilfe

Ohne Rang
194 Beiträge
Florian Lippert Als Antwort am 13 Apr. 2011 16:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hm,

hat niemand eine Idee warum die Schaltfläche Weg sein könnte?

Bzw. weiß jemand was die vorraussetzungen sind, damit diese angezeigt wird?

Danke...