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

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

МГВ

Добрый день !
Помогите решить задачку. На форме много изменяемых полей Если пользователь удалит, автоматом значение присваивается нулю:
Код:
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 и т.д.
 
Последнее редактирование:
из стандартного только через Notesuidocument.currentField
 
МГВ
Суть задачи в чем?
Сейчас методов 5-6 кинут "как получить имя поля", а подойдут ли для решения?)
 
МГВ
Суть задачи в чем?
Сейчас методов 5-6 кинут "как получить имя поля", а подойдут ли для решения?)
Чтобы написать единую формулу для всех полей. Сейчас, если у меня есть вычисляемое поле v10, которое равно сумме нескольких полей v10_1 v10_2 ... я на форме через копировать вставить создаю эти поля, потом мне приходится в каждом редактировать формулу. А если имя поля вычислялось бы, то и редактировать не надо, хочу универсальную функцию :angry:
 
Код:
	Dim fieldname As String
Dim fieldvalue As String
fieldname=uidoc.CurrentField
fieldvalue=doc.GetItemValue(fieldvalue)(0)
 
Может лучше написать на @ ?
@ThisName - название текущего поля (@ThisValue - значение)
 
зачем суммировать поля, кот. создаются в дизайнере раз-от-раза?
т.е. процесс постоянного редизайна приложения - это трындец какой-то
какова суть всех этих действий, может логичнее создать мультивалюйное поле или отдельные доки суммировать?!
 
Код:
	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



Добавлено:
зачем суммировать поля, кот. создаются в дизайнере раз-от-раза?
т.е. процесс постоянного редизайна приложения - это трындец какой-то
какова суть всех этих действий, может логичнее создать мультивалюйное поле или отдельные доки суммировать?!
Это форма для заполнения. Есть вычисляемые поля, есть изменяемые. Хотелось бы создать единый код для группы изменяемых полей, чтобы потом копированием поля в дизайнере размножить. Это делается один раз при создании формы.
 
fieldvalue=doc.GetItemValue(fieldname)(0)
Вы обращаетесь к бэкграундному документу, получайте значение как UIDoc.FieldGetText(fieldname)

А вообще собаки намного лучше для этого приспособлены...
Вписать в Computed поле что-то типа @GetField(@ThisName+"_1" ) + @GetField(@ThisName+"_2" )будет работать лучше
 
Хотелось бы создать единый код для группы изменяемых полей, чтобы потом копированием поля в дизайнере размножить. Это делается один раз при создании формы.
ЗАЧЕМ?
если поля называются странным образом - с ними сложно работать и поддерживать
встает вопрос о целесообразности такой формы

Добавлено: изложите требования к интерфейсу и результату в БД - что должно быть достигнуто?
 
фигня всё это
на деле нужен список полей где НУЖНО менять на ноль и циклом проходиться по ним
фсё :(
 
ЗАЧЕМ?


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

База мною дорабатывается, изначально поля именовались не мною. Поля именуются по разделам Первый раздел:
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 и т.д.
 
лучшим решением будет в 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
Там еще и вычисления.
 
МГВ
А я решил отказаться от формул все в LS, зря
Есть разные подходы.
Можно размазывать логику по событиям формы и полей, а можно централизовано управлять в одном месте.
Я таки за второй: вынести весь контроль в одно место (библиотека) и никаких формул и скриптов в форме.
 
МГВ

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

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

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