• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

Guest

В дезайнере добавил парачку полей на форму, вот хочу автоматом пройтись заполнить, а когда открываю через UnprocessedDocuments, то говорить мол таких полей нет :)
Помогите, пересохранение не помогло
 
А фрагмент агента, заполняющий эти поля можно посмотреть?
 
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 являются новыми полями, которых в открывающемся документе нема :)
 
Вообще странно, если ты говоришь, что их там нету, что ты в них ищешь?

А для создания, вместо GetFirstItem, используй ReplaceItemValue
 
вот что про иницализацию новых полей пишет хелп:
Код:
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


надеюсь, нигде не описался :)
 
Здесь применяются к неновому документу, без проверки на существование поля. Может лишние поля наплодить.

Результат работы не равен AppendToTextList.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab