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

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

  1. seoman2

    seoman2 Lotus team
    Lotus team

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

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

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

    hosm * so what *

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

    seoman2 Lotus team
    Lotus team

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

    Omh Lotus team
    Lotus team

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

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

    Nalula Гость

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

    seoman2 Lotus team
    Lotus team

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

    amigolinx Гость

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

    Nalula Гость

    пример кода

    Код (LotusScript):
    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 *

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

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

    Xalet Well-Known Member

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

    seoman2 Lotus team
    Lotus team

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

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

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

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

    maliy Well-Known Member

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

    nvyush Lotus team
    Lotus team

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

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

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

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

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    вообщем по совету 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 Lotus team
    Lotus team

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

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

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

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