Dim recCol As NotesDocumentCollection
Dim doc As NotesDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim ws As NotesUIWorkspace
Dim uivw As NotesUIView
Set db = s.CurrentDatabase
Set ws = New NotesUIWorkspace
Set uivw = ws.CurrentView
Set recCol = uivw.Documents
'<если в представлении нет выделенных документов галкой>
If recCol.Count = 0 Then
If uivw.CaretNoteID <> "0" Then
Set doc = db.GetDocumentByID(uivw.CaretNoteID)
If Not doc Is Nothing Then
Call recCol.AddDocument(doc)
End If
End If
End If
'<если в представлении нет выделенных документов галкой>
If recCol.Count = 0 Then
Msgbox "Не выбран ни один документ!"
Exit Sub
End If
Dim mainDoc As NotesDocument
Dim respDoc As NotesDocument
enterunid:
res = Inputbox$("Введите юнид главного документа..", "Ввод юнида документа")
If res="" Then Exit Sub
On Error Resume Next
Err=0
Set mainDoc = db.GetDocumentByUNID(res)
If Err<>0 Then
Msgbox "Документ по данному юниду не найден в БД или документ битый. Введите другой юнид."
Goto enterunid
End If
Set respDoc = recCol.GetFirstDocument()
While Not respDoc Is Nothing
Call respDoc.MakeResponse(mainDoc)
Call respDoc.Save(True, False)
Set respDoc = recCol.GetNextDocument(respDoc)
Wend
вторник, 10 ноября 2015 г.
пятница, 30 октября 2015 г.
Как удалить из базы приватные представления, хранящиеся на сервере
Хранение на сервере SPOFU-представлений (общие представления, которые становятся личными при первом использовании) для каждого пользователя влечет за собой в большинстве случаев неоправданное увеличение объема базы. Сервер плохо перестраивает индексы таких представлений. Как удалить представления пользователей, которые (представления) стали не нужны?
Решение от Дмитрия Ковалева
Если private виды уже существуют, то код, удаляющий виды, следует разместить в обработке события закрытия базы пользователем.
Пример:
Sub Deleteprivateviews
Dim s As New NotesSession
Dim excerptdb As NotesDatabase
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim view As NotesView
Set db = s.CurrentDatabase
nameslist = ... ' массив из частных представлений и папок, которые надо удалить
If Cstr(nameslist (0)) = "" Then Exit Sub
Forall v In db.Views
Set doc = db.GetDocumentByUnid (v.UniversalID)
Forall n In nameslist
If v.Name=Cstr(n) And Not(v.IsDefaultView) Then
If doc.GetItemValue ("$Readers") (0) <>"" And doc.GetItemValue ("$Readers") (0) <>s.UserName Then v.Remove
End If
End Forall
End Forall
End Sub
Если private виды еще не существуют, то в поле $Readers в этом представлении при создании ее надо вставить вторым значением имя сервера в каноническом формате (после имени пользователя), и тогда вышеприведенный код спокойно можно запускать серверным агентом на сервере. Удалить все private виды вообще
Sub Deleteprivateviews
Dim s As New NotesSession
Dim excerptdb As NotesDatabase
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim view As NotesView
Set db = s.CurrentDatabase
nameslist = ... ' массив из частных представлений и папок, которые надо удалить
If Cstr(nameslist (0)) = "" Then Exit Sub
Forall v In db.Views
Set doc = db.GetDocumentByUnid (v.UniversalID)
Forall n In nameslist
If v.Name=Cstr(n) And Not(v.IsDefaultView) Then
If doc.GetItemValue ("$Readers") (0) <>"" And doc.GetItemValue ("$Readers") (0) <>s.UserName Then v.Remove
End If
End Forall
End Forall
End Sub
Если private виды еще не существуют, то в поле $Readers в этом представлении при создании ее надо вставить вторым значением имя сервера в каноническом формате (после имени пользователя), и тогда вышеприведенный код спокойно можно запускать серверным агентом на сервере. Удалить все private виды вообще
Дополнение от Ильи Клецера
Нет необходимости в модификации поля $Readers.
Пример:
Dim db As notesdatabase
Set db=ses.currentdatabase
Forall v In db.views
Dim doc As notesdocument
Set doc = db.GetDocumentByUnid (v.UniversalID)
If v.name = "Folder" And doc.GetItemValue ("$Readers") (0) <>"" Then
Print doc.GetItemValue ("$Readers") (0)
Call v.remove
End If
End Forall
Приведенный код подписывается от имени _сервера_, в логе видны имена всех пользователей, чьи папки созданы, папки благополучно удаляются
Dim db As notesdatabase
Set db=ses.currentdatabase
Forall v In db.views
Dim doc As notesdocument
Set doc = db.GetDocumentByUnid (v.UniversalID)
If v.name = "Folder" And doc.GetItemValue ("$Readers") (0) <>"" Then
Print doc.GetItemValue ("$Readers") (0)
Call v.remove
End If
End Forall
Приведенный код подписывается от имени _сервера_, в логе видны имена всех пользователей, чьи папки созданы, папки благополучно удаляются
Обновление дизайна БД для версий 6,7 с помощью api функций notes.
Const wAPIModule = "NNOTES" ' Windows
Const NSF_INFO_SIZE = 128
Const INFOPARSE_DESIGN = 3
Const NOTE_ID_ICON = &HFFFF0010
Declare Private Function DesignRefresh Lib wAPIModule Alias "DesignRefresh" _
( Byval S As String, Byval hDB As Long, Byval F As Long, Byval zA As Long, Byval zM As Long) As Integer
Declare Private Function OSPathNetConstruct Lib wAPIModule Alias "OSPathNetConstruct" _
( Byval zP As Long, Byval S As String, Byval F As String, Byval N As String) As Integer
Declare Private Function NSFDbInfoGet Lib wAPIModule Alias "NSFDbInfoGet" _
( Byval hDB As Long, Byval D As String) As Integer
Declare Private Sub NSFDbInfoModify Lib wAPIModule Alias "NSFDbInfoModify" _
( Byval S As String, Byval W As Integer, Byval D As String)
Declare Private Function NSFDbInfoSet Lib wAPIModule Alias "NSFDbInfoSet" _
( Byval hDB As Long, Byval D As String) As Integer
Declare Private Function NSFDbOpen Lib wAPIModule Alias "NSFDbOpen" _
( Byval P As String, hDB As Long) As Integer
Declare Private Function NSFDbClose Lib wAPIModule Alias "NSFDbClose" _
( Byval hDB As Long) As Integer
Declare Private Function NSFItemSetText Lib wAPIModule Alias "NSFItemSetText" _
( Byval hNT As Long, Byval N As String, Byval D As String, Byval nD As Integer) As Integer
Declare Private Function NSFNoteOpen Lib wAPIModule Alias "NSFNoteOpen" _
( Byval hDB As Long, Byval NoteID As Long, Byval F As Integer, hNT As Long) As Integer
Declare Private Function NSFNoteClose Lib wAPIModule Alias "NSFNoteClose" _
( Byval hNT As Long) As Integer
Declare Private Function NSFNoteUpdate Lib wAPIModule Alias "NSFNoteUpdate" _
( Byval hNT As Long, Byval F As Integer) As Integer
Sub ReplaceDesign(templateserver$, templatename$, dbserver$, dbfilepath$)
dp$ = String(1024, " ")
OSPathNetConstruct 0, dbserver$, dbfilepath$, dp$
Dim hDB As Long
NSFDbOpen dp$, hDB
If hDB = 0 Then Exit Sub
d$ = Space(NSF_INFO_SIZE)
NSFDbInfoGet hDB, d$
NSFDbInfoModify d$, INFOPARSE_DESIGN, templatename$
NSFDbInfoSet hDB, d$
Dim hNT As Long
NSFNoteOpen hDB, NOTE_ID_ICON, 0, hNT
NSFItemSetText hNT, "$TITLE", d$, Instr(d$, Chr$(0))
NSFNoteUpdate hNT, 0
NSFNoteClose hNT
DesignRefresh templateserver$, hDB, 1, 0, 0
NSFDbClose hDB
End Sub
Ссылка на источник
четверг, 29 октября 2015 г.
Команды Domino
Конвертирование почтового ящика и шаблона из любой версии в версию 8.5:
load convert mail\user.nsf * mail85.ntf, где
mail\user.nsf - почтовый ящик,который надо конвертировать
* - показывает, что конвертировать независимо от какой текущий шаблон у базы
mail85.ntf - шаблон по которому надо конвертировать базы
load convert mail\*.nsf stdr60mail mail85.ntf, где
mail\*.nsf - конвертировать все базы в каталоге mail
stdr60mail - конвертировать только базы, которые созданы по этому шаблону
mail85.ntf - шаблон, в который конвертировать
Запуск агента из консоли
tell amgr run "db.nsf" 'agent'
load convert mail\user.nsf * mail85.ntf, где
mail\user.nsf - почтовый ящик,который надо конвертировать
* - показывает, что конвертировать независимо от какой текущий шаблон у базы
mail85.ntf - шаблон по которому надо конвертировать базы
load convert mail\*.nsf stdr60mail mail85.ntf, где
mail\*.nsf - конвертировать все базы в каталоге mail
stdr60mail - конвертировать только базы, которые созданы по этому шаблону
mail85.ntf - шаблон, в который конвертировать
Запуск агента из консоли
tell amgr run "db.nsf" 'agent'
среда, 28 октября 2015 г.
Переменные Notes.ini, собранные с просторов интернета
Для клиента notes
LogStatusBar=1 - трассирует сообщения из статусной строки в лог клиента
Для поиска проблем производительности и аварий вы можете разрешить следующие отладочные параметры Notes.ini:
Debug_threadid=1 записывает в журнал ID каждого процесса и потока для каждой операции на сервере.
Debug_show_timeout=1 включает вывод на консоль сообщений о тайм-аутах семафоров и создает текстовый файл semdebug.txt.
Debug_capture_timeout=10 - время выдачи каждого сообщения о тайм-аутах семафора.
CONSOLE_LOG_ENABLED=1 (Domino 6 и старше) разрешает ведение журнала на консоли Domino.
Для почтовой системы
RouterTranslateSpecial=0 - обратный адрес берется из места вызова
RouterTranslateSpecial=1 - обратный адрес берется из каталога Domino
Задает путь к папке с временными файлами генерируемыми Update и UpdAll:
View_Rebuild_Dir="Путь с обратным слэшем в конце"
Debug_threadid=1 записывает в журнал ID каждого процесса и потока для каждой операции на сервере.
Debug_show_timeout=1 включает вывод на консоль сообщений о тайм-аутах семафоров и создает текстовый файл semdebug.txt.
Debug_capture_timeout=10 - время выдачи каждого сообщения о тайм-аутах семафора.
CONSOLE_LOG_ENABLED=1 (Domino 6 и старше) разрешает ведение журнала на консоли Domino.
Для почтовой системы
RouterTranslateSpecial=0 - обратный адрес берется из места вызова
RouterTranslateSpecial=1 - обратный адрес берется из каталога Domino
Задает путь к папке с временными файлами генерируемыми Update и UpdAll:
View_Rebuild_Dir="Путь с обратным слэшем в конце"
Подписаться на:
Комментарии (Atom)