Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
13:11:2003, 14:21
|
|
MANTICora Software Группа: Lotus team Сообщений: 826 Регистрация: 8:08:2003 Из: Минск, Беларусь Пользователь №: 4 Репутация: 1
|
Тема для постинга мелких вопросов - ответов для разрботчиков приложений и баз Lotus Notes. Если Ваш вопрос влечет долгое обсуждение, то желательно создать отдельную тему.
|
|
Сообщение
#1
|
|
![]() |
|
|
20:04:2004, 16:05
|
|
Lotus master Группа: Модеры Сообщений: 353 Регистрация: 10:04:2004 Пользователь №: 398 Репутация: 5
|
To osmor
Форма: "temp1". Поле, которое содердит текст логов: "history", Text, Computed when composed, Value: history. Каждый раз, при активировании действия (Sub Click)? в поле "history" добавляется некоторая текстовая информация, новые сообщения добавляются с новой строки причем. |
|
Сообщение
#61
|
|
|
|
20:04:2004, 16:18
|
|
Lotus master Группа: Модеры Сообщений: 353 Регистрация: 10:04:2004 Пользователь №: 398 Репутация: 5
|
to Isk
Форма: "temp1". Поля: 1. "number_field", Number, Computed when composed, Value: number_field. 2. "number_field2", Number, Computed when composed, Value: number_field2. Каждый раз, при активировании действия (Sub Click), в поле number_field записывается число, указанное пользователем. На основании значения поля "number_field" по определенной формуле рассчитывается числовое значение поля "number_field2". |
|
Сообщение
#62
|
|
|
|
21:04:2004, 03:22
|
|
Новенький Группа: Новенький Сообщений: 42 Регистрация: 14:04:2004 Пользователь №: 416 Репутация: 0
|
Спасибо nor , ты не можешь подсказать как сделать это все без ввода числа пользователем. просто допустим есть какой-то счетчик в форме или виде и надо его значение сохранить в поле чтобы при создании нового документа по этой форме брать значение из этого поля последнего документа. своего рода сортировка . то есть во всей коллекции ищется макс. знач. и наращивается на 1.
|
|
Сообщение
#63
|
|
|
Гость_Guest_*
|
21:04:2004, 05:28
|
|
Инопланетный гость |
Спасибо nor.
С помощью Lotus script не пробовал, все пытался на собаках, поскольку вроде все должно было получиться ... но такой же способ с использованием @Char не сработал. |
|
Сообщение
#64
|
|
|
|
21:04:2004, 05:46
|
|
MANTICora Software Группа: Lotus team Сообщений: 826 Регистрация: 8:08:2003 Из: Минск, Беларусь Пользователь №: 4 Репутация: 1
|
Isk
Здесь тебе помощь - читать про профайловые формы, через них можно легко организовать счетчик, и обрабатывать его на событии QuereSave |
|
Сообщение
#65
|
|
|
|
21:04:2004, 13:22
|
|
Новенький Группа: Новенький Сообщений: 84 Регистрация: 9:01:2004 Пользователь №: 208 Репутация: 1
|
Вопросец.
Существует ли в Lotus (IBM) общепринятая нотация именования объектов? Типа Венгерской ... Ну привык я, что нужно именовать по правилам ... Можно конечно и Венгерскую подогнать, или самому придумать, но может есть уже принятые правила именования? Например: Два поля одно для ввода данных другое для отображения ... View (представления), наборы рамок, страницы, агенты, структуры, да и действия тоже наверное ... |
|
Сообщение
#66
|
|
|
|
21:04:2004, 13:42
|
|
MANTICora Software Группа: Lotus team Сообщений: 826 Регистрация: 8:08:2003 Из: Минск, Беларусь Пользователь №: 4 Репутация: 1
|
osmor
Ну не знаю, определенной наверное нет, я например часто использую в полях префиксы типа полей и суффикс-имя формы. |
|
Сообщение
#67
|
|
|
|
21:04:2004, 17:37
|
|
Lotus master Группа: Модеры Сообщений: 353 Регистрация: 10:04:2004 Пользователь №: 398 Репутация: 5
|
osmor, официально - нет, не существует, но в книгах крупных издательств авторы рекомендуют определенную нотацию.
|
|
Сообщение
#68
|
|
|
|
21:04:2004, 17:47
|
|
Lotus master Группа: Модеры Сообщений: 353 Регистрация: 10:04:2004 Пользователь №: 398 Репутация: 5
|
Isk
Форма "temp1". Поле, которое хранит значения порядкового счетчика документов, созданных по форме "form1": "ordinal_num", number, computed when composed, value: ordinal_num. Скрытое служебное представление ($temp1): столбец1: column value: ordinal_num, sort: Descending. Таким образом, каждому новому документу при созднии по форме "temp1" присваивается очередной порядковый номер. |
|
Сообщение
#69
|
|
|
|
22:04:2004, 02:11
|
|
Новенький Группа: Новенький Сообщений: 42 Регистрация: 14:04:2004 Пользователь №: 416 Репутация: 0
|
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 Но как я сам думаю если док. будет много то все будет работать очень и очень медленно. Подскажи что можно переделать? |
|
Сообщение
#70
|
|
|
Гость_Guest_*
|
22:04:2004, 05:42
|
|
Инопланетный гость |
Vagor.ini и nor, спасибо.
Я понимаю что все нотации являются рекомендательными. Пока мне не встретилось (ни в книгах ни в Инете) четкого описания рекомендаций по именованию объектов Lotus. Видно, что авторы используют какую-то систему именования, но формального описания или рекомендаций пока не встретил. Буду искать или сам придумаю, точнее уже начал придумывать ... поля только для отображения того что вводитсяв другое поля с такой же смысловой нагрузкой именую с приставкой view :-) |
|
Сообщение
#71
|
|
|
|
22:04:2004, 08:39
|
|
Новенький Группа: Новенький Сообщений: 50 Регистрация: 16:04:2004 Из: Москва Пользователь №: 424 Репутация: 0
|
Здравствуйте.
В Domino R5 есть возможность запускать агентов на сервере (After New Mail has Arrived). Есть ли какие-либо специфические траблы с такими агетами? Как я понял понятие UIWorkspase я в этом случае использовать не могу. |
|
Сообщение
#72
|
|
|
|
22:04:2004, 08:48
|
|
Lotus master Группа: Модеры Сообщений: 353 Регистрация: 10:04:2004 Пользователь №: 398 Репутация: 5
|
Isk
Ты прав, ты в цикле перебираешь все документы в бд. Но тебе, я как понимаю, нужно посчитать количество документов, созданных только по определенной форме. Это сужает выборку. Таким образом: далее пребираешь один за другим документы из коллекции и формируешь нужные тебе счетчики... Можно сделать еще лучше и проще: Это будет работть быстрее. |
|
Сообщение
#73
|
|
|
|
22:04:2004, 08:56
|
|
Lotus master Группа: Модеры Сообщений: 353 Регистрация: 10:04:2004 Пользователь №: 398 Репутация: 5
|
Chernom0r
В агентах (любых) ты не можешь пользоваться классами Front end (uidocument, uiview, ...), а также функциями, требующими реакции конечного пользователя, типа MessageBox и др. Поэтому, что бы отладить агент, нужно его код навесить на кнопку либо в документе, либо в представлении, либо еще что-нибудь придумать, главное, что бы был досупен Debuger. |
|
Сообщение
#74
|
|
|
|
22:04:2004, 09:16
|
|
Новенький Группа: Новенький Сообщений: 50 Регистрация: 16:04:2004 Из: Москва Пользователь №: 424 Репутация: 0
|
nor
Отладка агента уже пройдена. Агент выполняет все мои требования. Как мне теперь избавиться от UI....? Вот часть этого агента. Выполняться он должен на сервере по приходу нового документа в почтовую базу.
|
|
Сообщение
#75
|
|
|
|
22:04:2004, 18:57
|
|
Lotus master Группа: Модеры Сообщений: 353 Регистрация: 10:04:2004 Пользователь №: 398 Репутация: 5
|
Chernom0r
"Как мне теперь избавиться от UI....?" - не пользуйся UI классами! |
|
Сообщение
#76
|
|
|
|
27:04:2004, 06:02
|
|
Продвинутый Группа: Новенький Сообщений: 162 Регистрация: 23:04:2004 Из: Ульяновск НГ Пользователь №: 445 Репутация: 0
|
Как открыть форму? Есть команды OpenPage, OpenFrameset и тому подобные, а есть ли команда OpetForm или какая-то похожая по функции?
|
|
Сообщение
#77
|
|
|
|
27:04:2004, 07:57
|
|
Lotus team Группа: Lotus team Сообщений: 142 Регистрация: 3:03:2004 Из: Новосибирск Пользователь №: 303 Репутация: 0
|
@command([compose];"имя формы")
- создает новый документ по форме dim ws as new NotesUIWorkspace dim doc as notesdocument set doc=.... call ws.EditDocument(false,doc) - открывает документ по той форме, которая у него в поле form |
|
Сообщение
#78
|
|
|
|
27:04:2004, 08:10
|
|
Продвинутый Группа: Новенький Сообщений: 162 Регистрация: 23:04:2004 Из: Ульяновск НГ Пользователь №: 445 Репутация: 0
|
аагррр.... умпф... ничего не понял.. учиться еще и учиться... может позднее пойму. спасибо
|
|
Сообщение
#79
|
|
|
|
27:04:2004, 10:26
|
|
Продвинутый Группа: Новенький Сообщений: 162 Регистрация: 23:04:2004 Из: Ульяновск НГ Пользователь №: 445 Репутация: 0
|
Для пробы, я создал базу данных по песенкам. Сева у меня менюшка с двумя кнопками – добавить песню и посмотреть список. Вопрос вот в чем – когда я нажимаю на одну из кнопок и справа открывается окно, то в верхней менюшке (список окон) появляется еще одно окно. Так, поработав с базой и понажимав кнопки, в меню появляется просто дикое количество окон. Как сделать так, чтобы окна не открывались по-новому, а заменяли друг друга? Извиняюсь, если непонятно объяснил.
|
|
Сообщение
#80
|
|
|
|
28:04:2004, 02:55
|
|
Новенький Группа: Новенький Сообщений: 42 Регистрация: 14:04:2004 Пользователь №: 416 Репутация: 0
|
Veselinka Привет, в очередной раз обращаюсь за помощью. Не подскажешь? Как в документе запретить редактирование? полностью. Вот что попробовал сделать, но виснет все!!!!
Sub Postopen(Source As Notesuidocument) Dim ses As New NotesSession Dim db As NotesDatabase Dim ws As New NotesUIWorkspace Dim doc As NotesDocument Dim acl As NotesACL Set db=ses.CurrentDatabase Set acl=db.ACL Set source=ws.CurrentDocument Set doc=source.Document If source.IsNewDoc Then Exit Sub Else If acl.Roles="[AdminBD]" Then source.EditMode=True Else Call ws.EditDocument(False) End If End If End Sub Блин!!!!!!!! Спасибо |
|
Сообщение
#81
|
|
|
|
28:04:2004, 06:48
|
|
Lotus team Группа: Lotus team Сообщений: 142 Регистрация: 3:03:2004 Из: Новосибирск Пользователь №: 303 Репутация: 0
|
Isk, естьу формы такое событие QueryModeChange
у него как и у всех событий типа Query есть параметр Continue, который при установке его на False, не даст свершиться тому действию, которому событие предшествует. Кроме того на Postopen действительно надо запретить переход в режим редактирования. Но эта защита - интерфейсная, то есть если у человека есть реальные права на редактирование документа, то он сможет редактировать его из баэкнда, поэтому если документ нельзя давать редактировать никому кроме сервера и админов - ну просто убери из его авторских и ридерских полей всех кроме админов. А теперь я хочу прокоментировать твой код, может Это заставит тебя читать спецификацию и понимать - что пишешь: Sub Postopen(Source As Notesuidocument) Dim ses As New NotesSession Dim db As NotesDatabase Dim ws As New NotesUIWorkspace Dim doc As NotesDocument Dim acl As NotesACL Set db=ses.CurrentDatabase Set acl=db.ACL Set source=ws.CurrentDocument нафига присваивать переданному тебе открываемому документу Source еще что-то - тебе его и так в этом методе передают - зачем его еще каким-то образом искать? Может перед тем как чем-то пользоваться - почитать сначала что это такое? Ты же не расчесываешься по утрам вилкой и если видишь незнакомый предмет - выясняешь - для чего он нужен, перед тем как пользоваться - почему бы тебе мануалы наконец не начать читать? Если ты не начнешь этого делать - то твои вопросы НИКОГДА не иссякнут. Set doc=source.Document If source.IsNewDoc Then Exit Sub Else If acl.Roles="[AdminBD]" Then Syntax To get: stringArray = notesACL.Roles При сравнении массива со строкой что происходит? Правильно - все падает - ибо они не сравнимы! Кроме того наверное смысл твоего кода - не проверить наличие в ACL твоей базы такой роли, а проверить ее наличие у текущего пользователя. Значит перед тем как пользоваться методом - надо выяснить - что он возвращает и имеет ли смысл его употреблять. Здесь надо использовать что-то совсем иное... Что? Вопрос для самостоятельного выснения. Подсказка - почитай про @userRoles И про то как использовать выполнение формул из лотус скрипта. source.EditMode=True Else Call ws.EditDocument(False) вот это меня просто прибило... у тебя документ УЖЕ открывается в рабочей области -зачем же его открывать опять? Я даже не знаю как поведет себя нотес в такой ситуации - если все упадет с красным экраном я не удивлюсь. Ты же уже начал рулить параметром edit mode - ну и продолжай с ним работать. End If End If Если бы я писала код на PostOpen событии, то я бы написала вот так: Mode=source.editmode If not source.IsNewDoc then tmp=evaluate(|@IsMember("[AdminBD]";@UserRoles)|) if tmp(0)=0 then ' Это значит, чтопользователь не админ source.editMode=Mode end if end if |
|
Сообщение
#82
|
|
|
|
28:04:2004, 06:52
|
|
Lotus team Группа: Lotus team Сообщений: 142 Регистрация: 3:03:2004 Из: Новосибирск Пользователь №: 303 Репутация: 0
|