OpenKM SDK 簡易範例

陳冠緯 Heisenberg Chen 2021/12/13 18:22:05
380

 

OpenKM安裝已有同仁分享 有興趣的可以參考在昕力大學搜尋這邊就不再贅述

首先要找到適用的SDK版本

可以到官網查詢

這裡

本文章使用Spring boot +Maven 因此使用  SDK for Java 1.2

 

Maven設定

OpemKM有自己的Repository ,所以需要在pom檔的repositories加上以下設定

<repositories>
    <
repository>
        <
id>openkm.com</id>
        <
name>OpenKM Maven Repository</name>
        <
url>https://maven.openkm.com</url>
    </
repository>
</
repositories
>

並在dependencies加上要下載使用的版本

<dependency>
    <groupId>com.openkm</groupId>
    <artifactId>sdk4j</artifactId>
    <version>1.2</version>
</dependency>

建立OpenKM Services實例

需要輸入在創建OpenKM AP時設定的帳號、密碼與OpenKMhost

import com.openkm.sdk4j.OKMWebservices;
import com.openkm.sdk4j.OKMWebservicesFactory;
public void init() {
    String user="testUser";
    String password = "testWord";
    String host ="OpenKM host";

  OKMWebservices  okmWebservices = OKMWebservicesFactory.newInstance(host, user, password);
}
 

 

創建成功後就可以使用okmWebservices來對OpenKM進行操作

 

查詢

find(QueryParams queryParams)

透過QueryParams可以加入許多查詢參數

以下介紹幾個較常用參數

 

 

參數

型別

說明

name

String

節點名稱(檔案名稱或資料夾名稱)

domain

Long

要查詢的節點類型

0:Mail(信件)

1:Folder(資料夾)

2:Document(檔案)

keywords

Set<String>

OpenKM允許在每個節點設置不同的keyword,此參數能依照keyword進行篩選

content

String

內文查詢,根據檔案內文查詢,很多坑,有機會再詳細說一下遇過的

mimeType

String

檔案類型,依照節點類型為Document的類型進行篩選,如以下範例

PDF: application/pdf
PPTX: application/vnd.openxmlformats-officedocument.presentationml.presentation
PNG: image/png
 
更多類型可自行上網查詢 這邊只提供幾個簡單範例

path

String

節點路徑,依照節點路徑進行篩選,只對Folder類型的節點有效

LastModifiedFrom

LastModifiedTo

Calendar

針對節點最後修改時間進行篩選,因為只有Document類型的節點有最後修改時間,只對Document類型有效

 

更多參數與查詢語法可以參考以下

這裡

要注意的是這些參數都是以And的方式進行篩選,雖然有參數operator

可以設定,但只在舊版本支援,在6.X版本已經不支援

參考文章:這裡

 

範例:

 

import com.openkm.sdk4j.bean.QueryParams;
import com.openkm.sdk4j.bean.QueryResult;
public List<QueryResult> find() {
    try {

        OKMWebservices okmWebservices = OKMWebservicesFactory
            .newInstance(openKmConfig.getUrl(), openKmConfig.getUser(), openKmConfig.getPassword());

        QueryParams params = new QueryParams();
        params.setMimeType("application/pdf");
        params.setDomain(2);
        params.setContent("測試文章");

        return okmWebservices.find(params);
    } catch (Exception e) {
    }
}​

 

 

 

以上會查出節點類行為Document且類型為PDF且內文含 "測試文章"的節點資訊

 

新增/刪除節點

 

新增資料夾

createFolder(Folder fld)

import com.openkm.sdk4j.bean.Folder;
public String createFolder() {
    try {
        OKMWebservices okmWebservices = OKMWebservicesFactory
            .newInstance(openKmConfig.getUrl(), openKmConfig.getUser(), openKmConfig.getPassword());

        Folder folder = new Folder();
        folder.setPath(“/okm:root/公用資料夾”);

        return okmWebservices.createFolder(folder).getUuid();
    } catch (Exception e) {
    }
    return null;
}
 
Path參數為想要新增的資料夾位置,若資料夾已存在會丟出ItemExistsException的錯誤,成功創建後會將uuid寫入Folder

要注意Folder的其他屬性並不會影響新增的Folder節點屬性,只有path有作用

因此官方其實更推薦使用另一個方法來進行資料夾創建

createFolderSimple(String fldPath)

 

新增檔案

createDocument(Document doc, InputStream is)

import com.openkm.sdk4j.bean.Document;
public String createDocument(Path filePath) {

    try (InputStream is = new FileInputStream(filePath.toFile())) {
        Document doc = new Document();
        doc.setPath(“/okm:root/公用資料夾/圖片.png”);
        OKMWebservices okmWebservices = OKMWebservicesFactory
            .newInstance(openKmConfig.getUrl(), openKmConfig.getUser(), openKmConfig.getPassword());
        okmWebservices.createDocument(doc, is);

        return doc.getUuid();
    } catch (Exception e) {
    }

    return null;
}​

 

使用方法跟創建資料夾差不多,只是多了一個InputStream進行檔案傳輸

跟創建資料夾一樣建立時的Doucment其他參數是沒有用的,官方推薦另一個建立方法createDocumentSimple(String docPath, InputStream is),無須建立Object

 

刪除資料夾/檔案

因為兩個方法幾乎一樣放一起說

deleteDocument(String docId)

deleteFolder(String fldId)

兩個方法都是傳入uuid或節點的絕對路徑即可進行刪除,

其他還有很多方法如查詢節點、修改節點等的key都是可擇一填入

public void deleteDocument () {

    try {
        OKMWebservices okmWebservices = OKMWebservicesFactory

            .newInstance(openKmConfig.getUrl(), openKmConfig.getUser()

       okmWebservices.deleteDocument(“/okm:root/公用資料夾/圖片.png”);
    } catch (Exception e) {

    }
}​
 
 
 
public void deleteFolder() {
    try {

           OKMWebservices okmWebservices = OKMWebservicesFactory
            .newInstance(openKmConfig.getUrl(), openKmConfig.getUser()

           okmWebservices .deleteFolder(“550fceea-d4ea-48c5-b131-2f161b60d707”);
    } catch (Exception e) {
    }
}

 

參考文章:官網

 

 

陳冠緯 Heisenberg Chen