Как Получить Имя Поля ?

  • Автор темы МГВ
  • Дата начала
М

МГВ

Добрый день !
Помогите решить задачку. На форме много изменяемых полей Если пользователь удалит, автоматом значение присваивается нулю:
Код:
Sub Onchange(Source As Field)

Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument

Set Doc = uiDoc.Document   
' если поле нулевой длины, присвоим значение 0   

Doc.v1= GetFieldZero(Doc.v1(0))

Call uidoc.Refresh   

End Sub
Можно ли и если можно, то как получить имя поля, которое редактируется в данный момент, чтобы для каждого поля не менять формулу: Doc.v1= GetFieldZero(Doc.v1(0)) на v2? v3 и т.д.
 
Последнее редактирование:
H

hosm

из стандартного только через Notesuidocument.currentField
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
543
МГВ
Суть задачи в чем?
Сейчас методов 5-6 кинут "как получить имя поля", а подойдут ли для решения?)
 
М

МГВ

МГВ
Суть задачи в чем?
Сейчас методов 5-6 кинут "как получить имя поля", а подойдут ли для решения?)
Чтобы написать единую формулу для всех полей. Сейчас, если у меня есть вычисляемое поле v10, которое равно сумме нескольких полей v10_1 v10_2 ... я на форме через копировать вставить создаю эти поля, потом мне приходится в каждом редактировать формулу. А если имя поля вычислялось бы, то и редактировать не надо, хочу универсальную функцию :angry:
 

erdi

Green Team
20.08.2008
264
17
BIT
0
Код:
	Dim fieldname As String
Dim fieldvalue As String
fieldname=uidoc.CurrentField
fieldvalue=doc.GetItemValue(fieldvalue)(0)
 

Leoric

Lotus Team
15.10.2003
69
10
BIT
91
Может лучше написать на @ ?
@ThisName - название текущего поля (@ThisValue - значение)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
473
зачем суммировать поля, кот. создаются в дизайнере раз-от-раза?
т.е. процесс постоянного редизайна приложения - это трындец какой-то
какова суть всех этих действий, может логичнее создать мультивалюйное поле или отдельные доки суммировать?!
 
М

МГВ

Код:
	Dim fieldname As String
Dim fieldvalue As String
fieldname=uidoc.CurrentField
fieldvalue=doc.GetItemValue(fieldvalue)(0)

Что то не работает :(
Получаем имя и значение не текущего а следующего поля :

Sub Onchange(Source As Field)

Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim fieldname As String
Dim fieldvalue As String

Set uidoc = workspace.CurrentDocument
Set Doc = uiDoc.Document

fieldname=uidoc.CurrentField
fieldvalue=doc.GetItemValue(fieldname)(0)

Print FieldName
Print fieldValue



Добавлено:
зачем суммировать поля, кот. создаются в дизайнере раз-от-раза?
т.е. процесс постоянного редизайна приложения - это трындец какой-то
какова суть всех этих действий, может логичнее создать мультивалюйное поле или отдельные доки суммировать?!
Это форма для заполнения. Есть вычисляемые поля, есть изменяемые. Хотелось бы создать единый код для группы изменяемых полей, чтобы потом копированием поля в дизайнере размножить. Это делается один раз при создании формы.
 

Leoric

Lotus Team
15.10.2003
69
10
BIT
91
fieldvalue=doc.GetItemValue(fieldname)(0)
Вы обращаетесь к бэкграундному документу, получайте значение как UIDoc.FieldGetText(fieldname)

А вообще собаки намного лучше для этого приспособлены...
Вписать в Computed поле что-то типа @GetField(@ThisName+"_1" ) + @GetField(@ThisName+"_2" )будет работать лучше
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
473
Хотелось бы создать единый код для группы изменяемых полей, чтобы потом копированием поля в дизайнере размножить. Это делается один раз при создании формы.
ЗАЧЕМ?
если поля называются странным образом - с ними сложно работать и поддерживать
встает вопрос о целесообразности такой формы

Добавлено: изложите требования к интерфейсу и результату в БД - что должно быть достигнуто?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
фигня всё это
на деле нужен список полей где НУЖНО менять на ноль и циклом проходиться по ним
фсё :(
 
М

МГВ

ЗАЧЕМ?


Добавлено: изложите требования к интерфейсу и результату в БД - что должно быть достигнуто?

База мною дорабатывается, изначально поля именовались не мною. Поля именуются по разделам Первый раздел:
v1 - вычисляемое (= v1_1+v1_2+...v1_10)
v1_1 - изменяемое
v1_2 - изменяемое
...
Полей в разделе может быть больше чем десять. Мне удобно скопировать в буфер v1 потом вставлять поля, тогда Дизайнер сам их именует v1_1 v1_2 и т.д.





Добавлено:
ЗАЧЕМ?


Добавлено: изложите требования к интерфейсу и результату в БД - что должно быть достигнуто?

База мною дорабатывается, изначально поля именовались не мною. Поля именуются по разделам Первый раздел:
v1 - вычисляемое (= v1_1+v1_2+...v1_10)
v1_1 - изменяемое
v1_2 - изменяемое
...
Полей в разделе может быть больше чем десять. Мне удобно скопировать в буфер v1 потом вставлять поля, тогда Дизайнер сам их именует v1_1 v1_2 и т.д.
 

erdi

Green Team
20.08.2008
264
17
BIT
0
лучшим решением будет в Input Translation
@if(@ThisValue="";0;@ThisValue)
а в Onchange только uidoc.Refresh

потому как uidoc.CurrentField в Onchange при переходе на другое поле - ты будешь получать название поля куда перешел, а не то, где вызвался Onchange

uidoc.CurrentField хорош на полях типа чекбокс, радиобокс, дата, где можешь принудительно вызвать Onchange после изменения поля
 
М

МГВ

лучшим решением будет в Input Translation
@if(@ThisValue="";0;@ThisValue)
а в Onchange только uidoc.Refresh
Спасибо! Как все просто. А я решил отказаться от формул все в LS, зря :(

а в Onchange только uidoc.Refresh
Там еще и вычисления.
 

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
8
МГВ
А я решил отказаться от формул все в LS, зря
Есть разные подходы.
Можно размазывать логику по событиям формы и полей, а можно централизовано управлять в одном месте.
Я таки за второй: вынести весь контроль в одно место (библиотека) и никаких формул и скриптов в форме.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
473
МГВ

Есть разные подходы.
Можно размазывать логику по событиям формы и полей, а можно централизовано управлять в одном месте.
Я таки за второй: вынести весь контроль в одно место (библиотека) и никаких формул и скриптов в форме.
золотые слова
я здесь и либу (сырую, правда) выкладывал, для выноса событий в либы, там только QueryOpen надо заполнить инициализацией
 
S

Shandrik

Интересно было бы посмотреть. Дадите ссылку?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
473
началось отсюда
последние, выложенные, правки

Добавлено: в виде БД не оформлял, есть ссылки на свой класс обработки ошибок - его здесь постил (не раз), но его можно и самому запилить
 
Мы в соцсетях:

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