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

  • Автор темы Guest
  • Дата начала
G

Guest

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

Dikobraz Grey

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

Guest

#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 являются новыми полями, которых в открывающемся документе нема :)
 

abbatik

Lotus team
20.10.2008
277
0
#4
Вообще странно, если ты говоришь, что их там нету, что ты в них ищешь?

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

Dikobraz Grey

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


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

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


Код:
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

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#9
Здесь применяются к неновому документу, без проверки на существование поля. Может лишние поля наплодить.

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