Gogan.exe
13:05:2004, 11:13
Ах, что я такое говорю. Если по убыванию сортировать, то первый документ как раз будет с самым большим индексом. С этим все понятно. Буду дальше разбираться.
Gogan.exe
13:05:2004, 12:12
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, но не получаеться (может не правильно пользую?).
Буду очень благодарен!
Veselinka А еще есть способы подсчета и присвоения номера?
Veselinka
14:05:2004, 06:47
Gogan.exe - похоже что ты путаешь скрипт и формулы.
То что я писала - писала на скрипте. Я не буду здесь читать курс по синтаксису скрипта - кроме того это есть в
]]>http://documentflow.softaria.com/docs/lotus.doc]]>посмотри как получить текущий документ на события формы или на кнопке если у тебя код на кнопке исполняется.
Guest - приведенный способ подсчета - один из оптимальных, однако надо понимать, что в распределенной среде он может давать сбои, так как на разных серверах может одновременно возникнуть документ с одним и тем же номером. В распределенной системе для решения задач нумерации часто используется либо сложная система построения номера , где номер зависит от места создания документа, либо номера присваиваются документам по расписанию самой системой во время минимальной активности пользователей - где-то ночью на центральном сервере, чтобы все не попавшие еще на центральный сервер документы - просто не были пронумерованы.
В нотесах нет секвенций как в РДБ, к сожалению и транзакций тоже нет, поэтому нельзя гарантировать 100% уникальность нумерации, а лишь минимальную веротяность ситуации в которой могут возникнуть дубликаты. Хотя ждите R7, подкладывайте DB2 и наслаждайтесь всеми прелестями RDBMS
Gogan.exe
14:05:2004, 07:43
Тот док, на который ты мне ссылку дала у меня есть.
Сейчас я все подряд путаю.
Мне дали пример БД с работающим каунтером, но там вообще не разобраться ни в чем!
Вот что я накидал в 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
14:05:2004, 09:16
Запись в поле делается при открытии документа или при сохранении - правильнее делать при сохранении, чтобы уменьшить тот интервал, в который кто-то еще может создать документ и ему посчитается тот же номер.
Поэтому рассмотрим событие 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
14:05:2004, 11:00
Про 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
14:05:2004, 11:22
Уа, товарищи! Считает. По всей видимости он и раньше считал, но только теперь я понял как провеить - создал столбец во View. Красиво так считает. Теперьвот как это значение присвоить полю?
Veselinka
14:05:2004, 11:44
call doc.replaceitemvalue("имя поля",значение или переменная со значением)
Gogan.exe
14:05:2004, 12:26
Чего-то не работает. Остаеться прежним.
Привет! Довно на форум не заходил, ивините, народ...
Veselinka, все что ты написала выше про порядкоый номер через представления, я уже писал, по-моему, раза 3 тут на форуме и мне в конец заколебало отвечать на одно и тоже (уже недели три прошло вроде, когда вопрос появился... хотя все еще вопрос актуален!

) (кстати тот код (порядковый номер - без представлений) - насчет его производительности и неоптимальности я бы с тобой поспорил...

мне нравится спорить просто...

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

Сколько можно спрашивать такое, да и еще по нескольку раз?!!
Gogan.exeМой тебе совет - потрать неделю (7 дней) своего драгоценного времени и разберись, как написана бд какая-нибудь другими разработчиками (можешь использовать шаблон)
также научись работать с дебугером - крайне полезная штука
почитай книги + хелп - последовательно только, пройдись по все классам, ксати в хелпе есть
масса реально работающих примеровпосле этого у тебя отпадут десятки тысяч вопросов, ты будешь програмировать быстрее, качественнее, будешь получать кайф и сохранишь при этом миллиарды нервных клеток....
не обижайся, пожалуйста, но твои вопросы действительно несколько примитивны... я рад помочь, но с организацией семинара по основам программирования в domino вряд ли получится....
Gogan.exe
17:05:2004, 06:10
Я понимаю твое возмущение, и я бы и сам на твоем месте был бы возмущен (мне подобные вопросы по с++ постоянно задают). Но послушай, что я тебе скажу: Тебе сложно ответить на мелкие вопросы? Хелп я читаю стабильно, есть книжка, и БД я создавал уже. А как я пойму шаблон, если мне не понятно было что такое ДИМ? Ну а то что вопросы мелкие… ты на тему этой ветки смотрел?
В общем, так, поверьте, я не халявничаю. Появившийся вопрос я тут же задаю здесь и параллельно начинаю искать в книге, хелпе… Если здесь ответ появиться – прекрасно, тогда следующий чайник вроде меня не будет так сильно напрягаться в поисках решения.
Если какие-то темы обсуждались, и тем более, если написана была статейка – дай ссылку и я буду благодарен!
norСогласен, вот например, в б.д. копался, а там свойство parentdatabase, полез в хэлп узнать для чего оно там и как функцианирует, взял пример, ага ничего, из названия то понял а для чего оно нет. В этом примере написано что будет показано одно и то же название потому что типа одна б.д. Короче в итоге я так и не понял его назначения, а у кого спросить? С уважением Я.
norпрошу прощения, в хэлпе написано что метод нью для нотесдатабэйз не создает новую б.д., в этом была моя ошибка, извиняюсь. Но насчет основного наезда по моему ты все равно не прав, задавать ведь можно любые вопросы, другое дело будешь ТЫ на них отвечать или нет лично твое.
Gogan.exe
17:05:2004, 10:56
У нас в средней школе, в кабинете по химии (кажется) было написано «Единственный глупый вопрос – это не заданный вопрос». Вот так вот!
Gogan.exe
17:05:2004, 12:06
Ну, так что, поможет мне кто-нибудь с передачей значения из переменной в поле?
Gogan.exe
17:05:2004, 13:33
Все... с этим я разобрался! Нужно было @all написать... откуда мне было знать! Но теперь я знаю. Спасибо всем... завтра задам новые глупые вопросы.
Gogan.exe
18:05:2004, 06:09
У меня совсем засорился список полей (Field). Прежде чем начать создавать базу, я просмотрел много хелпов и где-то натыкался на то, как этот список почистить, но теперь не помню, где это видел. Если кто-нибудь знает – напомните, где это можно найти?
Vagor.ini
18:05:2004, 09:23
Сделать compact базе с установленной опцией "Document table bitmap optimization" на базе и если это поля не задействовано ни в одном документе - оно удаляется...
Gogan.exe
18:05:2004, 10:47
Хм... странно, но они не пропали
Vagor.ini
18:05:2004, 12:19
Gogan.exe
Ищи, затырки бывают, профайлы не использушь, форму в доке не хранишь.
Можешь разнообразить написать скрипт который обходит базу ищет конкретный field и удаляет его...
Gogan.exe
19:05:2004, 05:14
Что значит «форму в доке не хранишь»? Где же она может сохраняться?
Gogan.exe
20:05:2004, 12:59
Что не правильно в этом коде? Он записан в КвириСейв.
если дата пустая - значит статус - Трали, иначе - вали.
@All;
@SetField(Статус;@If(Номер = "";"Трали";"Вали"));
но не пашет:(
Gogan.exe
20:05:2004, 12:59
уже понял... нужно Номер в кавычки взять!
Ребят, помогите!
Тут у меня такое дело..... есть документ и его респонс документы...
объясниет мне , плиз, как их отобразить в вью.
То есть на самом деле я это сделала как было написано в хелпе. И все показывает, но вот что не понятно... - мне необходимо, что бы один из столбцов главного документа был Categorized. Сделала, все показывал классно, НО когда сворачиваешь и разворачиваешь этот раздел, он уже перестает отображать респонсы. Если закрыть и снова открыть вью, опять показывает пока не попробуешь свернуть. Подскажите, пожалуйста! не доходит до меня че сделать надо..билась, билась.... нужна помощь.
Если непонятно объяснила, то спрашивайте.
Спасибо.
Gogan.exe
21:05:2004, 07:43
Как можно использовать @If() для значения поля, но чтобы имелось только одно действие? То есть к примеру @If(@IsNewDoc; @SetField(“Новый?”; “ДА”);”Что здесь”);
Что можно написать вместо «Что здесь» чтобы IF вообще ничего не возвращал, а оставлял без изменений поле? Есть ли другие функции, которые могут с этим помочь? Скрипт там нельзя использовать.
про респонсы под гостем спрашивала Dark
Veselinka
21:05:2004, 08:03
Дарк, поменяй местами столбцы в своей вьюхе. Твой столбец с категорией должен идти ДО столбца с опцией Show responses only.
Gogan.exe пишешь либо просто "" либо @success - Эсли это формула валидации - это вообще по жизни так, а в твоем конкретном случае:
field имяполя:=@if(условие; значение если выполнено условие; имяполя);
Оно присвоит само себя себе - если условие не выполнено.
Veselinka, сделала как ты сказала......и что то все равно ничего....

вот думаю, может я что то не так в чем то сделала?
вот как делала: в первом столбце с опцией Show responses only ф формуле показать поле из респонс документа, во втором с категорией показать поле из главного документа, в третьем показать просто поле из главного документа.
Иерархия выглядела так: сначала поле - категория, под ним просто-поле и респонсы
Когда я поменяла столбцы, как ты сказала, ничего не изменилось
Все равно когда пробую свернуть и развернуть категорию уже не отображает респонсы....все также только респонс документов нет во вьшке.
Veselinka, может ты свежим мудрым глазом видишь и укажешь мне что не так? потому что я уже просто не зн. Может на стадии проектирования форм еще что то особенное надо было? хотя вряд ли...создает ок...тока показ не так..
Gogan.exe
21:05:2004, 10:22
@all;
field ИмяПоля:= ИмяПоля;
Field ИмяПоля:= @If(@isNewDoc;@SetField(ИмяПоля; "Слово"); ИмяПоля);
Не работает. Имя поля всегда показывает "1"
Veselinka
21:05:2004, 11:13
Dark пришли мне базу, в ней вьюху - и штук 5 документов для этой вьюхи, я тебе причешу ее, воспользуйся опцией форума отправки почты.
Veselinka
21:05:2004, 11:16
Gogan.exe
вот такая конструкция -;@SetField("ИмяПоля"; "Слово") - это операция, результат ее выполнения или фалс или тру, поэтому у тебя эта операция выполняясь очевидно выдает 1 - то есть тру, что ты и засовываешь в свое поле. Старайся по шагам понимать свои действия.
Veselinka ок, спасибо огромное, жди
Gogan.exe
24:05:2004, 06:27
Все заработало, но использую совершенно другую конструкцию.
По поводу этой, я с тобой несколько не согласен. @SetFiel() в этом случае не вычисляется как логическое уравнение, а выполняется, если @IsNewDoc = true. По крайней мере я так это понимал, когда писал.
Veselinka
24:05:2004, 07:48
выполняться то оно может по условию, а результат операции - все равно логическая величина. Можно соглашаться - можно не соглашаться, суть вопроса и поведения данного скрипта от этого не меняется.
Вообще на будущее - если ты выполняешь некоторую команду, которая не возвращает аки функция некоторого декларированного значения, то результат ее выполнения - выполнилась или не выполнилась, поэтому если извращаться и присваивать филду результат выполнения операции (а не просто ее выполнять) - то и получишь 0 или 1 в поле. Это общая концепция, вероятно возможны какие-либо исключения, я не изучала этот вопрос детально, ибо это как-то.... э... нестандартно. Так обычно не пишут, ибо это как правило не что иное как ошибка в логике.
Gogan.exe
24:05:2004, 10:44
Ах, теперь я понял что имелось в виду… Просто после С++ пересаживаться на это… не понятно что куда писать, что когда выполняется, но теперь я на твою волну попал. То есть если положить данный скриптик в Дефолт поля, то он выполняет и так как там присутствует @if он расценивает его как логическое уравнение и выводит 0 либо 1. в моем случае 1. Все ясно. Спасибочки!
Veselinka
24:05:2004, 12:38
Если ты просто хочешь в филде какое-то значение - ну например по умолчанию посчитать, то в результате выполнения твоей формулы должно быть просто посчитано какое-то значение, это-то значение и подставит система в поле.
Например поле Адрес для письма, которое конкатенируется из значений полей 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
25:05:2004, 04:43
Понятно, просто смысл был в другом. Я хотел, чтобы при создании документа, по дефолту поле имело какое-то значение, но потом оно пересчитывалось. Проблема состояла в том, что при сохранении формула снова просчитывалась, и значение возвращалось к исходному значению. С этим я, в итоге, справился. Не без твоей помощи. Еще раз спасибо!
Veselinka
26:05:2004, 06:19
Ну, повидимому, раз "без моей помощи", то "спасибо" как раз говорить не за что. В итоге - решив задачу - ты ее наконец-то поставил - то есть описал - что тебе нужно сделать - свою цель, а не просто набор формул с вопросом - а почему не работает. Если хочешь чтобы на твой вопрос ответили - надо уметь его задать.
Veselinka
26:05:2004, 10:27
Люди, кто гуру по веб-девелопменту на нотесах - хэлп:
1. Есть документ А, у него есть некоторый документ Б к которому он относится.
2. В исходном документе А есть его тип.
3. По кнопке, которая выбирает документ Б и прописывает его в документ А, должен открыться не весь список документов вида Б, а только те из них (категория), к которым может относиться документ данного типа.
То есть у меня например есть документ Процедура регистрации в отделе Маркетинга, этот документ может относиться только к документу Регламент регистрации для отдела Маркетинга. Поэтому при выборе документов регламента - я буду выбирать из категории Маркетинг.
Теперь технический аспект:
На вебе у меня открывается документ Процедура, в нем в хиднутом параметре есть HeadType=Маркетинг.
Далее - по кнопочке выбора документа к которому он относится у меня открывается ссылка типа server/database/(DialogForm)?openform.
В этой форме на webqueryopen насчитывается список документов, которые можно выбирать - котороче типа вьюхи с чекбоксами, по клику на который у меня потом на ява скрипте все в исходный документ подставится.
Вся эта схема прекрасно работает в случае - если мне в эту новооткрываемую форму не надо передавать в качестве параметра Headtype, а вот как передать этот параметр - неведомо.
Стандартный механизм наследования значений при создании новой формы со старого документа - мне не удалось заставить работать. А на вебе я вообще впервые села программировать для домино, может вообще зря огород горожу, можно как-то проще сделать....
Вобщем при открытии новой формы мне в нее надо параметр передать и чтобы в WebQueryOpen он был доступен - как это сделать - кто знает?
Gogan.exe
26:05:2004, 10:41
"...справился. Не без твоей помощи. Еще раз спасибо..." я сказал НЕ без твоей помощи. Ты направила меня в правильное русло.
Трудно правильно поставить вопрос, когда вообще ничего не получается и ничего не понимаю

просто я по несколько раз просматривал предоставленный код, пока понял что к чему.
Veselinka
26:05:2004, 10:54
Gogan.exe
извини - наверное у меня глаза косо смотрят сегодня - я прочитала Не как Но ;)) Извини еще раз пожалуйста
Chernom0r
26:05:2004, 14:54
Здравствуйте.
Мне нужно агентом на Lotus Script выполнить определенные действия с документами в базе, но предварительно я должен проверить наличие Embedded Objects, и если они отсутствуют просто удалить документ из базы.
......
If DocHasEmbedded = False Then
' Здесь я удаляю документ
End Sub
Else
' Продолжаем выполнять скрипт
.......
End If
End Sub
Вопрос:
как мне произвести удаление документа из базы скриптом, который выполняется автоматом на сервере?
Заранее -- спасибо
Veselinka
Привет.
"Вобщем при открытии новой формы мне в нее надо параметр передать и чтобы в WebQueryOpen он был доступен - как это сделать - кто знает? "
Аналалогичную процедуру наследования (передачи) параметра в новый создаваемый документ, и чтоб этот параметр был доступен в WebQueryOpen этого нового документа, я делал через создание (с последующим удалением) темпового документа. В темповый документ я записывал параметр и присваивал ему уникальный индентификатор. Затем создавал новый документ по кнопке из генерального документа и в новом документе в событии WebQueryOpen я находил темповый документ, который был создан в бд пару сек. назад, переписывал в новый документ параметры из темпового, а темповый удалял. Надеюсь я ясно выражаюсь... Проблем со скриптом из-за перезагруженности бд или непроизводительности сервера и т.д. я не испытывал. Все прекрасно работает. Если что-то не понятно, я тут напишу тебе код...
Chernom0r"Вопрос:
как мне произвести удаление документа из базы скриптом, который выполняется автоматом на сервере?"
Ответ:
Call notesDocument.Remove(True)
Veselinka
27:05:2004, 05:46
Nor. спасибо - идея - отличная - ей и воспользуюсь в следующий раз, сейчас решила эту проблему так:
1. Отказалась от формы и вызываю агента, который эту форму заполнял
2. Агенту передаю строку вида Имя=Значение
3. у session.documentContext в агенте в поле QUERY_STRING_DECODED - мои переданные параметры, которые я разбираю.
Вобщем в таком вот виде решила. Хотя этот метод не всегда проканает, а твой - передачи параметров через темповый документ - в куче ситуаций востребован. Рулез.
Я видишь - впервые засела под веб девелопить - поэтому не все методики знакомы - на пустом месте иногда спотыкаюсь.
Chernom0r
28:05:2004, 13:00
Здравствуйте.
Кто-нибудь из Вас сталкивался с программой mNotes? (Mnotes Cadenza.
]]>http://www.commontime.com/ProductsCadenza.htm]]> )
Это прога, позволяющая синхронизить PDA (Pocket PC/Palm OS) и Lotus Notes и вроде бы Domino Server. Т.е. как я понял можно прямо со своего девайса коннектиться к серверу и юзать Lotus.
У меня с ней некоторые траблы
Gogan.exe
31:05:2004, 05:23
Ни разу даже не слышал о такой проге, что не удивительно для чайника.
Народ помогите, есть б.д. мне надо нарисовать диаграммы классов, действия, прецендентов и предметной области, есть кто в этом хорошо разбирается? Может кто поможет