Vagor.ini
13:11:2003, 14:21
Тема для постинга мелких вопросов - ответов для разрботчиков приложений и баз Lotus Notes. Если Ваш вопрос влечет долгое обсуждение, то желательно создать отдельную тему.
Vagor.ini
13:11:2003, 14:28
Для юзабильности

форм и страниц многие разработчики создают акцию(кнопку) "Закрыть" с командой
@Command([FileCloseWindow])
Но если на форме проводилось редактирование, а потом была нажата кнопка "Закрыть" с подобной командой (подразумевающая, что сохранять не надо) лотусовский клиент все равно спросит диалогом сохранять или нет

Чтобы заставить команду работать без подтвержения сохранения при закрытии следует указать следующий код:
FIELD SaveOptions:="0";
@Command([FileCloseWindow])
ЛотусМастер
13:11:2003, 16:34
Кстати, для справки: после присвоения SaveOptions:=0 не сохранит даже принудительный [FileSave]
Vagor.ini
13:11:2003, 19:18
Цитата
Кстати, для справки: после присвоения SaveOptions:=0 не сохранит даже принудительный [FileSave]
Знаем, юзали

Так я же здесь и собрался такое, мелкое, постить. Будет и сложнее, буду по своим стопам

следовать, что сам когда-то искал
Vagor.ini
13:11:2003, 19:48
Простой скрипт на выгрузку содержимого любого вида (представления) в ExcelSub Click(Source As Button)
Dim WS As notesuiworkspace
Dim UiView As notesuiview
Dim ViewString As String
Dim session As NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim docX As NotesDocument
Dim col As Integer
Dim row As Double
Dim xl As Variant
Dim xlWbk As Variant
Dim pagename As String
Set WS = New notesuiworkspace
Set session = New notessession
Set db=session.CurrentDatabase
Print "Please Be Patient as the Excel Spreadsheet is being created..."
' Get dynamic view name, R5 only
' Take this part out if using in R4, you have to hard-code the name of the view in ViewString
Set UiView=WS.currentview
ViewString=UiView.viewname
Set v=db.GetView(ViewString)
' Create Excel Sheet
Set xl=CreateObject("Excel.Application")
Set xlWbk=xl.Workbooks.Add
' Add column headings to first row
col=1
Forall vColumn In v.Columns
xlWbk.ActiveSheet.Cells(1, col)=vColumn.Title
col=col+1
End Forall
' Add row data from the documents
row=2
Set docX=v.GetFirstDocument
While Not docX Is Nothing
col=1
Forall cValue In docX.ColumnValues
xlWbk.ActiveSheet.Cells(row, col)=cValue
col=col+1
End Forall
row=row+1
Set docX=v.GetNextDocument(docX)
Wend
' Make all columns fit
xlWbk.ActiveSheet.Columns.AutoFit
Print "Excel Document Successfully Created!"
' Open it up in Excel
xl.Visible=True
End Sub
Vagor.ini
13:11:2003, 22:26
Открытие вида(представления) на весь экран, без списка видов в левой части базы@Command([ViewNavigatorsNone])
P.S. Помню как сам "пылесосил" help пока нашел команду
Vagor.ini
13:11:2003, 22:32
Удаление неиспользуемых полей базы в инспекторе дизайнераВ Lotus Designer есть одна

неудобная штука. Если Вы удалили поле, то в списке существующих полей (инспектор, поля для столбцов вида и т.п.) все равно висит имя этого, несуществующего поля. Это, в принципе ни на что не влияет, но засоряет список. Так вот чтобы убрать это имя поля из списка следует сделать:
1. убедиться, что поле нигде не используется (формы, подформы, документы, в том числе профильные)
2. на последней справа закладке св-в БД поставить галку на "Оптимизировать таблицы документов".
3. Запустить сжатие.
Vagor.ini
16:11:2003, 23:05
Агент позволяющий удалять дублирующие записи/документы в видеНашел вот только, сам не тестировал.
Option Declare
Sub Initialize
%REM
DESCRIPTION:
This agent loop through documents listed in ViewDelete and marks documents that duplicates column
values of another doc. If set it also deletes duplicates docs found in that view.
NOTES:
Design of ViewDelete:
- View should consist of at least one sorted column. To check if documents duplicate more then
one value, the appropriate number of sorted columns should be added.
- The last column in view should be UNSORTED, and got formula which names the field marking
duplicates (It's the best if there are no values displayed in the last column). Example
formula: MARK_DUPLICATES
Customizing agent:
- set nameViewDelete apropriate if you want to use your own name of view
- markOnly - set true if you want agent only to set field marking duplicates, not to
delete duplicates phisically; set false if you want to delete duplicates phisically
- doCheckMarkTags - set true if you want to preserve field names clash (agent stops if it finds
documents that already got field with name the same as field marking duplicates; set false to
delete all documents which have fields named as field marking duplicates with value valueTagItem
- set valueTagItem if you wants to mark duplicates with another value
HISTORY:
2001-09-05, T.Zoltowski, created
%END REM
'name of search view
Const nameViewDelete = "ViewDelete"
'hard delete or just marking
Const markOnly = False
'do check if there is already a field marking duplicates on doc
Const doCheckMarkTags = True
'value marking duplicates
Const valueTagItem = "1"
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim viewDelete As NotesView
Set viewDelete = db.GetView(nameViewDelete)
If viewDelete Is Nothing Then
Print |View "| & nameViewDelete & |" not found !? Exiting.|
Exit Sub
End If
Dim numberColumns As Integer
numberColumns = Ubound(viewDelete.Columns) + 1
'check if there is apropriate number of columns
If numberColumns < 2 Then
Print |There should be at least 2 columns in view "| & nameViewDelete & |" ! Exiting.|
Exit Sub
End If
Dim columnIndex As Integer
'check if apropriate columns are sorted (it's a MUST to correctly find duplicates)
For columnIndex = 0 To numberColumns - 2
If Not viewDelete.Columns(columnIndex).IsSorted Then
Print |Column | & (columnIndex + 1) & | in view "| & nameViewDelete & |" isn't sorted (it should be!) ! Exiting.|
Exit Sub
End If
Next
'check if last column is unsorted (don't want to resort docs in view at any chance)
If viewDelete.Columns(columnIndex).IsSorted Then
Print |Last column in view "| & nameViewDelete & |" is sorted (it shouldn't be!)! Exiting.|
Exit Sub
End If
Dim nameTagItem As String
'taking the name of field marking duplicates
nameTagItem = viewDelete.Columns(columnIndex).ItemName
'actual doc
Dim doc As NotesDocument
'doc preceding actual doc in view
Dim docPrev As NotesDocument
Set doc = viewDelete.GetFirstDocument
'are there any docs ?
If doc Is Nothing Then Exit Sub
'do any checks
If checkMarkTags(doc, nameTagItem, doCheckMarkTags) Then
Print |Doc has item "| & nameTagItem & |" - there could be marking clash (try another name)! Exiting.|
Exit Sub
End If
Set docPrev = doc
Set doc = viewDelete.GetNextDocument(doc)
If checkMarkTags(doc, nameTagItem, doCheckMarkTags) Then
Print |Doc has item "| & nameTagItem & |" - there could be marking clash (try another name)! Exiting.|
Exit Sub
End If
Dim countProcessed As Long
countProcessed = 1
Dim countDuplicates As Long
countDuplicates = 0
Do Until doc Is Nothing
If checkMarkTags(doc, nameTagItem, doCheckMarkTags) Then
Print |Doc has item "| & nameTagItem & |" - there could be marking clash (try another name)! Exiting.|
Exit Sub
End If
Dim isDuplicate As Variant
'we assume that actual doc is "identical" as previous
isDuplicate = True
For columnIndex = 0 To numberColumns - 2
If docPrev.ColumnValues(columnIndex) <> doc.ColumnValues(columnIndex) Then
'there is a difference in column values - it's not a duplicate
isDuplicate = False
Exit For
End If
Next
If isDuplicate Then
'mark duplicate
Call doc.ReplaceItemValue(nameTagItem, valueTagItem)
Call doc.Save(True, True)
countDuplicates = countDuplicates + 1
End If
countProcessed = countProcessed + 1
Print "Processed " & countProcessed & ", duplicates " & countDuplicates
'move to actual doc to next doc (move previous doc too)
Set docPrev = doc
Set doc = viewDelete.GetNextDocument(doc)
Loop
If countDuplicates > 0 Then
'we found some duplicates
If markOnly Then
'only mark - already done
Print "Finished processing document: " & countDuplicates & _
| found. Delete all docs with field "| & nameTagItem & |" set to "| & valueTagItem & |" manually.|
Else
'do hard delete
Print "Deleting duplicates"
'reference to doc being deleted (temporary)
Dim docRemove As NotesDocument
'we are moving upright starting at last doc - it preserves before sliding docs in view after
'deleting docs and refreshing index
Set doc = viewDelete.GetLastDocument
Dim countDeleted As Long
countDeleted = 0
Do Until doc Is Nothing
'reset reference to deleted doc
Set docRemove = Nothing
If doc.HasItem(nameTagItem) Then
If doc.GetItemValue(nameTagItem)(0) = valueTagItem Then
'if it's doc marked to removing
Set docRemove = doc
End If
End If
Set doc = viewDelete.GetPrevDocument(doc)
If Not docRemove Is Nothing Then
'if there is doc to delete
Call docRemove.Remove(True)
countDeleted = countDeleted + 1
Print "Deleted " & countDeleted & " of " & countDuplicates
End If
Loop
End If
End If
End Sub
Function checkMarkTags(doc As NotesDocument, itemName As String, doCheck As Variant) As Variant
If doCheck Then
If doc.HasItem(itemName) Then
checkMarkTags = True
Exit Function
End If
End If
checkMarkTags = False
End Function
Vagor.ini
26:11:2003, 19:20
Может кто сталкивался с подобным вопросом, подскажите пути решения.
Есть вид (view), в котором ряд колонок имеют total'ы, т.е. подбиты суммы и все это собрано в категорию и при свертке строк олучается около 100 шт. Нужно из другой базы получить total'ы категорий программно, допустим по запросу ключевой колонки (первой категоризированной в виде).
Спасибо!
mony_id
26:11:2003, 19:25
Цитата
Может кто сталкивался с подобным вопросом, подскажите пути решения.
Есть вид (view), в котором ряд колонок имеют total'ы, т.е. подбиты суммы и все это собрано в категорию и при свертке строк олучается около 100 шт. Нужно из другой базы получить total'ы категорий программно, допустим по запросу ключевой колонки (первой категоризированной в виде).
Спасибо!
КАК-ТО НЕ СОВСЕМ ПОНЯНО, ЧТО БУДЕТ ЯВЛЯТЬСЯ КЛЮЧЕМ ДЛЯ ДАННЫХ ИЗ ДРУГОЙ БАЗЫ
Vagor.ini
26:11:2003, 19:36
mony_idЦитата
ЧТО БУДЕТ ЯВЛЯТЬСЯ КЛЮЧЕМ ДЛЯ ДАННЫХ
Данные из категоризированного первого столбца вида
mony_id
26:11:2003, 19:37
С ЛЕТА НЕ СКАЖУ НО НАДО ПОДУМАТЬ, ВООБЩЕТО В СКРИПТАХ ЕСТЬ ПРИМЕРЫ НЕ ПЛОХИЕ, ТАМ ГЛЯНЬ. ЕСЛИ ЧТО НИ-ТЬ НАЙДУ БРОШУ
mony_id
26:11:2003, 19:40
Vagor.ini
ДАЙ ТИПЫ ДАННЫХ И ЧТО С ЧЕМ ВЯЗАТЬ А ТО ПЛОХО ПРЕДСТАВЛЯЕТСЯ:
ВИД1
МЯСО 10
ПИВО 20
ВОДКА 30
60
Guest_VZH
26:11:2003, 19:45
Используй либо execute("@DBLookUP(...)") или объект типа NotesNavigator
Vagor.ini
26:11:2003, 19:54
mony_idТипа вид
Name Col
-----------------------
>Полка 7
>>Шуруп 3
>>Гайка 2
>>Стяжка 2
>Стол 10
>Стул 13
30
Категория полка типа раскрыта

Нужно программно добраться до тотала полки=7, стол=10 и т.п
mony_id
26:11:2003, 19:58
ЗАНЕШЬ МОЖНО ПРИ ПОМОЩИ ДОКУМЕНТКОЛЕКШИОНС ПОСЧИТАТЬ СКОЛЬКО ДОКУМЕНТОВ СО ЗНАЧЕНИЕМ "ПОЛКА В ДАННОМ ВИДЕ" И НЕ ТОЛЬКО ПОСЧИТАТЬ НО И СЛОЖИТЬ ЗНАЧЕНИЯ, С ВЕРСИИ 6 ПОЯВИЛИСЬ В СКРИПТАХ МАССИВЫ.
Vagor.ini
26:11:2003, 20:13
mony_idКолекциями я то знаю и это делаю, я имел ввиду вопрос можно ли программно получить доступ к тоталам, не персчитываю что-то отдельно. Работаю на 5 domino.
Ну в принципе я написал, работает, просто по ключу считаю (без всяких тоталов)
Sub Initialize
Dim session As NotesSession
Dim db As NotesDataBase
Dim doc As NotesDocument
Set session = New NotesSession
Set w = New NotesUIWorkspace
' Для текущей базы
Set db = session.CurrentDatabase
Set doc = w.CurrentDocument
' Для базы РВП
Set dbRVP = New NotesDatabase("mpovtsrv/mpovt/by","BASEMPOVT\RVP.nsf")
Set viewRVP = dbRVP.GetView("ExcelAllRVP")
Set docRVP = viewRVP.GetFirstDocument
Dim DSE As String
Dim TPrice As Double
Do While Not (docRVP Is Nothing)
DSE = docRVP.TAISRVPform(0)
Do While (docRVP.TAISRVPform(0)=DSE)
TPrice = TPrice + Cdbl(docRVP.Field15RVPform(0))
Set docRVP = viewRVP.GetNextDocument(docRVP)
If (docRVP Is Nothing) Then
Exit Do
End If
Loop
Set doc = New NotesDocument(db)
doc.Form = "RVPProductForm"
doc.DCE_RVP = DSE
doc.Price_RVP = TPrice
Call doc.Save(True,False)
TPrice=0
Loop
End Sub
mony_id
26:11:2003, 20:25
Цитата
Колекциями я то знаю и это делаю, я имел ввиду вопрос можно ли программно получить доступ к тоталам, не персчитываю что-то отдельно. Работаю на 5 domino.
Ну в принципе я написал, работает, просто по ключу считаю (без всяких тоталов)
КЛАДУ РУКУ НА СЕРДЦЕ НО НИЧЕГО СЕЙЧАС НЕ СКАЖУ. БОЛЬНО ГОЛОВА БОЛИТ. И Я КАК ТО БОЛЬШЕ АДМИНИСТРИРОВАНИЕМ ЗАНЯТ.
ПРОГРАММНО К ТОТАЛАМ МОЖНО ЕСЛИ ДО ЗАВТРА ТЕРПИТ ТО НАЙДУ ГДЕТО ПОПАДАЛОСЬ.
ТАМ НУЖНО ПРАВИЛЬНО ХОДИТЬ ПО СТОЛБЦАМ В ВИДЕ
Vagor.ini
26:11:2003, 20:34
mony_idЦитата
ПРОГРАММНО К ТОТАЛАМ МОЖНО ЕСЛИ ДО ЗАВТРА ТЕРПИТ ТО НАЙДУ ГДЕТО ПОПАДАЛОСЬ.
Естественно, подождет, найдешь пиши. Не болей
mony_id
27:11:2003, 17:09
Цитата
Естественно, подождет, найдешь пиши. Не болей
Почти выздоровил.
пока не нашел, но думаю на днях будет кусок того срипта, мы когда-то тоталы получали, что-бы их в эксель перетаскивать.
Уж чем болен Лотус так это очень слабенькими отчетами. там только своими ручками.
Vagor.ini
27:11:2003, 20:07
mony_idЦитата
пока не нашел, но думаю на днях будет кусок того срипта, мы когда-то тоталы получали, что-бы их в эксель перетаскивать.
Во-во, мне тоже в excel загрузить надо в итоге
Цитата
Уж чем болен Лотус так это очень слабенькими отчетами. там только своими ручками.
Вот и нечего "растаскивать" корпоративные базы по локальным отчетам
mony_id
28:11:2003, 17:20
Цитата
Вот и нечего "растаскивать" корпоративные базы по локальным отчетам
Да в принципе правильно, хоть Домино и есть первая система безбумажного документооборота, но большим босам как всегда приходится отдавать материал на бамажке.
Это VZH (пароль за праздники забыл нафик)-
С помощью NotesNavigator не проблема в скрипте получить все тоталы.
Еще можно сделать Execute с @Sum(@DBLookup(...))
Вообщем не проблема :-)
Vagor.ini
9:01:2004, 21:27
VZHТочно, во блин ламак

решение как всегда на поверхности
Цитата
@Sum(@DBLookup(...))
так и буду делать...
Народ! Есть очень наболевший вопрос... а именно, как генерить отчеты в lotus? Конечно, все можно выгружать в офис, или ещё куда (Crystal Report), но это все какая-то чушь... Есть возможность "набивать" программно отчеты в ричтекстполе, это более интересно. Если генерить по старинке, т.е. построчно, присутствуют гадкие пробелы перед и после вставляемых строк, как это обойти?
Vagor.ini
19:01:2004, 13:14
Не знаю что значит по старинке, в принципе отчетами внутри лотуса не занимался, а $Trim не поможет обрезать пробелы...
mony_id
27:01:2004, 17:37
Вот тема: кто знает как организовано построение топологии сети в административном клиенте.
Например: в разделе Replication Topology.
Меня интересует как сделана графическая часть, что и от куда берется, я понял. А вот как сделана графическая часть вот интересно. Есть задумки реализовать это в некоторых базах данных.
Рад буду услышать ваши мнения.
У меня вопрос к опытным разработчикам, если будет время вы бы не могли дать какое нибудь простенькое описание агента, с чего начинать его писать, какие объекты создавать, в смысле ссылки, создавать новую сессию или нет, новое раб. простр. или тоже нет. как связать этого агента с нужной б.д. и т.д. Просто мозги никак не доходят, вроде все по рпимерам делаешь, но почему-то всегда все криво получается, или мозги у меня кривые. короче ПОМОГИТЕ!!!!!!!!!!
Vagor.ini
4:03:2004, 20:55
Arly
Ok, агент, как правило обрабатывает выделенный документ или все документы, запускается вручную, по событию или расписанию и имеет собственно саму программу ( на языках @ формулы, lotusScript, Java, Simple actions) .
Напиши, какую ты базу (агент) хочешь написать. Так очень сложно рассказать, хотя думаю, что Veselinka, скоро это все опишет в своей замечательной концепции...
Vagor.ini Да неважно, мне бы понять в общем так сказать смысле. Ну хотя бы для какой нибудь простенькой б.д.
я у Дебби Линд читал, там вроде описан почтовый агент, принимающий почту, но не все так просто в этой жизни, в смысле отдельные моменты так и не дошли до меня, так например If note. Form ( 0 ) = "REQ" Then, до моей дырявой головы не доходит REQ это форма или поле и как его помечать, но это лишь один из многих моментов которые тревожат душу , но не доходят до мозгов. Спасибо
Vagor.ini Да неважно, мне бы понять в общем так сказать смысле. Ну хотя бы для какой нибудь простенькой б.д.
я у Дебби Линд читал, там вроде описан почтовый агент, принимающий почту, но не все так просто в этой жизни, в смысле отдельные моменты так и не дошли до меня, так например If note. Form ( 0 ) = "REQ" Then, до моей дырявой головы не доходит REQ это форма или поле и как его помечать, но это лишь один из многих моментов которые тревожат душу , но не доходят до мозгов. Спасибо
Уважаемый, Arly. Вот пример крайне простого агента, который производит поиск документов по заданным критериям и найденные документы отображает в папке. В работе агента, я думаю, не составит труда разобраться.
(Declaration)
Dim session As NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim profile As NotesDocument
Dim collection As NotesDocumentCollection
Dim view As NotesView
Dim entry_collection As NotesViewEntryCollection
(Initialize)
Set session = New NotesSession
Set db = session.CurrentDatabase
Set doc = session.DocumentContext
Set view = db.GetView("($profile)")
Set profile = view.GetFirstDocument
Call Search(doc)
Sub Search(doc As NotesDocument)
Dim search_str As String
Dim searchConsultantType As Variant
Dim list_members As String
Dim coord_place As NotesDocument
Select Case doc.category(0)
Case "0"
search_str = "Form = ""consultrequest"""
If doc.request_contact_person(0) <> "" Then search_str = search_str + " & " + "contact_person = """ + Trim$(doc.request_contact_person(0)) + """"
If doc.request_consultant_name(0) <> "" Then search_str = search_str + " & " + "consultant_name = """ + Trim$(doc.request_consultant_name(0)) + """"
If doc.request_status(0) <> "Выбрать..." Then
search_str = search_str + " & " + "doc_status = """ + Trim$(doc.request_status(0)) + """"
Else
search_str = search_str + "& @Contains(doc_status; ""1"" : ""2"" : ""3"" : ""4"" : ""5"" : ""8"" : ""9"")"
End If
If doc.request_urgency(0) <> "Выбрать..." Then search_str = search_str + " & " + "consult_urgency = """ + Trim$(doc.request_urgency(0)) + """"
If doc.request_target(0) <> "Выбрать..." Then search_str = search_str + " & " + "consult_target = """ + Trim$(doc.request_target(0)) + """"
If doc.request_consult_type(0) <> "Выбрать..." Then search_str = search_str + " & " + "consult_type = """ + Trim$(doc.request_consult_type(0)) + """"
If doc.request_date_start(0) <> "" Then search_str = search_str + " & " + "@Created >= @TextToTime(""" + Cstr(doc.request_date_start(0)) + """)"
If doc.request_date_end(0) <> "" Then search_str = search_str + " & " + "@Created <= @TextToTime(""" + Cstr(doc.request_date_end(0)) + """)"
Case "1"
search_str = "Form = ""consultrequest_author"""
If doc.author_LastNameRus(0) <> "" Then search_str = search_str + " & " + "userLastNameRus = """ + Trim$(doc.author_LastNameRus(0)) + """"
If doc.author_FirstNameRus(0) <> "" Then search_str = search_str + " & " + "userFirstNameRus = """ + Trim$(doc.author_FirstNameRus(0)) + """"
If doc.author_MiddleNameRus(0) <> "" Then search_str = search_str + " & " + "userMiddleNameRus = """ + Trim$(doc.author_MiddleNameRus(0)) + """"
If doc.author_company(0) <> "" Then search_str = search_str + " & " + "organization = """ + Trim$(doc.author_company(0)) + """"
If doc.author_email(0) <> "" Then search_str = search_str + " & " + "email = """ + Trim$(doc.author_email(0)) + """"
Case "2"
search_str = "Form = ""consultant"""
If doc.consultant_LastNameRus(0) <> "" Then search_str = search_str + " & " + "userLastNameRus = """ + Trim$(doc.consultant_LastNameRus(0)) + """"
If doc.consultant_FirstNameRus(0) <> "" Then search_str = search_str + " & " + "userFirstNameRus = """ + Trim$(doc.consultant_FirstNameRus(0)) + """"
If doc.consultant_MiddleNameRus(0) <> "" Then search_str = search_str + " & " + "userMiddleNameRus = """ + Trim$(doc.consultant_MiddleNameRus(0)) + """"
If doc.consultant_medicine_place(0) <> "" Then search_str = search_str + " & " + "medicine_place = """ + Trim$(doc.consultant_medicine_place(0)) + """"
If doc.consultant_email(0) <> "" Then search_str = search_str + " & " + "email = """ + Trim$(doc.consultant_email(0)) + """"
If doc.consultant_type(0) <> "Выбрать..." Then search_str = search_str + " & " + "@Contains(consult_type; """ + doc.consultant_type(0) + """)"
End Select
Set collection = db.Search(search_str, Nothing, 0)
Set view = db.GetView("SearchResults")
Set entry_collection = view.AllEntries
Call entry_collection.RemoveAllFromFolder("SearchResults")
If collection.Count <> 0 Then
Call collection.PutAllInFolder("SearchResults")
Call view.Refresh
End If
Set coord_place = New NotesDocument(dB)
coord_place.Form = "coordinator_place"
coord_place.menu = "SearchResults"
coord_place.title = ":: Результаты поиска документов"
coord_place.is_folder = 1
Call coord_place.ComputeWithForm(False, False)
Call coord_place.Save(True, True)
Print "[" + profile.db_directory(0) + "/" + db.FileName + "/0/" + coord_place.UniversalID + "?OpenDocument]"
End Sub
nor Спасибо, буду разбирать.
Veselinka
12:04:2004, 12:07
Есть предложение, при написании сэмпловых скриптов в формуе - выделять самую суть, которая решает поставленный вопрос, а то каждый раз... куча нагромождения... так и хочется упомянуть шутку из Титаника "о страсти некоторых мужчин к большим размерам".

Чем лаконичнее изложено решение проблемы - с минимум посторонних, не относящихся к делу подробностей, тем как правило понятнее бывает тому, до кого это решение пытаются донести.
Veselinka, я написал "САМУЮ СУТЬ", которая "решает поставленный вопрос", без "нагромаждения".
Доброго всем времени.
Поможите кто чем может.
Вопрос такой, как в форме вывести RTF поле и при этом не дать его редактировать. Другие поля должны редактироваться.
Попытался сделать как учит ув. Veselinka (еще раз спасибо за "Концепции ..." :-)) т.е. создал два поля одно изменяемое, второе вычисляемое c "противоположной" видимостью. Но почему, то не хочет вычисляться поле "текст RTF".
Если вместо вычисляемого "текст RTF" поставить поле с типом "текст" и формулу для вычисления @abstract (..... ), то все работает, но тогда форматирование текста теряется.
Спасибо.
Чуть не забыл работаю на 6.5
Привет, osmor.
Это стандартная ситуация: поле включаешь в Controlled Access Section. Тип секции - Computed. Далее необходимо указать условие (формулу), которое
предоставляет доступ к секции для редактирования указанным людям (имя пользователя нужно указывать в иерархическом виде), указанным группам, или указанным людям, наделенными определенными правами. Также секцию можно скрыть, свернуть и т.д. Подпись секции также можно отдельно скрыть. Приведу пример:
@If(
is_under_execution = 0;
"[request_author]";
"[noone]"
)
Данная формула предоставляет доступ к секции (к полям секции) для редактирования пользователям с ролью "request_author", если статус документа "is_under_execution = 0". Иначе, если условие не выполняется, доступ предоставляется пользователям с ролью "noone". Здесь - внимание. В acl бд у меня
вообще нету такой роли. Таким образом, при невыполнении условия, поля секции все пользователи системы, вне зависимости от их уровня доступа к бд, могут только прочитать, так как пользователей с ролью "noone" у меня вообще нету. Немного непонятно и каламбурно. Почему я вместо "noone" не указал "" или что-то другое? Я уже не помню. Этот пример взят из работающей бд и когда-то был выработан мной с затратами определенного количества нервной энергии и времени.
Огромное спасибо, nor!!!
Все получилось, все работает.

Это как раз к вопросу о концепции, пока не знаешь КАК можно потратить дни, и никакие знания языка здесь не помогут...
И еще сразу вопрос, можно как то избавиться от этого красивого окошка "Изменять содержимое данного раздела могут", которое выскакивает при одинарном клике на разделе?
Еще раз спасибо.
Veselinka
14:04:2004, 06:19
Нор, рулез - я не знала такого способа обходиться с вычисляемыми РТФами

Спасибо за подсказку, как-то сталкивалась с этой проблемой - через подформы решала, не помню правда уже как, но 5-ка глючила, когда РТФ поле с одним именем отображалось то как редактируемое, то как вычисляемое, вобщем по сути элегантно эта проблема так и не была решена.
Опять вопросы...
Хочу чтобы пользователь ввел даные в поле формы, но не просто, а в отдельно открывшемся окне.
Пытаюсь использовать для этого @DialogBox
Создал форму в которой есть одно поле, такое же как в той форме данные в которой изменяет пользователь.
ПОсле определенныго события выдываю @DialogBox с этой маленькой формой.
Но почемуто при нажаниина OK, данные в поле основной формы не отображаются и не сохраняются ....
Вероятнее всего что-то делаю не так, но что?
И второй вопрос вытекающий из первого, можно ли как-то изменить перед записью в поле, те данные которые пользователь ввел в форме открытой через @DialogBox, ну например добавить в тому что ввел пользователь его имя и дату (как получить имя и дату знаю

)
Первая часть вопроса снята. Прошу прощения за беспокойство. Сам мир
Внимательнее папиры читать надо.
"Rich text fields will not be displayed in the form, even if field names are the same as in the current document"
А у меня как раз Rich text fields.
Привет, Osmor.
Попробуй в событии Input Translation нужного тебе поля написать нужный тебе код. Например, для поля OfficePhoneNumber нужно, что в нем после заполнения его по методу @DialogBox автоматически вначале поля вставлялся какой-то текст, например, "(без кода города)".
OfficePhoneNumber = "";
""(без кода города) " + OfficePhoneNumber;
Вот. Аналогично можно манипулировать содержанием поля при помощи LotusScript, сымитировать кнопки OK и Cancel на диалоговой форме и навесить на них собственный обработчик.
Если возникнут трудности, то обращайся, я все более подробно расскажу. Просто в архиве не хочу копаться...
Спасибо.
Проверка правиности приема
Цитата
содержанием поля при помощи LotusScript, сымитировать кнопки OK и Cancel на диалоговой форме
Сие значит, что я в @DialogBox прячу обе кнопки ([NOOKCANCEL]:[NOCANCEL]), а в форме рисую свои со своей обработкой?
Здорово...
Если я правильно понял, можно не отвечать ....
Vagor.ini
15:04:2004, 06:58
Такой вопрос, может кто нотолкнет на идею, как сделать...
Есть форма (форма вызывается как диалог @DialogBox), на ней EmbeddedView, нужно получить доступ к самому EView, чтобы потом иметь доступ к выделенномы документу.
И еще фишка, кто не знает, ActionBar у встроенного вида на форме, которая вызывается через диалог не отображается... (или я не прав?)
Помогите, есть база, в ней документы, в документе поле "название базы", тип поля-диалог лист, надо посчитать сколько раз выбрали именно эту базу и вывсети куда нибудь, как можно это сделать и куда ? Санкс
Vagor.ini
15:04:2004, 12:21
Isk
Что значит выбрали, не понятно...
Isk
Я смогу помочь тебе, но мне оязательно нужно знать, каким релизом лотуса ты пользуешься? 6 или 5?
Vagor.ini
Я попробовал решить твою проблему и вот с какими проблемами столкнулся:
1. Если форму, вызываемую через @DialogBox, определить как Layout Region, то на нее Embedded View внедрить никак не получается.
2. Если использовать обыкновенную форму, вызываемую через @DialogBox, то можно внедрить туда Embedded View и производить навигацию по документам. При этом нам необходимо наличие действий, которые бы обрабатывали выбранный документ. Пускай действия будут выполнятся при помощи кнопок. Я так и сделал. Вызвал форму через @DialogBox и перевел курсор на Embedded View. После чего перевести курсор на какую-либо другую область этой же формы мне не удавалось (элементарно что бы нажать на кнопку и запустить оработчик).
Такие вот дела. Поэтому помочь тебе не получается.
Однако, я думаю, можно все же операцию твою заменить вызывом диалогового окна с содержанием не формы , а нужного тебе предствления: @PickList.
nor 6. Мне сказали сделать счетчик.
Vagor.iniВ смысле есть поле, там названия типа "обращения граждан", "входящие" и т.д., надо посчитать сколько раз выбрали допустим "обращения граждан" и вывести все это куда-нибудь. Конкретно куда не сказали.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.