26

Re: Полезные Lotus скрипты.

Lotus и удаление пустых элементов массива
values - массив с пустыми элементами
vals=Fulltrim (values) - будет без пустышек.

Поделиться

27

Re: Полезные Lotus скрипты.

Логирование изменений содержимого поля после подписи:

В кнопке подписать:

Call CurDoc.ReplaceItemValue("Flag_RW","1")

В "подписанном" поле.

Sub Onchange(Source As Field)
    
    Dim session As New NotesSession
    Dim uiworkspace As New NotesUIWorkspace    
    Dim doc As NotesDocument
    Dim item As NotesItem
    Set doc = uiworkspace.CurrentDocument.Document
    Set item = doc.GetFirstItem("СОДЕРЖАНИЕ")
    If doc.Flag_RW(0)="1" Then
        
        Dim Name_ As New NotesName(session.UserName)
        UsnameCanon$= Name_.common    
        doc.log_sod =  Arrayappend (doc.log_sod, "Содержание изменил: " & UsnameCanon$ & ". Дата: " & Date$ )        
    End If
    
End Sub

Поделиться

28

Re: Полезные Lotus скрипты.

Диалоговое окно для сохранения файла на диск:

Sub Click(Source As Button)
    If  Dir$ ("C:\XML",16) =""  Then
        Mkdir "C:\XML" 
    End If
    zag$ = "Имя файла"
    Dim workspace As New NotesUIWorkspace
    filenames = workspace.SaveFileDialog(False,"Куда ",,"C:\XML\",zag$)
End Sub

Поделиться

29

Re: Полезные Lotus скрипты.

Получение имени ПК и юзера из винды.

Dim WshShell As Variant
Set WshShell = CreateObject("WScript.Shell")
xxx=WshShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
yyy=wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
Print xxx & "//" & yyy

Поделиться

30

Re: Полезные Lotus скрипты.

Разблокировать все документы в базе. Настраиваем агенту ночное расписание.

Sub Initialize
    Dim session As New NotesSession
    Dim Okno As NotesDatabase
    Set Okno = session.CurrentDatabase
    
    If Not Okno.Isopen Then
        Exit Sub    ' Нет доступа к БД !!!!!!
    End If
    
    Dim Doccount As NotesDocument  '  документ
    
    Dim dcOko As NotesDocumentCollection 'коллекция доков базы 
    Set dcOko = Okno.AllDocuments 'коллекционируем все документы
    If   (dcOko.Count =0) Then  Exit Sub
    
    For m=1  To dcOko.Count
        Set Doccount = dcOko.GetNthDocument(m)
        
        If     (Doccount.IsValid )    Then
            Call Doccount.RemoveItem("$Writers")            
            Call Doccount.RemoveItem("$WritersDate")
            Call Doccount.Save(True, False, True)
        End If
    Next
End Sub

Поделиться

31

Re: Полезные Lotus скрипты.

Код для занесения или добавления в поле Reader имени человека.

Sub Click(Source As Button)
    
    Dim session As New NotesSession
    Dim uiworkspace As New NotesUIWorkspace    
    Dim doc As NotesDocument
    Set doc = uiworkspace.CurrentDocument.Document
    
    Dim item As NotesItem
    'Set item = doc.GetFirstItem("$UpdatedBy") 'в $UpdatedBy в лотусе ничего нельзя изменять
    Set item = doc.GetFirstItem("Reader")    
    Call item.AppendToTextList( "CN=Елена Владимировна /O=inf" )
    
    
    Forall  xxx  In item.Values
        Msgbox xxx
    End Forall
    
    Call doc.Save ( True, False )
    
    Msgbox "Всё ок!"
End Sub

Поделиться

32

Re: Полезные Lotus скрипты.

Правильная проверка существования поля item и его копирования:

Set item=CurDoc.GetFirstItem( "СОДЕРЖАНИЕ_" )
If Not item Is  Nothing  Then Call docR.CopyItem (item,"СОДЕРЖАНИЕ_")

Еще вариант

If doc.hasitem("PSComment") Then

Поделиться

33

Re: Полезные Lotus скрипты.

Оказывается одной строкой можно и создать/заменить значение поля и дать ему свойства автора/ридера.

Dim newDocResp As NotesDocument
newDocResp.Replaceitemvalue("Author", "*").Isauthors = True
newDocResp.Replaceitemvalue("Reader", "*").Isreaders = True

Поделиться