Notes的物件體系中,Database下的Document和Agent地位是並排的,DocumentCollection只是個介於Database與Document的集合,算不上一個層次。我推測發Mail的動作何以那麼複雜,係因為發Mail的動作是一支Agent程式,而Mail內容則是Document物件,兼具了Agent、Document性質。因為執行一般的Agent,根本不用繼承AgentBase,直接這樣寫就行:

public static void main(String[] args) throws Exception {
    Session session = NotesFactory.createSession("1.2.3.4", "admin", "password");
    Database db = session.getDatabase(session.getServerName(), "TEST.NSF", true);
    Vector<Agent> v = db.getAgents();
    for (Agent agent : v) {
        System.out.println(agent.getName()); // ex: 測試Mail | agMail
        if (agent.getName().endsWith("| agMail")) {
            agent.run();
            System.out.println("Finish");
        }
    }
    Agent agent = db.getAgent("agMail");
    System.out.println("null ? " + (agent == null));  // return true
}

  根據上述程式看,直接使用NotesFactory去建立Session就行。但還有一個弔詭之處,就是Database物件的getAgent方法無法取得想要的Agent,反而要用getAgents依次取得每個Agent,對它的name進行比對,在Lotus Notes物件建立方式是:物件名稱 | 物件別名。中間弄個中線區隔,而key是物件別名,可是即時用getAgent傳的是物件名稱或是全名(如上頭藍字),依然無法取得Agent的instance來Run,著實詭異。

arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()