Аналог @dblookup в Lotusscript

  • Автор темы Guest
  • Дата начала
G

Guest

Мне надо по событию OnChange - поля Pole_1, поменять значение поля - Pole_2. Если известно только имя представления и значение сосднего столбца представления.
Может кто-сталкивался с подстановкой значения в поле, связяного с другим значением в том же документе?
 
F

fedotxxl

Либо я сегодня туплю, либо задачи описвают сложно...

Поля в одном документе? Если в одном, то в чем проблема - второе поле computed - для того, чтобы второе поле пересчиталось нужно инициировать обновление документа. Если поля в разных документах, то на PostSave я бы нашел нужный мне документ (view.GetDocumentByKey) и изменил значение
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Если поля в разных документах, то на PostSave я бы нашел нужный мне документ (view.GetDocumentByKey) и изменил значение
А не поздно ли в PostSave? Права уже могут измениться (т.е. прав автора уже может не быть). И 7-ка выдаст ошибку при вызове notesDocument.Save (хотя в 6-ке работало).

В данном случае можно использовать Evaluate (ищем в хелпе "Using the Evaluate statement" :)).


А не поздно ли в PostSave? Права уже могут измениться (т.е. прав автора уже может не быть). И 7-ка выдаст ошибку при вызове notesDocument.Save (хотя в 6-ке работало).
Невнимательно прочел. Это для одного документа. :)
 
G

Guest

Во-первых, @DbLookUp можно использовать и в Lotus Script через Evaluate, если, конечно, это решит проблему..А во вторых - неужели так сложно взять из известного представления документ по известному ключу ? Даже если представление не отсортировано и вы принципиально не хотите его сортировать или создать новое отсортированное, можно, в конце концов, просто перебрать документы представления в цикле и установить нужную запись.
 
G

Guest

Народ я вроди бы накрапал уже что-то, вот только не знаю как из Source взять название текущего поля:
Код:
Sub Onchange(Source As Field)

Dim session As NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim cDoc As NotesDocument
Dim view As NotesView

Set uidoc = workspace.CurrentDocument	
Set cDoc= uidoc.Document

Set session = New NotesSession	
Set db = session.GetDatabase("Elephant/ICTP","Work/Docs/performing.nsf")
Set view = db.GetView ("ContragentsForContracts" )
Set doc = view.GetDocumentByKey(Source)

Call uidoc.FieldSetText(TaxPay, doc.GetItemValue ("ContractPartyActive")(0))

Call cDoc.Save (True, False,False)	
Call uidoc.Refresh
Call uidoc.RefreshHideFormulas

End Sub
 
O

Omh

В данном коде никак.
Захардкодить.
 
O

Omh

Хардкодить от англ. hard code, т.е., в частном случае, написать название переменной от руки, таким образом получив непортабельный код.
Но тут его и невозможно получить: class Field не предоставляет ничегошеньки :)

Вообще, вышеприведённый код ничё, только я бы заменил строку
Код:
Call uidoc.FieldSetText(TaxPay, doc.GetItemValue ("ContractPartyActive")(0))
на
Код:
Call doc.ReplaceItemValue(TaxPay, doc.GetItemValue("ContractPartyActive")(0))
 
G

Guest

Хардкодить от англ. hard code, т.е., в частном случае, написать название переменной от руки, таким образом получив непортабельный код.
Но тут его и невозможно получить: class Field не предоставляет ничегошеньки :)

Вообще, вышеприведённый код ничё, только я бы заменил строку
Код:
Call uidoc.FieldSetText(TaxPay, doc.GetItemValue ("ContractPartyActive")(0))
на
Код:
Call doc.ReplaceItemValue(TaxPay, doc.GetItemValue("ContractPartyActive")(0))

Не верю от нефиг делать значит передается в функцию переменная Source?
 
O

Omh

Represents a field on a form.

Note
This class is not supported in COM.
Events
Entering
Exiting
OnBlur
OnChange
OnFocus
Access
To access a field, write a script that responds to one of its events. A Field object has no properties or methods.
 
G

Guest

Может, кто знает, как ускорить работу OnChange, что бы процедура отрабатывалась не после потери фокуса полем, а сразу же как только выбрали значение из окна?

Represents a field on a form.

Note
This class is not supported in COM.
Events
Entering
Exiting
OnBlur
OnChange
OnFocus
Access
To access a field, write a script that responds to one of its events. A Field object has no properties or methods.

Убедил, забираю слова назад :)
 
S

Sandr

Денис Кириченко
Использовать onclick
 
F

fedotxxl

Бред какой-то... мы изменяем значение в связанном документе, а потом не сохраняем главный. И что получится?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Может, кто знает, как ускорить работу OnChange, что бы процедура отрабатывалась не после потери фокуса полем, а сразу же как только выбрали значение из окна?
Поставить галку Refresh fields on keyword change в свойствах поля. И обрабатывать изменения не в событие OnChange поля, а в событии PostRecalc (или QueryRecalc) документа.

Бред какой-то... мы изменяем значение в связанном документе, а потом не сохраняем главный. И что получится?
Ты про что? Документ один. Еще в первом посте написано.
 
G

Guest

Денис Кириченко
Там JavaScript :(

на Call uidoc.Refresh у меня ошибка - "Попытка выполнить вложенные события формы". Выполняю это я в событии -Queryrecalc. Что делать, помогите :)


Поставить галку Refresh fields on keyword change в свойствах поля. И обрабатывать изменения не в событие OnChange поля, а в событии PostRecalc (или QueryRecalc) документа.

на Call uidoc.Refresh у меня ошибка - "Попытка выполнить вложенные события формы". Выполняю это я в событии -Queryrecalc.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
на Call uidoc.Refresh у меня ошибка - "Попытка выполнить вложенные события формы". Выполняю это я в событии -Queryrecalc. Что делать, помогите sad.gif
Убрать Call uidoc.Refresh. Если поставишь галку, как я писал, то этот метод не нужен.
 
G

Guest

Убрать Call uidoc.Refresh. Если поставишь галку, как я писал, то этот метод не нужен.

Полю присваивается значение, но после завершения работы скрипта, оно пропадает.
Значение полю я присваиваю, через - Call uidoc.FieldSetText("TaxPay", doc.GetItemValue ("ContractPartyActive")(0))
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!