вторник, 10 ноября 2015 г.

Сделать выделенные документы ответными для другого документа с введенным юнидом

 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

пятница, 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 виды вообще
Дополнение от Ильи Клецера
Нет необходимости в модификации поля $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

Приведенный код подписывается от имени _сервера_, в логе видны имена всех пользователей, чьи папки созданы, папки благополучно удаляются

Обновление дизайна БД для версий 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'

среда, 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="Путь с обратным слэшем в конце"