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

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

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

Sandr

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

Гость
#3
Агент:
Код:
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/ Пользуйтесь тегами КОД, а тоглаза можна поломать
 

morpheus

скриптописец
07.08.2006
3 915
1
#4
CorrNameProxy содержит 0 записей
CorrNameProxyLN содержит 160 записей
WriteAccess содержит 100 записей.
Дело не в кол-ве записей, а в РАЗМЕРЕ который занимают эти записи. Вы пытаетесь засунуть в одно поле слишком много байт... больше 32 КБ, вот Вам и ошибка

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#5
Николай (Красноярск)
Предлагаю после каждой операции с полями сохранять документ. Чтобы точно выявить какая операция вызывала переполнение.