Получение списка всех полей формы

Тема в разделе "Lotus - Программирование", создана пользователем Eugen, 23 май 2012.

  1. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    День добрый.
    Возникла необходимость держать под рукой список всех полей формы. Можно ли его как то получить, а еще лучше распечатать?
     
  2. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    Создалось 2 темы, отвечу сюда.

    doc.Items возвращает массив полей. Через цикл получаешь название каждого поля
     
  3. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    NotesForm.Fields
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Код (LotusScript):
    Set nForm = notesDatabase.GetForm( name$ )
    msgbox(join(nForm.Fields, {
    }))
     
  5. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Код (LotusScript):
    Msgbox(Join(nForm.Fields, Chr(13)))
    ;)
     
  6. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Не забудьте учесть поля в подформах ;)
     
  7. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    День добрый. Дабы не плодить тем, спрошу тут.
    Возникла необходимость проверить все поля формы на непустоту, и если поле пусто прописать туда значение EMPTY. Что лучше использовать NotesForm.Fields или NotesDocument.Items? Как это потом передать в массив, ибо при все моих попытка просто приравнять компилятор ругается.
     
  8. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    NotesDocument.Items - бегает по всем полям в документе.
    NotesForm.Fields - по всем полям формы.

    документ и форма это совершенно разные штуки, так надо выбрать от задачи...
     
  9. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Да, видимо неправильно выразился.
    Надо проверить поля текущего документа на непустоту. Т.е. мне нужен NotesDocument.Items? А как передать его в массив?
     
  10. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Контекст какой? при сохранении? или в агенте для поиска отбора?
     
  11. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Этот документ после сохранения будет копироваться агентом в другую базу.
     
  12. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    Код (LotusScript):
    Dim doc As NotesDocument

    Forall i In doc.Items
    Messagebox( i.Name )
    End Forall
    Код (LotusScript):
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Set db = session.CurrentDatabase
    Forall form In db.Forms
    Forall field In form.Fields
    fieldCount = fieldCount + 1
    msgString = msgString & Chr(10) & "  " & field
    End Forall
    Messagebox form.Name & " has " & fieldCount & " field(s):" & Chr(10) & msgString
    End If
    Exit Sub
    End If
    End Forall
     
  13. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Eugen
    Я сомневаюсь, что критерии копирования заключаются в проверке полей на EMPTY...
    Перебирать можно через Forall, как указал erdi.
    Лично я бы вывел необходимые критерии вбил бы их в список и делал Forall по этому списку.
    Полей в документе может быть реально много, а критериев обычно меньше.
     
  14. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Мне это нужно для выгрузки в xml. Скопированный документ впоследствии будет выгружен в xml и трансформирован с помощью XSLT для передачи в веб-сервис. А чтобы веб-сервис схавал мою xml, она должна соответствовать схеме, согласно которой вместо пустых значений должно стоять "EMPTY". Т.е. есть база №1 где хранится оригинал документа, и есть база №2, в которую он должен быть скопирован уже проставленным EMPTY.


    Добавлено: PS: как то запутанно объяснил, но не представляю как объяснить иначе)
     
  15. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Пробую так, но на строке itemval=doc.Getitemvalue(doc.Items(i)) выдает Type mismatch
    Код (LotusScript):
        Dim w As New NotesUIWorkspace
    Dim doc As NotesDocument
    Dim itemval As string
    Dim i As Integer

    Set doc=w.Currentdocument.Document

    ForAll item In doc.Items
    i=i+1
    itemval=doc.Getitemvalue(doc.Items(i))
    If itemval="" Then
    itemval="EMPTY"
    End If
    End ForAll
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Код (LotusScript):
     
    Dim w As New NotesUIWorkspace
    Dim doc As NotesDocument
    Dim itemval As Variant
    Dim i As Integer

    Set doc=w.Currentdocument.Document

    ForAll item In doc.Items
    i=i+1
    itemval=doc.Getitemvalue(Item.Name)
    itemval = Fulltrim(itemval)
    If itemval(0)="" Then
    itemval="EMPTY"
    End If
    End ForAll
    З.Ы. не проверял
     
  17. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Спасибо, заработало. Только чуть дописал:
    Код (LotusScript):
    If itemval(0)="" Then
    itemval="EMPTY"
    Set item = doc.ReplaceItemValue(Item.Name, itemval)
    End If
     
  18. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    капец весело тут у вас...
    так то у поля тип есть...

    копайте NotesItem class.



    Добавлено:
    А если поле будет многозначным у которого первое значение пустое а 2..5.. не пустые?
    Ваш кож выдаст ошибку если наткнется на поле с типом даты/суммы/...
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    kizarek
    да я не спорю, RT с картинкой так тоже не проверить (вроде как)
    для многозначных Fulltrim должен помочь
    Eugen
    а вот так
    Код (LotusScript):
    Set item = doc.ReplaceItemValue(Item.Name, itemval)
    я бы не делал, лучше старое значение не заменять.
    В общем, надо продумать всю задачу, надо ли все поля грузить, какие типы.
    Сходу решение есть, но оно некорректно и не оптимально.

    Не просто так спрашивал контекст задачи, тот же xml можно и руками создавать, а не генерить стандартными методами.
    И схема тогда измениться может и файлы xml будут меньшим размером.
     
  20. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Понятно, что это не конечное решение. Буду "допиливать"... Всем спасибо.
     
Загрузка...

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