📜  使用Java从 Microsoft Exchange Server 获取数据

📅  最后修改于: 2022-05-13 01:54:57.825000             🧑  作者: Mango

使用Java从 Microsoft Exchange Server 获取数据

在软件行业,许多程序需要您需要从某种以前存在的商业软件中获取的信息。换句话说,您可能会遇到与 Microsoft、Salesforce、SAP 和其他软件巨头的软件集成的需求。而且,虽然这看起来很吓人,但你可以做到!让我来告诉你怎么做。

需要与 Microsoft Exchange Server 集成

与所有类型软件集成的最常见方式是使用它们的 API。大型软件公司提供它们正是为了使集成成为可能。
我们以 Microsoft Exchange 为例。您可以在Java中使用 Exchange 的 API 执行的不同操作是:

  1. 阅读电子邮件。
  2. 发电子邮件。
  3. 从日历上的约会中获取信息。
  4. 插入新约会。
  5. 编辑现有约会。
  6. 从任务列表中获取信息。
  7. 插入新任务。
  8. 编辑现有任务。
  9. 从公用文件夹读取。
  10. 写入公用文件夹。

如何与 Microsoft Exchange Server 集成?

从Java与 Exchange 集成的最传统方法曾经是Exchange Web 服务 (EWS)

  1. EWS SDK 是一个基于 SOAP 的 API
  2. 它作为 Microsoft Exchange 2007 的一部分推出。
  3. 它不容易使用,但真正的问题是,早在 2018 年 7 月,微软就宣布他们将不再进行任何功能更新。

微软图形

此外,从 2020 年 10 月 13 日起,Microsoft 预计使用 Exchange Web Services for Office 365 集成的每个人都可以切换到 Microsoft Graph。此外,从 2020 年 10 月 13 日起,将停止对 Exchange Web 服务 (EWS) 中的基本身份验证的支持。

微软希望一切都转移到OAuthMicrosoft Graph 。 Microsoft Graph 于 2015 年随 Office 365 一起推出。它通过单个端点将调用委派给多个 Office 365 云服务。在Microsoft Graph中,您有两个选择:

  1. Microsoft Graph 数据连接。
  2. 微软图形 API。

Microsoft 非常清楚您可以使用他们的 API 做什么和不可以做什么,因此最好事先检查一下。如果(且仅当)您想要处理大数据或需要详细同意时,您应该查看 Microsoft Graph 数据连接。如果不是这种情况,您需要常规 API,这是最常见的选项。

当前存在两个版本的Microsoft Graph REST API -版本 1.0 和 beta 。您可以查看测试版,但对于任何认真的开发,您自然应该保持生产版本 1.0。对于该版本,请务必阅读文档并学习Java SDK。

连接到 API 的方法

我们可以通过两种方式连接到 API:

  1. 微软图形 API。
  2. 集成平台。

微软API

当您进入实际使用 API 的部分时,您应该首先获得:

  1. Microsoft 帐户:可以是公司或学校帐户。获取应用程序 ID。
  2. 注册您的应用程序:使用以下方法注册您的应用程序:
    • Microsoft 应用程序注册门户。
    • Azure Active Directory 管理门户。
  3. 应用程序 ID:注册后,将为您的应用程序创建一个应用程序 ID,并显示在新应用程序的属性页面上。

您应该将 Azure Active Directory 管理门户用于企业级应用程序。
注意: Microsoft Graph 一直在变化。查看更改日志以了解已经发生的更改(自 2015 年 12 月以来)。如果您想使用它,请确保检查 API 的当前生产版本。

集成平台

  1. 您可以将集成平台视为可以放置在您和 API 之间的薄层。
  2. 您为集成平台编写代码,这是*简单得多*。
  3. 然后是平台工作的整合,翻译和与API“对话”。与 API 不同的是,您需要付费才能使用集成平台,但通常可以从免费试用开始。
  4. 示例:连接桥平台

Connect Bridge Platform:这个特定集成平台的好处在于它确保了向前和向后兼容性。这意味着您使用 Connect Bridge 构建Java代码,然后管理员可以升级到新的 Exchange 版本,Microsoft 可以启动新版本的 API。而且您不必担心任何这些。

集成平台的工作原理

  1. Connect Bridge 将 SQL 语句转换为 API 调用。
  2. 您放在代码中的是标准 SQL。您可以编写普通的 SELECT、UPDATE、INSERT 和 DELETE 语句。
  3. 它的工作原理就像您使用 JDBC 从关系数据库获取数据和从关系数据库获取数据一样。
  4. 您甚至可以使用存储过程。

注意:这只是一个抽象层。实际上,您访问的是 API,而不是 Microsoft Exchange 的数据库。

集成平台的问题

某些集成平台的问题在于它们只能在特定环境中工作,但在 Connect Bridge 的特定情况下,这不是问题,因为您可以在以下环境中运行它:

  • Azure 构建的 SaaS 平台。
  • 本地/自托管(在您自己的虚拟机或云服务器上)。

执行

在本节中,我们将看到如何使用Connect Bridge Management Studio将我们的应用程序集成到 API。

方法

假设 Exchange 和 SharePoint 实例已经存在,以下是您需要遵循的准备步骤:

1.准备好您的目标系统登录信息(在本例中为 Exchange 和 SharePoint)。

2.安装连接桥。

3.运行 Connect Bridge Management Studio。

  • 添加 SharePoint 帐户(帐户 - 添加帐户)。要添加帐户,您应该选择连接器 CBSharePointConnector 并使用第 1 点中的凭据。
  • 添加 Exchange 帐户(帐户 - 添加帐户)。要添加帐户,您应该选择连接器 MGEXPlugin2010 并使用第 1 点中的凭据。
  • 对于每个帐户,请确保测试连接,以便您知道使用的凭据和参数一切正常。

4.打开新查询选项,然后打开连接浏览器。找到 Exchange 连接器并展开它,直到您看到 DefaultConnection。右键单击 DefaultConnection 并选择选项 Get Connection 字符串。您将需要它来将其传递给脚本,因此复制 JDBC 连接字符串。

5.打开新查询选项,然后打开连接浏览器。找到 SharePoint 连接器并展开它,直到您看到 DefaultConnection。右键单击 DefaultConnection 并选择选项 Get Connection 字符串。您将需要它来将其传递给脚本,因此复制 JDBC 连接字符串。

示例:在下面的示例中,我们讨论了用于集成 Microsoft Exchange 和 SharePoint 的Java代码。

Java
// Java Program to demonstrate
// integration of Exchange and
// SharePoint
  
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
  
class Program {
  
    public static void main(String[] args)
        throws SQLException, ClassNotFoundException
    {
  
        Class.forName("com.cnsconnect.mgw.jdbc.MgDriver");
  
        // STEP 1:Create a JDBC connection
        // for each target server you get
        // the data for the connection string
        // from Connect Bridge
        String exchangeConnectionString
            = "jdbc:MgDriver:IMPL=CORBA;ENC=UTF8;"
              + "HOST=123.456.789.000;PORT=8087;"
              + "UID=demouser;PWD='password';"
              + "ACC=accountExchange;";
        String sharepointConnectionString
            = "jdbc:MgDriver : IMPL = CORBA; ENC = UTF8;"
              + "HOST = 123.456.789.000; PORT = 8087;"
              + "UID=demouser; PWD = 'password';"
              + "ACC = accountSharePoint;";
        Connection exchangeConn
            = DriverManager.getConnection(
                exchangeConnectionString);
        Connection sharepointConn
            = DriverManager.getConnection(
                sharepointConnectionString);
        Statement exchangeSt
            = exchangeConn.createStatement();
        System.out.println("Connecting to Exchange...");
  
        // STEP 2: Provide an appropriate
        // object  like a ResultSet +
        // STEP 3: Fill the object with data
        // from the source server
        ResultSet exchangeRs = exchangeSt.executeQuery(
            "SELECT * FROM [Appointment]");
  
        // Create a new statement for
        // inserting PreparedStatement
        // using JDBC
        sharepointSt = sharepointConn.prepareStatement(
            "INSERT INTO [Calendar] "
            + "([Title],[Description], [Location],"
            + "[StartTime], [EndTime]) "
            + "VALUES ( ?, ?, ?, ?, ?)");
  
        // STEP 4: Manipulate the data or
        // apply a workflow rule (or both)
        // in this sample: check if the
        // appointment is private,
        // if not, insert it into SharePoint
        while (exchangeRs.next()) {
            Boolean isPrivate
                = exchangeRs.getBoolean("IsPrivate");
            if (isPrivate != null & amp; & isPrivate) {
                System.out.println(
                    "Skipping '"
                    + exchangeRs.getString("Subject")
                    + "'");
                continue;
            }
  
            // Fill these parameters with values
            // for the SharePoint account
            sharepointSt.setString(
                1, exchangeRs.getString("Subject"));
            sharepointSt.setString(
                2, exchangeRs.getString("Body"));
            sharepointSt.setString(
                3, exchangeRs.getString("Location"));
            sharepointSt.setTimestamp(
                4, exchangeRs.getTimestamp("StartDate"));
            sharepointSt.setTimestamp(
                5, exchangeRs.getTimestamp("EndDate"));
  
            System.out.println(
                "Inserting '"
                + exchangeRs.getString("Subject") + "'");
  
            // STEP 5: Insert data into
            // the target server
            sharepointSt.execute();
        }
  
        // STEP 6: Clean up and
        // lose the connections
        exchangeRs.close();
        exchangeSt.close();
        sharepointSt.close();
        exchangeConn.close();
        sharepointConn.close();
    }
}


输出: