Showing posts with label ridc. Show all posts
Showing posts with label ridc. Show all posts

Monday, December 12, 2016

Using the IdcCommand Utility to Access Content Server Part2

Pada part1 kita sudah berhasil menjalankan IdcCommand untuk proses Chekc-in dokumen, di part2 ini kita akan coba untuk melakukan add/create user menggunakan IdcCommand.

Prerequisite untuk proses ini sama dengan yang ada di part1, jadi kita cukup menambahkan 1 method lagi untuk proses Add User.

Cukup tambahkan satu method dibawah ini pada class java UcmClient yang sudah kita buat pada part1 sebelumnya.

public String addUser(String dName, String dFullName, String account) {
 ServiceResponse response = null;
 String result = "";
 try {
 // create request
  DataBinder binder = idcClient.createBinder();
  binder.putLocal("IdcService", "ADD_USER");

  // define UserAttributeInfo
  DataObjectImpl dataObject = new DataObjectImpl();
  dataObject.put("dUserName", dName);
  dataObject.put("AttributeInfo", "account," + account);

  DataResultSetImpl userAttribInfo = new DataResultSetImpl();
  userAttribInfo.addField(new DataResultSet.Field("dUserName"), dName);
  userAttribInfo.addField(new DataResultSet.Field
   ("AttributeInfo"), "account," + account);
  userAttribInfo.addRow(dataObject);
  userAttribInfo.addField(new DataResultSet.Field(""), "");

  binder.putLocal("dName", dName);
  binder.putLocal("dUserAuthType", "Local");
  binder.putLocal("dFullName", dFullName);
  binder.putLocal("dPassword", "welcome1");
  binder.addResultSet("UserAttribInfo", userAttribInfo);

  // check in the file
  response = idcClient.sendRequest(userContext, binder);
  result = dName;
  // result = response.getResponseAsString();

  } catch (Exception e) {
   e.getMessage();
  } finally {
   response.close();
  }

  return result;
 }

Maka java lengkapnya akan menjadi seperti berikut

import java.io.File;
import java.io.IOException;
import java.util.Collection;

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.DataResultSet.Field;
import oracle.stellent.ridc.model.TransferFile;
import oracle.stellent.ridc.model.impl.DataObjectImpl;
import oracle.stellent.ridc.model.impl.DataResultSetImpl;
import oracle.stellent.ridc.protocol.ServiceException;
import oracle.stellent.ridc.protocol.ServiceResponse;
import oracle.stellent.ridc.protocol.intradoc.IntradocClient;

public class UcmClient {

 public static final String idcConnectionUrl = "idc://localhost:4444";
 public static final String sysadmin = "weblogic";
 public static final int socketTimeout = 30000;
 public static final int connectionSize = 20;

 private IntradocClient idcClient;
 private IdcClientManager manager;
 private IdcContext userContext;


 public static void main(String[] args) throws IdcClientException, IOException {
  // TODO Auto-generated method stub
  String dName = "David";
  String dFullName = "Isnin David";
  String account = "IT";
  
  UcmClient main = new UcmClient();
  main.checkInDocument();
  main.addUser(dName, dFullName, account);
 }

 public UcmClient() throws IdcClientException {
  // create the manager
  manager = new IdcClientManager();

  // build a client that will communicate using the intradoc protocol
  idcClient = (IntradocClient) manager.createClient(idcConnectionUrl);

  // get the config object and set properties
  idcClient.getConfig().setSocketTimeout(socketTimeout); // 30 seconds
  idcClient.getConfig().setConnectionSize(connectionSize); // 20

  // create a trusted user context
  userContext = new IdcContext(sysadmin);
 }

 public void checkInDocument() throws IdcClientException, IOException {
  // create request
  DataBinder binder = idcClient.createBinder();
  binder.putLocal("IdcService", "CHECKIN_UNIVERSAL");

  // get the binder
  binder.putLocal("dDocTitle", "Test Checkin Document");
  binder.putLocal("dDocName", "Test Checkin Document Using Java");
  binder.putLocal("dDocType", "Document");
  binder.putLocal("dSecurityGroup", "public");

  // add a file
  binder.addFile("primaryFile", new TransferFile(new File("/Test.docx")));

  // check in the file
  ServiceResponse response = idcClient.sendRequest(userContext, binder);

  DataBinder binderResult = response.getResponseAsBinder();
  Collection resultSetNames = binderResult.getResultSetNames();

  for (String name : resultSetNames) {
   System.out.println(name);
  }
 }

 public String addUser(String dName, String dFullName, String account) {
  ServiceResponse response = null;
  String result = "";
  try {
   // create request
   DataBinder binder = idcClient.createBinder();
   binder.putLocal("IdcService", "ADD_USER");

   // define UserAttributeInfo
   DataObjectImpl dataObject = new DataObjectImpl();
   dataObject.put("dUserName", dName);
   dataObject.put("AttributeInfo", "account," + account);

   DataResultSetImpl userAttribInfo = new DataResultSetImpl();
   userAttribInfo.addField(new DataResultSet.Field
                                        ("dUserName"), dName);
   userAttribInfo.addField(new DataResultSet.Field
     ("AttributeInfo"), "account," + account);
   userAttribInfo.addRow(dataObject);
   userAttribInfo.addField(new DataResultSet.Field(""), "");

   binder.putLocal("dName", dName);
   binder.putLocal("dUserAuthType", "Local");
   binder.putLocal("dFullName", dFullName);
   binder.putLocal("dPassword", "welcome1");
   binder.addResultSet("UserAttribInfo", userAttribInfo);

   // check in the file
   response = idcClient.sendRequest(userContext, binder);
   result = dName;
   // result = response.getResponseAsString();

  } catch (Exception e) {
   e.getMessage();
  } finally {
   response.close();
  }

  return result;
 }
}


Demikian untuk blog kali ini, semoga dapat membantu dan bermanfaat. :)

See you next!

Using the IdcCommand Utility to Access Content Server Part1

Pada kesempatan kali ini saya ingin menulis tentang API Oracle Webcenter Content.

Webcenter Content dimanfaatkan untuk penyimpanan dokumen secara elektornik. Dokumen perlu dijaga agar dapat diakses/dicari dengan mudah jika suatu saat nanti diperlukan. Webcenter Content juga dapat digunakan untuk mengatur masa hidup dokumen mulai dari pembuatan, pencarian, konversi, hinga pemusnahan dokumen apabila diperlukan.

Istilah penyimpanan dokumen dalam Webcenter Content adalah Check-in. Profile dokumen dapat dibuat sesuai dengan jenis dokumen untuk lebih memudahkan dalam pengarsipan. Ada banyak cara untuk melakukan check-in dokumen diantaranya adalah:
  1. Check-in langsung di Document Profile Webcenter Content 
  2. Check-in di Webcenter Portal, apabila Webcenter Portal dan Content sudah ter-integrasi.
  3. Check-in dokumen via API dengan menggunakan Java.
Pada kesempatan kali ini saya ingin coba memberikan contoh penggunaan API Webcenter Content menggunakan Java. Cekidot ya guys..

Persiapan
  1. Saya menggunakan Webcenter Content versi 12.2.1.1.0
  2. lib oracle.ucm.ridc.jar
Implementasi
  1. Buat suatu class java dengan nama UcmClient.java
  2. Buat satu method khusus untuk define connection ke Webcenter Content

  3. public static final String idcConnectionUrl = "idc://localhost:4444";
    public static final String sysadmin = "weblogic";
    public static final int socketTimeout = 30000;
    public static final int connectionSize = 20;
    private IntradocClient idcClient;
    private IdcClientManager manager;
    private IdcContext userContext;
    
    public static void main(String[] args) throws IdcClientException, IOException {
        // TODO Auto-generated method stub
        UcmClient main = new UcmClient();
        main.checkInDocument();
    }
     
    public UcmClient() throws IdcClientException {
        // create the manager
        manager = new IdcClientManager();
    
        // build a client that will communicate using the intradoc protocol
        idcClient = (IntradocClient) manager.createClient(idcConnectionUrl);
    
        // get the config object and set properties
        idcClient.getConfig().setSocketTimeout(socketTimeout); // 30 seconds
        idcClient.getConfig().setConnectionSize(connectionSize); // 20
    
        // create a trusted user context
        userContext = new IdcContext(sysadmin);
    }
    

  4. Buat method checkInDocumen()
  5. public void checkInDocument() throws IdcClientException, IOException {
     // create request
     DataBinder binder = idcClient.createBinder();
     binder.putLocal("IdcService", "CHECKIN_UNIVERSAL");
    
     // get the binder
     binder.putLocal("dDocTitle", "Test Checkin Document");
     binder.putLocal("dDocName", "Test Checkin Document Using Java");
     binder.putLocal("dDocType", "Document");
     binder.putLocal("dSecurityGroup", "public");
    
     // add a file
     binder.addFile("primaryFile", new TransferFile(new File("/Test.docx")));
    
     // check in the file
     ServiceResponse response = idcClient.sendRequest(userContext, binder);
    
     DataBinder binderResult = response.getResponseAsBinder();
     Collection resultSetNames = binderResult.getResultSetNames();
      
     for (String name : resultSetNames) {
     System.out.println(name);
     }
    }
    

  6. Buat object main untuk melakukan execute method checkInDocument
  7. public static void main(String[] args) throws IdcClientException, IOException {
     // TODO Auto-generated method stub
     UcmClient main = new UcmClient();
     main.checkInDocument();
    }
    

Berikut adalah source code lengkapnya.

import java.io.File;
import java.io.IOException;
import java.util.Collection;


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.DataResultSet.Field;
import oracle.stellent.ridc.model.TransferFile;
import oracle.stellent.ridc.model.impl.DataObjectImpl;
import oracle.stellent.ridc.model.impl.DataResultSetImpl;
import oracle.stellent.ridc.protocol.ServiceException;
import oracle.stellent.ridc.protocol.ServiceResponse;
import oracle.stellent.ridc.protocol.intradoc.IntradocClient;

public class UcmClient {

 public static final String idcConnectionUrl = "idc://localhost:4444";
 public static final String sysadmin = "weblogic";
 public static final int socketTimeout = 30000;
 public static final int connectionSize = 20;

 private IntradocClient idcClient;
 private IdcClientManager manager;
 private IdcContext userContext;

 public static void main(String[] args) throws IdcClientException, IOException {
  // TODO Auto-generated method stub
  UcmClient main = new UcmClient();
  main.checkInDocument();
 }
 
 
 public UcmClient() throws IdcClientException {
  // create the manager
  manager = new IdcClientManager();

  // build a client that will communicate using the intradoc protocol
  idcClient = (IntradocClient) manager.createClient(idcConnectionUrl);

  // get the config object and set properties
  idcClient.getConfig().setSocketTimeout(socketTimeout); // 30 seconds
  idcClient.getConfig().setConnectionSize(connectionSize); // 20

  // create a trusted user context
  userContext = new IdcContext(sysadmin);
 }
 
 public void checkInDocument() throws IdcClientException, IOException {
  // create request
  DataBinder binder = idcClient.createBinder();
  binder.putLocal("IdcService", "CHECKIN_UNIVERSAL");

  // get the binder
  binder.putLocal("dDocTitle", "Test Checkin Document");
  binder.putLocal("dDocName", "Test Checkin Document Using Java");
  binder.putLocal("dDocType", "Document");
  binder.putLocal("dSecurityGroup", "public");

  // add a file
  binder.addFile("primaryFile", new TransferFile(new File("/Test.docx")));

  // check in the file
  ServiceResponse response = idcClient.sendRequest(userContext, binder);

  DataBinder binderResult = response.getResponseAsBinder();
  Collection resultSetNames = binderResult.getResultSetNames();
  
  for (String name : resultSetNames) {
   System.out.println(name);
  }
 }
}

Ada banyak API yang dapat kita gunakan selain untuk kebutuhan Check-in dokumen, kita juga dapat melakukan create user, delete user hingga pembuatan account. Untuk contoh java create user-nya ada di part2 ya..


Referensi
https://docs.oracle.com/cd/E23943_01/doc.1111/e10807/c21_idc.htm#CSSDK325

Saturday, March 15, 2014

Using UCM's RIDC to Check In Document in UCM from Java

Blog ini akan membahas bagaimana menggunakan API yang disediakan Webcenter Content (Universal Content Management System/UCM) untuk mengakses, menambahkan ataupun memodifikasi dokumen-dokumen yang ada di dalamnya. UCM menyediakan API yang disebut RIDC (Remote Intradoc Client) untuk mengeksekusi fungsionalitas dan fungsi-fungsi yang ada di UCM tanpa perlu langsung mengakses sistem. RIDC cocok digunakan apabila seseorang ingin membangun aplikasi Document Management yang menyimpan dokumen ke UCM, tapi ingin membangun sendiri antar mukanya tanpa menggunakan User Interface UCM.

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!