• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

на End Sub агента руагется

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

AvasKvas

Доброго все дня!

Есть агент по расписанию! Он собирает статистику по документам!
Результат работы - 38 документов со статистикой! Каждый докумеент отправляется отдельному пользователю!

Так вот на конечной строке End Sub агента вываливается ошибка NoRESUME.
Этой ошибки нет, если не вызывать окманду отправки документа почтой doc.send(true, tmp)

Как от этого избавиться? Помогите!


И еще, кто работал в лотус скрипте с многомерными массивами?
Есьт масиив Dim x() as variant

Делаю его двумерным Redim Preserve y(i, 4). Допустим i = 10.
мне надо чтоб i менялось, но когда я вызываю второй раз Redim Preserve y(i, 4) с другим значением i, выдает ошибку! Можно ли как-нибудь это обойти?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
наверняка стоит обработчик ошибок и NoRESUME его фраза, которую нужно заканчивать хотя бы Exit Sub
 
A

AvasKvas

Блин, точно! А я грешил на Call doc.send()!
Спасибо!

У меня тут возник волшебный замкнуты круг!
Поолучил коллекцию!хочу из нее невалидные документы убрать!
Есть функция на проверку валидности!если докумеенто не валидный то вызываю Coll.deleteDocument, но на плохом док-те выдает ошибку, что документ поврежден!
отрывок кода следующий!
Код:
If CSDocCollections.Count > 0 Then
For i = 1 To CSDocCollections.Count
Set CSDoc =CSDocCollections.GetNthDocument(i) ' получаем документ
If IsDocValid(CSDoc)= False Then ' проверяем на валидность	
Call CSDocCollections.DeleteDocument(CSDoc)
End If
Next
End If

Каким образом можно удалить этот документ? При чем у него вообще никаких свойств нет при этом!
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
может вместо удаления стоит заниматься теми которые нормальные?
зачем лишний раз дергать колекцию?
учитель делать обработку в один проход
 
A

AvasKvas

Я по размерности коллекции делаю размерность двумерного массива,в который потом запихиваю значения полей документов из этой коллекции! Если плохие документы не удалить, то появляются пустые элементы массива, что не очень хорошо!

Просто сижу и ищу методы решения одной задачи!
 
K

K-Fire

Обходить коллекцию с помощью цикла for и getNthDocument это самый известная worst practice.

Замените обход коллекции на такой код:

Set doc = coll.getFirstDocument
while not doc is nothing
<тут код заполнения массива>
Set doc = coll.getNextDocument( doc)
end while

Туда же впендюрьте счетчик i, и все будет работать отлично.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
массивы это примитивно
научитесь писать свои классы
 
A

AvasKvas

Идея не плохая, но будет ли работать с двумерным массивом? Мне до заполнения массива уже надо знать i полностью!
Нужно получить массив где в каждой строке по 4 элемента! А Redim Preserve x(i,4) будет выдавать ошибку!
 
K

K-Fire

Что-то неясно почему не работает Redim preserve. Полный текст приведите, может где-то ошибка левая закралась.
 
A

AvasKvas

Это не ошибка, это особонность изменения динамисчких многомерных массивов в лотусе! можно изменить только размерность, но не верхний индекс! А мне нужен конкретно верхний индекс!

Код такой выдаст ошибку
Код:
i = 1
set doc = coll.getFirsDocument
While not doc is nothing
ReDim preserve x(i,4)
i = i + 1
set doc = coll.getNextDocument(doc)
wend

А если было бы ReDim preserve x(4, i) - то все было бы нормально! Но так как то не удобно!Плохо как то воспринимается такой массив!

Хотя пока писал, переосмыслил все!может и нормально!щас попробую!
Спасибо за толчек моей мысли! :) :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
массив может сам содержать массивы
неясен смысл применения именно массива, есть хэши (List), ведь массив создается (как пр-ло) для последующего поиска...
можно просто объявить Variant и фигачить в него...
для строк это так:
Код:
	Dim v As Variant
'содание динамического массива строк
v=Split("","")
Do While Not entry Is Nothing
v=Arrayappend(v,entry.ColumnValues(1))
Set entry=collection.GetNextEntry(entry)
Loop
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
народ отлипайте от массивом - переходите на классы
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!