Sharepoint 2003 - Benutzer-Langnamen ändern
Die Langnamen im Active-Directory wurden geändert, ein AD-User-Import im Sharepoint durchgeführt, die Namen sind aber trotzdem noch die alten, was kann man tun?
Sharepoint hat leider die Angewohnheit die aktuellen Langnamen munter in Teamsites, Listeneinträgen usw. abzuspeichern. Wenn sich die Langnamen im Active Directory ändern (weil z.B. die Abteilungskürzel unternehmensweit Bestandteil des Langnamens sind, und sich die Abteilungshierarchie ändert), steht in Listen und Teamsites immer noch der alte Name.
Der Grund dafür ist, dass Sharepoint die Langnamen in zwei unterschiedlichen Tabellen (in unterschiedlichen Datenbanken) redundant führt. Beim AD-Import wird nur die eine Tabelle angepasst.
Um das Problem zu lösen habe ich eine kleines TSQL-Programm geschrieben, welches die Langnamen nach einem AD-Import in der anderen Tabelle nachzieht. Ausserdem werden sämtliche Vorkommnisse des alten Benutzernamens in den persönlichen Seiten geändert.
Wichtig:
Die Datenbanknamen TABLE_SITE und TABLE_PROF müssen angepasst werden, sie sind installationsabhängig. Sie heißen allerdings immer <servername>_SITE und <servername>_PROF
/* Variablendeklarationen */
DECLARE @newname varchar(200)
DECLARE @ntname varchar(200)
DECLARE @username varchar(200)
/* Cursor läuft durch Profile-Tabelle */
DECLARE usercursor CURSOR SCROLL
FOR
SELECT ntname,
preferredname,
substring(ntname,CHARINDEX('\',ntname)+1,100) AS username
FROM TABLE_PROF.dbo.userprofile
OPEN usercursor
FETCH FIRST FROM usercursor INTO @ntname, @newname, @username
WHILE @@Fetch_Status=0
BEGIN
FETCH NEXT FROM usercursor INTO @ntname, @newname, @username
/* Aktualisieren der Langnamen in der Userinfo-Tabelle
** zuständig für Listeneinträge etc.
*/
UPDATE TABLE_SITE.dbo.userinfo
SET tp_title=@newname
WHERE tp_login=@ntname
/* Aktualisieren der Usernamen und Descriptions
** in den persoenlichen Seiten
*/
UPDATE TABLE_SITE.dbo.Webs
SET
description = cast(REPLACE(cast(description AS nvarchar(4000)),
title, @newname) AS ntext),
title = @newname
WHERE
parentwebid IS NULL
AND substring(FullUrl,CHARINDEX('/',FullUrl)+1,100) = @username
END
DEALLOCATE usercursor