Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Россыпь мелких вопросов для разработчиков
Форум программистов > Базы данных и администрирование > Lotus > Lotus - Программирование
Страницы: 1, 2, 3, 4, 5
Gogan.exe
Ах, что я такое говорю. Если по убыванию сортировать, то первый документ как раз будет с самым большим индексом. С этим все понятно. Буду дальше разбираться.
Gogan.exe
1)Как сказать, что newdoc – это тот документ, который только что создан (current)? или counter подразумевает, что пренадлежит к current?
2)Он мне выдает ошибку Varient does not contain an object если в списке нет ни одного документа, почему?
3)counter = doc.counter(0) +1 получаю Type mismatch. Что значит "0"?
4) Как присвоить полю типа Number полученое значение counter (Integer type)? Какую именно и где использовать формулу? Пытался и Field и SetField, но не получаеться (может не правильно пользую?).
Буду очень благодарен!
Guest
Veselinka А еще есть способы подсчета и присвоения номера?
Veselinka
Gogan.exe - похоже что ты путаешь скрипт и формулы.
То что я писала - писала на скрипте. Я не буду здесь читать курс по синтаксису скрипта - кроме того это есть в ]]>http://documentflow.softaria.com/docs/lotus.doc]]>

посмотри как получить текущий документ на события формы или на кнопке если у тебя код на кнопке исполняется.

Guest - приведенный способ подсчета - один из оптимальных, однако надо понимать, что в распределенной среде он может давать сбои, так как на разных серверах может одновременно возникнуть документ с одним и тем же номером. В распределенной системе для решения задач нумерации часто используется либо сложная система построения номера , где номер зависит от места создания документа, либо номера присваиваются документам по расписанию самой системой во время минимальной активности пользователей - где-то ночью на центральном сервере, чтобы все не попавшие еще на центральный сервер документы - просто не были пронумерованы.

В нотесах нет секвенций как в РДБ, к сожалению и транзакций тоже нет, поэтому нельзя гарантировать 100% уникальность нумерации, а лишь минимальную веротяность ситуации в которой могут возникнуть дубликаты. Хотя ждите R7, подкладывайте DB2 и наслаждайтесь всеми прелестями RDBMS smile.gif
Gogan.exe
Тот док, на который ты мне ссылку дала у меня есть.
Сейчас я все подряд путаю.
Мне дали пример БД с работающим каунтером, но там вообще не разобраться ни в чем!
Вот что я накидал в Form ->Field (Номер Документа) ->Initialize :
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim counter As Integer
Set db = session.CurrentDatabase
Set view = db.GetView("СписокДокументов")
Set doc = view.GetFirstDocument
If Isnull(doc) Then
counter = 1
Else
counter = 2
End If
counter = 3
End Sub
Правильно ли это? Каунтер =3 – это для проверки просто ну и 2 – тоже для провсерки… короче сейчас этот скрипт просто должен присвоить значение каунтеру. Как теперь сделать так, чтобы при открытии документа, в поле Номер Документа указывалось значение, хранимое в counter?
Где именно и что именно нужно написать?
Туда ли я поместил этот скрипт?
Veselinka
Запись в поле делается при открытии документа или при сохранении - правильнее делать при сохранении, чтобы уменьшить тот интервал, в который кто-то еще может создать документ и ему посчитается тот же номер.
Поэтому рассмотрим событие QuerySave формы

Сразу говорю - объекты в скирипте проверяются на IS nothing а не на Null, не внимательно значит читал документ, раз такие ошибки делаешь (см страницу 66)

Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim counter As Integer

Set db = source.document.parentDatabase

Set view = db.GetView("СписокДокументов")

Set doc = view.GetFirstDocument

If doc is nothing Then
counter = 1
Else
counter=doc.counter(0)+1
End If

source.document.counter=counter

В данном куске кода предполагается, что номер хранится в поле counter

Если повесить на открытии документа, то подойдет событие открытия формы PostOpen, только надо будет UIDocument рефрешить - call source.refresh, ну и считать надо каунтер 1 раз - когда документ новый - source.isnewdoc, не пересчитывать каждый раз при открытии.
Gogan.exe
Про null я прочитал в F1. Может, я просто не так понял. Хотя в предложенном варианте я видел, что стоит Nothing. :
“Return value
Document
The specified document. If the specified document is not in the collection, returns null. “
Так что извини.
С остальным сейчас буду разбираться. Только вот уже сейчас не ясно, как сделать так, чтобы значение counter отображалось в поле (Field) НомерЗаказа? Я пытался сделать через @SetField() Но опять же не понял куда и как это вписывать.
Спасибо.
Gogan.exe
Уа, товарищи! Считает. По всей видимости он и раньше считал, но только теперь я понял как провеить - создал столбец во View. Красиво так считает. Теперьвот как это значение присвоить полю?
Veselinka
call doc.replaceitemvalue("имя поля",значение или переменная со значением)
Gogan.exe
Чего-то не работает. Остаеться прежним. sad.gif
nor
Привет! Довно на форум не заходил, ивините, народ...
Veselinka, все что ты написала выше про порядкоый номер через представления, я уже писал, по-моему, раза 3 тут на форуме и мне в конец заколебало отвечать на одно и тоже (уже недели три прошло вроде, когда вопрос появился... хотя все еще вопрос актуален! smile.gif ) (кстати тот код (порядковый номер - без представлений) - насчет его производительности и неоптимальности я бы с тобой поспорил... smile.gif мне нравится спорить просто... smile.gif ) Спасибо за бд, которую мне на мыло прислала!

НАРОД
Какое хочу сделать замечание - 90% вопросов крайне неинтересны и все как-то по мелочам... Создается впечатление, что малюпасенькая загвоздка толкает человека спрашивать что-то на форуме и ждать, пока ответят... Мне было бы, честно говоря, влом и самому интереснее было бы разобраться... Например, "Что значит dim в начале многих строчек в коде Лотуса" - ну это вообще... Или "FIELD Fieldname:=Fieldmame; Где должна стоять эта строка, почему она необходима, что в ней есть что, и зачем она вообще нужна?" smile.gif
Про редактирование отдельных частей документа я уже 2 раза тоже отвечал...
Ссылки на документы в письме работают только в почтовом клиенте Lotus, в других они не работают - это очевидно...
КАК ПРИСВОИТЬ ЗНАЧЕНИЕ (числовое) ПОЛЮ Я ЧУТЬ ЛИ НЕ ЦЕЛУЮ СТАТЬЮ ПОСВЯТИЛ! smile.gif smile.gif smile.gif Сколько можно спрашивать такое, да и еще по нескольку раз?!!
nor
Gogan.exe
Мой тебе совет - потрать неделю (7 дней) своего драгоценного времени и разберись, как написана бд какая-нибудь другими разработчиками (можешь использовать шаблон)
также научись работать с дебугером - крайне полезная штука
почитай книги + хелп - последовательно только, пройдись по все классам, ксати в хелпе есть масса реально работающих примеров

после этого у тебя отпадут десятки тысяч вопросов, ты будешь програмировать быстрее, качественнее, будешь получать кайф и сохранишь при этом миллиарды нервных клеток.... smile.gif

не обижайся, пожалуйста, но твои вопросы действительно несколько примитивны... я рад помочь, но с организацией семинара по основам программирования в domino вряд ли получится....
Gogan.exe
Я понимаю твое возмущение, и я бы и сам на твоем месте был бы возмущен (мне подобные вопросы по с++ постоянно задают). Но послушай, что я тебе скажу: Тебе сложно ответить на мелкие вопросы? Хелп я читаю стабильно, есть книжка, и БД я создавал уже. А как я пойму шаблон, если мне не понятно было что такое ДИМ? Ну а то что вопросы мелкие… ты на тему этой ветки смотрел?
В общем, так, поверьте, я не халявничаю. Появившийся вопрос я тут же задаю здесь и параллельно начинаю искать в книге, хелпе… Если здесь ответ появиться – прекрасно, тогда следующий чайник вроде меня не будет так сильно напрягаться в поисках решения.
Если какие-то темы обсуждались, и тем более, если написана была статейка – дай ссылку и я буду благодарен!
Isk
norСогласен, вот например, в б.д. копался, а там свойство parentdatabase, полез в хэлп узнать для чего оно там и как функцианирует, взял пример, ага ничего, из названия то понял а для чего оно нет. В этом примере написано что будет показано одно и то же название потому что типа одна б.д. Короче в итоге я так и не понял его назначения, а у кого спросить? С уважением Я.
Isk
norпрошу прощения, в хэлпе написано что метод нью для нотесдатабэйз не создает новую б.д., в этом была моя ошибка, извиняюсь. Но насчет основного наезда по моему ты все равно не прав, задавать ведь можно любые вопросы, другое дело будешь ТЫ на них отвечать или нет лично твое.
Gogan.exe
У нас в средней школе, в кабинете по химии (кажется) было написано «Единственный глупый вопрос – это не заданный вопрос». Вот так вот!
Gogan.exe
Ну, так что, поможет мне кто-нибудь с передачей значения из переменной в поле?
Gogan.exe
Все... с этим я разобрался! Нужно было @all написать... откуда мне было знать! Но теперь я знаю. Спасибо всем... завтра задам новые глупые вопросы.
Gogan.exe
У меня совсем засорился список полей (Field). Прежде чем начать создавать базу, я просмотрел много хелпов и где-то натыкался на то, как этот список почистить, но теперь не помню, где это видел. Если кто-нибудь знает – напомните, где это можно найти?
Vagor.ini
Сделать compact базе с установленной опцией "Document table bitmap optimization" на базе и если это поля не задействовано ни в одном документе - оно удаляется...
Gogan.exe
Хм... странно, но они не пропали sad.gif
Vagor.ini
Gogan.exe
Ищи, затырки бывают, профайлы не использушь, форму в доке не хранишь.
Можешь разнообразить написать скрипт который обходит базу ищет конкретный field и удаляет его...
Gogan.exe
Что значит «форму в доке не хранишь»? Где же она может сохраняться?
Gogan.exe
Что не правильно в этом коде? Он записан в КвириСейв.
если дата пустая - значит статус - Трали, иначе - вали.
@All;
@SetField(Статус;@If(Номер = "";"Трали";"Вали"));
но не пашет:(
Gogan.exe
уже понял... нужно Номер в кавычки взять!
Guest
Ребят, помогите!
Тут у меня такое дело..... есть документ и его респонс документы...
объясниет мне , плиз, как их отобразить в вью.
То есть на самом деле я это сделала как было написано в хелпе. И все показывает, но вот что не понятно... - мне необходимо, что бы один из столбцов главного документа был Categorized. Сделала, все показывал классно, НО когда сворачиваешь и разворачиваешь этот раздел, он уже перестает отображать респонсы. Если закрыть и снова открыть вью, опять показывает пока не попробуешь свернуть. Подскажите, пожалуйста! не доходит до меня че сделать надо..билась, билась.... нужна помощь.
Если непонятно объяснила, то спрашивайте.
Спасибо.
Gogan.exe
Как можно использовать @If() для значения поля, но чтобы имелось только одно действие? То есть к примеру @If(@IsNewDoc; @SetField(“Новый?”; “ДА”);”Что здесь”);
Что можно написать вместо «Что здесь» чтобы IF вообще ничего не возвращал, а оставлял без изменений поле? Есть ли другие функции, которые могут с этим помочь? Скрипт там нельзя использовать.
Guest
про респонсы под гостем спрашивала Dark
Veselinka
Дарк, поменяй местами столбцы в своей вьюхе. Твой столбец с категорией должен идти ДО столбца с опцией Show responses only.

Gogan.exe пишешь либо просто "" либо @success - Эсли это формула валидации - это вообще по жизни так, а в твоем конкретном случае:

field имяполя:=@if(условие; значение если выполнено условие; имяполя);
Оно присвоит само себя себе - если условие не выполнено.
Dark
Veselinka, сделала как ты сказала......и что то все равно ничего.... sad.gif
вот думаю, может я что то не так в чем то сделала?
вот как делала: в первом столбце с опцией Show responses only ф формуле показать поле из респонс документа, во втором с категорией показать поле из главного документа, в третьем показать просто поле из главного документа.
Иерархия выглядела так: сначала поле - категория, под ним просто-поле и респонсы
Когда я поменяла столбцы, как ты сказала, ничего не изменилось
Все равно когда пробую свернуть и развернуть категорию уже не отображает респонсы....все также только респонс документов нет во вьшке.
Veselinka, может ты свежим мудрым глазом видишь и укажешь мне что не так? потому что я уже просто не зн. Может на стадии проектирования форм еще что то особенное надо было? хотя вряд ли...создает ок...тока показ не так..
Gogan.exe
@all;
field ИмяПоля:= ИмяПоля;
Field ИмяПоля:= @If(@isNewDoc;@SetField(ИмяПоля; "Слово"); ИмяПоля);

Не работает. Имя поля всегда показывает "1"
Veselinka
Dark пришли мне базу, в ней вьюху - и штук 5 документов для этой вьюхи, я тебе причешу ее, воспользуйся опцией форума отправки почты.
Veselinka
Gogan.exe

вот такая конструкция -;@SetField("ИмяПоля"; "Слово") - это операция, результат ее выполнения или фалс или тру, поэтому у тебя эта операция выполняясь очевидно выдает 1 - то есть тру, что ты и засовываешь в свое поле. Старайся по шагам понимать свои действия.
Dark
Veselinka ок, спасибо огромное, жди
Gogan.exe
Все заработало, но использую совершенно другую конструкцию.
По поводу этой, я с тобой несколько не согласен. @SetFiel() в этом случае не вычисляется как логическое уравнение, а выполняется, если @IsNewDoc = true. По крайней мере я так это понимал, когда писал.
Veselinka
выполняться то оно может по условию, а результат операции - все равно логическая величина. Можно соглашаться - можно не соглашаться, суть вопроса и поведения данного скрипта от этого не меняется.

Вообще на будущее - если ты выполняешь некоторую команду, которая не возвращает аки функция некоторого декларированного значения, то результат ее выполнения - выполнилась или не выполнилась, поэтому если извращаться и присваивать филду результат выполнения операции (а не просто ее выполнять) - то и получишь 0 или 1 в поле. Это общая концепция, вероятно возможны какие-либо исключения, я не изучала этот вопрос детально, ибо это как-то.... э... нестандартно. Так обычно не пишут, ибо это как правило не что иное как ошибка в логике.
Gogan.exe
Ах, теперь я понял что имелось в виду… Просто после С++ пересаживаться на это… не понятно что куда писать, что когда выполняется, но теперь я на твою волну попал. То есть если положить данный скриптик в Дефолт поля, то он выполняет и так как там присутствует @if он расценивает его как логическое уравнение и выводит 0 либо 1. в моем случае 1. Все ясно. Спасибочки!
Veselinka
Если ты просто хочешь в филде какое-то значение - ну например по умолчанию посчитать, то в результате выполнения твоей формулы должно быть просто посчитано какое-то значение, это-то значение и подставит система в поле.

Например поле Адрес для письма, которое конкатенируется из значений полей HouseNumber, StreetName, City, Region, Country, формула будет выглядеть так:
@if(country!="";country+", ";"") + @if(Region!="";region+", ";"")+ @if(city!="";city+", ";"") + streetname + " " + HouseNumber+"."

в результате посчитается некоторая строка, которая при нахождении в default value поля и даст его первоначальное значение или вычисляемое - если поставить вычисляемый тип.

Хотя это же можно было элегантнее написать:
@Implode(@trim(country:region:city);", ")+ streetName+" " + HouseNumber+"."
Gogan.exe
Понятно, просто смысл был в другом. Я хотел, чтобы при создании документа, по дефолту поле имело какое-то значение, но потом оно пересчитывалось. Проблема состояла в том, что при сохранении формула снова просчитывалась, и значение возвращалось к исходному значению. С этим я, в итоге, справился. Не без твоей помощи. Еще раз спасибо!
Veselinka
Ну, повидимому, раз "без моей помощи", то "спасибо" как раз говорить не за что. В итоге - решив задачу - ты ее наконец-то поставил - то есть описал - что тебе нужно сделать - свою цель, а не просто набор формул с вопросом - а почему не работает. Если хочешь чтобы на твой вопрос ответили - надо уметь его задать.
Veselinka
Люди, кто гуру по веб-девелопменту на нотесах - хэлп:
1. Есть документ А, у него есть некоторый документ Б к которому он относится.
2. В исходном документе А есть его тип.
3. По кнопке, которая выбирает документ Б и прописывает его в документ А, должен открыться не весь список документов вида Б, а только те из них (категория), к которым может относиться документ данного типа.

То есть у меня например есть документ Процедура регистрации в отделе Маркетинга, этот документ может относиться только к документу Регламент регистрации для отдела Маркетинга. Поэтому при выборе документов регламента - я буду выбирать из категории Маркетинг.

Теперь технический аспект:
На вебе у меня открывается документ Процедура, в нем в хиднутом параметре есть HeadType=Маркетинг.
Далее - по кнопочке выбора документа к которому он относится у меня открывается ссылка типа server/database/(DialogForm)?openform.
В этой форме на webqueryopen насчитывается список документов, которые можно выбирать - котороче типа вьюхи с чекбоксами, по клику на который у меня потом на ява скрипте все в исходный документ подставится.

Вся эта схема прекрасно работает в случае - если мне в эту новооткрываемую форму не надо передавать в качестве параметра Headtype, а вот как передать этот параметр - неведомо.
Стандартный механизм наследования значений при создании новой формы со старого документа - мне не удалось заставить работать. А на вебе я вообще впервые села программировать для домино, может вообще зря огород горожу, можно как-то проще сделать....

Вобщем при открытии новой формы мне в нее надо параметр передать и чтобы в WebQueryOpen он был доступен - как это сделать - кто знает?
Gogan.exe
"...справился. Не без твоей помощи. Еще раз спасибо..." я сказал НЕ без твоей помощи. Ты направила меня в правильное русло.
Трудно правильно поставить вопрос, когда вообще ничего не получается и ничего не понимаю smile.gif
просто я по несколько раз просматривал предоставленный код, пока понял что к чему.
Veselinka
Gogan.exe
извини - наверное у меня глаза косо смотрят сегодня - я прочитала Не как Но ;)) Извини еще раз пожалуйста
Chernom0r
Здравствуйте.
Мне нужно агентом на Lotus Script выполнить определенные действия с документами в базе, но предварительно я должен проверить наличие Embedded Objects, и если они отсутствуют просто удалить документ из базы.
......
If DocHasEmbedded = False Then
' Здесь я удаляю документ
End Sub
Else
' Продолжаем выполнять скрипт
.......

End If
End Sub

Вопрос:
как мне произвести удаление документа из базы скриптом, который выполняется автоматом на сервере?

Заранее -- спасибо
nor
Veselinka
Привет.
"Вобщем при открытии новой формы мне в нее надо параметр передать и чтобы в WebQueryOpen он был доступен - как это сделать - кто знает? "

Аналалогичную процедуру наследования (передачи) параметра в новый создаваемый документ, и чтоб этот параметр был доступен в WebQueryOpen этого нового документа, я делал через создание (с последующим удалением) темпового документа. В темповый документ я записывал параметр и присваивал ему уникальный индентификатор. Затем создавал новый документ по кнопке из генерального документа и в новом документе в событии WebQueryOpen я находил темповый документ, который был создан в бд пару сек. назад, переписывал в новый документ параметры из темпового, а темповый удалял. Надеюсь я ясно выражаюсь... Проблем со скриптом из-за перезагруженности бд или непроизводительности сервера и т.д. я не испытывал. Все прекрасно работает. Если что-то не понятно, я тут напишу тебе код...
nor
Chernom0r
"Вопрос:
как мне произвести удаление документа из базы скриптом, который выполняется автоматом на сервере?"
Ответ:

Call notesDocument.Remove(True)
Veselinka
Nor. спасибо - идея - отличная - ей и воспользуюсь в следующий раз, сейчас решила эту проблему так:
1. Отказалась от формы и вызываю агента, который эту форму заполнял
2. Агенту передаю строку вида Имя=Значение
3. у session.documentContext в агенте в поле QUERY_STRING_DECODED - мои переданные параметры, которые я разбираю.

Вобщем в таком вот виде решила. Хотя этот метод не всегда проканает, а твой - передачи параметров через темповый документ - в куче ситуаций востребован. Рулез.

Я видишь - впервые засела под веб девелопить - поэтому не все методики знакомы - на пустом месте иногда спотыкаюсь.
Chernom0r
Здравствуйте.
Кто-нибудь из Вас сталкивался с программой mNotes? (Mnotes Cadenza. ]]>http://www.commontime.com/ProductsCadenza.htm]]> )
Это прога, позволяющая синхронизить PDA (Pocket PC/Palm OS) и Lotus Notes и вроде бы Domino Server. Т.е. как я понял можно прямо со своего девайса коннектиться к серверу и юзать Lotus.
У меня с ней некоторые траблы sad.gif
Gogan.exe
Ни разу даже не слышал о такой проге, что не удивительно для чайника.
Guest
Народ помогите, есть б.д. мне надо нарисовать диаграммы классов, действия, прецендентов и предметной области, есть кто в этом хорошо разбирается? Может кто поможет
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2009 IPS, Inc.