Java агент

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

Наш партнер Genesis Hackspace
  1. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    618
    Симпатии:
    5
    я написал агент, который берет параметры из профайла - селективную формулу и имя поля,
    затем по этим параметрам получает сортированный массив(тип Vector) и сохраняет в поле этого же профайла этот массив..
    НО на самом деле нечего не сохраняется.
    агент вызывается скриптом agent.Run или agent.Runonserver
    класс агента является наследником от AgentBase..
    в дебагере я проверял все правильно - данные получаются, созраняются, затем для контроля вызываю метод, который проверяет, есть ли данные в поле документа - они там есть.
    но после завершения работы агента в лотус-скрипте получаю (дебагер) профайл - поле пустое..

    какие есть соображения ? в чем тут может быть дело ?

    кроме того лотус подвисает на минуту пока агент выпоняется - это слишком долго по сравнению с десятком функций реализующих тоже самое на лотус скрипте :)

    так с производительностью все ясно - ошибка была... тем не менее скрипт быстрее в 4 раза
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Я думаю, неплохо было бы привести код агента, а также скрипта, который результаты его работы принимает. Просто у меня похожие проблемы были, мож смогу вспомнить, в чем затык.
     
  3. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    618
    Симпатии:
    5
    в тот же профайл, из которого берутся параметры не сохраняется.. поэтому решил в новый документ сохранять данные..

    кнопка
    Код (Text):
    Sub Click(Source As Button)
    Dim ses As New NotesSession
    Dim db As NotesDatabase
    Dim agent As NotesAgent
    Dim profile As NotesDocument
    Dim formula As String
    Dim varData As Variant
    Dim choice As Variant  
    Dim key As String
    Dim coll As NotesDocumentCollection
    try:
    On Error Goto catch
    key = Lcase(Trim(Inputbox("","")))
    If key = "" Then Exit Sub  

    Set db = ses.CurrentDatabase   

    Dim startTime As New NotesDateTime(Now)

    formula = {SELECT Form = "fa_Person" & fl_JobTitle != "Супервайзер" & fl_Deleted !="1"} +_
    {& @contains(@LowerCase(} + FIELD_FULLNAME + {);"} + key + {")}

    Set profile = db.GetProfileDocument("Formula","")  

    Call profile.ReplaceItemValue("Formula", Formula)      
    Call profile.ReplaceItemValue("FieldName",FIELD_FULLNAME)      

    Call profile.Save(True, False)
    Set profile = Nothing

    Set agent = db.GetAgent("aa_Make")
    If agent Is Nothing Then Exit Sub
    Call agent.Run

    Dim endTime As New NotesDateTime(Now)

    Set profile = db.GetProfileDocument("Formula")

    varData = profile.GetItemValue("Responce")
    If Trim(Cstr(varData(0)))<>"" Then choice = workspace.Prompt(4, Cstr(endTime.TimeDifference(startTime)), "Profile", varData(0), varData)   

    Call profile.Remove(True)

    Exit Sub
    catch:
    Print Getthreadinfo(1),Err,Error,Erl
    Exit Sub
    End Sub
    агент
    Код (Text):
    import lotus.domino.*;
    import java.util.*;

    public class JavaAgent extends AgentBase {
    Database DB;
    DocumentCollection coll;
    String query, objectName;
    String[]params = new String[1];
    Vector responce = new Vector();

    public void NotesMain() {

    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    DB = agentContext.getCurrentDatabase();

    // параметры:
    params = getParams(DB, params.length);
    if (params != null){               
    query = params[0];          // формула отбора         
    objectName = params[1];     // поле, по которому строится отбор                 

    if (query != ""){
    try {
    coll = DB.search(query);//коллекция по формуле отбора              
    if (coll.getCount() > 0){                          
    // получить сортированный массив соответствий запросу                        
    responce = getSortedData(coll,objectName);
    if (responce != null){
    setData(DB,responce);  
    //testing


    }                          
    }  
    }catch(Exception e) {
    e.printStackTrace();
    }
    }
    }

    } catch(Exception e) {
    e.printStackTrace();
    }
    };

    // занести массив в поле документа
    void setData(Database db, Vector v){
    try {          
    //Document doc = db.createDocument();
    Document doc = db.getProfileDocument("Formula",null);
    //doc.replaceItemValue("Form", "Formula");           
    doc.replaceItemValue("Responce", v);

    if (doc.save(true,false))
    prt("Document saved");
    else
    prt ("Something went wrong");
    doc = null;

    }catch(Exception e) {
    e.printStackTrace();           
    }  
    }

    // вывод текста
    void prt(String s) {System.out.println(s);}

    // получить сортированный Vector-массив соответствий запросу
    Vector getSortedData(DocumentCollection coll, String objectName){      
    Document doc;
    Vector resp = new Vector();    
    List list = new ArrayList();
    String objectValue;        

    try {
    doc = coll.getFirstDocument();
    while (doc != null){
    objectValue = doc.getItemValueString(objectName);
    if (list.contains(objectValue)== false )
    list.add(objectValue);                         
    doc = coll.getNextDocument(doc);                   
    }    
    Collections.sort(list);
    // трансформировать список в вектор           
    resp = listToVector(list);

    }catch(Exception e) {
    e.printStackTrace();           
    }  
    return resp;
    }

    // трансформировать список в вектор
    Vector listToVector(List l){
    Vector v = new Vector();       
    try {
    for (int i = 0; i < l.size(); i++){            
    v.addElement(l.get(i));
    }          
    }catch(Exception e) {
    e.printStackTrace();
    }      
    return v;
    }

    // получение параметров
    String[] getParams(Database db, int dim){
    String[] p = new String[dim+1];      
    try {
    Document profile = db.getProfileDocument("Formula", null);
    if (profile.hasItem("Formula")){
    p[0] = profile.getItemValueString("Formula");
    p[1] = profile.getItemValueString("FieldName");
    profile = null;
    return p;                  
    }
    else
    return null;                                   
    }catch(Exception e) {
    e.printStackTrace();
    return null;
    }      
    }
    };
     
  4. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    618
    Симпатии:
    5
    кто писал апплеты, работающие с документам приведите, пожалуйста, каркас апплета с инициализацией сессии, и собственно как апплет прикручивается к лотусу ??

    собственно, меня интересует механизм: передача параметров в java - работа с документами - возврат параметра в лотус-скрипт
     
  5. v2v

    v2v Гость

    Вопрос.
    Я написал ява агент и ещё один класс в этом же ява агенте, теперь я хочу использовать этот класс в другом агенте.
    попробывал вынести его в ява скрипт лайбрари, но вот возникла незадача, как мне теперь подключить в агенте эту библиотеку.
     
Загрузка...
Похожие Темы - Java агент
  1. TAPAKAHATOP
    Ответов:
    18
    Просмотров:
    1.624
  2. erdi
    Ответов:
    9
    Просмотров:
    1.702
  3. HelenHelen
    Ответов:
    5
    Просмотров:
    1.766
  4. YGol
    Ответов:
    4
    Просмотров:
    1.528
  5. KingGLEB
    Ответов:
    1
    Просмотров:
    1.122

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