Устранение неполадок, связанных с политиками
Профили политик и документы в представлении $Policies
DCC записывает на клиентскую машину сначала профиль политик, а затем набор из одного или нескольких документов представления $Policies (зависящий от количества параметров, содержащихся в применяемой политике).
Что касается профилей политик, то это документы, которые служат отметками даты и времени, и указывают, когда была применена конкретная политика. Этим способом инструмент DCC узнает, проводилось ли обновление конкретной политики и нужно ли снова применять к клиенту Notes содержимое политики (и связанные с нею параметры политики).
Поскольку документы профилей по определению не отображаются ни в одном представлении (поэтому к ним сложно обращаться иначе, как программно), лучшим инструментом для доступа к профилям политик является NotesPeek. Бесплатную ко- пию этого инструмента можно скачать с сайта Lotus Sandbox по адресу http://www.lotus.com/ldd/sandbox.nsf/0/2791869f4e1d3fa385256f2c00432973?OpenDocument
При помощи NotesPeek можно открыть локальную книгу имен и адресов пользователя (т. е. локальную базу данных NAMES.NSF) и можно обращаться ко всем документам профилей. Эти документы удобно сгруппированы в категорию Profiles (Профили) (рис. D.1), в которой находятся не только профили политик (которые обозначаются как $policyprofile), но и другие документы профилей.
Чтобы очистить профили политик, используйте код, приведенный в примере D.1, связав его с простой кнопкой, кнопкой действия или с агентом.
Sub Initialize '--- Объявление переменных классов Dim s As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument '--- Инициализация переменных классов Set db = s.currentdatabase Set col = db.GetProfileDocCollection("$policyprofile") '--- Удаление всех профилей политик Call col.Removeall(True) End SubПример D.1. Код, очищающий профили политик
Данный код удаляет все профили политик (но не другие профили, и именно поэтому лучше всего использовать этот код) в локальной пользовательской книге имен . и адресов. На рис. D.2 показан результат использования данного кода.
Теперь, когда пользователь снова обратится к серверу, содержащему политику (либо политику организации, к иерархии которой принадлежит пользователь, либо явную политику, назначенную пользователю), DCC передаст параметры политик клиенту Notes и запишет операцию в профиль политик, как показано на рис. D.3.
Документы политик
Еще одно место, в которое DCC записывает информацию, – это представление
$Policies локальной пользовательской книги имен и адресов. Это скрытое представление,
поэтому для доступа к нему нужно использовать одну хитрость. Перейдите в рабочее
пространство Notes (страница со ссылками на все базы данных). Нажмите клавиши
Ctrl+Shift (и удерживайте их), щелкните правой кнопкой мыши по базе данных
Name and Address book и выберите пункт меню Database (База данных) Go To
(Перейти). Откроется список представлений, имеющихся в базе данных, включая
скрытые представления. Выберите представление $Policies. Откроется
представление, сходное с показанным на рис. D.4.
Это еще одно место, где могут возникать проблемы, и, как и в случае с профилями политик, лучше всего использовать код, приведенный в примере D.2, связав его с простой кнопкой, кнопкой действия или агентом.
Этот код удаляет все документы в представлении $Policies локальной книги имен и адресов пользователя. После повторного соединения пользователя с сервером, действующая для данного пользователя политика (политика организации или явная политика) передается клиенту и данные записываются в локальную пользовательскую книгу имен и адресов. На рис. D.5 приведен результат использования этого кода и записи новой информации о политиках.
Sub Initialize '--- Объявление переменных классов Dim s As New NotesSession Dim db As NotesDatabase Dim view As NotesView Dim doc As NotesDocument Dim collection As NotesViewEntryCollection Dim entry As NotesViewEntry '--- Инициализация переменных классов Set db = s.GetDatabase("", "names") Set view = db.GetView( "($Policies)" ) Set collection = view.AllEntries Set entry = collection.GetFirstEntry() '--- Обработка всех документов в представлении ($Policies) While Not(entry Is Nothing) Set doc = entry.Document doc.Remove(True) Set entry = collection.GetNextEntry(entry) Wend End SubПример D.2. Код для удаления всех документов в представлении $Policies
На рис. D.5 для пользователя была определена явная политика, содержащая документ настроек рабочего стола. При передаче параметров этой политики было переписано 4 документа, один из которых является собственно политикой, а 3 других относятся к параметрам рабочего стола.
Процедура очистки
Мы рассказали об инструменте Dynamic Client Configuration (DCC), о профилях политик и о документах в представлении $Policies. Мы также рассказали о методе очистки профилей политик и документов в представлении $Policies. Теперь мы опишем процедуру очистки, применяемую, если проблемы связаны с одним пользователем.
Если предположить, что DCC работает как ожидается (в DCC очень редко возникают проблемы, если возникают вообще), то способом устранения проблем, связанных с применением политики к пользователю, является очистка и профилей политик, и документов в представлении $Policies, которые находятся в локальной книге имен и адресов пользователя.
Чтобы сэкономить время и силы (и уменьшить вероятность ошибок) используйте приведенный в примере D.3 код для очистки профилей политик и документов в представлении $Policies.
Sub Initialize '--- Объявление переменных классов Dim s As New NotesSession Dim db As NotesDatabase Dim view As NotesView Dim doc As NotesDocument Dim collection As NotesViewEntryCollection Dim entry As NotesViewEntry '--- Инициализация переменных классов Set db = s.GetDatabase("", "names") Set view = db.GetView( "($Policies)" ) Set collection = view.AllEntries Set entry = collection.GetFirstEntry() Set col = db.GetProfileDocCollection("$policyprofile") '--- Обработка всех документов в представлении ($Policies) While Not(entry Is Nothing) Set doc = entry.Document doc.Remove(True) Set entry = collection.GetNextEntry(entry) Wend '--- удаление всех профилей политик Call col.Removeall(True) End SubПример D.3. Очистка профилей политик и документов в представлении $Policies
Этот код удаляет все профили политик и документы в представлении $Policies локальной пользовательской книги имен и адресов. При повторном соединении пользователя с сервером политика, действующая в отношении этого пользователя (организационная или явная), передается клиенту и данные записываются в локальную книгу имен и адресов.
Теперь политики должны работать правильно и проблема должна разрешиться.