Россыпь мелких вопросов

  • Автор темы Vagor.ini
  • Дата начала
N

nor

To osmor

Форма: "temp1".
Поле, которое содердит текст логов: "history", Text, Computed when composed, Value: history.

Код:
(Declaration)
Dim session As NotesSession
Dim ws As NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim item As NotesDocument

Sub Initialize

Set session = New NotesSession
Set ws = New NotesUIWorkspace
Set db = session.CurrentDatabase

End Sub

Sub Postopen(Source As Notesuidocument)

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

End Sub

Sub Click(Source As Button)
Dim new_msg As String

new_msg = "сообщение 1"
doc.history = doc.history(0) + Chr(10) + new_msg

new_msg = "сообщение 2"
doc.history = doc.history(0) + Chr(10) + new_msg

new_msg = "сообщение 3"
doc.history = doc.history(0) + Chr(10) + new_msg

Call doc.Save(True, True)

End Sub


Каждый раз, при активировании действия (Sub Click)? в поле "history" добавляется некоторая текстовая информация, новые сообщения добавляются с новой строки причем.
 
N

nor

to Isk

Форма: "temp1".
Поля:
1. "number_field", Number, Computed when composed, Value: number_field.
2. "number_field2", Number, Computed when composed, Value: number_field2.

Код:
(Declaration)     
Dim session As NotesSession
Dim ws As NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument

Sub Initialize

Set session = New NotesSession
Set ws = New NotesUIWorkspace
Set db = session.CurrentDatabase

End Sub

Sub Postopen(Source As Notesuidocument)

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

End Sub

Sub Click(Source As Button)
Dim value As String

value = Inputbox$("Введите целое число:", "Новое число")
If value = "" Then Exit Sub

doc.number_field = Cint(value)
doc.number_field2 = (doc.number_field(0) * 3) / 5

Call doc.Save(True, True)

End Sub


Каждый раз, при активировании действия (Sub Click), в поле number_field записывается число, указанное пользователем. На основании значения поля "number_field" по определенной формуле рассчитывается числовое значение поля "number_field2".
 
I

Isk

Спасибо nor , ты не можешь подсказать как сделать это все без ввода числа пользователем. просто допустим есть какой-то счетчик в форме или виде и надо его значение сохранить в поле чтобы при создании нового документа по этой форме брать значение из этого поля последнего документа. своего рода сортировка . то есть во всей коллекции ищется макс. знач. и наращивается на 1.
 
G

Guest

Спасибо nor.
С помощью Lotus script не пробовал, все пытался на собаках, поскольку вроде все должно было получиться ...
но такой же способ с использованием @Char не сработал.
 
V

Vagor.ini

Isk
Здесь тебе помощь - читать про профайловые формы, через них можно легко организовать счетчик, и обрабатывать его на событии QuereSave
 
O

osmor

Вопросец.
Существует ли в Lotus (IBM) общепринятая нотация именования объектов? Типа Венгерской ...
Ну привык я, что нужно именовать по правилам ...
Можно конечно и Венгерскую подогнать, или самому придумать, но может есть уже принятые правила именования?
Например:
Два поля одно для ввода данных другое для отображения ...
View (представления), наборы рамок, страницы, агенты, структуры, да и действия тоже наверное ...
 
V

Vagor.ini

osmor
Ну не знаю, определенной наверное нет, я например часто использую в полях префиксы типа полей и суффикс-имя формы.
 
N

nor

osmor, официально - нет, не существует, но в книгах крупных издательств авторы рекомендуют определенную нотацию.
 
N

nor

Isk

Форма "temp1".
Поле, которое хранит значения порядкового счетчика документов, созданных по форме "form1": "ordinal_num", number, computed when composed, value: ordinal_num.
Скрытое служебное представление ($temp1): столбец1: column value: ordinal_num, sort: Descending.

Код:
(Declartion)
Dim session As NotesSession
Dim ws As NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim view As NotesView

Sub Initialize

Set session = New NotesSession
Set ws = New NotesUIWorkspace
Set db = session.CurrentDatabase

End Sub

Sub AssignNewDocNum(doc As NotesDocument)
Dim temp1 As notesDocument

Set view = db.GetView("($temp1)")
Set temp1 = view.GetFirstDocument
If temp1 Is Nothing Then
doc.ordinal_num = 1
Else
doc.ordinal_num = temp1.ordinal_num(0) + 1
End If


End Sub

Sub Postopen(Source As Notesuidocument)

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

If doc.IsNewNote Then Call AssignNewDocNum(doc)

End Sub

Таким образом, каждому новому документу при созднии по форме "temp1" присваивается очередной порядковый номер.
 
I

Isk

nor Сделал вот такую х..ню, на большее мозгов пока не хватило. Единственное что радует что сам.
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim ses As New NotesSession
Dim ws As New NotesUIWorkspace
Dim udoc As NotesUIDocument
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim str1 As String
Dim Ovar As Variant
Dim Vvar As Variant
Dim Ivar As Variant
Dim Orvar As Variant
Dim str2 As String

Ovar=1
Vvar=1
Ivar=1
Orvar=1

Set db=ses.CurrentDatabase
Set col=db.AllDocuments
Set doc=source.Document
Set doc=col.GetFirstDocument


While Not doc Is Nothing
If doc.bdname_1(0)="obr" Then
Ovar=Ovar+1
End If
If doc.bdname_1(0)="vhod" Then
Vvar=Vvar+1
End If
If doc.bdname_1(0)="ish" Then
Ivar=Ivar+1
End If
If doc.bdname_1(0)="ord" Then
Orvar=Orvar+1
End If

Set doc=col.GetNextDocument(doc)
Wend


Set udoc=ws.CurrentDocument
Set doc=udoc.Document

If doc.bdname_1(0)="obr" Then
str1="O"
str2=str1+"-" & Ovar
Messagebox("nomer documenta" & Ovar & str1)
End If
If doc.bdname_1(0)="vhod" Then
str1="V"
str2=str1+"-" & Vvar
Messagebox("nomer documenta" & Vvar & str1)
End If
If doc.bdname_1(0)="ish" Then
str1="Is"
str2=str1+"-" & Ivar
Messagebox("nomer documenta" & Ivar & str1)
End If
If doc.bdname_1(0)="ord" Then
str1="Or"
str2=str1+"-" & Orvar
Messagebox("nomer documenta" & Orvar & str1)
End If

Call source.FieldSetText("num",str2)

End Sub


Но как я сам думаю если док. будет много то все будет работать очень и очень медленно. Подскажи что можно переделать?
 
G

Guest

Vagor.ini и nor, спасибо.
Я понимаю что все нотации являются рекомендательными.
Пока мне не встретилось (ни в книгах ни в Инете) четкого описания рекомендаций по именованию объектов Lotus. Видно, что авторы используют какую-то систему именования, но формального описания или рекомендаций пока не встретил.
Буду искать или сам придумаю, точнее уже начал придумывать ... поля только для отображения того что вводитсяв другое поля с такой же смысловой нагрузкой именую с приставкой view :)
 
C

Chernom0r

Здравствуйте.
В Domino R5 есть возможность запускать агентов на сервере (After New Mail has Arrived).
Есть ли какие-либо специфические траблы с такими агетами?
Как я понял понятие UIWorkspase я в этом случае использовать не могу.
 
N

nor

Isk
Ты прав, ты в цикле перебираешь все документы в бд. Но тебе, я как понимаю, нужно посчитать количество документов, созданных только по определенной форме. Это сужает выборку.
Таким образом:

Код:
Set collection = db.Searh("Form=""имя_формы""", Nothing, 0)
далее пребираешь один за другим документы из коллекции и формируешь нужные тебе счетчики...

Можно сделать еще лучше и проще:

Код:
Set collection = db.Searh("Form=""имя_формы"" & bdname_1 = ""obr""", Nothing, 0)
Ovar = collection.Count

Set collection = db.Searh("Form=""имя_формы"" & bdname_1 = ""vhod""", Nothing, 0)
Vvar = collection.Count

... и т.д.

Это будет работть быстрее.
 
N

nor

Chernom0r
В агентах (любых) ты не можешь пользоваться классами Front end (uidocument, uiview, ...), а также функциями, требующими реакции конечного пользователя, типа MessageBox и др. Поэтому, что бы отладить агент, нужно его код навесить на кнопку либо в документе, либо в представлении, либо еще что-нибудь придумать, главное, что бы был досупен Debuger.
 
C

Chernom0r

nor
Отладка агента уже пройдена. Агент выполняет все мои требования.
Как мне теперь избавиться от UI....?
Вот часть этого агента. Выполняться он должен на сервере по приходу нового документа в почтовую базу.


Код:
Sub Initialize
   
   Dim session As NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim collection As NotesDocumentCollection
   Dim rtitem As NotesRichTextItem
   Dim item As NotesItem
   
   Set session = New NotesSession
   Set ws = New NotesUIWorkspace 
          ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
   Set db = session.CurrentDatabase
   Set doc = session.DocumentContext

и т.д.
 
N

nor

Chernom0r
"Как мне теперь избавиться от UI....?" - не пользуйся UI классами! :D Замени их либо откажись от них. Не думаю, что в твоем агенте UI классы являются определяющими и критически необходимыми. :D
 
G

Gogan.exe

Как открыть форму? Есть команды OpenPage, OpenFrameset и тому подобные, а есть ли команда OpetForm или какая-то похожая по функции?
 
V

Veselinka

@command([compose];"имя формы")

- создает новый документ по форме

dim ws as new NotesUIWorkspace

dim doc as notesdocument
set doc=....

call ws.EditDocument(false,doc)

- открывает документ по той форме, которая у него в поле form
 
G

Gogan.exe

аагррр.... умпф... ничего не понял.. учиться еще и учиться... может позднее пойму. спасибо
 
G

Gogan.exe

Для пробы, я создал базу данных по песенкам. Сева у меня менюшка с двумя кнопками – добавить песню и посмотреть список. Вопрос вот в чем – когда я нажимаю на одну из кнопок и справа открывается окно, то в верхней менюшке (список окон) появляется еще одно окно. Так, поработав с базой и понажимав кнопки, в меню появляется просто дикое количество окон. Как сделать так, чтобы окна не открывались по-новому, а заменяли друг друга? Извиняюсь, если непонятно объяснил.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!