Аналог @dblookup в Lotusscript

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

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

fedotxxl

Well-Known Member
09.11.2005
614
0
#2
Либо я сегодня туплю, либо задачи описвают сложно...

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

Medevic

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

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


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

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

Гость
#5
Народ я вроди бы накрапал уже что-то, вот только не знаю как из 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
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#6
В данном коде никак.
Захардкодить.
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#8
Хардкодить от англ. hard code, т.е., в частном случае, написать название переменной от руки, таким образом получив непортабельный код.
Но тут его и невозможно получить: class Field не предоставляет ничегошеньки :)

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

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

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

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#10
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.
 

Гость
#11
Может, кто знает, как ускорить работу 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.
Убедил, забираю слова назад :)
 

fedotxxl

Well-Known Member
09.11.2005
614
0
#14
Бред какой-то... мы изменяем значение в связанном документе, а потом не сохраняем главный. И что получится?
 

Medevic

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

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

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


Поставить галку Refresh fields on keyword change в свойствах поля. И обрабатывать изменения не в событие OnChange поля, а в событии PostRecalc (или QueryRecalc) документа.
на Call uidoc.Refresh у меня ошибка - "Попытка выполнить вложенные события формы". Выполняю это я в событии -Queryrecalc.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#19
на Call uidoc.Refresh у меня ошибка - "Попытка выполнить вложенные события формы". Выполняю это я в событии -Queryrecalc. Что делать, помогите sad.gif
Убрать Call uidoc.Refresh. Если поставишь галку, как я писал, то этот метод не нужен.
 

Гость
#20
Убрать Call uidoc.Refresh. Если поставишь галку, как я писал, то этот метод не нужен.
Полю присваивается значение, но после завершения работы скрипта, оно пропадает.
Значение полю я присваиваю, через - Call uidoc.FieldSetText("TaxPay", doc.GetItemValue ("ContractPartyActive")(0))