Showing posts with label webcenter content. Show all posts
Showing posts with label webcenter content. 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!



Understanding Webcenter Content - Create Custom Profile and Fields


Oracle Webcenter Content atau yang dulu dikenal dengan UCM merupakan sebuah Document Management System yang dapat dipakai untuk mengatur life-cycle dokumen. Disini, kita dapat menyimpan (check-in) dokumen elektronik untuk disimpan, di-download, versioning, edit atau diatur masa hidupnya. 

Untuk check in dokumen, secara default, sudah ada metadata yang dapat kita input untuk menentukan detail suatu dokumen (misal: author, tanggal, comment dsb.). Akan tetapi biasanya ini tidak cukup apabila kita datang ke suatu client yang memiliki dokumen khusus dan metadata yang berbeda dengan apa yang disediakan. Untuk itu, kita dapat membuat Profile untuk membedakan metadata dari dokumen-dokumen yang akan disimpan ke dalam UCM.

Misal KTP, data isiannya adalah Nomor KTP, Nama Lengkap, Tanggal Lahir, Golongan Darah dst. Sedangkan NPWP hanya terdiri dari Nama Lengkap dan Nomor NPWP. Untuk kebutuhan ini, kita dapat membuat 2 buah Profile yaitu KTP dan NPWP, dimana ketika user meng-input dokumen ini, hanya field-field yang bersangkutan yang akan muncul. Hal ini memudahkan pencarian dan juga pengelompokan dokumen.

Dalam blog ini, saya akan mencoba menjelaskan bagaimana menambahkan Field tambahan diluar yang sudah ada, dan juga membuat profile Check in baru dengan input yang sesuai metadata yang diperlukan.

Pertama-tama, Log in dengan menggunakan account Administrator.

Buka Accordion Administration -> Admin Applets -> Configuration Manager


Disini anda dapat melihat daftar field-field yang ada di sistem, Table, View dan juga menambahkan Rules dan Profile di UCM.


Di Tab Information Fields, klik tombol Add untuk menambahkan field baru. Jika penasaran, field-field ini akan juga ditambahkan ke database anda, di tabel DOCMETA, dengan nama kolom x<NAMA_FIELD> (misal xNamaDokumen).

Disini kita akan menambahkan 2 Field baru yaitu NamaDokumen dan TipeDokumen. NamaDokumen akan berupa input text biasa, sedangkan TipeDokumen adalah drop down list yang dapat dipilih valuenya.



Untuk membuat field yang berupa Drop Down value atau Select One Choice, pilih check box Enable Option List. Kemudian tekan tombol Configure.


Pilih Use Option List, beri nama list tersebut, lalu klik tombol Edit.


Layar akan terbuka. Disini kita dapat mengisi Value dari drop down TipeDokumen. Setiap value dipisahkan dengan tanda 'Enter'. Misal kita ingin field TipeDokumen memiliki pilihan Hasil Scan, Word, Excel, PDF dan Lain-lain, maka di layar Option List kita memasukkan value berikut:

Hasil Scan
Word
Excel
PDF
Lain-lain



Rules -> Add


Tambahkan name dan description untuk Rule baru yang akan dibuat.


Pilih metadata yang akan ditampilkan bersama dengan rule ini. Rule yang berbeda dapat diset untuk menampilkan kumpulan metadata yang berbeda. Dalam kasus ini, kita akan meng-include NamaDokumen dan TipeDokumen yang kita buat sebelumnya.


Kita dapat menentukan field-field yang kita pilih apakah field tersebut editable, hidden, required dsb.


Misal kita memilih atribut tersebut menjadi Required, kita dapat memasukkan Required Message untuk membantu user.


Hasil akhirnya adalah field-field yang kita tambahkan, berikut tipe-nya pada rule yang telah kita buat.



Berikutnya kita akan membuat sebuah field baru untuk men-trigger perubahan rule yang kita buat. Kita akan membuat field bernama ProfileSelector yang berupa List. List ini nantinya digunakan untuk memilih Rule mana yang akan ditampilkan untuk proses check-in dokumen.




Disini kita akan membuat pilihan Tipe Dokumen 1 dan Tipe Dokumen 2


Apabila telah selesai, kembali ke tab Profiles. Pilih Trigger Field, disini kita akan men-specify field mana yang akan digunakan sebagai trigger perubahan Profile. Gunakan field ProfileSelector yang baru kita buat.


Buat profile berdasarkan value dari field ProfileSelector. Misal kita membuat Profile KTP untuk pilihan Tipe Dokumen 1, atau NPWP untuk Tipe Dokumen 2.



Pilih rules di bagian Rules. Disini kita mementukan rules mana (dan atribut apa saja berdasarkan rule tersebut) yang akan dimunculkan di profile ini.


Setelah selesai refresh page Webcenter anda. Kita dapat melihat profile dokumen yang baru kita buat di New Check In -> Nama Profile yang kita buat


Apabila kita memilih profile tersebut, kita dapat melihat bahwa field check in terdiri dari metadata wajib dan juga metadata yang telah kita specify sebelumnya di bagian profile.

Field-field ini juga dapat di-custom agar memiliki label yang berbeda, ditampilkan atau tidak, dsb. Semuanya dapat dilakukan dengan menggunakan applet Configuration Manager.


Di bagian bawah, kita dapat melihat dua field yang baru kita buat: Nama Dokumen dan Tipe Dokumen. Nama Dokumen berupa input text biasa dan Tipe Dokumen merupakan Select One Choice dengan pilihan Hasil Scan, Word, Excel, PDF dan Lain-lain, sesuai dengan yang telah kita definisikan sebelumnya.



Anda dapat mengulangi langkah-langkah diatas untuk membuat halaman check in dengan metadata custom sesuai dengan kebutuhan anda.

Selamat mencoba dan semoga membantu!


Thursday, September 12, 2013

Menyimpan Attachment BPM ke dalam Webcenter Content


Post kali ini akan menjelaskan bagaimana cara menyimpan attachment yang ada di Oracle BPM ke dalam Webcenter Content. Secara default, BPM telah menyediakan fungsi attachment untuk workflownya. Akan tetapi, apabila kita menggunakan default attachment BPM, file yang telah kita upload sebelumnya tidak dapat digunakan kembali apabila kita menginisiasi proses baru.
Apabila pengguna aplikasi BPM kita membuat task baru, dia harus terus menerus meng-attach kembali dokumennya, meskipun sebelumnya dia telah pernah meng-attach dokumen tersebut. Menyebalkan bukan?

Selain itu, apabila kita sudah mempunyai Webcenter Content, akan sangat membantu apabila semua dokumen yang berjalan dalam workflow BPM juga tersimpan dalam Content. Hal ini akan memudahkan dalam Reuse dokumen, mempropagasi security content ke BPM dan juga gruping dokumen. 

Ikuti langkah-langkah berikut untuk mengintegrasikan BPM dan WebCenter Content anda:

  1. Buka Enterprise Manager untuk domain SOA anda. Buka Domain -> SOA -> soa-infra. Klik kanan soa-infra -> SOA Administration -> pilih Workflow Config. 
  2. Detil Workflow Config terbuka -> klik 'More Workflow Configuration Properties'. 
  3. Buka Workflow Config -> Human Workflow dan parameter-parameter human workflow di BPM dapat di-specify disini 
  4. Kita akan fokus pada parameter UcmIdcUrl yang merupakan parameter yang akan digunakan untuk 'menembak' alamat Content Server kita. 
  5. Klik dan masukkan alamat content server kita idc://<hostame>:4444 
  6. Next, kita set port content server kita untuk listen di port 4444. Buka Domain -> Webcenter -> Content -> Content Server -> Oracle Webcenter Content. Klik dan masukkan IP filter dan port (dalam konteks ini 4444). Restart Managed Server UCM_server anda. 
  7. Berikutnya kita membuat credential mapping di domain SOA kita. Buka weblogic domain ->  bpm_domain (nama domain anda) -> klik kanan -> Security -> Credential. 


  8. Create Map -> Masukkan WF-ADMIN-USER. Kemudian Create Key -> Masukkan WF-ADMIN-USER sebagai map, dan WF-ADMIN-CREDENTIAL sebagai key name, type = password, username = weblogic, password = password anda 
  9. Create Workflow anda. Buat Human Task dan buka tab Documents. Pastikan checkbox yang ada di tab ini dicentang, hal ini untuk menandakan bahwa Human Task yang anda buat akan menyimpan dokumennya ke Webcenter Content yang telah dikonfigurasi di langkah nomor 5. Autogenerate form untuk human task ini.
     
  10. Deploy project BPM anda dan buka BPM workspace. Klik Process yang anda buat di langkah nomor 9 dan klik tombol + di attachment.
  11. Anda dapat melihat bahwa akan ada pilihan baru untuk 'Upload file to Webcenter Content' yang mana akan menyimpan attachment anda ke dalam Webcenter Content. Selain itu, kita dapat menggunakan pilihan "Associate Webcenter Content document" untuk menggunakan kembali dokumen yang sudah pernah kita upload sebelumnya di Webcenter Content. 


    That's all guys, semoga membantu!