Проблема с перебором документов в представлении

Тема в разделе "Lotus - Программирование", создана пользователем Kronos, 13 окт 2007.

Статус темы:
Закрыта.
  1. Kronos

    Kronos Гость

    Есть некоторое представление, в которое попадают 730 000 документов. С помощью java агента я пытаюсь их обработать, но проблема состоит в том, что агент перебирает далеко не все документы. Причем число обработанных документов всегда разное. Это может быть 7 тысяч, 20 тысяч, но почему то все документы он не перебирает. Вот код агента:

    import lotus.domino.*;
    public class JavaAgent extends AgentBase {
    public void NotesMain() {
    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    Database db = agentContext.getCurrentDatabase();
    View view = db.getView("MY_VIEW");
    System.out.println(view.getEntryCount());
    Document doc = view.getFirstDocument();
    int cnt=0;
    while (doc != null) {
    cnt++;
    doc = view.getNextDocument(doc);
    }
    System.out.println(cnt);
    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }

    Причем метод getEntryCount() выдает правильное число документов, но счетчик cnt фиксирует то, что были перебраны далеко не все документы. В представлении нет ни какой сортировки. Документы ни как не меняются. Подскажите в чем тут проблема?!
     
  2. Azrael

    Azrael Гость

    А получить доки в коллекцию и перебирать по ней не пробовал? Ещё, возможно, поможет
    view.setAutoUpdate(false), но не факт.
     
  3. D!m@n

    D!m@n Гость

    Уважаемый Kronos, насколько у Вас веские основания для использования именно Java-агента?..
    Просто они же работают намного медленнее, чем агенты на LotusScript (не говоря уж о собаках и C/CPP API)...
     
  4. Fossil Code

    Fossil Code Гость

    Вот, честно говоря, никогда не любил конструкцию вида while (doc != null), но уже не помню, почему. Может быть, из-за аналогичных проблем. Получив значение количества документов предпочитаю использовать цикл от 1 до cnt и функцию GetNthDocument.
     
  5. Kronos

    Kronos Гость

    <!--QuoteBegin-Fossil Code+13:10:2007, 21:56 -->
    <span class="vbquote">(Fossil Code @ 13:10:2007, 21:56 )</span><!--QuoteEBegin-->Вот, честно говоря, никогда не любил конструкцию вида while (doc != null), но уже не помню, почему. Может быть, из-за аналогичных проблем. Получив значение количества документов предпочитаю использовать цикл от 1 до cnt и функцию GetNthDocument.
    [snapback]81669" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Пробовал. Вылетает с ошибкой nullPointerException. Кстати вполне логично. Условие выхода из цикла - эту пустой указатель (doc == null), соответственно извлечь от туда что то уже ошибка.

    <!--QuoteBegin-D!m@n+13:10:2007, 21:22 -->
    <span class="vbquote">(D!m@n @ 13:10:2007, 21:22 )</span><!--QuoteEBegin-->Уважаемый Kronos, насколько у Вас веские основания для использования именно Java-агента?..
    Просто они же работают намного медленнее, чем агенты на LotusScript (не говоря уж о собаках и C/CPP API)...
    [snapback]81666" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Не спорю, но lotusScript, извините, кривой. Начиная от синтаксиса, и заканчивая конструкциями. Простейшая конструкция обработки исключений в lotusScript это хороший геморрой, ну и т.д., но опрос то не в этом кому что нравится. Вопрос в том, почему не работает.
     
  6. Sandr

    Sandr Гость

    попробуйте перед получением первого документа сделать view.refresh()
    А ваще Azrael прав - получите коллекцию и работайте с ней...
     
  7. Kronos

    Kronos Гость

    <!--QuoteBegin-Azrael+13:10:2007, 14:30 -->
    <span class="vbquote">(Azrael @ 13:10:2007, 14:30 )</span><!--QuoteEBegin-->А получить доки в коллекцию и перебирать по ней не пробовал? Ещё, возможно, поможет
    view.setAutoUpdate(false), но не факт.
    [snapback]81627" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Идея была из в коллекцию запихать, но как это сделать я не знаю. Я не такой большой знаток java. Если вас не затруднит, напишите пожалуйста.

    view.setAutoUpdate(false) - тоже не работает. :)

    Еще были идея использовать методы FTSearch и getAllDocumentsByKey, но пока не пробовал. Дело в том, что самой БД документов несколько миллионов и считать их всех - очень долго, по этому и сделал это представление в которое попадают только нужные документы.


    <!--QuoteBegin-Sandr+14:10:2007, 01:50 -->
    <span class="vbquote">(Sandr @ 14:10:2007, 01:50 )</span><!--QuoteEBegin-->попробуйте перед получением первого документа сделать view.refresh()
    А ваще Azrael прав - получите коллекцию и работайте с ней...
    [snapback]81685" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Да я не против. Как из преставления получить коллекицю?!
     
  8. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Зря. Если покопаться в C API, обнаружишь, что в ядре домины есть такой объект "коллекция документов". Это не массив! Это хендл (аналогично как с базой или единичным док-том). Для него определены операции GetFirst и GetNext. А GetNth - нет. GetNth это просто функция типа
    Код (Text):
    function GetNth(N) as document
    set doc = GetFirst
    for i=1 to N
    set doc = GetNext(doc)
    next
    set GetNth = doc
    end function
     
  9. Kronos

    Kronos Гость

    <!--QuoteBegin-Constantin A Chervonenko+14:10:2007, 03:14 -->
    <span class="vbquote">(Constantin A Chervonenko @ 14:10:2007, 03:14 )</span><!--QuoteEBegin-->Зря. Если покопаться в C API, обнаружишь, что в ядре домины есть такой объект "коллекция документов". Это не массив! Это хендл (аналогично как с базой или единичным док-том). Для него определены операции GetFirst и GetNext. А GetNth - нет. GetNth это просто функция типа
    [snapback]81690" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Замечательно, но как быть с представлением и перебором документов?
     
  10. Azrael

    Azrael Гость

    Для: Kronos
    Попробуйте еще
    Код (Text):
    view.setAutoUpdate(false);
    view.refresh();
    коллекцию можно получить, например, методом search()
    Для: Fossil Code использовал одно время на LS функцию GetNthDocument в основном из-за того, что конструкция for - next более удобочитаемая, чем while - wend. В итоге столкнулся с проблемой, по всей видимости, deletion stub: на некоторых репликах сия функция возвращала непонятную ерунду, в результате дальнейший код (типа чтения значения полей) выдавал ошибку.
     
  11. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Использование GetNthDocument на больших коллекциях приводит к очень большим тормозам.
     
  12. Kronos

    Kronos Гость

    <!--QuoteBegin-Azrael+14:10:2007, 11:19 -->
    <span class="vbquote">(Azrael @ 14:10:2007, 11:19 )</span><!--QuoteEBegin-->Для: Kronos
    Попробуйте еще
    Код
    view.setAutoUpdate(false);
    view.refresh()
    [snapback]81699" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Пробовал. Не помогает. Может быть кто ни будь напишет, как из представления получить коллекцию документов?
     
  13. root

    root Гость

    Для: Kronos
    http://www.ibm.com/developerworks/ru/libra...n-performance1/
    Код (Text):
    F1

    import lotus.domino.*;
    public class JavaAgent extends AgentBase {
    public void NotesMain() {
    try {
    Session session = getSession();
    AgentContext agentContext =
    session.getAgentContext();
    // (Your code goes here)
    Database db = agentContext.getCurrentDatabase();
    View view = db.getView("By Category");
    DocumentCollection dc =
    view.getAllDocumentsByKey("Spanish leather", false);
    dc.putAllInFolder("Boots");
    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }
    Код (Text):
    DocumentCollection dc = db.search
    // вкачестве строки поиска фильтр view в данном случае MY_VIEW
    ("Subject = \"" + agent.getComment() + "\"");
    либо через Entry
    Код (Text):
    Set view = db.GetView("By Category")
    Set vc = view.AllEntries
    Set entry = vc.GetFirstEntry()
    Set doc = entry.Document
     
  14. Mihal

    Mihal Гость

    <!--QuoteBegin-Kronos+14:10:2007, 00:47 -->
    <span class="vbquote">(Kronos @ 14:10:2007, 00:47 )</span><!--QuoteEBegin-->Не спорю, но lotusScript, извините, кривой. Начиная от синтаксиса, и заканчивая конструкциями. Простейшая конструкция обработки исключений в lotusScript это хороший геморрой, ну и т.д., но опрос то не в этом кому что нравится. Вопрос в том, почему не работает.
    [snapback]81684" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    LotusScript кривой. Java глючит. И шо делать?!
     
  15. Sandr

    Sandr Гость

    Мучаться и сдерживать себя от самобийства ап стену... :unsure:
     
  16. Kronos

    Kronos Гость

    <!--QuoteBegin-Mihal+14:10:2007, 22:36 -->
    <span class="vbquote">(Mihal @ 14:10:2007, 22:36 )</span><!--QuoteEBegin-->LotusScript кривой. Java глючит. И шо делать?!
    [snapback]81733" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Кстати 8ка лотуса написана на java. IBM уже давно делает упор на java, постеменно уходит от lotusScript.
     
  17. Kronos

    Kronos Гость

  18. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    По этой логике 6-ка, видимо, написана на LotusScript?? :(

    В 8-ке Жабой заменили С++, а не LS
     
  19. Mihal

    Mihal Гость

    <!--QuoteBegin-Kronos+14:10:2007, 21:55 -->
    <span class="vbquote">(Kronos @ 14:10:2007, 21:55 )</span><!--QuoteEBegin-->Кстати 8ка лотуса написана на java. IBM уже давно делает упор на java, постеменно уходит от lotusScript.
    [snapback]81735" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    8-ка на Java?! А Вы уверены?:(
     
  20. v2v

    v2v Гость

Загрузка...
Похожие Темы - Проблема перебором документов
  1. c0de3r
    Ответов:
    4
    Просмотров:
    112
  2. DobermannTT
    Ответов:
    10
    Просмотров:
    132
  3. SoulPaladin
    Ответов:
    3
    Просмотров:
    120
  4. Artael
    Ответов:
    1
    Просмотров:
    109
  5. ENSLER
    Ответов:
    0
    Просмотров:
    102
Статус темы:
Закрыта.

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