1

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

Данный скрипт оставляет  3 слова в строке, которые расположены перед определенным словом например - "удостоверение".
Полезно, если перед словом "удостоверение" расположена ФИО, и надо удалить персональные данные.

If Instr(Lico1F1Item.Text, "удостоверение") > 1 Then    
stroka = Fulltrim(Lico1F1Item.Text)
stroka = " " + stroka
Call docGSS.ReplaceItemValue("Lico1F1_1",stroka)
Lico1F1_1$=""
While stroka <> "" 
pos = Instr(stroka,"удостоверение")
If pos <> 0 Then
fio = Left (stroka,pos-1)
fio = Strrightback(fio," ",1,4)                                
Lico1F1_1$ = Lico1F1_1$  + Cstr(fio)  + " //  "
stroka = Right(stroka,Len(stroka)-pos-1)
Else
stroka = ""
End If
Wend            
End If

Поделиться

2

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

Проверка, что в строке 2 слова подряд идут с большой буквы

stroka = "Вася Кооо Мооо мася Коля Петя Толя статсик  dfcbr 111  Юра"
strarr = Split(stroka) ' в массив каждое слово
For xx=1 To Ubound(strarr) ' j - слово
        
If (Ucase(Mid( strarr (xx),1,1)    ) = Mid( strarr (xx),1,1)) And  (Ucase(Mid( strarr (xx-1),1,1)    ) = Mid( strarr (xx-1),1,1)) Then 
'Заглавная первая // добавить проверку что тольк буквы

Msgbox     strarr (xx-1) +"  " + strarr (xx)
End If
Next

Поделиться

3

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

Set Lico1F1Item = docGSS.GetFirstItem ("Lico1F1_1")
stroka = Fulltrim(Lico1F1Item.Text)
strarr = Split(stroka) ' в массив каждое слово
slovo = ""
For xx=2 To Ubound(strarr) ' проход по всем словам с 3-го
If     (Asc (strarr (xx)) > 192  And Asc (strarr (xx)) < 223)  And  (Asc (strarr (xx-1)) > 192  And Asc (strarr (xx-1)) < 223) And  (Asc (strarr (xx-2)) > 192  And Asc (strarr (xx-2)) < 223) Then
'проверили, что первые буквы у 3 слов подряд заглавные
If     (Lcase(Mid( strarr (xx),2,1)    ) = Mid( strarr (xx),2,1)) And  (Lcase(Mid( strarr (xx-1),2,1)    ) = Mid( strarr (xx-1),2,1)) And  (Lcase(Mid( strarr (xx-2),2,1)    ) = Mid( strarr (xx-2),2,1)) Then
Msgbox     strarr (xx-2) +"  " + strarr (xx-1) +"  " + strarr (xx)                           
End If
End If
Next
Call docGSS.ReplaceItemValue("Lico1F1_1",stroka)

Поделиться

4

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

Lotus script копирования всех документов с одной базы в текущую по форме

Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim dc As NotesDocumentCollection    
    Set db = session.CurrentDatabase
    Dim MUNdb As NotesDataBase
    Dim doc As NotesDocument
    Dim docGSS As NotesDocument
    Set MUNdb = session.Getdatabase("B/i", "O\r\G.nsf")
    Dim formula As String
    formula$ = {Form = "(form3_2ipoteka)"}
    Set dc=MUNdb.Search(formula$,Nothing,0)
    
    
    For i=1 To dc.count
        Set doc = dc.GetNthDocument(i)    
        Set docGSS = doc.CopyToDatabase(db)
    Next
    
End Sub

Поделиться

5

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

Изменение типа шрифта и его размера в поле нажатием кнопки

Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim uiworkspace As New NotesUIWorkspace    
    Dim db As NotesDatabase
    Set db =  session.CurrentDatabase
    
    Dim UIDoc As NotesUIDocument
    Set UIDoc = uiworkspace.CurrentDocument
    Dim doc As NotesDocument
    Set doc = UIDoc.Document
    
    newtext = doc.GetItemValue("СОДЕРЖАНИЕ_")(0)
    
    Dim richstyle As NotesRichTextStyle
    Set richstyle = session.CreateRichTextStyle
    richstyle.NotesFont = FONT_ROMAN
    richstyle.FontSize = 14
    Dim  richtext  As New NotesRichTextItem(doc, "СОДЕРЖАНИЕ_")
    Call richtext.AppendStyle(richstyle)
    
    Call richtext.AppendText(newtext)
    Call doc.Save (True, False)    
    Call UIDoc.Close    
    Call uiworkspace.EditDocument(False, doc)
End Sub

Поделиться

6

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

evaluate - вызов альфа команды с скрипта

Поделиться

7

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

variant to string

illegal use of property  - когда другому типу присваивают вариант поле

doc.pole = Variant
cstr(doc.pole(0)) = String
doc2.pole(0) - string  если pole типа string


пример сравнения:

Cstr(doc2.cOKPO(0))<>""

нолики нужны при сравнении, при присваивании они не нужны
пример переноса данных -     doc1.cOKPO=doc2.cOKPO

пример присваивания полю значения doc1.cOKPO ="значение"

doc.F(0)=1 --- это сравнение, doc.f = 1 --- присвоение

Поделиться

8

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

@Command( [ViewRefreshFields] )  =   F9
если в Options стоит Options Declare - то переменные надо явно объявлять

Поделиться

9

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

Evaluate - использование в лотусскрипте @ комманд.
Пример:
xxxxxx= Evaluate(alfa$, doc)

Поделиться

10

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

Подборка примеров лотусскриптов
cseh.best.vwh.net/lssamples.html


16 бит свободные ресурсы и доступной памяти
Вызов 16 бит GetPrivateProfileString функция , чтобы получить заставки и обои в Windows.
32 бит свободного дискового пространства Funtion вызов в Windows , чтобы проверить Freespace на диске .
32 бит GetPrivateProfileString Funtion вызов с целью получения Заставка и обои
Доступ к свойствам Session Notes
Доступ Примечания Просмотр свойств
Добавить Rich Text через пользовательский интерфейс
Добавить роли Для ACL
Сложите два массива
Добавление переменной в строку для LotusScript Метод поиска
Добавление элемента всех документов с использованием AppendItemValue из NotesDocument
Агент для шифрования документов
Агент используется для создания профиля пользователя -документов из Office Profile документов
Кнопка добавляет вложения RTF
Проверьте и установите атрибутыфайла
Проверьте для серверов вниз
Проверьте указанный сервер , пока есть не отвечает
Проверка валидности вставили документов
Компактные все локальные базы данных < 90% используются
Подсчитайте количество документов в целях
Создайте новый класс для отображения объектов
Создание и отправка почты
Создать класс обработки ошибок
Создание базы данных
Создание базы данных на основе шаблона
Создание новых и измененных
Создание новых и измененных - вызов *
Создание Rich Text Field
Создание Агент поиска
Создание Поиск Agent - вызов *
Создание Агент поиска для поиска в Интернете
Создание рассылки
Создание рассылки - призов *
Ежедневно Дилберт Агент
Удалить все сирот ответные документы
Определите, еслидокумент является профиль документ
Определить количество строк в LS: DO результирующий набор в Notes R4
Определение конца файла с LotusScript
DialogBox называет форму !
Режиссура новых пользователей к особым видом
Дисплей Помощь диалоговое окно
Обработка ошибок с помощью IsOpen
Обработка ошибок с On Error
Обработка ошибок с Open
Последовательность Фибоначчи ибыстрой сортировки (новый)
Заполнение товары с диалогового окна на Открытом Документа !
Нахождение объем свободного пространства на диске, используя LotusScript
Импорт плоским файл
FTP Зеркало
Создать отклика Docs в LotusScipt
Обращение конкретную ошибку
Как можно отобразить текст отдельных ячеек таблицы с помощью LotusScript в Notes R4 ?
Как вы делаете данных импорта / слияние с помощью Lotuscript ?
Как удалить элемент из Textlist области ?
Как добавить возврат каретки в текстовое поле с помощью LotusScript в Notes R4.5x
Как добавлять один RTItem на другой с помощью LotusScript Без Сохранить строки
Как Изменение заголовка на нескольких линии LotusLabel в LotusScript
Как проверить через LotusScript ли это открыть документ в области предварительного просмотра
Как сравнить даты / времени поля, используя Lotuscript .
Как определить, если необязательные аргументы были предоставлены для метода . Выпуск продукта: LSX Toolkit 2.0
Как для отображения документа , что не является текущим Документ , ж / LotusScript
Как получить данные из объекта OLE с помощью Примечания LotusScript Фронтальный методов
Как есть сценарий в Notes R4 Пауза в течение некоторого времени , а затем Продолжить
Как сделать " неудачник " из репликации / сохранить конфликт быть «победитель» ?
Как открыть Навигатор в Notes R4 через LotusScript
Как искать датой валютирования при работе с GetDocumentByKey метод
Как установить часовой пояс для свидание с NotesDateTime класса в Notes R4
Как использовать LotusScript в почту напоминания с Doclink к исходному документу .
Как использовать LotusScript чтобы запретить пользователю Открытие Вид
Как использовать LotusScript NotesItem CopyItem метод
Как использовать @ функций в LotusScript .
Как просмотреть на экранеRich Text Пункт Добавлено через LotusScript
Импортировать текстовый файл в формате Rich Text Пункт через LotusScript
Inport От ODBC ( Технологии Происшествия Пример базы данных )
LotusScript Агент пересчитать Документы по расписанию
LotusScript Примечания AppendRTItem Метод - Копировать RichtextItem Информация шрифта
Низкий уровень , автономные , LotusScript функции,
Манипулирование Rich Text
Примечания R4 , вы пытаетесь добавить имя пользователя в список управления доступом ( ACL ) с помощью LotusScript . При добавлении использование
ODBC соединения с сообщением Box попросить ODBC Источник данных .
Откройте документ в режиме редактирования , если он существует .
Откройте Внештатный Представление через автоматизации
Процент выполнения в сценарии
Выполните полнотекстовый поиск по текущей базе данных. Он посылает пользователю бюллетень со ссылками
Выполнение поиска
Предотвращение Orphan ответов
Тяговая значение из текущей ячейки таблицы С LotusScript
продувки Агент
Нажатие изменения вниз по иерархии
Ссылка других баз данных
Обновить вид изнутри документа с помощью сценария в Notes R4
Обновить Агенту
Обновить авторов или читателей Поля Обновлено помощью LotusScript Админцентр
Перезагрузка Rich Text
Удаление элемента из всех документов в базе данных
Переименование вид Notes с LotusScript ?
Правила создания LotusScript агентов , которые выполняют из веб-браузера
Отбор операторов SQL , которые можно использовать с Notes
Расписанию агент, который придает файл в документах.
Скрипт изменяет элемент на каждом документе , выбранной в целях
Сценарий Библиотеки - Примеры
Поиск Notes баз данных
Поиск в Интернете
Select Case со значениями Enum
Отправка сообщения электронной почты автору текущего документа
Установите диалоговое окно для "всегда -топ"
Поделиться скрипты между элементами в базе данных
Простой тест для Чтение с ODBC источника данных с помощью LotusScript
Простой тест для записи в ODBC источника данных с помощью LotusScript
Что-то , чтобы не упустить с ул $
Этот сценарий кнопка отображает сумму всех полей OrderTotal в базе данных в течение одного дня .
Этот сценарий кнопка полезна в почтовом послании группой лиц .
Обновление поле во всех документах реагирования из поля , которые были изменены в основном документе .
Обновить поле в документах реагирования после его изменения в основном документе ?
Обновите полный текст индекс текущей базе данных.
Использование LotusScript для автоматической Импорт файла в Notes View
Использование LotusScript читать от не- Notes баз данных
Использование LotusScript читать от не- Notes баз данных - Challenge *
Использование LotusScript написать к базе данных , не являющиеся Notes
Помощью объекта LotusScript Data ( LS: DO) методы ошибках
Использование UnprocessedDocuments на всех новых и измененных документов , для модификации элемента состояние каждого документе р
Использование UnprocessedDocuments на всех непрочитанных документов , поставить непрочитанные документы в папку.
Использование UnprocessedDocuments для перебора зрения и , если деталь утверждающий содержит имя текущего пользователя , это таковой
Каковы Недвижимость в LotusScript ?
Какова разница между типа и класса в LotusScript ?
Когда Looping Через ResultSet , While.NextRow не рекомендуется
Работа с Embedded Objects и переменных окружения

Поделиться

11

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

Получение времени сервера в переменную string

Sub Click(Source As Button)
    Dim serverDate, macro$
    macro$="@Date(@Now([ServerTime]))"
    serverDate= (Evaluate(macro$))
    xxx$ =  Cstr (serverDate(0))
    Msgbox xxx$
End Sub

Поделиться

12

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

Создание нового документа в виде на основе полей выделенного документа

Dim session As New NotesSession
    Dim ws As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim doc,doc2 As NotesDocument
    Set db = ws.CurrentDatabase.Database    
    
    Dim collection As NotesDocumentCollection
    Set collection = db.UnprocessedDocuments
    Set doc = collection.GetFirstDocument()   'doc - в виде, doc2 - новый
    Set doc2 = db.CreateDocument        
    
    doc2.pole=doc.pole

    Set curdoc = ws.EditDocument(True,doc2)
End Sub

Поделиться

13

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

Sub Entering(Source As Field)
    Dim Session As New NotesSession    
    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    
    Set uidoc = ws.CurrentDocument
    
    roles = Session.Currentdatabase.QueryAccessRoles(Session.UserName )
    N=Arraygetindex(roles,"[имя роли]")
    If Isnull (N)  Then 
'   вариант 1
        Messagebox "Вы не имеете права редактировать эту информацию!"    
        Call uidoc.GotoTop '  переводит фокус на первый редактируемый файл на форме
'   или вариант с перекидыванием фокуса на другое поле:
        Call uidoc.GoToField("header")        
    End If
End Sub

Поделиться

14

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

Запрет вставки документов в виды документооборота
На событие Querypaste вешаем

Sub Querypaste(Source As Notesuiview, Continue As Variant)
    continue = False
End Sub

Поделиться

15

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

Как сделать, чтобы вид "Мои документы" не надо было рефрешить?
В оутлайне указываем на страницу (page) "Мои док"
У страницы в Embedded View

- Embedded  selection - выбираем вид  "Мои документы"
- show single category - @Name ([CN]; @UserName)

В фрэймсете в фрейме справа  выбираем страницу (page) "Мои док".

Решает проблему частично.

Поделиться

16

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

Проверка права открытия документа по ролям

Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
    Dim session As New NotesSession     
    Dim db As NotesDatabase
    Dim col As NotesDocumentCollection
    Dim nAcl As NotesACL
    Dim firstEntry As NotesACLEntry
    
    Continue = True
    If Isnewdoc Then ' у нового дока не проверять
        Exit Sub
    End If
    If Source.Document.Tip_1(0) = "ДСП" Or Source.Document.Tip_1(0) = "НДП" Then
        Continue = False        
        Set db = session.CurrentDatabase
        Set nAcl = db.ACL
        Set firstEntry = nAcl.GetFirstEntry
        While (Not firstEntry Is Nothing)
            If firstEntry.Name = session.UserName Then
                Forall rol In firstEntry.Roles
                    If rol = "[ДСП_НДП]" Or rol = "[Supervisor]" Then
                        Continue = True                    
                        Exit Sub
                    End If
                End Forall
            End If
            Set firstEntry = nAcl.GetNextEntry(firstEntry) 
        Wend
    End If
End Sub

Поделиться

17

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

Резолюция, и дата резолюции со сроком исполнения большем даты резолюции.


Поле РЕЗОЛЮЦИЯ_ на событии Exiting

Sub Exiting(Source As Field)
    Dim UIDoc As NotesUIDocument
    Dim work_space As New NotesUIWorkspace    
    Set UIDoc=work_space.CurrentDocument
    If UIdoc.FieldGetText("ДАТА_РЕЗОЛЮЦИИ_")="" And UIdoc.FieldGetText("РЕЗОЛЮЦИЯ_")<>"" Then
        Dim doc As NotesDocument
        Set doc = uidoc.Document
        Call doc.ReplaceItemValue("ДАТА_РЕЗОЛЮЦИИ_", Today)
    End If
End Sub

Кнопка "Установить дату резолюции - сегодня"

@SetField("ДАТА_РЕЗОЛЮЦИИ_";@Now); @SetField("СРОК_ИСПОЛНЕНИЯ_"; @Adjust(@Now;0;0;10;0;0;0)); @Command( [ViewRefreshFields] )

Поле СРОК_ИСПОЛНЕНИЯ_ с инпут валидатион:

@If(@IsTime(СРОК_ИСПОЛНЕНИЯ_) & @IsTime(ДАТА_РЕЗОЛЮЦИИ_);(@If(ДАТА_РЕЗОЛЮЦИИ_ > СРОК_ИСПОЛНЕНИЯ_ ; @Prompt([YesNo]; "ОШИБКА!"; "Не правильно указанна дата Срока исполнения документа!");@True));@False)

Поделиться

18

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

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

Set item = doc.GetFirstItem( "имя поля" )
    Forall v In item.Values
        i=i+1 
    End Forall
If i>1 Then Messagebox("в поле несколько значений!!") : Exit Sub

Поделиться

19

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

Вопрос в окошечке

vopros = ws.Prompt (PROMPT_YESNO, "Заголовок", "Согласны ?")    
If (vopros <> 1) Then Exit Sub

Поделиться

20

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

Добавление значения в текстовое  поле:

str1  = "текст1"
Dim itemh As NotesItem
Set        itemh = newdoc.AppendItemValue( "history", str1 )

Добавление значения в RICH TEXT поле:

str1  = "текст2"
Dim rtitem As Variant
Set rtitem = newdoc.GetFirstItem( "history" )
Call rtitem.AppendText(str1)

Поделиться

21

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

Окно с выбором вариантов ответа

Dim values(3) As Variant
values(0) = "Поручение - внутренний"
values(1) = "Поручение - исходящий"
values(2) = "Решение - внутренний"
values(3) = "Решение - исходящий"
response = ws.Prompt (PROMPT_OKCANCELLIST,     "Создать Поручение/Решение",     "Выберите тип  документа", _
values(0), values)
If Isempty (response) Then     Messagebox "Отменено", , "Выбор не сделан" : Exit Sub
If response="Поручение - внутренний" Then
какое то действие, например doc.form="внутренний"
End If

Поделиться

22

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

Переоткрытие читаемого документа, если он был изменен ранее.

Sub Querymodechange
noteID = Source.Document.NoteID
Set doc = db.GetDocumentByID(noteID)
If doc.LastModified > Source.Document.LastModified Then
        Messagebox "документ был изменён. переоткрываем его"    
        Call Source.Close()
        Set uidoc = ws.EditDocument(True, doc, False)
End If

Если юзер открыл документ на чтение  и решил перевести его в редактирование - он переоткроет его, если он был изменен.
Source.Document - та инстанция, которую видиш ты в текущий момент
doc2 - реальное положение дел с этим документом

Поделиться

23

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

При открытии документа только авторам открывать его в режиме редактирования

Sub Postopen(Source As Notesuidocument)
    Dim Session As New NotesSession
    Dim ws As New NotesUIWorkspace
    Dim item As NotesItem    
    user = session.CommonUserName
    Dim doc As NotesDocument
    flag="1"
    Set doc = ws.currentdocument.Document
    Set item = doc.GetFirstItem( "addauthors" )    
    Forall v In item.Values
        If     user = v Then 
            Print "автор"
            flag="0"
        End If            
    End Forall
    If flag="0" Then 
        source.EditMode=True
    End If
End Sub

Поделиться

24

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

Подсчет, сколько записей в поле NotesItem.
В архив не могут слать документ, если документ рассматривают более 1 чела.

    ' ----------   Рассматривают несколько чел
   

Dim item As NotesItem
    xx=0
    Set item = CurDoc.GetFirstItem( "РАССМАТРИВАЕТ_ДОКУМЕНТ" )
    Forall v In item.Values
        xx=xx+1 
    End Forall
    If xx>1 Then Messagebox("Док. рассматривает несколько человек!") : Exit Sub

Поделиться

25

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

Заполнение истории документа. Новые события вверху rich text поля.

Вариант 1. Старый.

   

str1  = Cstr(Now) + " нвоый текст, который заносится в историю"
    
    Dim RTItm As NotesRichTextItem
    Set RTItm=CurDoc.getFirstItem("ИСТОРИЯ")
    Dim TmpRTItem As NotesRichTextItem  
    
    If CurDoc.HasItem("TmpRTF") Then 'если  есть временное поле - стерли
        Set TmpRTItem=CurDoc.GetFirstItem("TmpRTF")
        Call TmpRTItem.Remove()
    End If
    
    Set TmpRTItem= CurDoc.CreateRichTextItem("TmpRTF") ' создали поле TmpRTF
    Call TmpRTItem.Appendtext(str1) 
    Call TmpRTItem.Addnewline(1,True)
    Call TmpRTItem.Appendrtitem(RTItm) ' добавили поле история    
    
    Call RTItm.Remove()
    
    Set NewRTItem= CurDoc.CreateRichTextItem("ИСТОРИЯ")
    Call NewRTItem.Appendrtitem(TmpRTItem)
    Call TmpRTItem.Remove()



Вариант 2

Dim uiworkspace As New NotesUIWorkspace        
    Dim histold As String, str1 As String
    Dim doc As NotesDocument
    Dim uidoc As NotesUIDocument 
    Set uidoc =uiworkspace.CurrentDocument
    Set doc =uiworkspace.CurrentDocument.Document
    doc.какое-то поле=""
    
    str1  = Cstr(Now) + " текст для истории"+" "&Chr(10)
    
    histold= uidoc.FieldGetText( "ИСТОРИЯ" )
    
    Call uidoc.FieldClear( "ИСТОРИЯ" )
    Call uidoc.FieldAppendText( "ИСТОРИЯ", str1)
    Call uidoc.FieldAppendText( "ИСТОРИЯ", histold)
    Call uidoc.Save()

Поделиться