Тема для постинга мелких вопросов - ответов для разрботчиков приложений и баз Lotus Notes. Если Ваш вопрос влечет долгое обсуждение, то желательно создать отдельную тему.
Для юзабильности
форм и страниц многие разработчики создают акцию(кнопку) "Закрыть" с командой
@Command([FileCloseWindow])FIELD SaveOptions:="0";
@Command([FileCloseWindow])
Кстати, для справки: после присвоения SaveOptions:=0 не сохранит даже принудительный [FileSave]
Простой скрипт на выгрузку содержимого любого вида (представления) в Excel
Sub 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
Открытие вида(представления) на весь экран, без списка видов в левой части базы
@Command([ViewNavigatorsNone]) Удаление неиспользуемых полей базы в инспекторе дизайнера
В Lotus Designer есть одна
неудобная штука. Если Вы удалили поле, то в списке существующих полей (инспектор, поля для столбцов вида и т.п.) все равно висит имя этого, несуществующего поля. Это, в принципе ни на что не влияет, но засоряет список. Так вот чтобы убрать это имя поля из списка следует сделать:
1. убедиться, что поле нигде не используется (формы, подформы, документы, в том числе профильные)
2. на последней справа закладке св-в БД поставить галку на "Оптимизировать таблицы документов".
3. Запустить сжатие.
Агент позволяющий удалять дублирующие записи/документы в виде
Нашел вот только, сам не тестировал.
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
Может кто сталкивался с подобным вопросом, подскажите пути решения.
Есть вид (view), в котором ряд колонок имеют total'ы, т.е. подбиты суммы и все это собрано в категорию и при свертке строк олучается около 100 шт. Нужно из другой базы получить total'ы категорий программно, допустим по запросу ключевой колонки (первой категоризированной в виде).
Спасибо!
mony_id
С ЛЕТА НЕ СКАЖУ НО НАДО ПОДУМАТЬ, ВООБЩЕТО В СКРИПТАХ ЕСТЬ ПРИМЕРЫ НЕ ПЛОХИЕ, ТАМ ГЛЯНЬ. ЕСЛИ ЧТО НИ-ТЬ НАЙДУ БРОШУ
Vagor.ini
ДАЙ ТИПЫ ДАННЫХ И ЧТО С ЧЕМ ВЯЗАТЬ А ТО ПЛОХО ПРЕДСТАВЛЯЕТСЯ:
ВИД1
МЯСО 10
ПИВО 20
ВОДКА 30
60
Используй либо execute("@DBLookUP(...)") или объект типа NotesNavigator
mony_id
Типа вид
Name Col
-----------------------
>Полка 7
>>Шуруп 3
>>Гайка 2
>>Стяжка 2
>Стол 10
>Стул 13
30
Категория полка типа раскрыта![]()
Нужно программно добраться до тотала полки=7, стол=10 и т.п
ЗАНЕШЬ МОЖНО ПРИ ПОМОЩИ ДОКУМЕНТКОЛЕКШИОНС ПОСЧИТАТЬ СКОЛЬКО ДОКУМЕНТОВ СО ЗНАЧЕНИЕМ "ПОЛКА В ДАННОМ ВИДЕ" И НЕ ТОЛЬКО ПОСЧИТАТЬ НО И СЛОЖИТЬ ЗНАЧЕНИЯ, С ВЕРСИИ 6 ПОЯВИЛИСЬ В СКРИПТАХ МАССИВЫ.
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
mony_id
Это VZH (пароль за праздники забыл нафик)-
С помощью NotesNavigator не проблема в скрипте получить все тоталы.
Еще можно сделать Execute с @Sum(@DBLookup(...))
Вообщем не проблема :-)
VZH
Точно, во блин ламак
решение как всегда на поверхности
Народ! Есть очень наболевший вопрос... а именно, как генерить отчеты в lotus? Конечно, все можно выгружать в офис, или ещё куда (Crystal Report), но это все какая-то чушь... Есть возможность "набивать" программно отчеты в ричтекстполе, это более интересно. Если генерить по старинке, т.е. построчно, присутствуют гадкие пробелы перед и после вставляемых строк, как это обойти?
Не знаю что значит по старинке, в принципе отчетами внутри лотуса не занимался, а $Trim не поможет обрезать пробелы...
Вот тема: кто знает как организовано построение топологии сети в административном клиенте.
Например: в разделе Replication Topology.
Меня интересует как сделана графическая часть, что и от куда берется, я понял. А вот как сделана графическая часть вот интересно. Есть задумки реализовать это в некоторых базах данных.
Рад буду услышать ваши мнения.
У меня вопрос к опытным разработчикам, если будет время вы бы не могли дать какое нибудь простенькое описание агента, с чего начинать его писать, какие объекты создавать, в смысле ссылки, создавать новую сессию или нет, новое раб. простр. или тоже нет. как связать этого агента с нужной б.д. и т.д. Просто мозги никак не доходят, вроде все по рпимерам делаешь, но почему-то всегда все криво получается, или мозги у меня кривые. короче ПОМОГИТЕ!!!!!!!!!!
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, я написал "САМУЮ СУТЬ", которая "решает поставленный вопрос", без "нагромаждения".
Доброго всем времени.
Поможите кто чем может.
Вопрос такой, как в форме вывести RTF поле и при этом не дать его редактировать. Другие поля должны редактироваться.
Попытался сделать как учит ув. Veselinka (еще раз спасибо за "Концепции ..." :-)) т.е. создал два поля одно изменяемое, второе вычисляемое c "противоположной" видимостью. Но почему, то не хочет вычисляться поле "текст RTF".
Если вместо вычисляемого "текст RTF" поставить поле с типом "текст" и формулу для вычисления @abstract (..... ), то все работает, но тогда форматирование текста теряется.
Спасибо.
Чуть не забыл работаю на 6.5
Привет, osmor.
Это стандартная ситуация: поле включаешь в Controlled Access Section. Тип секции - Computed. Далее необходимо указать условие (формулу), которое предоставляет доступ к секции для редактирования указанным людям (имя пользователя нужно указывать в иерархическом виде), указанным группам, или указанным людям, наделенными определенными правами. Также секцию можно скрыть, свернуть и т.д. Подпись секции также можно отдельно скрыть. Приведу пример:
@If(
is_under_execution = 0;
"[request_author]";
"[noone]"
)Огромное спасибо, nor!!!
Все получилось, все работает. ![]()
Это как раз к вопросу о концепции, пока не знаешь КАК можно потратить дни, и никакие знания языка здесь не помогут...
И еще сразу вопрос, можно как то избавиться от этого красивого окошка "Изменять содержимое данного раздела могут", которое выскакивает при одинарном клике на разделе?
Еще раз спасибо.
Нор, рулез - я не знала такого способа обходиться с вычисляемыми РТФами ![]()
Спасибо за подсказку, как-то сталкивалась с этой проблемой - через подформы решала, не помню правда уже как, но 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;Спасибо.
Проверка правиности приема
Ты правильно понял.
Такой вопрос, может кто нотолкнет на идею, как сделать...
Есть форма (форма вызывается как диалог @DialogBox), на ней EmbeddedView, нужно получить доступ к самому EView, чтобы потом иметь доступ к выделенномы документу.
И еще фишка, кто не знает, ActionBar у встроенного вида на форме, которая вызывается через диалог не отображается... (или я не прав?)
Помогите, есть база, в ней документы, в документе поле "название базы", тип поля-диалог лист, надо посчитать сколько раз выбрали именно эту базу и вывсети куда нибудь, как можно это сделать и куда ? Санкс
Isk
Что значит выбрали, не понятно...
Isk
Я смогу помочь тебе, но мне оязательно нужно знать, каким релизом лотуса ты пользуешься? 6 или 5?
Vagor.ini
Я попробовал решить твою проблему и вот с какими проблемами столкнулся:
1. Если форму, вызываемую через @DialogBox, определить как Layout Region, то на нее Embedded View внедрить никак не получается.
2. Если использовать обыкновенную форму, вызываемую через @DialogBox, то можно внедрить туда Embedded View и производить навигацию по документам. При этом нам необходимо наличие действий, которые бы обрабатывали выбранный документ. Пускай действия будут выполнятся при помощи кнопок. Я так и сделал. Вызвал форму через @DialogBox и перевел курсор на Embedded View. После чего перевести курсор на какую-либо другую область этой же формы мне не удавалось (элементарно что бы нажать на кнопку и запустить оработчик).
Такие вот дела. Поэтому помочь тебе не получается.
Однако, я думаю, можно все же операцию твою заменить вызывом диалогового окна с содержанием не формы , а нужного тебе предствления: @PickList.
nor 6. Мне сказали сделать счетчик.
Vagor.iniВ смысле есть поле, там названия типа "обращения граждан", "входящие" и т.д., надо посчитать сколько раз выбрали допустим "обращения граждан" и вывести все это куда-нибудь. Конкретно куда не сказали.
Еще вопрос. Подскажите как сделать так чтобы в документе поля после второго открытия не были редактируемыми. спасибо за помощь.
Всем доброго времени суток.
Опять простенькая задачка.
История работы с документом.
Открыли - добавилась запись в поле с историей
Изменили что-то в документе - добавилась запись в поле с историей
Все получается кроме одного, как заставить выводить каждую новую запись в этом поле с новой строки?
В текстовое поле если при формированиии добавлять между записями @Char(10) & @Char(13) в любой комбинации не помогает.
Если использовать ":" для соединения записей тоже не переносит на новую...
МОжет конечно надо вместо тектового поля использовать список, но у меня не получилось, в него вообще не добавляется
Спасибо.
1. При внесении истории - организуй ее в виде Text List - ТО есть списка строк.
2. В самом поле на 3 закладке свойств есть опции отображения мультивалюйности - там и выбери разделитель.
3. Очевидно на 1 закладке свойств надо сказать Allow multiple
Спасибо.
1. Text List не нашел использовал ListBox (я его уже и раньше пробовал)
2. В случае если тип ListBox эта поле недоступно (disabled)
3. Эта галка установлена
Со списком я уже пытался, но в него ничего не получается добавить
Пока решил так
1. Сделал невидимое поле (Text) назвал fldHistory
2. В него по событиям добавляю строки (@SetField("fldHistory"; fldHistory : "ПОльзователь такой-то сделал то-то");
3. Сдела видимое вычисляемое поле ListBox назвал fldViewHistory в нем "Use formula for choices" - @Explode(fldHistory;",")
Вроде работает.
Но вопрос, "как программно добавить новое значение (item) в список", остался.
И вообще, может я изобретаю велосипед... как принято такие задачи решать в Lоtus?
Подскажите как в поле сохранить число? Не получается. ЛН ругается что неправильное использование свойства.
Задолбался я уже, и так пробовал и по другому.
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 Subto 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Спасибо nor , ты не можешь подсказать как сделать это все без ввода числа пользователем. просто допустим есть какой-то счетчик в форме или виде и надо его значение сохранить в поле чтобы при создании нового документа по этой форме брать значение из этого поля последнего документа. своего рода сортировка . то есть во всей коллекции ищется макс. знач. и наращивается на 1.
Спасибо nor.
С помощью Lotus script не пробовал, все пытался на собаках, поскольку вроде все должно было получиться ...
но такой же способ с использованием @Char не сработал.
Isk
Здесь тебе помощь - читать про профайловые формы, через них можно легко организовать счетчик, и обрабатывать его на событии QuereSave
Вопросец.
Существует ли в Lotus (IBM) общепринятая нотация именования объектов? Типа Венгерской ...
Ну привык я, что нужно именовать по правилам ...
Можно конечно и Венгерскую подогнать, или самому придумать, но может есть уже принятые правила именования?
Например:
Два поля одно для ввода данных другое для отображения ...
View (представления), наборы рамок, страницы, агенты, структуры, да и действия тоже наверное ...
osmor
Ну не знаю, определенной наверное нет, я например часто использую в полях префиксы типа полей и суффикс-имя формы.
osmor, официально - нет, не существует, но в книгах крупных издательств авторы рекомендуют определенную нотацию.
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 Subnor Сделал вот такую х..ню, на большее мозгов пока не хватило. Единственное что радует что сам.
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
Но как я сам думаю если док. будет много то все будет работать очень и очень медленно. Подскажи что можно переделать?
Vagor.ini и nor, спасибо.
Я понимаю что все нотации являются рекомендательными.
Пока мне не встретилось (ни в книгах ни в Инете) четкого описания рекомендаций по именованию объектов Lotus. Видно, что авторы используют какую-то систему именования, но формального описания или рекомендаций пока не встретил.
Буду искать или сам придумаю, точнее уже начал придумывать ... поля только для отображения того что вводитсяв другое поля с такой же смысловой нагрузкой именую с приставкой view :-)
Здравствуйте.
В Domino R5 есть возможность запускать агентов на сервере (After New Mail has Arrived).
Есть ли какие-либо специфические траблы с такими агетами?
Как я понял понятие UIWorkspase я в этом случае использовать не могу.
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
... и т.д.Chernom0r
В агентах (любых) ты не можешь пользоваться классами Front end (uidocument, uiview, ...), а также функциями, требующими реакции конечного пользователя, типа MessageBox и др. Поэтому, что бы отладить агент, нужно его код навесить на кнопку либо в документе, либо в представлении, либо еще что-нибудь придумать, главное, что бы был досупен Debuger.
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
и т.д.
Chernom0r
"Как мне теперь избавиться от UI....?" - не пользуйся UI классами!
Замени их либо откажись от них. Не думаю, что в твоем агенте UI классы являются определяющими и критически необходимыми.
Как открыть форму? Есть команды OpenPage, OpenFrameset и тому подобные, а есть ли команда OpetForm или какая-то похожая по функции?
@command([compose];"имя формы")
- создает новый документ по форме
dim ws as new NotesUIWorkspace
dim doc as notesdocument
set doc=....
call ws.EditDocument(false,doc)
- открывает документ по той форме, которая у него в поле form
аагррр.... умпф... ничего не понял.. учиться еще и учиться... может позднее пойму. спасибо
Для пробы, я создал базу данных по песенкам. Сева у меня менюшка с двумя кнопками – добавить песню и посмотреть список. Вопрос вот в чем – когда я нажимаю на одну из кнопок и справа открывается окно, то в верхней менюшке (список окон) появляется еще одно окно. Так, поработав с базой и понажимав кнопки, в меню появляется просто дикое количество окон. Как сделать так, чтобы окна не открывались по-новому, а заменяли друг друга? Извиняюсь, если непонятно объяснил.
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
Блин!!!!!!!! Спасибо
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
послалось, раньше чем я закончила редактирование этого поста:
Mode=source.editmode
If not source.IsNewDoc then
tmp=evaluate(|@IsMember("[AdminBD]";@UserRoles)|)
if tmp(0)=0 then
' Это значит, что пользователь не админ
source.editmode=false
else
source.editMode=Mode
end if
end if
Gogan.exe
1. Форму открыть нельзя в UI (User Interface). Так же как нельзя открыть в UI, например, Script Library. Можно по форме создать документ. Форма является "заготовкой", "скелетом" документов.
2. Насчет твоей пробной бд с песнями. Меню слева, как я понял, у тебя располагается в левом Frame (пусть его имя будет "left_frame"). Отображение информации о конкретной песне, как я понял, у тебя располагается справа, в главном Frame (пусть его имя будет "main_frame"). Каждый раз, когда ты, пользуясь навигацией, расположенной слева, открываешь документы, они отображаются в новом окне. Это происходит потому что ты не указал имя фрэйма по-умолчанию для открытия ссылок левого фрэйма. Таким образом, Framesets - <имя фрэймсета> - <Frame Properties левого фрэма ("left_frame"), в котором располагается навигация> - Defualt targets for links in frame - <указываешь имя правого, главного фрэйма ("main_frame"), в котором по идее должны открываться ссылки (из левого фрэма)> .
Если что-то не получится, то пиши.
Veselinka Приму к сведению, спасибо, я же говорил что с англ. у меня проблемы. Хэлп я читаю, но честное слово не всегда все понятно. А насчет событий я ведь еще только учусь. Но если ты не против то я у тебя все равно буду консультироваться. А насчет вилки по утрам это прикольно надо попробовать. Хотя у меня дома только палочки. Спасибо еще раз.
подскажите народ как сделать профайл и что для этого вообще надо сделать.
Простите уже нашел, я сам мир знаю еще раз извините
НОР, я указал дефолт и открываются ссылки в правом фрейме как и надо, но вот в верхнем меню список открытых окон увеличивается. Получается, что то, что раньше было в правом (мейн_фрейм) не закрывается, а новая ссылка открывается как-то поверх что ли. Извини, что не могу точнее все написать.
Может нужно где-то галочку поставить на обновление фрейма?
И еще вопрос. В той моей БД есть поля типа «автор» «название» и т.п.
Во-первых, что должно быть в кнопке «сохранить» а то приходиться сохранять кнопкой из верхнего меню.
Во-вторых, что и где нужно указать, чтобы после сохранения, поля отчищались и были готовы для приема новой инфы.
Еще раз прошу прощения за ламерские вопросы – я попутно читаю мануал, но по ходу чтения возникают такие вот вопросы.
Isk
Из твоего запроса я понял следующее: тебе нужно запретить редактирование документа всем, кроме роли AdminBD.
Так как ты внятно не описал проблему, то могу предположить, что созданный документ, вне зависимости от его автора и последующего статуса, должен быть доступен для всех только в режиме чтения, а для роли AdminBD - в режиме редактирования. Будем исходить из этого.
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
Dim user_names As Variant
user_names = Evaluate("@UserNamesList", doc)
If Isnull (Arraygetindex(user_names, "[AdminBD]", 0)) Then Continue = False
End Sub
Gogan.exe
1. Я совершенно не понимаю, почему у тебя так открываются ссылки. Возможно тебе кто-нибудь другой сможет помочь. (У меня открыватся как положено, без новых окон...
)
2. В кнопке сохранить должно быть: @Command([FileSave]).
3. В событии Querysave пишешь скрипт, который очищает нужные тебе поля. Доступ к документу можно получить посредством параметра события Source. Не забудь сохранить изменения методом Save.
nor Еще раз спасибо, именно это и надо было.
Все ясно… чтобы добавить песни – я открывал новый фреймсет. Если в кнопке просто написать «@Command([Openview]; "ViewOne")» тогда справа и правда открывается ВьюВн, но вот левое меню заменяется на какой-то дефолтовый! Что не так?
Понятно почему ссылки появлялись - это ссылки на открытые фреймы.
Isk - прости, мне очень стыдно, я злобно наехала на тебя...
Я сидела - меня достали на работе, я писала пост, просто в очень плохом настроении... и вовсе его в таком виде не собиралась посылать и выливать на ни в чем не повинного человека - ушат отстоя, к нему не относящийся, а оно послалось - когда я писала код и табуляции пыталась в него вставлять - перескочило из окошка на кнопку отправки поста - как я понимаю. Вот и получилось... я сегодня даже ночью уснуть не могла ... психовала, что обидела тебя... извини еще раз - если можешь. Я не горжусь тем, что я написала.....
Veselinka Да я не обиделся честное слово, а вопросы все равно буду присылать и писать, никуда не денешься. Спасибо
Не подскажете, если есть агент который помечает документ как снятый с контроля, я так понял что это делается агентом
Dim ws As NotesUIWorkspace
Dim ses As NotesSession
Dim db As NotesDatabase
Dim controldb As NotesDatabase
Dim col As NotesDocumentCollection
Dim agent As NotesAgent
Dim action(2) As String
Dim response As String
Dim cdoc As NotesDocument
Dim item As NotesItem
Dim asitem As NotesItem
On Error Goto er
Set ws = New NotesUIWorkspace
action(0) = "Снять с контроля"
action(1) = "Восстановить контроль"
response = ws.Prompt (PROMPT_OKCANCELLIST, "Сервис","Выберите тип сервиса",action(0), action)
If response="" Then Exit Sub
Set ses = New NotesSession
Set db = ses.CurrentDatabase
Set controldb = ses.GetDatabase(db.Server,GetBasePath("ControlDB")
Set agent = controldb.GetAgent("Service")
Set col = db.UnprocessedDocuments
Set cdoc = col.GetFirstDocument
While Not cdoc Is Nothing
If cdoc.Form(0)="IN" Or cdoc.Form(0)="KR" Or cdoc.Form(0)="KP" Or cdoc.Form(0)="Q" Then
Set asitem = cdoc.GetFirstItem("agentstart")
Select Case response
Case "Снять с контроля":
cdoc.agentstart=Replace(cdoc.agentstart,"ServiceRestoreControl","")
asitem.AppendToTextList "ServiceResetControl"
cdoc.ServiceParameter = ses.UserName
Case "Восстановить контроль":
cdoc.agentstart=Replace(cdoc.agentstart,"ServiceResetControl","")
asitem.AppendToTextList "ServiceRestoreControl"
cdoc.ServiceParameter = ses.UserName
End Select
cdoc.Save False,False
End If
Set cdoc = col.GetNextDocument(cdoc)
Wend
' Call agent.RunOnServer
ws.ViewRefresh
Exit Sub
er:
Msgbox "Ошибка "+Error+" " +Cstr(Erl),16,"Ошибка "
Resume en
en:
вот код, не могу найти агента с этим именем ServiceRestoreControl
вопрос где бы это могло храниться, и как?
Isk
Извини, пожалуйста, но я не понимаю твой вопрос.
Агенты - это набор процедур, их можно найти в Дизайнере на закладке Agents. Слово "ServiceRestoreControl" встречается у тебя в строчке cdoc.agentstart=Replace(cdoc.agentstart,"ServiceRestoreControl",""....
И отключай смайлики, когда пишешь код.
Теперь я решил создать для пробы сайтик на базе лотус. На всех страничках поставил галочку «Treat contents as HTML», но почему-то при запуске експлорера с сайта или из дизайнера, он отвечает, что страница не найдена. В чем дело?
Описываю ситуацию:
1. Есть документ с вложенными атачментами
2. Документ редактируется через web
3. Домино генерит внизу уродскую надпись "Mark attachments for deletion" и список атачей с чекбоксами для удаления
Чего хочется:
Привести дизайн и локализацию этого куска формы к общему стилю.
Если конкретно - то желательно бы перенести этот кусок ближе к середине документа
Русифицировать, и одеть на него стили, сейчас домино там генерит таг font с параметрами, от него надо бы избавиться, чтобы стили оделись.
Проблема наверняка - часто встречающаяся у разработчиков веб сайтов на домино. Но я в данной области девелопмента под домино - не особо сильна и не знакома со стандартными приемами.
В хэлпе по этому поводу не нашла ничего подходящего....
Может быть можно с <div> поиграться и задвинуть его куда-нибудь и сгенерить самой этот блок... но этот как-то сложно, может быть по-проще можно? Кто знает?
Gogan.exe
А ты http сервер включил?
Veselinka
К сожалению, я не вижу возможности решить эту проблему мне известными стандартными методами. Буду крайне признателен, если тебе что-то получится сделать в этом плане и ты поделишься со всеми нами результатами.
Всем привет!
Помогите, кто сможет!
Трабл в том, что мне надо сотворить дерево (типа существуют отделы. в них подотделы и т.д.)
Это дерево предполагает создание и удалени отделов.
Так вот как это сделать программно? как его генерить?
Если чесно делала (использ. схему, скриптом генерировала ее), все замечательно, если бы не одно НО:
не отображаются изменения в Outlines. Если смотрю в дизайнере - все есть, все поменялось как надо, и если это все сохранить в самом дизайнере и открыть в клиенте, то все ОК.
А вот в самом клиенте ничего не видно.....
Объясните что я делаю не так? Саму схему сохраняю, уже и рефреш окна пробовала - ничего не помогает.... Но зато, что самое интересное, в дизайнере все изменения видны...
Dark
Переоткрыть базу надо...
Оутлайн встроен на пайдж, а он динамически не обновляется...
Vagor.ini
ну да, я сама заметила, что переоткрывая базу все замечательно, тока не нравится это мне.... Не будет же человек переоткрывать ее все время....если еще один раз за какой-то промежуток ввести данные надо - еще куда ни шло, а если за раз надо ввести несколько записей (отделов)...не говорю уже о МНОГО записей
переоткрывать ее самой - тоже как то ....
....что делать... ех....
или я чиво -то не поняла?
Dark
Если переоткрывать базу не хочется, то сорри... Page рефрешить не возможно (или я не прав).
Vagor.ini
по поводу Page прав
, да и вообще прав ![]()
да и я все это знала..... но что хорошо, что убедилась точно , что была права - мне это тоже нужно было
СПАСИБО за помощь! ![]()
PS .... а может есть еще какой-нить способ создания дерева?
не тока с помощью Outline?
Veselinka
Мне нужно связться с тобой как-то и посмотреть на это чудо, про которое ты написала, если ты разрешишь, конечно...
Я попробовал - у меня не получилось ничего, для меня это очень важно сделать побыстрее, если уж такая возможность появилась...
nor, когда открываю с сайта – это бесплатный сайтик на 20 мегов, так что сервер не под моим контролем. А когда открываю експлорером – это локально с помощью кнопочки в верхнем правом углу. Я что-то не так делаю?
Прошлое сообщение от Gogan.exe
Gogan.exe
привет
я прочитал много раз и так не понял, про что ты меня спросил...
Трудно объяснить то, что мне и так ясно ![]()
Постараюсь еще разок.
В общем я решил сделать сайтик (пробный) на лотусе, так как мне нужно с ним практиковаться.
Я сделал несколько пару фреймсетов, менюшку и две странички (в менюшке две кнопки – открыть первую стр и откр. Вт. Стр).
Проблема в том, что если закачать эту базу на сервер (я на narod.ru ее кинул), то при попытке открыть ее, говорят, что файл не найден. То же сообщение выдается, если попытаться открыть базу как HTML прямо из дизайнера (в верхнем правом углу есть кнопочки – посмотреть в ноутс и посмотреть в експлорере). В Ноутс все смотрится нормально, а вот в интернет браузере не находиться файл.
Теперь яснее? Надеюсь, что да.
Здравствуйте.
Есть ли в стандартный метод для вызова диалога выбора папки?
про метод NotesUIWorkspace.OpenFileDialog знаю, но он мне не подходит, нужно выбрать папку.
ПОка сделал через win 32 API. Кстати вопрос как определить дескриптор окна в LOTUS?
Спасибо.
Опять вопросы.
Хочется в ФОРМЕ документа показать ответы к этому документу в табличном виде.
т.е. вверху поля документа, внизу табличка со списком ответов.
КрасивШЕ всего было бы внедренное представление, но похоже не получится.
Можно ли у внедренного представления (да и вообще у представления) менять формулу отбора динамически?
В принципе вопрос несколько более общий, как такое вообще в LOTUS реализуется? Подтолкните в нужную сторону.
Спасибо.
Gogan.exe
1. Что бы просмотреть бд в броузере (MS Explorer), необходимо расположить ее в ..\Domino\Data\.. и загрузить HTTP Server предварительно, а также в Domino Administrator в документе текущего сервера на закладке Security настроить схему по доступу и выполнению кода в открываемой бд, например, поле Run restricted LotusScript/Java agents...
2. Для просмотра бд, ориентированных на веб и созданных на Lotus, необходим Domino сервер, поэтому на narod.ru скорее всего не получится открыть бд.
Gogan.exe
Так же обрати внимание на acl бд, в частности на свойство Maximum Internet Name and Password на закладке Advanced acl бд.
osmor
У внедренного представлния можно динамически менять Embedded Selection (а также Show Single Category), таким образом, в зависимости от условия на месте внедр. представления появляются различные представления.
Также можно сделать динамическую таблицу, которую ты хочешь, с возможностью добавления, р