Хорошие ответы

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#1
Привет всем!
Периодически смотрю форум и вижу ваши хорошие, развернутые ответы на ртфмные вопросы.
Решила наиболее общие полезности отобрать в тему, чтоб можно было иногда сослаться, а не писать самому "долго и нудно", ибо часто это просто влом... Пока тема будет жить тут.
Ввиду некоторой глючности форумных цитат, пока буду стараться их не использовать...

Список обсуждаемых вопросов:
[post="174090"]Что означают разные значения IsNewDoc и IsNewNote[/post]
[post="174092"]Поля в лотусе: поля на форме (fields) и поля в документе (items), тип поля[/post]
[post="174096"]Получение значений поля с помощью GetItemValue (Lotusscript)[/post]
Совместное использование NotesUIDocument и NotesDocument
[post="184493"]Cannot create automation object.[/post]

P.S. Много полезного можно найти по ссылкам темы "Ликбез" для великих вещей
 

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
Киев (Русь)
#2
Что означают разные значения IsNewDoc и IsNewNote

> IsNewNote = True
> IsNewDoc = False

Нормальное поведение, если документ создаётся в бэкэнде (notesDatabase.CreateDocument), а затем открывается в UI (notesUIDocument.EditDocument), это как раз и приводит к указанному сочетанию:
doc.IsNewNote означает, что doc не сохранён в БД
uidoc.IsNewDoc означает, что документ открыт, а не создан посредством UI.

Оба эти параметра = True только когда документ создаётся в UI, т.е. через Compose (notesUIWorkspace.ComposeDocument или @Command([Compose]; ...)

(Сообщение nvy)

Примечание: при создании документа с помощью Compose IsNewDoc бывает равно False после переоткрытия документа (например надо было обновить изменения RT-поля).
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#3
Поля в лотусе: поля на форме (fields) и поля в документе (items), тип поля
Нужно понимать, что к чему в Лотусе. Есть документ, в нём хранится информация. Есть форма, по ней документы создаются и отображаются. Не все поля, имеющиеся на форме, сохраняются в документе. И наоборот, не все поля, сохранённые в документе, отображаются на форме. Если после сохранения документа удалить поле из формы, в документе поле останется. Если добавить поле на форму, в документах оно не появится, пока их не откроют в данной форме и не пересохранят. В представлении отображаются только поля, сохранённые в документе, запросить/объединить данные из других документов Лотус не позволяет (про профили пока умолчу).
([post="173948"]Сообщение[/post] nvy )
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#4
Получение значений поля с помощью GetItemValue (Lotusscript)
Есть текстовое поле FieldName с опцией Allow Multiple Values, в нем заданы несколько значений.

doc.GetItemValue("FieldName")(0) - ПЕРВОЕ значение
doc.GetItemValue("FieldName")(1) - ВТОРОЕ значение
...
doc.GetItemValue("FieldName")(N) - N-ное значение

соответственно GetItemValue без индекса возвращает массив, и ну никак не первое значение
[post="153876"]сообщение [/post]Morpheus

Код:
dim s as String
dim v as Variant
s=doc.GetItemValue("FieldName")(0)
v=doc.GetItemValue("FieldName")
в v будут все значения в виде массива
в s - только первое

Примечание:
Если поле без опций Allow Multiple Values, то при получении значения поля в строку используем синтаксис получения первого значения, не забываем про индекс (0)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#5
или же вот так ;)
Код:
s=implode(doc.GetItemValue("FieldName"))
;)
если для перебора то еще вот так
Код:
forall in1 in doc.GetItemValue("FieldName")
print in1
end forall
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#7
При попытке создания объекта Excel.Application возникает ошибка Cannot create automation object.

В общем запускаете из командной строки dcomcnfg. Там смотрите в свойствах DСOM приложения Excel и в Удостоверении ставите не Запускающий пользователь, а Текущий пользователь.
[post="184478"]Сообщение[/post] NetWood