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

Тема в разделе "Lotus - Программирование", создана пользователем МГВ, 11 фев 2015.

  1. МГВ

    МГВ New Member

    Регистрация:
    6 фев 2015
    Сообщения:
    4
    Симпатии:
    0
    Добрый день !
    Помогите решить задачку. На форме много изменяемых полей Если пользователь удалит, автоматом значение присваивается нулю:
    Код (LotusScript):

    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 и т.д.
     
    #1 МГВ, 11 фев 2015
    Последнее редактирование модератором: 14 фев 2015
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    из стандартного только через Notesuidocument.currentField
     
  3. Shandrik

    Shandrik Well-Known Member

    Регистрация:
    30 дек 2010
    Сообщения:
    236
    Симпатии:
    24
    А Input Translation разве не хватит?
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    МГВ
    Суть задачи в чем?
    Сейчас методов 5-6 кинут "как получить имя поля", а подойдут ли для решения?)
     
  5. МГВ

    МГВ New Member

    Регистрация:
    6 фев 2015
    Сообщения:
    4
    Симпатии:
    0
    Я пробовал, но у меня не получилось :angry:
    Можно пример с кодом ?
     
  6. МГВ

    МГВ New Member

    Регистрация:
    6 фев 2015
    Сообщения:
    4
    Симпатии:
    0
    Чтобы написать единую формулу для всех полей. Сейчас, если у меня есть вычисляемое поле v10, которое равно сумме нескольких полей v10_1 v10_2 ... я на форме через копировать вставить создаю эти поля, потом мне приходится в каждом редактировать формулу. А если имя поля вычислялось бы, то и редактировать не надо, хочу универсальную функцию :angry:
     
  7. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    Код (LotusScript):
        Dim fieldname As String
    Dim fieldvalue As String
    fieldname=uidoc.CurrentField
    fieldvalue=doc.GetItemValue(fieldvalue)(0)
     
  8. Leoric

    Leoric Well-Known Member

    Регистрация:
    15 окт 2003
    Сообщения:
    57
    Симпатии:
    16
    Может лучше написать на @ ?
    @ThisName - название текущего поля (@ThisValue - значение)
     
  9. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    зачем суммировать поля, кот. создаются в дизайнере раз-от-раза?
    т.е. процесс постоянного редизайна приложения - это трындец какой-то
    какова суть всех этих действий, может логичнее создать мультивалюйное поле или отдельные доки суммировать?!
     
  10. МГВ

    МГВ New Member

    Регистрация:
    6 фев 2015
    Сообщения:
    4
    Симпатии:
    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



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

    Leoric Well-Known Member

    Регистрация:
    15 окт 2003
    Сообщения:
    57
    Симпатии:
    16
    Вы обращаетесь к бэкграундному документу, получайте значение как UIDoc.FieldGetText(fieldname)

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    ЗАЧЕМ?
    если поля называются странным образом - с ними сложно работать и поддерживать
    встает вопрос о целесообразности такой формы

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

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    фигня всё это
    на деле нужен список полей где НУЖНО менять на ноль и циклом проходиться по ним
    фсё :(
     
  14. МГВ

    МГВ New Member

    Регистрация:
    6 фев 2015
    Сообщения:
    4
    Симпатии:
    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 и т.д.
     
  15. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    лучшим решением будет в Input Translation
    @if(@ThisValue="";0;@ThisValue)
    а в Onchange только uidoc.Refresh

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

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

    МГВ New Member

    Регистрация:
    6 фев 2015
    Сообщения:
    4
    Симпатии:
    0
    Спасибо! Как все просто. А я решил отказаться от формул все в LS, зря :(

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

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    512
    Симпатии:
    13
    МГВ
    Есть разные подходы.
    Можно размазывать логику по событиям формы и полей, а можно централизовано управлять в одном месте.
    Я таки за второй: вынести весь контроль в одно место (библиотека) и никаких формул и скриптов в форме.
     
  18. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    золотые слова
    я здесь и либу (сырую, правда) выкладывал, для выноса событий в либы, там только QueryOpen надо заполнить инициализацией
     
  19. Shandrik

    Shandrik Well-Known Member

    Регистрация:
    30 дек 2010
    Сообщения:
    236
    Симпатии:
    24
    Интересно было бы посмотреть. Дадите ссылку?
     
  20. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    началось отсюда
    последние, выложенные, правки

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

Поделиться этой страницей