Diharapkan anda sudah mengerti dan cukup familiar dengan Oracle Webcenter Content (Universal Content Management System/UCM) agar dapat memahami apa yang tertulis di blog ini.
Sebelum menggunakan RIDC, project yang anda buat harus meng-include file jar berikut:
oracle.ucm.ridc-11.1.1.jar
File ini dapat diambil di folder server tempat anda meng-instal Webcenter Content.
Contoh berikut dapat dipakai untuk melakukan Check In dokumen ke UCM berikut metadata-nya.
Penjelasan code saya lampirkan dalam bentuk comment "// comment", silahkan reuse code ini sebagaimana perlu.
package com.nostratech.jasper.service.generator;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import oracle.stellent.ridc.IdcClient;
import oracle.stellent.ridc.IdcClientException;
import oracle.stellent.ridc.IdcClientManager;
import oracle.stellent.ridc.IdcContext;
import oracle.stellent.ridc.model.DataBinder;
import oracle.stellent.ridc.model.DataObject;
import oracle.stellent.ridc.model.DataResultSet;
import oracle.stellent.ridc.model.TransferFile;
import oracle.stellent.ridc.protocol.ServiceResponse;
public class UCM {
private IdcClientManager myIdcClientManager;
private IdcClient myIdcClient;
private IdcContext myIdcContext;
public String addContent(String fileName,String dDocTitle){
try {
// Instantiate IdcClientManager untuk menginisiasi koneksi ke server UCM
myIdcClientManager = new IdcClientManager();
// masukkan nama Server UCM anda dan port RIDC
// Default Port adalah 4444 (anda dapat mengubahnya melalui Enterprise Manager
myIdcClient=myIdcClientManager.createClient("idc://ServerHostName:4444");
myIdcContext = new IdcContext("sysadmin");
ServiceResponse myServiceResponse = null;
InputStream fileStream = null;
fileStream = new FileInputStream(fileName);
long fileLength = new File(fileName).length();
// Data binder akan menyimpan pasangan metadata dan value
// Misal: myRequestDataBinder.putLocal("dDocAuthor", "Darwin");
// Ini akan menyimpan pasangan metadata dDocAuthor = Darwin
// Apabila kita melakukan check in, maka Author document akan di-set menjadi Darwin
// Apabila kita melakukan search, maka dokumen yang dicari adalah yang Author-nya adalah Darwin
DataBinder myRequestDataBinder = myIdcClient.createBinder();
// Nama service UCM yang akan dipanggil (Check in, Search dsb.)
// Dalam kasus ini adalah Check in
// Anda dapat melihat list service-service di tab Administrator
myRequestDataBinder.putLocal("IdcService", "CHECKIN_UNIVERSAL");
myRequestDataBinder.putLocal("dDocType", "Application");
// Judul Dokumen
myRequestDataBinder.putLocal("dDocTitle", dDocTitle);
// Nama Author dokumen
myRequestDataBinder.putLocal("dDocAuthor", "darwin");
// Security Group, anda dapat membuat custom security group atau memanfaatkan default (Public)
myRequestDataBinder.putLocal("dSecurityGroup", "Public");
myRequestDataBinder.putLocal("dDocAccount", "");
// Format Dokumen
myRequestDataBinder.putLocal("dFormat", "text/html");
// Folder di UCM, tempat kita akan menyimpan Dokumen
// Folder yang secara default ada di UCM adalah Contribution Folder
// Value untuk Parameter xCollectionID adalah ID Folder, bukan string
// Untuk itu, kita menggunakan getFolderIDFromPath untuk menentukan ID dari Contribution Folder
myRequestDataBinder.putLocal("xCollectionID",
Long.toString(getFolderIdFromPath("/Contribution Folders/")));
// File yang akan kita check in
myRequestDataBinder.addFile("primaryFile",new TransferFile(fileStream, fileName, fileLength, "text/html"));
myServiceResponse = myIdcClient.sendRequest(myIdcContext,myRequestDataBinder);
String myResponseString =myServiceResponse.getResponseAsString();
System.out.println("Uploaded file details: \n" +myResponseString);
// Cek hasil API call
DataBinder binder = myServiceResponse.getResponseAsBinder();
System.out.println("End");
// Ambil URL dokumen setelah di-check in
String docUrl=binder.getLocal("WebfilePath");
int index=docUrl.lastIndexOf("groups/");
String folder=docUrl.substring(index, docUrl.length());
System.out.println( index + "entered string is: "+folder);
index=0;
index=folder.lastIndexOf("~");
folder=folder.substring(0,index);
// return hasil URL check in
return "http://hostname/cs/"+folder+".pdf";
} catch (IdcClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "failed";
}
// ambil ID dari sebuah Folder
// Parameter adalah String Nama Folder, me-return ID dari folder tersebut jika ada di UCM
private long getFolderIdFromPath(String myFolderPath) {
ServiceResponse myServiceResponse = null;
Long myFolderId = null;
try {
DataBinder myRequestDataBinder = myIdcClient.createBinder();
// gunakan service COLLECTION_INFO untuk mendapatkan informasi folder
myRequestDataBinder.putLocal("IdcService", "COLLECTION_INFO");
myRequestDataBinder.putLocal("hasCollectionPath", "true");
// ambil collection path dari folder yang ingin dicari
myRequestDataBinder.putLocal("dCollectionPath", myFolderPath);
myServiceResponse = myIdcClient.sendRequest(myIdcContext,
myRequestDataBinder);
DataBinder myResponseDataBinder =
myServiceResponse.getResponseAsBinder();
DataResultSet myDataResultSet =
myResponseDataBinder.getResultSet("PATH");
DataObject myDataObject =
myDataResultSet.getRows().get(myDataResultSet.getRows().size() - 1);
// ambil ID dari collection yang kita cari
myFolderId = new Long(myDataObject.get("dCollectionID"));
System.out.println("Folder id: " + myFolderId);
} catch (IdcClientException idcce) {
System.out.println("IDC Client Exception occurred. Unable to retrieve folder id from path. Message: " + idcce.getMessage() +" Stack trace: ");
idcce.printStackTrace();
} catch (Exception e) {
System.out.println("Exception occurred. Unable to retrieve folder id from path. Message: " + e.getMessage() + ", Stack trace: ");
e.printStackTrace();
} finally {
if (myServiceResponse != null) {
myServiceResponse.close();
}
}
return 0;
}
}
Anda dapat menggunakan potongan code diatas untuk bermacam-macam ide.
Sebagai contoh, saya menggunakn code diatas dalam sebuah aplikasi Jasper yang men-generate file .pdf. Ketika Jasper saya meng-generate sebuah dokumen PDF, saya memanggil method diatas: addContent(lokasiFileYangInginDiupload, namaDokumenSetelahDimasukkanKeUCM). Secara otomatis semua report yang di-generate di Jasper saya juga akan ter-archive ke UCM untuk pencarian lebih lanjut di masa yang akan datang.
Anda dapat bereksplorasi untuk menggunakan API UCM untuk bermacam-macam kegunaan dalam document management. Selamat Mencoba!
Have fun!
No comments:
Post a Comment