Всем привет!
Помогите, кто сможет!
Трабл в том, что мне надо сотворить дерево (типа существуют отделы. в них подотделы и т.д.)
Это дерево предполагает создание и удалени отделов.
Так вот как это сделать программно? как его генерить?
Если чесно делала (использ. схему, скриптом генерировала ее), все замечательно, если бы не одно НО:
не отображаются изменения в Outlines. Если смотрю в дизайнере - все есть, все поменялось как надо, и если это все сохранить в самом дизайнере и открыть в клиенте, то все ОК.
А вот в самом клиенте ничего не видно.....
Объясните что я делаю не так? Саму схему сохраняю, уже и рефреш окна пробовала - ничего не помогает.... Но зато, что самое интересное, в дизайнере все изменения видны...
Vagor.ini
3:05:2004, 12:12
Dark
Переоткрыть базу надо...
Оутлайн встроен на пайдж, а он динамически не обновляется...
Vagor.ini
ну да, я сама заметила, что переоткрывая базу все замечательно, тока не нравится это мне.... Не будет же человек переоткрывать ее все время....если еще один раз за какой-то промежуток ввести данные надо - еще куда ни шло, а если за раз надо ввести несколько записей (отделов)...не говорю уже о МНОГО записей
переоткрывать ее самой - тоже как то ....
....что делать... ех....
или я чиво -то не поняла?
Vagor.ini
3:05:2004, 19:41
Dark
Если переоткрывать базу не хочется, то сорри... Page рефрешить не возможно (или я не прав).
Vagor.iniпо поводу Page прав

, да и вообще прав

да и я все это знала..... но что хорошо, что убедилась точно , что была права - мне это тоже нужно было
СПАСИБО за помощь!

PS .... а может есть еще какой-нить способ создания дерева?

не тока с помощью Outline?
Veselinka
4:05:2004, 07:45
Цитата(QUOTE @ nor)
Veselinka
К сожалению, я не вижу возможности решить эту проблему мне известными стандартными методами. Буду крайне признателен, если тебе что-то получится сделать в этом плане и ты поделишься со всеми нами результатами.
Решить проблему удалось:
1. В стилях страницы пишешь стиль например .hiddenDiv {}
у которого абсолютная позиция по горизонтали и вертикали -200 px
Потом в конце формы перед полями хиднутыми пишешь
<div class=hidenDiv>
И закрывашку после хиднутых полей </div>
Получается, что стандартный диалог и отображение атачмента попадает в этот задвинутый за границу экрана див.
Далее на ява скрипте на событии OnSubmit пишешь код, который находит чекбоксы (это частный случай моей бизнес логики - у меня других чекбоксов на форме просто нет) и если в аплоад контроле у меня что-то аплоадится (новый вариант моего атачмента) - то чекает все чекбоксы на старых атачментах (помечает на удаление в этом задвинутом диве).
А сам атачмент для просмотра доступен по генеренной ссылке в другом месте - ссылка выглядит следующим образом
http:/server/path/viewunid/documentunid/$FILE/имя файла
где имена атачнутых файлов на web query open считаются.
Ну вот вобщем-то и все.
Veselinka
Мне нужно связться с тобой как-то и посмотреть на это чудо, про которое ты написала, если ты разрешишь, конечно...
Я попробовал - у меня не получилось ничего, для меня это очень важно сделать побыстрее, если уж такая возможность появилась...
nor, когда открываю с сайта – это бесплатный сайтик на 20 мегов, так что сервер не под моим контролем. А когда открываю експлорером – это локально с помощью кнопочки в верхнем правом углу. Я что-то не так делаю?
Прошлое сообщение от Gogan.exe
Gogan.exe привет
я прочитал много раз и так не понял, про что ты меня спросил...
Gogan.exe
5:05:2004, 10:02
Трудно объяснить то, что мне и так ясно

Постараюсь еще разок.
В общем я решил сделать сайтик (пробный) на лотусе, так как мне нужно с ним практиковаться.
Я сделал несколько пару фреймсетов, менюшку и две странички (в менюшке две кнопки – открыть первую стр и откр. Вт. Стр).
Проблема в том, что если закачать эту базу на сервер (я на 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), таким образом, в зависимости от условия на месте внедр. представления появляются различные представления.
Также можно сделать динамическую таблицу, которую ты хочешь, с возможностью добавления, редактирования и удаления ссылок-строк (ссылки на другие документы, которые открываются прямо из текущего документа) в этой таблице. Для этого нужно использовать вычисляемое поле ListBox с формулой, основанной на значении скрытых полей.
Динамически изменять формулу отбора представлений если и можно (я не знаю), то тогда возникает необходимость изменять содержимое столбцов представлния или писать для них очень сложные формулы, которы будут тормозить представление при обращении к нему.
osmor
@Command( [ChooseFolders] )
Отображает стандартное диалоговое окно выбора папки, в которую необходимо переместить документ.
Gogan.exe
6:05:2004, 05:03
Спасибо за ответ. Теперь понятно. Хорошо, что это я делал, только для теста и в это ничего не упиралось. Спасибо еще раз.
norСпасибо.
С представлениями понял, буду пробовать.
По поводу "папок"...
Приношу свои извинения, видимо я не внятно излагаю свои вопросы.
Цитата
Есть ли в стандартный метод для вызова диалога выбора папки?
Под этим подразумевался диалог выбора директории на диске, а не папки в LOTUS.
osmorЭто помещаешь в билиотеку, которую затем подключаешь к нужной тебе форме:
(Options)
Option Public
Option Declare
(Declarations)
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260
Public Const OFN_ALLOWMULTISELECT = &H200
Public Const OFN_CREATEPROMPT = &H2000
Public Const OFN_ENABLEHOOK = &H20
Public Const OFN_ENABLETEMPLATE = &H40
Public Const OFN_ENABLETEMPLATEHANDLE = &H80
Public Const OFN_EXPLORER = &H80000
Public Const OFN_EXTENSIONDIFFERENT = &H400
Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_HIDEREADONLY = &H4
Public Const OFN_LONGNAMES = &H200000
Public Const OFN_NOCHANGEDIR = &H8
Public Const OFN_NODEREFERENCELINKS = &H100000
Public Const OFN_NOLONGNAMES = &H40000
Public Const OFN_NONETWORKBUTTON = &H20000
Public Const OFN_NOREADONLYRETURN = &H8000
Public Const OFN_NOTESTFILECREATE = &H10000
Public Const OFN_NOVALIDATE = &H100
Public Const OFN_OVERWRITEPROMPT = &H2
Public Const OFN_PATHMUSTEXIST = &H800
Public Const OFN_READONLY = &H1
Public Const OFN_SHAREAWARE = &H4000
Public Const OFN_SHAREFALLTHROUGH = 2
Public Const OFN_SHARENOWARN = 1
Public Const OFN_SHAREWARN = 0
Public Const OFN_SHOWHELP = &H10
Dim Filter As String
Dim FileName As String
Dim FileTitle As String
Dim TruncName As String
Dim VaultWIPRoot As String
Dim VaultWIPUserPath As String
Type tagOPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As Long
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
Type BrowseInfo
hwndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
'lpszTitle As Long
lpszTitle As String
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Declare Function SHGetPathFromIDList Lib "shell32" (Byval pidList As Long, Byval lpBuffer As String) As Long
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long
Dim OPENFILENAME As tagOPENFILENAME
Function GetDirDlg() As String
Dim lpIDList As Long
Dim sBuffer As String
Dim sTitle As String
Dim tBrowseInfo As BrowseInfo
sTitle = "Выберите директорию"
tBrowseInfo.hwndOwner = 0&
tBrowseInfo.lpszTitle = sTitle
tBrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
lpIDList = SHBrowseForFolder(tBrowseInfo)
If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, Instr(sBuffer, Chr$(0) ) - 1)
If Right$(sBuffer, 1) <> "\" Then sBuffer = sBuffer + "\"
GetDirDlg = sBuffer
Else
GetDirDlg = ""
End If
End Function
Function OpenFileDlg ()
Dim Title As String
Dim DefExt As String
Dim szCurDir As String
Dim APIResults%
'Unknown function
' SetFileFilter
'Give the dialog a caption title.
Title = "Add supporting document" & Chr$(0)
'Allocate string space for returned strings
FileName = Chr$(0) & Space$(255) & Chr$(0)
FileTitle = Space$(255) & Chr$(0)
'If the user does not specify an extension, append TXT.
DefExt = "BMP" & Chr$(0)
'Set up the default directory
szCurDir = Curdir$ & Chr$(0)
'Set up the data structure before you call the GetOpenFileName
OPENFILENAME.lStructSize = Len(OPENFILENAME)
'If the OpenFile Dialog box is not linked to any form use this line.
'It will pass a null pointer.
OPENFILENAME.hwndOwner = 0&
OPENFILENAME.lpstrFilter = Filter
OPENFILENAME.nFilterIndex = 1
OPENFILENAME.lpstrFile = FileName
OPENFILENAME.nMaxFile = Len(FileName)
OPENFILENAME.lpstrFileTitle = FileTitle
OPENFILENAME.nMaxFileTitle = Len(FileTitle)
OPENFILENAME.lpstrTitle = Title
OPENFILENAME.Flags = OFN_FILEMUSTEXIST
OPENFILENAME.lpstrDefExt = DefExt
OPENFILENAME.hInstance = 0
OPENFILENAME.lpstrCustomFilter = 0
OPENFILENAME.nMaxCustFilter = 0
OPENFILENAME.lpstrInitialDir = szCurDir
OPENFILENAME.nFileOffset = 0
OPENFILENAME.nFileExtension = 0
OPENFILENAME.lCustData = 0
OPENFILENAME.lpfnHook = 0
OPENFILENAME.lpTemplateName = 0
'This will pass the desired data structure to the Windows API,
'which will in turn it uses to display the Open Dialog form.
APIResults% = GetOpenFileName(OPENFILENAME)
If APIResults% <> 0 Then
FileName = Cstr( OPENFILENAME.lpstrFile )
FileTitle = Cstr( OPENFILENAME.lpstrFileTitle )
OpenFileDlg = 1
Else
OpenFileDlg = 0
End If
End Function
Затем в нужном тебе месте вызываешь ф-ии, например:
Dim path As String
path = GetDirDlg()
Таким образом, path будет содержать путь директории (папки), выбранной пользователем.
Gogan.exe
6:05:2004, 07:28
Создаю listbox. В нем нужен выбор всех чисел (для указания количества). Можно ручками вбить, конечно, но это как-то экстенсивно. Есть ли для этого формула? Какая?
Gogan.exeФормулы вроде такой нет. Но можно самому сделать кнопочку, которая делает интенсивный выбор.
Gogan.exe
6:05:2004, 11:24
жаль... можно до сотни с возможностью вода... хм... криво это как-то. Ну да ладно. Спасибочки.
norСпасибо. Через API я уже сделал.
Опять проблемы ....
Объясните мне, плиз, пачиму это не работает? :
.....
Set rtitem = New NotesRichTextItem( doc, "body" )
files = w.OpenFileDialog(True, "File Attach","", "d:")
Forall filelist In files
Set object = rtitem.EmbedObject( EMBED_ATTACHMENT, "", filelist)
End Forall
....
мне надо приаттачить указанный файл в определенное поле. Все делает, тока аттачит не в то поле что мне надо, а в поле $File. Объясните, пожалуйста, почему и как все-таки добиться, чтобы прикреплял в нужное мне поле.
Спасибо.
Veselinka
7:05:2004, 05:33
Цитата(QUOTE @ nor)
Veselinka
Мне нужно связться с тобой как-то и посмотреть на это чудо, про которое ты написала, если ты разрешишь, конечно...
Я попробовал - у меня не получилось ничего, для меня это очень важно сделать побыстрее, если уж такая возможность появилась...
NOR, свяжись со мной на rus_roman@mail.ru - я тебе соберу базу с формами и вышлю
Gogan.exe
7:05:2004, 06:44
Есть два вопроса:
Первое:
При создании документа (формы) нужно, чтобы автоматически заполнялось поле «порядковый номер». Как это реализовать?
Второе:
Как раздать права редактирования только части формы (разные части формы заполняются разными людьми и после заполнения, редактировать чужое они не в праве). Уперся я в эти закавыки.
Спасибо.
Gogan.exe
по поволу первого вопроса:
так как скриптом нельзя никак пользоваться Computed поле, а только формулой, то каждый раз при создании документа записывай его порядковый номер (значение этого Computed поля) в профайл документ функцией @SetProfileField(profilename;fieldname;value[;username])
навесь например на событие Save.
а потом в значении вычисляемого поля читай функцией @GetProfileField(profilename;fieldname[;username]) значение и увелич его.
Gogan.exe
по твоим двум вопросам я уже отвечал на форуме:
1. например, порядковый номер можно присвоить по событию PostOpen при чтении первой записи столбца представления, при условии, что столбец содержит номера документов определенного типа, упорядоченные по убыванию.
2. права редактирования части формы я подробно описывал ранее - для этого нужно использовать Computed Controlled Exccess Sections.
_____________
Если что не понятно, то я отвечу более подробно в следующий раз, просто не хочется опять все повторять...
Dark
По-моему проще намного использовать @Command([EditInsertFileAttachment]), чем на LotusScript писать громоздкий скрипт.
Gogan.exe
7:05:2004, 10:01
Для начала, если не трудно, давай разберемся с первым вопросом. Как, что именно и где писать? Только, пожалуйста, объясни, что каждая строка значит, чтобы я понял и в последующем не задавал того же вопроса. Как, при создании формы (ПостОпен) прочитать порядковый номер последнего созданного документа? Где это все храниться?
Мне сложно пока въехать в Лотус, потому как до этого долго работал с С++, а с лотусом он не имеет вообще ничего общего. Если не затруднит – опиши, ок?
nor
может и проще, но почему-то не работает. Может расталкуешь тогда почему пишет, что не может выполнить команду. Я на клик кнопки это делала.
и потом, все равно мне надо было как-то приаттачить файл именно скриптом (так как являлось частью кода), поэтому хотела бы знать конечно как это сделать
Поэтому вот спрашиваю .......
Chernom0r
11:05:2004, 08:47
Здравствуйте!
Подскажите, плизз, как мне сделать такую вещь:
Есть форма, на ней кнопка с событием @MailSend. По нажатию на эту кнопку мне нужно сформировать письмо с линком на этот документ.
Достать идентификатор документа в базе я могу по-видимому с помощью @DocumentUniqueID, имя сервера и имя базы известны и постоянны. Каким образом можно генерить линки (Link) и вставлять их в документы?
Заранее - спасибо.
--------------------------------------------------------------
Извините! Туплю.
Вопрос снят ибо [IncludeDocLink]

--------------------------------------------------------------
Gogan.exe
11:05:2004, 10:32
Опаньки! Начал читать сообщение Chernom0r’a сразу возник такой же вопрос! И сразу на него нашелся Черномором ответ! Спасибо, что написал это все сюда – впредь поступай так же. людям может пригодиться подобная информация.
Gogan.exe
11:05:2004, 10:55
Так, попробовал я этот приемчик и возникло два вопроса:
Во-первых. Ссылка не помещается. В чем дело? Вот строчка: @Command([FileSave]);
@MailSend("George";"";"";"Новый документ";"";[IncludeDoclink])
Во-вторых, можно ли продублировать посылку записки по обыкновенному e-mail? Если можно, то как?
Chernom0r
11:05:2004, 11:09
Цитата(Gogan.exe @ 11:05:2004, 14:55 )
Так, попробовал я этот приемчик и возникло два вопроса:
Во-первых. Ссылка не помещается. В чем дело? Вот строчка: @Command([FileSave]);
@MailSend("George";"";"";"Новый документ";"";[IncludeDoclink])
Во-вторых, можно ли продублировать посылку записки по обыкновенному e-mail? Если можно, то как?
@MailSend("George";"";"";"Новый документ";"";"";[IncludeDoclink])
не хватает еще одних пустых кавычек
Послать можно по любому е-мылу
Gogan.exe
11:05:2004, 11:28
Ог-го-го! Спасибочки! Очень помогло! Премного благодарен!
Gogan.exe
12:05:2004, 11:55
Нужно сделать форму, разделенную на разные части. Каждую часть заполняет отдельное лицо и не может ни читать, ни менять данные, веденные другими лицами. Как это притворить в жизнь? Надеюсь, ясно выразился. Документ должен быть един.
Vagor.ini
12:05:2004, 12:18
Gogan.exe
Если эти люди известны, кто какую часть будет менять то сокрытие полей здесь не подойдет, а отображать <computed text> по данным скрытого поля (если надо читать только)...
Gogan.exe
12:05:2004, 12:31
Смысл в том, что часть документа заполняется и отправляется в базу. Из базы ее достает другой человек и заполняет свою часть… и так далее. Вообще-то читать им можно. Только вот разрешение дать только на дополнение, а не изменение. Как это реализовать… я еще совсем в лотусе не разобрался… пытался через сабформы, но ничего не понял.
Gogan.exe
12:05:2004, 12:51
Хм… я тут подумал, ясно, что документ нужно как-то разбивать на составляющие (к примеру, мне нужно автоматически фиксировать дату изменения документа каждым лицом), но как? Кто мне сможет помочь? И все еще остается открытым вопрос о фиксации порядковости созданного документа. Как подсчитать количество документов в базе и присвоить полю значение +1?
Спасибо.
Gogan.exe
12:05:2004, 13:10
Creates a controlled access section on a form or subform. Unlike a regular section, a controlled access section has a formula to determine who can edit it.
Вот что я отыскал в хелпе (RTFM блин). Как выглядит формула доступа? Как фиксировать дату последнего изменения _именно этой части (секции)_? Возможно ли это?
Gogan.exeПримерно половина тех кто посещает форум задается такими же вопросами. Ты прав, ты в цикле перебираешь все документы в бд. Но тебе, я как понимаю, нужно посчитать
количество документов, созданных только по определенной форме. Это сужает выборку.
Таким образом:
Код
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
... и т.д.
Это писали здесь. Посчитать и присвоить номер док-у.
Gogan.exe
13:05:2004, 06:12
что акое bdname? что нужно еще вписать перед данными сторчками? Он у меня collection не понимает. Что такое Nothing, что такое 0.
Объясните, пожайлусто поточнее, если можно. Я в лонусе пока не рублю.
Gogan.exe
13:05:2004, 06:21
Что значит dim в начале многих строчек в коде Лотуса?
Gogan.exe
13:05:2004, 06:36
А... вроде начал разбираться... я Dim писал прямо в функциях поля, а нужно в гобале формы... Пожалуйста, в следующий раз все разъясняйте в мелочах, если не трудно, ок?
Gogan.exe
13:05:2004, 07:47
FIELD Fieldname:=Fieldmame;
Где должна стоять эта строка, почему она необходима, что в ней есть что, и зачем она вообще нужна?
Veselinka
13:05:2004, 09:42
Gogan.exe
Предложенный способ решения дает большие проблемы с производительностью, так как каждый раз происходит поиск по базе по критериям отбора указанным в формуле |Form="имя_формы" & bdname_1 = "obr"|
Стандартным решением является:
1. Постороение вьюхи, которая выберет все интересующее множество документов, к которому надо будет потом прибавлять +1 к номеру последнего. Вьюха будет индексироваться сервером по расписанию и не будет строиться в коде каждый раз снова - как это было предложено в описанном методе.
2. В предложенном методе если брать coll.count - То есть количество документов - даст сбои в случае если у меня есть документы с номерами 1,2 и 4, а с номером 3 был удален. так как кол-во документов в коллекции будет=3, то номер следующего посчитается как равный 4, а документ с таким номером у нас уже есть.
Поэтому во вьюхе мы сортируем документы по номерам например так что сверху будет документ с наибольшим номером.
3. Во вьюхе берем этот первый документ:
set doc=view.GetFirstDocument
if doc is nothing then
Index=1
else
index=doc.index(0)+1
end if
newdoc.index=index
- то есть если документов во вьюхе нет - то это самый первый и номер у него 1,
если документы есть то берем первый, берем его номер и прибавляем к нему 1.
далее присваиваем полученный номер новому документу. Все тривиально.
Если есть вопросы по синтаксису - читай хэлп. Открываешь дизайнер и жмешь F1, в хэлпе заходишь в раздел index и находишь интересующую тебя конструкцию.
Gogan.exe
13:05:2004, 10:01
Что-то не понял, если мы взяли первый документ и прибавили к нему единицу, то получим два (если ничего не удалялось). Может нужно взять последний док?