Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Россыпь мелких вопросов для разработчиков
Форум программистов > Базы данных и администрирование > Lotus > Lotus - Программирование
Страницы: 1, 2, 3, 4, 5
Dark
Всем привет!
Помогите, кто сможет!
Трабл в том, что мне надо сотворить дерево (типа существуют отделы. в них подотделы и т.д.)
Это дерево предполагает создание и удалени отделов.
Так вот как это сделать программно? как его генерить?
Если чесно делала (использ. схему, скриптом генерировала ее), все замечательно, если бы не одно НО:
не отображаются изменения в Outlines. Если смотрю в дизайнере - все есть, все поменялось как надо, и если это все сохранить в самом дизайнере и открыть в клиенте, то все ОК.
А вот в самом клиенте ничего не видно.....
Объясните что я делаю не так? Саму схему сохраняю, уже и рефреш окна пробовала - ничего не помогает.... Но зато, что самое интересное, в дизайнере все изменения видны...
Vagor.ini
Dark
Переоткрыть базу надо...
Оутлайн встроен на пайдж, а он динамически не обновляется...
Dark
Vagor.ini
ну да, я сама заметила, что переоткрывая базу все замечательно, тока не нравится это мне.... Не будет же человек переоткрывать ее все время....если еще один раз за какой-то промежуток ввести данные надо - еще куда ни шло, а если за раз надо ввести несколько записей (отделов)...не говорю уже о МНОГО записей
переоткрывать ее самой - тоже как то ....
....что делать... ех....
или я чиво -то не поняла?
Vagor.ini
Dark
Если переоткрывать базу не хочется, то сорри... Page рефрешить не возможно (или я не прав).
Dark
Vagor.ini
по поводу Page прав wink.gif , да и вообще прав smile.gif
да и я все это знала..... но что хорошо, что убедилась точно , что была права - мне это тоже нужно было
СПАСИБО за помощь! smile.gif

PS .... а может есть еще какой-нить способ создания дерева? unsure.gif не тока с помощью Outline?
Veselinka
Цитата(QUOTE @ nor)
Veselinka
К сожалению, я не вижу возможности решить эту проблему мне известными стандартными методами. Буду крайне признателен, если тебе что-то получится сделать в этом плане и ты поделишься со всеми нами результатами.

Решить проблему удалось:

1. В стилях страницы пишешь стиль например .hiddenDiv {}
у которого абсолютная позиция по горизонтали и вертикали -200 px

Потом в конце формы перед полями хиднутыми пишешь
<div class=hidenDiv>

И закрывашку после хиднутых полей </div>

Получается, что стандартный диалог и отображение атачмента попадает в этот задвинутый за границу экрана див.

Далее на ява скрипте на событии OnSubmit пишешь код, который находит чекбоксы (это частный случай моей бизнес логики - у меня других чекбоксов на форме просто нет) и если в аплоад контроле у меня что-то аплоадится (новый вариант моего атачмента) - то чекает все чекбоксы на старых атачментах (помечает на удаление в этом задвинутом диве).

А сам атачмент для просмотра доступен по генеренной ссылке в другом месте - ссылка выглядит следующим образом
http:/server/path/viewunid/documentunid/$FILE/имя файла

где имена атачнутых файлов на web query open считаются.
Ну вот вобщем-то и все.
nor
Veselinka
Мне нужно связться с тобой как-то и посмотреть на это чудо, про которое ты написала, если ты разрешишь, конечно...
Я попробовал - у меня не получилось ничего, для меня это очень важно сделать побыстрее, если уж такая возможность появилась...
Guest
nor, когда открываю с сайта – это бесплатный сайтик на 20 мегов, так что сервер не под моим контролем. А когда открываю експлорером – это локально с помощью кнопочки в верхнем правом углу. Я что-то не так делаю?
Guest
Прошлое сообщение от Gogan.exe
nor
Gogan.exe
привет
я прочитал много раз и так не понял, про что ты меня спросил... smile.gif
Gogan.exe
Трудно объяснить то, что мне и так ясно smile.gif
Постараюсь еще разок.
В общем я решил сделать сайтик (пробный) на лотусе, так как мне нужно с ним практиковаться.
Я сделал несколько пару фреймсетов, менюшку и две странички (в менюшке две кнопки – открыть первую стр и откр. Вт. Стр).
Проблема в том, что если закачать эту базу на сервер (я на narod.ru ее кинул), то при попытке открыть ее, говорят, что файл не найден. То же сообщение выдается, если попытаться открыть базу как HTML прямо из дизайнера (в верхнем правом углу есть кнопочки – посмотреть в ноутс и посмотреть в експлорере). В Ноутс все смотрится нормально, а вот в интернет браузере не находиться файл.
Теперь яснее? Надеюсь, что да.
osmor
Здравствуйте.
Есть ли в стандартный метод для вызова диалога выбора папки?
про метод NotesUIWorkspace.OpenFileDialog знаю, но он мне не подходит, нужно выбрать папку.
ПОка сделал через win 32 API. Кстати вопрос как определить дескриптор окна в LOTUS?
Спасибо.
osmor
Опять вопросы. cool.gif
Хочется в ФОРМЕ документа показать ответы к этому документу в табличном виде.
т.е. вверху поля документа, внизу табличка со списком ответов.
КрасивШЕ всего было бы внедренное представление, но похоже не получится.
Можно ли у внедренного представления (да и вообще у представления) менять формулу отбора динамически?
В принципе вопрос несколько более общий, как такое вообще в LOTUS реализуется? Подтолкните в нужную сторону.
Спасибо.
nor
Gogan.exe
1. Что бы просмотреть бд в броузере (MS Explorer), необходимо расположить ее в ..\Domino\Data\.. и загрузить HTTP Server предварительно, а также в Domino Administrator в документе текущего сервера на закладке Security настроить схему по доступу и выполнению кода в открываемой бд, например, поле Run restricted LotusScript/Java agents...
2. Для просмотра бд, ориентированных на веб и созданных на Lotus, необходим Domino сервер, поэтому на narod.ru скорее всего не получится открыть бд.
nor
Gogan.exe
Так же обрати внимание на acl бд, в частности на свойство Maximum Internet Name and Password на закладке Advanced acl бд.
nor
osmor
У внедренного представлния можно динамически менять Embedded Selection (а также Show Single Category), таким образом, в зависимости от условия на месте внедр. представления появляются различные представления.
Также можно сделать динамическую таблицу, которую ты хочешь, с возможностью добавления, редактирования и удаления ссылок-строк (ссылки на другие документы, которые открываются прямо из текущего документа) в этой таблице. Для этого нужно использовать вычисляемое поле ListBox с формулой, основанной на значении скрытых полей.
Динамически изменять формулу отбора представлений если и можно (я не знаю), то тогда возникает необходимость изменять содержимое столбцов представлния или писать для них очень сложные формулы, которы будут тормозить представление при обращении к нему.
nor
osmor
@Command( [ChooseFolders] )
Отображает стандартное диалоговое окно выбора папки, в которую необходимо переместить документ.
Gogan.exe
Спасибо за ответ. Теперь понятно. Хорошо, что это я делал, только для теста и в это ничего не упиралось. Спасибо еще раз.
osmor
nor
Спасибо.
С представлениями понял, буду пробовать.
По поводу "папок"...
Приношу свои извинения, видимо я не внятно излагаю свои вопросы. huh.gif
Цитата
Есть ли в стандартный метод для вызова диалога выбора папки?

Под этим подразумевался диалог выбора директории на диске, а не папки в LOTUS.
nor
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
Создаю listbox. В нем нужен выбор всех чисел (для указания количества). Можно ручками вбить, конечно, но это как-то экстенсивно. Есть ли для этого формула? Какая?
nor
Gogan.exe
Формулы вроде такой нет. Но можно самому сделать кнопочку, которая делает интенсивный выбор. smile.gif
Gogan.exe
жаль... можно до сотни с возможностью вода... хм... криво это как-то. Ну да ладно. Спасибочки.
osmor
nor
Спасибо. Через API я уже сделал. cool.gif
Dark
Опять проблемы ....
Объясните мне, плиз, пачиму это не работает? :
.....
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
Цитата(QUOTE @ nor)
Veselinka
Мне нужно связться с тобой как-то и посмотреть на это чудо, про которое ты написала, если ты разрешишь, конечно...
Я попробовал - у меня не получилось ничего, для меня это очень важно сделать побыстрее, если уж такая возможность появилась...

NOR, свяжись со мной на rus_roman@mail.ru - я тебе соберу базу с формами и вышлю
Gogan.exe
Есть два вопроса:
Первое:
При создании документа (формы) нужно, чтобы автоматически заполнялось поле «порядковый номер». Как это реализовать?
Второе:
Как раздать права редактирования только части формы (разные части формы заполняются разными людьми и после заполнения, редактировать чужое они не в праве). Уперся я в эти закавыки.
Спасибо.
Dark
Gogan.exe
по поволу первого вопроса:
так как скриптом нельзя никак пользоваться Computed поле, а только формулой, то каждый раз при создании документа записывай его порядковый номер (значение этого Computed поля) в профайл документ функцией @SetProfileField(profilename;fieldname;value[;username])
навесь например на событие Save.

а потом в значении вычисляемого поля читай функцией @GetProfileField(profilename;fieldname[;username]) значение и увелич его.
nor
Gogan.exe
по твоим двум вопросам я уже отвечал на форуме:
1. например, порядковый номер можно присвоить по событию PostOpen при чтении первой записи столбца представления, при условии, что столбец содержит номера документов определенного типа, упорядоченные по убыванию.
2. права редактирования части формы я подробно описывал ранее - для этого нужно использовать Computed Controlled Exccess Sections.

_____________
Если что не понятно, то я отвечу более подробно в следующий раз, просто не хочется опять все повторять...
Dark
g
nor
Dark
По-моему проще намного использовать @Command([EditInsertFileAttachment]), чем на LotusScript писать громоздкий скрипт.
Gogan.exe
Для начала, если не трудно, давай разберемся с первым вопросом. Как, что именно и где писать? Только, пожалуйста, объясни, что каждая строка значит, чтобы я понял и в последующем не задавал того же вопроса. Как, при создании формы (ПостОпен) прочитать порядковый номер последнего созданного документа? Где это все храниться?
Мне сложно пока въехать в Лотус, потому как до этого долго работал с С++, а с лотусом он не имеет вообще ничего общего. Если не затруднит – опиши, ок?
Dark
nor

может и проще, но почему-то не работает. Может расталкуешь тогда почему пишет, что не может выполнить команду. Я на клик кнопки это делала.

и потом, все равно мне надо было как-то приаттачить файл именно скриптом (так как являлось частью кода), поэтому хотела бы знать конечно как это сделать
Поэтому вот спрашиваю .......
Chernom0r
Здравствуйте!
Подскажите, плизз, как мне сделать такую вещь:
Есть форма, на ней кнопка с событием @MailSend. По нажатию на эту кнопку мне нужно сформировать письмо с линком на этот документ.
Достать идентификатор документа в базе я могу по-видимому с помощью @DocumentUniqueID, имя сервера и имя базы известны и постоянны. Каким образом можно генерить линки (Link) и вставлять их в документы?

Заранее - спасибо.

--------------------------------------------------------------
Извините! Туплю.
Вопрос снят ибо [IncludeDocLink] smile.gif
--------------------------------------------------------------
Gogan.exe
Опаньки! Начал читать сообщение Chernom0r’a сразу возник такой же вопрос! И сразу на него нашелся Черномором ответ! Спасибо, что написал это все сюда – впредь поступай так же. людям может пригодиться подобная информация.
Gogan.exe
Так, попробовал я этот приемчик и возникло два вопроса:
Во-первых. Ссылка не помещается. В чем дело? Вот строчка: @Command([FileSave]);
@MailSend("George";"";"";"Новый документ";"";[IncludeDoclink])
Во-вторых, можно ли продублировать посылку записки по обыкновенному e-mail? Если можно, то как?
Chernom0r
Цитата(Gogan.exe @ 11:05:2004, 14:55 )
Так, попробовал я этот  приемчик и возникло два вопроса:
Во-первых. Ссылка не помещается. В чем дело? Вот строчка: @Command([FileSave]);
@MailSend("George";"";"";"Новый документ";"";[IncludeDoclink])
Во-вторых, можно ли продублировать посылку записки по обыкновенному e-mail? Если можно, то как?

@MailSend("George";"";"";"Новый документ";"";"";[IncludeDoclink])
не хватает еще одних пустых кавычек

Послать можно по любому е-мылу
Gogan.exe
Ог-го-го! Спасибочки! Очень помогло! Премного благодарен!
Gogan.exe
Нужно сделать форму, разделенную на разные части. Каждую часть заполняет отдельное лицо и не может ни читать, ни менять данные, веденные другими лицами. Как это притворить в жизнь? Надеюсь, ясно выразился. Документ должен быть един.
Vagor.ini
Gogan.exe
Если эти люди известны, кто какую часть будет менять то сокрытие полей здесь не подойдет, а отображать <computed text> по данным скрытого поля (если надо читать только)...
Gogan.exe
Смысл в том, что часть документа заполняется и отправляется в базу. Из базы ее достает другой человек и заполняет свою часть… и так далее. Вообще-то читать им можно. Только вот разрешение дать только на дополнение, а не изменение. Как это реализовать… я еще совсем в лотусе не разобрался… пытался через сабформы, но ничего не понял.
Gogan.exe
Хм… я тут подумал, ясно, что документ нужно как-то разбивать на составляющие (к примеру, мне нужно автоматически фиксировать дату изменения документа каждым лицом), но как? Кто мне сможет помочь? И все еще остается открытым вопрос о фиксации порядковости созданного документа. Как подсчитать количество документов в базе и присвоить полю значение +1?
Спасибо.
Gogan.exe
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 блин). Как выглядит формула доступа? Как фиксировать дату последнего изменения _именно этой части (секции)_? Возможно ли это?
Isk
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
что акое bdname? что нужно еще вписать перед данными сторчками? Он у меня collection не понимает. Что такое Nothing, что такое 0.
Объясните, пожайлусто поточнее, если можно. Я в лонусе пока не рублю.
Gogan.exe
Что значит dim в начале многих строчек в коде Лотуса?
Gogan.exe
А... вроде начал разбираться... я Dim писал прямо в функциях поля, а нужно в гобале формы... Пожалуйста, в следующий раз все разъясняйте в мелочах, если не трудно, ок?
Gogan.exe
FIELD Fieldname:=Fieldmame;
Где должна стоять эта строка, почему она необходима, что в ней есть что, и зачем она вообще нужна?
Veselinka
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
Что-то не понял, если мы взяли первый документ и прибавили к нему единицу, то получим два (если ничего не удалялось). Может нужно взять последний док?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2009 IPS, Inc.