1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Как изменить тип поля в документе?

Тема в разделе "Lotus - Программирование", создана пользователем seoman2, 21 апр 2010.

  1. seoman2

    seoman2 Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    17 фев 2010
    Сообщения:
    452
    Симпатии:
    1
    как изменить тип поля в документе?
    В базе в документах содержится текстовое поле ДАТА_РЕГИСТРАЦИИ , хочу поменять его на тип Date/Time.
    Есть свойство item.Type, но оно отдает значение.
     
  2. ToxaRat

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

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    удали и создай новое
     
  3. hosm

    hosm * so what *

    Репутация:
    0
    Регистрация:
    18 май 2009
    Сообщения:
    2.442
    Симпатии:
    8
    пройтись агентом по документам и перезаполнить поле нужной датой. Если документ открывается в уи и если поле такое есть на форме - убедиться, что у него тип дата/время, а не текст...
     
  4. seoman2

    seoman2 Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    17 фев 2010
    Сообщения:
    452
    Симпатии:
    1
    to OKEN, у меня поле ДАТА_РЕГИСТРАЦИИ текстовое, как мне агентом преобразовать его в тип Date/Time, если можно пример кода?
     
  5. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    1. Cdat если всё в порядке с форматом даты (где месяц/где день)
    2. Pаспилить на куски + DateNumber
    Я бы выбрал второй вариант.

    З.Ы. Хоть я и не OKEN
     
  6. Nalula

    Nalula Гость

    Репутация:
    0
    to seoman2, перед записью в поле, преобразовать текст в дату (CDAT)
     
  7. seoman2

    seoman2 Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    17 фев 2010
    Сообщения:
    452
    Симпатии:
    1
    еще раз , у меня в базе есть к примеру 1000 документов , у них есть поле ДАТА_РЕГИСТРАЦИИ (тип Text) в нём содержится 21.04.2010(вот такой формат даты), теперь вот задача - как агентом изменить поле ДАТА_РЕГИСТРАЦИИ с типа Text на тип Date/Time.
     
  8. amigolinx

    amigolinx Гость

    Репутация:
    0
    дык тип поля сам и изменится, если конвертнуть текст при помощи CDat и перезаписать в это же поле как советуют товарищи, разве не?
     
  9. Nalula

    Nalula Гость

    Репутация:
    0
    пример кода

    Код:
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim dc As NotesDocumentCollection
    Dim doc As NotesDocument
    
    Set db = s.CurrentDatabase
    Set dc = db.UnprocessedDocuments
    
    If dc.Count <> 0 Then
    Set doc = dc.GetFirstDocument
    While Not doc Is Nothing			
    Call doc.ReplaceItemValue ("ДАТА_РЕГИСТРАЦИИ " , Cdat (doc.GetItemValue ("ДАТА_РЕГИСТРАЦИИ ")(0)))
    Call doc.Save (True , False)
    Set doc = dc.GetNextDocument (doc)
    Wend				
    End If
     
  10. hosm

    hosm * so what *

    Репутация:
    0
    Регистрация:
    18 май 2009
    Сообщения:
    2.442
    Симпатии:
    8
    amigolinx ты прав. но если такой документ потом открыть по форме, где есть редактируемре или вычисляемое поле с таким именем и типом текст и сохранить, оно сохранится, как текст.

    seoman2 и в чем проблемы?
     
  11. Xalet

    Xalet Well-Known Member

    Репутация:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    а разве так просто не сработает, если удалить и создать новое с таким же названием, но тип дата?
     
  12. seoman2

    seoman2 Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    17 фев 2010
    Сообщения:
    452
    Симпатии:
    1
    есть метод appendItemValue(itemName$,value)
    itemName$ - имя поля
    value - значение,
    и вот в хелпе указао - "Тип данных создаваемого поля зависит от типа параметра value"- что собственно не совсем понятно будет ли 21.04.2010 восприниматься как дата или может как текст ..
    Вообщем щас попробуй как посоветовал тов. Nalula
     
  13. ToxaRat

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

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    seoman2
    мой вам совет - держаться подальше от этого метода ;)
    есть большой шанс задвоить итемс

    Call doc.ReplaceItemValue ("ДАТА_РЕГИСТРАЦИИ " , Cdat (doc.GetItemValue ("ДАТА_РЕГИСТРАЦИИ ")(0)))
    сначала проверку на то, является ли значение датовым иначе Cdat вызовет ошибку
    и перед реплейсем именно удалить итем, иначе полнотекстовый индекс в разных версиях домино может плохо сообразить из-за того что индекс итема не изменился
     
  14. maliy

    maliy Well-Known Member

    Репутация:
    0
    Регистрация:
    20 мар 2007
    Сообщения:
    159
    Симпатии:
    1
    to ToxaRat что вы имели ввиду "перед реплейсем именно удалить итем"?
     
  15. nvyush

    nvyush Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Видимо, имелось ввиду следующее:
    Код:
    Call doc.RemoveItem("ItemName")
    Call doc.ReplaceItemValue("ItemName", ItemValue)
     
  16. ToxaRat

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

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    nvy
    истину глаголишь :)

    Добавлено: И обязательно сделать это со всеми доками что есть в базе.
    Иначе весёлый индексер схватывает первый док и по нему определяет какой тип поля, игнорируя то, что все другие доки в этой базе имеют совершенно другой тип поля - а это сказывается на результатай поиска
     
  17. seoman2

    seoman2 Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    17 фев 2010
    Сообщения:
    452
    Симпатии:
    1
    вообщем по совету ToxaRat сделал вот так:
    Dim dd As Variant
    dd = CurDoc.GetItemValue("ДАТА_РЕГИСТРАЦИИ")
    Call CurDoc.RemoveItem("ДАТА_РЕГИСТРАЦИИ" )
    Call CurDoc.ReplaceItemValue ("ДАТА_РЕГИСТРАЦИИ" , Cdat (dd(0)))
    Все классно , вот только дату преддставляет вот в такой ввиде - 29.04.2010 00:00:00
    Как избавиться от 00:00:00 ?
     
  18. nvyush

    nvyush Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    seoman2
    см. NotesDateTime class
     
  19. ToxaRat

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

    Репутация:
    0
    Регистрация:
    6 ноя 2007
    Сообщения:
    3.171
    Симпатии:
    21
    seoman2
    если в виде/поле то подправь там формат отображения и не заморачивайся :)
     
Загрузка...

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