Как добавить поле в уже созданный документ?

Тема в разделе "Lotus - Программирование", создана пользователем -, 27 ноя 2008.

  1. Гость

    В дезайнере добавил парачку полей на форму, вот хочу автоматом пройтись заполнить, а когда открываю через UnprocessedDocuments, то говорить мол таких полей нет :)
    Помогите, пересохранение не помогло
     
  2. Dikobraz Grey

    Dikobraz Grey Гость

    А фрагмент агента, заполняющий эти поля можно посмотреть?
     
  3. Гость

    Set Db=Session.CurrentDatabase

    If Db.UnprocessedDocuments.Count>0 Then

    Set db = session.CurrentDatabase
    Set collection = db.UnprocessedDocuments
    Set Doc = collection.GetFirstDocument()

    While Not(Doc Is Nothing)
    Set itemContractStatus = Doc.GetFirstItem( "ContractStatus" )
    Set itemInvoiseType = Doc.GetFirstItem( "InvoiseType" )
    Set itemContractParties = Doc.GetFirstItem( "ContractParties" )

    If itemContractStatus.Contains("1 Черновик") Then
    Call itemContractStatus.AppendToTextList( "5 Архив" )
    Call itemInvoiseType.AppendToTextList( "Расходный" )

    Call Doc.CopyItem( itemContractParties, "ContractCompany" )
    Call Doc.Save( False, True )
    End If

    Set doc = collection.GetNextDocument(doc)
    Wend

    End If

    itemInvoiseType и ContractCompany являются новыми полями, которых в открывающемся документе нема :)
     
  4. abbatik

    abbatik Lotus team
    Lotus team

    Регистрация:
    20 окт 2008
    Сообщения:
    277
    Симпатии:
    0
    Вообще странно, если ты говоришь, что их там нету, что ты в них ищешь?

    А для создания, вместо GetFirstItem, используй ReplaceItemValue
     
  5. Гость

    Ну а как обновить так документ, что бы они появились?
     
  6. Dikobraz Grey

    Dikobraz Grey Гость

    вот что про иницализацию новых полей пишет хелп:
    Код (Text):
    Dim variableName As New NotesItem( notesDocument, name$, value
    [, specialType% ] )
    Таким образом необходимо не искать поля в документе, где их нет (не путайте документ и форму)), а создать эти поля:


    Код (Text):
    Set itemContractStatus = New NotesItem(Doc,"ContractStatus", "")

    а вообще то проще написать следующим образом:


    Код (Text):
    Set Db=Session.CurrentDatabase

    If Db.UnprocessedDocuments.Count>0 Then

    Set db = session.CurrentDatabase
    Set collection = db.UnprocessedDocuments
    Set Doc = collection.GetFirstDocument()

    While Not(Doc Is Nothing)
    Set itemContractStatus = Doc.GetFirstItem( "ContractStatus" )

    If itemContractStatus.Contains("1 Черновик") Then
    Call Doc.AppendItemValue("ContractStatus", "5 Архив" )
    Call Doc.AppendItemValue("InvoiseType", "Расходный" )

    Call Doc.replaceItemValue("ContractCompany", Doc.GetItemValue("ContractParties"))
    Call Doc.Save( False, True )
    End If

    Set doc = collection.GetNextDocument(doc)
    Wend

    End If

    надеюсь, нигде не описался :)
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    AppendItemValue плохая штука. :)
     
  8. Dikobraz Grey

    Dikobraz Grey Гость

    А поподробней можно? Интересно все-таки:) У меня пока не косячило...
     
  9. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Здесь применяются к неновому документу, без проверки на существование поля. Может лишние поля наплодить.

    Результат работы не равен AppendToTextList.
     
  10. Гость

    Thanks :)
     
  11. Dikobraz Grey

    Dikobraz Grey Гость

    Лень-матушка... были такие подозрения-не уточнил:)
     
Загрузка...

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