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

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

  1. AvasKvas

    AvasKvas Well-Known Member

    Регистрация:
    3 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    Доброго все дня!

    Есть агент по расписанию! Он собирает статистику по документам!
    Результат работы - 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, выдает ошибку! Можно ли как-нибудь это обойти?
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    наверняка стоит обработчик ошибок и NoRESUME его фраза, которую нужно заканчивать хотя бы Exit Sub
     
  3. AvasKvas

    AvasKvas Well-Known Member

    Регистрация:
    3 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    Блин, точно! А я грешил на Call doc.send()!
    Спасибо!

    У меня тут возник волшебный замкнуты круг!
    Поолучил коллекцию!хочу из нее невалидные документы убрать!
    Есть функция на проверку валидности!если докумеенто не валидный то вызываю Coll.deleteDocument, но на плохом док-те выдает ошибку, что документ поврежден!
    отрывок кода следующий!
    Код (Text):
    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
    Каким образом можно удалить этот документ? При чем у него вообще никаких свойств нет при этом!
     
  4. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    может вместо удаления стоит заниматься теми которые нормальные?
    зачем лишний раз дергать колекцию?
    учитель делать обработку в один проход
     
  5. AvasKvas

    AvasKvas Well-Known Member

    Регистрация:
    3 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    Я по размерности коллекции делаю размерность двумерного массива,в который потом запихиваю значения полей документов из этой коллекции! Если плохие документы не удалить, то появляются пустые элементы массива, что не очень хорошо!

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

    K-Fire Гость

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

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

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

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

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    массивы это примитивно
    научитесь писать свои классы
     
  8. AvasKvas

    AvasKvas Well-Known Member

    Регистрация:
    3 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    Идея не плохая, но будет ли работать с двумерным массивом? Мне до заполнения массива уже надо знать i полностью!
    Нужно получить массив где в каждой строке по 4 элемента! А Redim Preserve x(i,4) будет выдавать ошибку!
     
  9. K-Fire

    K-Fire Гость

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Насчет Preserve в хелпе написано:
     
  11. AvasKvas

    AvasKvas Well-Known Member

    Регистрация:
    3 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    Это не ошибка, это особонность изменения динамисчких многомерных массивов в лотусе! можно изменить только размерность, но не верхний индекс! А мне нужен конкретно верхний индекс!

    Код такой выдаст ошибку
    Код (Text):
    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) - то все было бы нормально! Но так как то не удобно!Плохо как то воспринимается такой массив!

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    массив может сам содержать массивы
    неясен смысл применения именно массива, есть хэши (List), ведь массив создается (как пр-ло) для последующего поиска...
    можно просто объявить Variant и фигачить в него...
    для строк это так:
    Код (Text):
        Dim v As Variant
    'содание динамического массива строк
    v=Split("","")
    Do While Not entry Is Nothing
    v=Arrayappend(v,entry.ColumnValues(1))
    Set entry=collection.GetNextEntry(entry)
    Loop
     
  13. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    народ отлипайте от массивом - переходите на классы
     
Загрузка...

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