Как вернуть «Мои ссылки» в SharePoint после удаления и восстановления профиля? - PullRequest
3 голосов
/ 02 октября 2009

Мы работаем с SharePoint 2007 с пакетом обновления 1 (SP1), и профили импортируются из Active Directory (полный импорт выполняется ежедневно). У нас была проблема, когда многие пользователи были случайно отключены в Active Directory, и это привело к удалению их профилей из SharePoint. Мы повторно включили их учетные записи Active Directory и запустили полный импорт, который восстановил их профили SharePoint. Тем не менее, все их ссылки отсутствуют. Есть ли метод или лучшая практика для их восстановления?

Ответы [ 3 ]

6 голосов
/ 02 октября 2009

Я написал это, потому что нигде не смог найти ответ на свою проблему. Этот пост Джоэля Олесона , в котором описана проблема, аналогичная моей, дал мне подсказку, куда обращаться в поисках недостающих данных. И Этот пост Кори Рота показал мне, как программно добавлять ссылки пользователям Мои ссылки.

Перво-наперво - вам нужно восстановить резервную копию базы данных, которая содержит данные My Links. Вы не хотите восстанавливать поверх своей рабочей базы данных, вы хотите восстановить ее в другом месте. Ссылки хранятся в базе данных SSP. (Вы можете узнать имя базы данных, зайдя в Central Admin -> Shared Services Admin, затем откройте меню для SSP и нажмите Edit Properties - база данных SSP приведена на странице свойств.)

После восстановления базы данных вы хотите получить информацию о ссылке:

  • имя учетной записи домена пользователя, которому принадлежит ссылка,
  • URL ссылки
  • название ссылки

Этот запрос даст вам эту информацию:

SELECT UPF.NTName, UL.Url, UL.Title
FROM UserLinks UL INNER JOIN UserProfile_full UPF ON UL.recordID = UPF.recordID
INNER JOIN UserPrivacyPolicy UPP ON UL.PolicyId = UPP.id
ORDER BY NTName

(я должен отметить, что я не принял во внимание, к какой группе или уровню конфиденциальности были установлены ссылки, вы, вероятно, могли бы найти эту информацию, просмотрев информацию в таблице UserPrivacyPolicy)

Я скопировал результаты в Excel и сохранил их в виде файла .csv (список, разделенный запятыми) - просто потому, что у моего рабочего сервера не было доступа к месту, где я восстановил свою базу данных. Я заказал столбцы с заголовком «Последний», потому что заголовок может содержать запятые, и это может испортить то, как я читаю данные. (Я проверил, а два других поля не содержат запятых - вы должны проверить свои, прежде чем делать это предположение.)

Затем я написал небольшое консольное приложение для импорта данных. Требуется два аргумента:

  • путь к файлу, содержащему все ссылки (например, c: \ temp \ links.csv)
  • URL SSP с My Links пропал (т.е. https://portal.mydomain.com)

Используются следующие ссылки:

  • Microsoft.Office.Server (C: \ Program Files \ Common Files \ Microsoft Shared \ Расширения веб-сервера \ 12 \ ISAPI \ Microsoft.Office.Server.dll)
  • Microsoft.SharePoint (C: \ Program Files \ Common Files \ Microsoft Shared \ Расширения веб-сервера \ 12 \ ISAPI \ Microsoft.SharePoint.dll)
  • System
  • System.Data
  • System.Web
  • System.Xml

А это код:

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System.Web;

namespace UserLinks
{
    class Program
    {
        static void Main(string[] args)
        {
            string _accountName = "", _linkTitle = "", _url = "", _tmp = "", _path = "", _SPSsite = "";

            // Check arguments
            if (args.Length != 2)
            {
                ShowUsage();
                return;
            }

            _path = args[0];
            _SPSsite = args[1];

            using (SPSite _site = new SPSite(_SPSsite))
            {
                ServerContext _context = ServerContext.GetContext(_site);
                UserProfileManager _userProfileManger = new UserProfileManager(_context);

                /* Expecting a comma seperated list with 3 columns:  
                 * AccountName in the format Domain\Account name - I am assuming there are no commas in this field
                 * URL - I am assuming there are no commas in this field
                 * Link Title - link title is last because there may be commas in the title
                */
                TextReader _reader = new StreamReader(_path, System.Text.Encoding.Default);
                while (_reader.Peek() != -1)
                {
                    _tmp = _reader.ReadLine();
                    _accountName = _tmp.Substring(0, _tmp.IndexOf(','));
                    _tmp = _tmp.Replace(_accountName + ",", "");
                    _url = _tmp.Substring(0, _tmp.IndexOf(','));
                    _linkTitle = _tmp.Replace(_url + ",", "");

                    try
                    {
                        UserProfile _currentUser = _userProfileManger.GetUserProfile(_accountName);
                        QuickLinkManager _quickLinkManager = _currentUser.QuickLinks;
                        _quickLinkManager.Create(_linkTitle, _url, QuickLinkGroupType.General, null, Privacy.Private);  //I am assuming that all links have no group assigned to them and they are all private links
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(_accountName);
                        Console.WriteLine(ex);
                    }

                }
                _reader.Close();

            }
        }

        private static void ShowUsage()
        {
            Console.WriteLine("Usage");
            Console.WriteLine("UserLinks [FilePath] [SharePoint URL]");
        }

    }
}

Таким образом, проблема решена и в качестве дополнительного преимущества эта программа может использоваться для принудительного отображения ссылок в списке Мои ссылки пользователя.

1 голос
/ 02 октября 2009

В этом посте содержится довольно хорошая информация о MyLinks и ее взаимосвязи с базой данных SSP (именно там эти ссылки хранятся нелогично.) Надеемся, вы сможете проверить, что эти ссылки все еще существуют; и что они связаны с правильными профилями.

http://www.k2distillery.com/2009/01/moving-sharepoint-my-links-between-ssps.html

0 голосов
/ 02 октября 2009

Когда вы делаете импорт профиля, вы обычно рискуете потерять существующую настройку / обновленную информацию.

...