通过Java为日历条目创建Lotus Notes插件

通过Java为日历条目创建Lotus Notes插件,java,plugins,calendar,lotus-notes,Java,Plugins,Calendar,Lotus Notes,我有一个为LotusNotes创建插件的项目,它可以创建新的日历条目并获取现有日历条目的数据 首选项 视窗7 客户:Lotus Notes 9(社交版) 服务器:IBMNotes/Domino9.0.0.13067 到目前为止我所做的: package com.acme.plugin; import lotus.domino.*; public class JavaAgent extends AgentBase { public void NotesMain() {

我有一个为LotusNotes创建插件的项目,它可以创建新的日历条目并获取现有日历条目的数据

首选项

  • 视窗7
  • 客户:Lotus Notes 9(社交版)
  • 服务器:IBMNotes/Domino9.0.0.13067
到目前为止我所做的:

package com.acme.plugin;

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

        try {

            NotesThread.sinitThread();
            Session session = NotesFactory.createSession();

            DbDirectory dir = session.getDbDirectory(null);
            Database db = dir.openMailDatabase();
            Document document = db.createDocument();

            MeetingInformation dummyData = createDummyData(session);

            // Testing if calendar read and write rights are given
            int accLevel = db.queryAccess(dummyData.getUsername());
            int accPriv = db.queryAccessPrivileges(dummyData.getUsername());
            boolean blnCanWriteCalendar = ((accPriv & Database.DBACL_WRITE_PUBLIC_DOCS) > 0)
                    | accLevel > ACL.LEVEL_AUTHOR;
            boolean blnCanReadCalendar = ((accPriv & Database.DBACL_READ_PUBLIC_DOCS) > 0)
                    | accLevel >= ACL.LEVEL_READER;

            if ((blnCanWriteCalendar && blnCanReadCalendar) == false) {
                ACL acl = db.getACL();
                ACLEntry entry = acl.getEntry(dummyData.getUsername());
                entry.setPublicReader(true);
                if (entry.isPublicReader())
                    System.out.println("PublicReader = true");
                entry.setPublicWriter(true);
                if (entry.isPublicWriter())
                    System.out.println("PublicWriter = true");
                acl.save();
            }

            createCalenderEntry(document, session, dummyData);

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

    private void createCalenderEntry(Document document, Session session,
            MeetingInformation meetingInformation) {

        try {
            // Appointment Type
            document.replaceItemValue("Form", "Appointment");
            document.replaceItemValue("AppointmentType", meetingInformation
                    .getAppointmentType());

            // Subject, Location
            document.replaceItemValue("Categories", "Meeting");
            document.replaceItemValue("Location", meetingInformation
                    .getLocation());
            document.replaceItemValue("Subject", meetingInformation
                    .getSubject());
            document.replaceItemValue("Body", meetingInformation
                    .getDescription());

            // Creator of meeting
            document
                    .replaceItemValue("Chair", meetingInformation.getUsername());
            document.replaceItemValue("AltChair", meetingInformation
                    .getUsername());
            document.replaceItemValue("From", meetingInformation.getUsername());
            document.replaceItemValue("Principal", meetingInformation
                    .getUsername());
            document.replaceItemValue("$AltPrincipal", meetingInformation
                    .getUsername());

            // Remind settings
            document.replaceItemValue("Alarm", 1);
            document.replaceItemValue("AlarmOffset", -15);
            document.replaceItemValue("Alarms", 1);

            // Icon
            switch (Integer.parseInt(meetingInformation.getAppointmentType())) {
            case 0:
                document.replaceItemValue("_ViewIcon", 160);
                document.replaceItemValue("$IconSwitcher", "Appointment");
                break;
            case 1:
                document.replaceItemValue("_ViewIcon", 63);
                document.replaceItemValue("$IconSwitcher", "Anniversary");
                break;
            case 2:
                document.replaceItemValue("_ViewIcon", 9);
                document.replaceItemValue("$IconSwitcher", "AllDayEvent");
                break;
            case 3:
                document.replaceItemValue("_ViewIcon", 158);
                document.replaceItemValue("$IconSwitcher", "Meeting");
                break;
            case 4:
                document.replaceItemValue("_ViewIcon", 10);
                document.replaceItemValue("$IconSwitcher", "Reminder");
                break;
            default:
                document.replaceItemValue("_ViewIcon", 158);
                document.replaceItemValue("$IconSwitcher", "Meeting");
            }

            /* date and time ----- */
            // date in format dd/mm/yyyy
            DateTime startDay = session.createDateTime(meetingInformation
                    .getStartDay());

            // time in format hh/mm/ss (AM|PM)
            DateTime startTime = session.createDateTime(meetingInformation
                    .getStartTime());
            DateTime endTime = session.createDateTime(meetingInformation
                    .getEndTime());

            document.replaceItemValue("CalendarDateTime", startDay);
            document.replaceItemValue("StartDateTime", startTime);
            document.replaceItemValue("EndDateTime", endTime);
            document.replaceItemValue("StartDate", startDay);
            document.replaceItemValue("EndDate", startDay);
            document.replaceItemValue("EndTime", endTime);
            document.replaceItemValue("$NoPurge", endTime);
            document.replaceItemValue("tmpStartTime_Local", startTime);
            document.replaceItemValue("tmpEndTime_Local", endTime);

            // save document and alarm
            document.save(true);
            document.putInFolder("$Alarms", true);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private MeetingInformation createDummyData(Session session) {

        MeetingInformation meetingInformation = new MeetingInformation();
        try {
            meetingInformation.setUsername(session.getUserName());
            meetingInformation
            .setSubject("Created Meeting by plugin");
            meetingInformation.setAppointmentType("3");
            meetingInformation.setStartTime("01:00:00 PM");
            meetingInformation.setEndTime("02:00:00 PM");
            meetingInformation.setStartDay("12/08/2013");
            meetingInformation.setEndDay("12/08/2013");
            meetingInformation.setRecipient("testing_notes@gmx.net");
            meetingInformation.setDescription("Description: hidden feature");       
            meetingInformation.setLocation("Everywhere");

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

        return meetingInformation;
    }
}
我做了一个工具栏按钮,当单击时,在其中创建日历条目。按“F9”后,创建的日历条目将显示在lotus notes日历上,但当我单击它时,会出现错误
警告“IBM notes:对象变量未设置”
。我通过谷歌搜索了这个问题,发现我必须在ACL上设置访问权限。我尝试了不同的方法,但到目前为止没有任何效果

这里是我的代码:

package com.acme.plugin;

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

        try {

            NotesThread.sinitThread();
            Session session = NotesFactory.createSession();

            DbDirectory dir = session.getDbDirectory(null);
            Database db = dir.openMailDatabase();
            Document document = db.createDocument();

            MeetingInformation dummyData = createDummyData(session);

            // Testing if calendar read and write rights are given
            int accLevel = db.queryAccess(dummyData.getUsername());
            int accPriv = db.queryAccessPrivileges(dummyData.getUsername());
            boolean blnCanWriteCalendar = ((accPriv & Database.DBACL_WRITE_PUBLIC_DOCS) > 0)
                    | accLevel > ACL.LEVEL_AUTHOR;
            boolean blnCanReadCalendar = ((accPriv & Database.DBACL_READ_PUBLIC_DOCS) > 0)
                    | accLevel >= ACL.LEVEL_READER;

            if ((blnCanWriteCalendar && blnCanReadCalendar) == false) {
                ACL acl = db.getACL();
                ACLEntry entry = acl.getEntry(dummyData.getUsername());
                entry.setPublicReader(true);
                if (entry.isPublicReader())
                    System.out.println("PublicReader = true");
                entry.setPublicWriter(true);
                if (entry.isPublicWriter())
                    System.out.println("PublicWriter = true");
                acl.save();
            }

            createCalenderEntry(document, session, dummyData);

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

    private void createCalenderEntry(Document document, Session session,
            MeetingInformation meetingInformation) {

        try {
            // Appointment Type
            document.replaceItemValue("Form", "Appointment");
            document.replaceItemValue("AppointmentType", meetingInformation
                    .getAppointmentType());

            // Subject, Location
            document.replaceItemValue("Categories", "Meeting");
            document.replaceItemValue("Location", meetingInformation
                    .getLocation());
            document.replaceItemValue("Subject", meetingInformation
                    .getSubject());
            document.replaceItemValue("Body", meetingInformation
                    .getDescription());

            // Creator of meeting
            document
                    .replaceItemValue("Chair", meetingInformation.getUsername());
            document.replaceItemValue("AltChair", meetingInformation
                    .getUsername());
            document.replaceItemValue("From", meetingInformation.getUsername());
            document.replaceItemValue("Principal", meetingInformation
                    .getUsername());
            document.replaceItemValue("$AltPrincipal", meetingInformation
                    .getUsername());

            // Remind settings
            document.replaceItemValue("Alarm", 1);
            document.replaceItemValue("AlarmOffset", -15);
            document.replaceItemValue("Alarms", 1);

            // Icon
            switch (Integer.parseInt(meetingInformation.getAppointmentType())) {
            case 0:
                document.replaceItemValue("_ViewIcon", 160);
                document.replaceItemValue("$IconSwitcher", "Appointment");
                break;
            case 1:
                document.replaceItemValue("_ViewIcon", 63);
                document.replaceItemValue("$IconSwitcher", "Anniversary");
                break;
            case 2:
                document.replaceItemValue("_ViewIcon", 9);
                document.replaceItemValue("$IconSwitcher", "AllDayEvent");
                break;
            case 3:
                document.replaceItemValue("_ViewIcon", 158);
                document.replaceItemValue("$IconSwitcher", "Meeting");
                break;
            case 4:
                document.replaceItemValue("_ViewIcon", 10);
                document.replaceItemValue("$IconSwitcher", "Reminder");
                break;
            default:
                document.replaceItemValue("_ViewIcon", 158);
                document.replaceItemValue("$IconSwitcher", "Meeting");
            }

            /* date and time ----- */
            // date in format dd/mm/yyyy
            DateTime startDay = session.createDateTime(meetingInformation
                    .getStartDay());

            // time in format hh/mm/ss (AM|PM)
            DateTime startTime = session.createDateTime(meetingInformation
                    .getStartTime());
            DateTime endTime = session.createDateTime(meetingInformation
                    .getEndTime());

            document.replaceItemValue("CalendarDateTime", startDay);
            document.replaceItemValue("StartDateTime", startTime);
            document.replaceItemValue("EndDateTime", endTime);
            document.replaceItemValue("StartDate", startDay);
            document.replaceItemValue("EndDate", startDay);
            document.replaceItemValue("EndTime", endTime);
            document.replaceItemValue("$NoPurge", endTime);
            document.replaceItemValue("tmpStartTime_Local", startTime);
            document.replaceItemValue("tmpEndTime_Local", endTime);

            // save document and alarm
            document.save(true);
            document.putInFolder("$Alarms", true);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private MeetingInformation createDummyData(Session session) {

        MeetingInformation meetingInformation = new MeetingInformation();
        try {
            meetingInformation.setUsername(session.getUserName());
            meetingInformation
            .setSubject("Created Meeting by plugin");
            meetingInformation.setAppointmentType("3");
            meetingInformation.setStartTime("01:00:00 PM");
            meetingInformation.setEndTime("02:00:00 PM");
            meetingInformation.setStartDay("12/08/2013");
            meetingInformation.setEndDay("12/08/2013");
            meetingInformation.setRecipient("testing_notes@gmx.net");
            meetingInformation.setDescription("Description: hidden feature");       
            meetingInformation.setLocation("Everywhere");

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

        return meetingInformation;
    }
}
那么我该如何解决这个问题呢?必须做些什么来解决这个问题

我四处查看了一下,但似乎找不到解决此问题的任何方法,非常感谢您的帮助。

“未设置对象变量”是常见的Lotusscript错误。我想,当打开你的条目时,有些东西失败了。它可能缺少字段或某些字段中的值错误

最好的方法是在字段级别(属性框)将文档与手动输入的条目进行完全相同的比较


如果失败,启动调试器并查找有问题的代码。

现在我有了解决该问题的方法

这些条目是作为草稿创建的,因此必须在通过java创建之后保存,但它们是可编辑的,没有任何错误警告

下面是java代码示例:

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

        try {

            NotesThread.sinitThread();
            Session session = NotesFactory.createSession();

            DbDirectory dir = session.getDbDirectory(null);
            Database db = dir.openMailDatabase();

            createCalenderEntry(db, session, createDummyData(session));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void createCalenderEntry(Database database, Session session,
            MeetingInformation meetingInformation) {

        try {
            Document document = database.createDocument();

            // Appointment Type
            document.replaceItemValue("Form", "Appointment");
            document.replaceItemValue("AppointmentType", meetingInformation
                    .getAppointmentType());

            // Subject
            document.replaceItemValue("Subject", meetingInformation
                    .getSubject());
            document.replaceItemValue("Body", meetingInformation
                    .getDescription());

            // Creator of meeting
            document
                    .replaceItemValue("Chair", meetingInformation.getUsername());
            document.replaceItemValue("From", meetingInformation.getUsername());
            document.replaceItemValue("Principal", meetingInformation
                    .getUsername());

            // Icon
            switch (Integer.parseInt(meetingInformation.getAppointmentType())) {
            case 0:
                document.replaceItemValue("_ViewIcon", 160);
                document.replaceItemValue("$IconSwitcher", "Appointment");
                break;
            case 1:
                document.replaceItemValue("_ViewIcon", 63);
                document.replaceItemValue("$IconSwitcher", "Anniversary");
                break;
            case 2:
                document.replaceItemValue("_ViewIcon", 9);
                document.replaceItemValue("$IconSwitcher", "AllDayEvent");
                break;
            case 3:
                document.replaceItemValue("_ViewIcon", 158);
                document.replaceItemValue("$IconSwitcher", "Meeting");
                break;
            case 4:
                document.replaceItemValue("_ViewIcon", 10);
                document.replaceItemValue("$IconSwitcher", "Reminder");
                break;
            default:
                document.replaceItemValue("_ViewIcon", 158);
                document.replaceItemValue("$IconSwitcher", "Meeting");
            }

            /* date and time ----- */
            // date in format dd/mm/yyyy
            DateTime startDay = session.createDateTime(meetingInformation
                    .getStartDay());

            // time in format hh/mm/ss (AM|PM)
            DateTime startTime = session.createDateTime(meetingInformation
                    .getStartTime());
            DateTime endTime = session.createDateTime(meetingInformation
                    .getEndTime());

            document.replaceItemValue("CalendarDateTime", startDay);
            document.replaceItemValue("StartDateTime", startTime);
            document.replaceItemValue("EndDateTime", endTime);
            document.replaceItemValue("StartDate", startDay);
            document.replaceItemValue("StartTime", startTime);
            document.replaceItemValue("EndDate", startDay);
            document.replaceItemValue("EndTime", endTime);
            document.replaceItemValue("$NoPurge", endTime);
            document.replaceItemValue("tmpStartTime_Local", startTime);
            document.replaceItemValue("tmpEndTime_Local", endTime);

            document.replaceItemValue("$PublicAccess", "1");
            document.replaceItemValue("MailOptions", "");
            document.replaceItemValue("$CSFlags", "m");
            document.replaceItemValue("$CSVersion", "2");
            document.replaceItemValue("ExcludeFromView", "D");

            // save document and alarm
            document.save(false, true);

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

    }

    private MeetingInformation createDummyData(Session session) {

        MeetingInformation meetingInformation = new MeetingInformation();
        try {
            meetingInformation.setUsername(session.getUserName());
            meetingInformation
            .setSubject("Meeting title");
            meetingInformation.setStartTime("01:00:00 PM");
            meetingInformation.setEndTime("02:00:00 PM");
            meetingInformation.setStartDay("12/08/2013");
            meetingInformation.setEndDay("12/08/2013");
            meetingInformation.setLocation("Everywhere");
            meetingInformation.setDescription("Description");
            meetingInformation.setRecipient("test@mail.com");
            meetingInformation.setAppointmentType("3");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return meetingInformation;
    }
}

谢谢你的快速回答。我发现缺少以下代码行:
document.replaceItemValue(“$CSVersion”,“2”)在这个链接上有一个CS命令列表:()-很抱歉格式不好,我是StackOverflow的新手对象MeetingInformation是一个类,它的所有属性都是字符串。上面的代码,特别是createCalendarEntry()在没有MeetingInformation类的情况下也可以工作。