Lotus Error - как обойти?

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

  1. Гость

    error: Notes error: Field is too large (32K) or View's column & selection formulas are too large - выдается при обработке документа агентом, но все бы хорошо если бы оно было так. На самом деле в поле всего несколько записей. И если документ вырезать из базы и обратно его туда вставить, то ошибка изчезает....... вот. Вопрос: Это глюк лотуса или какого то процесса, и как это лечить?
     
  2. Sandr

    Sandr Гость

    Николай (Красноярск)
    Код агента в студию... Потому как ошибка и Ваши слова не сходятся...
     
  3. Гость

    Агент:
    Код (Text):
    SFormula = {Form = "OfficeMemo" & Status = "Send" & IO_IntCorrPers ="}+Cstr(ioDoc.GetItemValue("PName")(0))+{|}+Cstr(ioDoc.GetItemValue("PUNID")(0))+{"}
    Set docColl = db.Search (SFormula, Nothing, 0)
    Set doc= docColl.GetFirstDocument
    While Not doc Is Nothing
    i=0
    Forall IO_IntCorrPer In doc.GetItemValue("IO_IntCorrPers")
    If Debug Then Print "Данные персоны в списке: " + Cstr(IO_IntCorrPer)              
    If IO_IntCorrPer=Cstr(ioDoc.GetItemValue("PName")(0))+"|"+Cstr(ioDoc.GetItemValue("PUNID")(0)) Then
    iElementNum=i  
    End If
    i=i+1
    End Forall
    If iElementNum=0 Then
    Call    doc.ReplaceItemValue("CorrNameProxy",ioDoc.GetItemValue("IOName")(0))
    Else
    Redim aAddressee (Ubound(doc.GetItemValue("CorrNameProxy")))
    For i=0 To Ubound(doc.GetItemValue("CorrNameProxy"))
    If i= iElementNum Then
    aAddressee (i)=ioDoc.GetItemValue("IOName")(0)
    Else
    aAddressee (i)=doc.GetItemValue("CorrNameProxy")(i)            
    End If
    Next
    Call    doc.ReplaceItemValue("CorrNameProxy",aAddressee)   
    End If
    Call doc.ReplaceItemValue("CorrNameProxy", Cstr(ioDoc.GetItemValue("IOName")(0)))          
    Call doc.ReplaceItemValue("CorrNameProxyLN", Cstr(ioDoc.GetItemValue("IONotesName")(0)))       
    Call doc.GetFirstItem ("CorrNameProxyLN").AppendToTextList (ioDoc.GetItemValue("IONotesName")(0))bChangeOrNot=True
    i=0
    quantity=Ubound(doc.GetItemValue("WriteAccess"))
    Redim aNotesPersonWA (quantity)
    Forall NotesPersonWA In doc.GetItemValue("WriteAccess")
    aNotesPersonWA(quantity- quantity +i)=NotesPersonWA
    If Cstr(iodoc.IONotesName(0))=NotesPersonWA Then
    bChangeOrNot=False
    End If
    i=i+1
    End Forall
    If bChangeOrNot Then
    Redim Preserve aNotesPersonWA (quantity+ 1)
    aNotesPersonWA (quantity+ 1) = Cstr(iodoc.IONotesName(0))
    Call doc.ReplaceItemValue("WriteAccess", aNotesPersonWA)   
    End If
    Call doc.GetFirstItem ("WriteAccess").AppendToTextList (ioDoc.GetItemValue("IONotesName")(0))      
    Call doc.Save(True, False)
    Ошибка вылетает на последней строке, при сохранении документа. Здесь изменяются всего 3 поля : CorrNameProxy, CorrNameProxyLN и WriteAccess.
    При сохранении:
    CorrNameProxy содержит 0 записей
    CorrNameProxyLN содержит 160 записей
    WriteAccess содержит 100 записей.

    После того как вырезал и вставил документ могу догнать количество записей до 600 с копейками.....

    /Moderated by Morpheus/ Пользуйтесь тегами КОД, а тоглаза можна поломать
     
  4. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Дело не в кол-ве записей, а в РАЗМЕРЕ который занимают эти записи. Вы пытаетесь засунуть в одно поле слишком много байт... больше 32 КБ, вот Вам и ошибка

    Варианты - проверять размер используя LenB
     
  5. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Николай (Красноярск)
    Предлагаю после каждой операции с полями сохранять документ. Чтобы точно выявить какая операция вызывала переполнение.
     
Загрузка...

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