Andri Yadi

A geeky technopreneur, trying to do something big with his startup

January 2008 - Posts

  • A Very Simple OBA with VSTO v3, Web Service, LINQ to SQL

    Yesterday I've been confirmed by Microsoft Indonesia to deliver a training about Visual Studio Tools for Office (VSTO) in Jakarta on Feb 28, 2007. So, I think it would be good to prepare it from now, start from building a simple Office Business Application (OBA) but yet useful. Here we go.

    What I'm about to explain is a walkthrough to develop an application called Letter Numbering Word Add-In. As the name implied, the software is a Microsoft Word 2007 Add-In used to get business letter number from server to ensure global business letter numbering across a company or organization. This Add-In is displayed in Add-Ins tab of Word ribbon and has a button to get letter number for specified letter type from server and put the received number to active document. The server will track last number of specified letter type and give the next number to ensure there's no duplicate number in database. Database operation in server-side will be done using LINQ to SQL. Communication between Word Add-In and server will be done via Web Service.  Pretty straightforward huh? In this walkthrough, I won't write much about the overview of used technologies. I suggest you to read some intro on other place.

    As a recaps, the used technologies are:

    1. VSTO v3 delivered in Visual Studio 2008 Team System or as separated installation
    2. LINQ to SQL
    3. Web Service

    As we know, most companies put some number to formal letters before they are sent to other parties. Letter number is used to easily track sent or received letters. The number need to be unique, so it must be managed centrally. The Word Add-In will look like:

    image

    After I select the letter type and click Get Letter No. button, a number will be written at current cursor in active document:

    image

    Server-Side

    At server-side, two web service methods are deployed to get array of letter type and get the next number for selected letter type. These are steps to build the web service.

    1. Open your holy Visual Studio 2008. Create a new web site or web application project. Name it as let say AdmWebService

    2. Create a new database. Right click to web site name and Add New Item. Then in template list, click SQL Server Database, name it Adm.mdf.

    3. Create two tables: LetterType an LetterNumbers. The definition of those tables are:

    LetterType table:

    image

    LetterNumbers table:

    image

    LetterType column of LetterNumbers table is a foreign key to LetterTypeCode column of LetterType table. Input some records to those tables.

    4. Add New LINQ to SQL Classes. Right click to web site name, Add New Item, and select LINQ to SQL Classes, name it as Adm.dbml. The designer will be displayed. Then select those two tables from Server Explorer window and drag to designer. You will have this:

    image

    5. Create the web service.

    Still at web site project, add a new web service an name it AdmWebService.asmx. At code behind of that web service (AdmWebService.asmx.cs) prepare two web methods: GetLetterTypes() to return list of LetterType objects and GetLetterNo() to return letter number string. The codes are:

    [WebMethod]
    public List<LetterType> GetLetterTypes()
    {
         AdmDataContext db = new AdmDataContext();
         var letterTypes = from lt in db.LetterTypes select lt;
         return letterTypes.ToList<LetterType>();
    }
           

    As you can see, that method is basically used to query all letter types to LetterType table in Adm database. The query is specified using LINQ sintax. I won't explain about the query, you need to understand LINQ itself.

    The codes of GetLetterNo() method are:

    [WebMethod]
    public string GetLetterNo(String letterTypeCode)
    {
        AdmDataContext db = new AdmDataContext();

        var lastNo = from l in db.LetterNumbers
                where l.LetterType == letterTypeCode
                select l.LetterNo;

        long lastLetterNo = 0;
        if (lastNo.Max().HasValue) {
            lastLetterNo = lastNo.Max().Value;
        }

        String letterNoFormat = ConfigurationManager.AppSettings["letterNoFormat"];

        String generatedLetterNo = letterNoFormat;
        generatedLetterNo = generatedLetterNo.Replace("{letterNoSeq}", (lastLetterNo + 1).ToString());
        generatedLetterNo = generatedLetterNo.Replace("{letterType}", letterTypeCode);
        generatedLetterNo = generatedLetterNo.Replace("{month}", DateTime.Now.Month.ToString());

        generatedLetterNo = generatedLetterNo.Replace("{year}", DateTime.Now.Year.ToString());

        LetterNumber ln = new LetterNumber();
        ln.LetterNo = lastLetterNo + 1;
        ln.LetterType = letterTypeCode;
        ln.GeneratedLetterNo = generatedLetterNo;

        db.LetterNumbers.InsertOnSubmit(ln);
        db.SubmitChanges();

        return generatedLetterNo;
    }

    The logic of those code are:

    a. Get last number of specified letter type code

    b. Get letter number format from application setting of web.config. You need to add a AppSetting in web.config like this:

    image

    Change the format to suit your need

    c. Construct the new number

    d. Save resulted new number to database

    e. Return the new number

     

    So, the complete codes of the web service are:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Xml.Linq;
    using System.Configuration;
    using System.Text;
    using System.Text.RegularExpressions;

    namespace DyCode.WebService
    {
        /// <summary>
        /// Summary description for Service1
        /// </summary>
        [WebService(Namespace = "
    http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [ToolboxItem(false)]
        // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
        // [System.Web.Script.Services.ScriptService]
        public class AdmWebService : System.Web.Services.WebService
        {

            [WebMethod]
            public string GetLetterNo(String letterTypeCode)
            {
                AdmDataContext db = new AdmDataContext();

                var lastNo = from l in db.LetterNumbers
                        where l.LetterType == letterTypeCode
                        select l.LetterNo;

                long lastLetterNo = 0;
                if (lastNo.Max().HasValue) {
                    lastLetterNo = lastNo.Max().Value;
                }

                String letterNoFormat = ConfigurationManager.AppSettings["letterNoFormat"];

                String generatedLetterNo = letterNoFormat;
                generatedLetterNo = generatedLetterNo.Replace("{letterNoSeq}", (lastLetterNo + 1).ToString());
                generatedLetterNo = generatedLetterNo.Replace("{letterType}", letterTypeCode);
                generatedLetterNo = generatedLetterNo.Replace("{month}", DateTime.Now.Month.ToString());

                generatedLetterNo = generatedLetterNo.Replace("{year}", DateTime.Now.Year.ToString());

                LetterNumber ln = new LetterNumber();
                ln.LetterNo = lastLetterNo + 1;
                ln.LetterType = letterTypeCode;
                ln.GeneratedLetterNo = generatedLetterNo;

                db.LetterNumbers.InsertOnSubmit(ln);
                db.SubmitChanges();

                return generatedLetterNo;
            }

            [WebMethod]
            public List<LetterType> GetLetterTypes()
            {
                AdmDataContext db = new AdmDataContext();
                var letterTypes = from lt in db.LetterTypes
                                  select lt;
                return letterTypes.ToList<LetterType>();
            }
        }
    }

    6. Test your web service. Right click to web service and click View in Browser, you should have this screen:

    image

    Click to a method, invoke, and see the returned value.

    Now, your web service should be prepared.

     

    Word 2007 Add-In

    Now it's time to develop Word 2007 Add-In to consume above web service.

    1. Still in same solution, Add New Project, select Word 2007 Add-in in the template list, and name it WordLetterNumbering. If the project template is not available, make sure you have VSTS 2008 or install VSTO template.

    image

    2. Add Service Reference. To be able to consume AdmWebService, you need to add service reference. Right click to WordLetterNumbering project, then click Add Service Reference and a dialog will be displayed. At dialog, click Discover button to search available web services in current solution. You should have this screen. Type the namespace, let say DyCodeAdmServiceReference or whatever you want.

    image

    3. Create Ribbon. What I like the most about VSTO v3 & VS2008 is you are allowed to design ribbon visually.

    Right click to project name, Add New Item, select Ribbon (Visual Designer) from project templates, and name it LetterNumberingRibbon.cs. Then design the ribbon so it will look like this.

    image

    As you see, there's two control in the ribbon: DropDown and Button ribbon control. You can drag ribbon controls from toolbox, at Office Ribbon Controls tab. Name those controls to: dropDownLetterType for DropDown and buttonGetLetterNo for Button.

    4. Write ribbon code. At Ribbon Designer, right click and click View Code. Write these codes:

        public partial class LetterNumberingRibbon : OfficeRibbon
        {
            public LetterNumberingRibbon()
            {
                InitializeComponent();
                dropDownLetterType.Label = String.Empty;
            }

            private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
            {
                bindLetterTypeDropDown();
            }

            private void bindLetterTypeDropDown()
            {
                DyCodeAdmServiceReference.AdmWebServiceSoapClient serv = new DyCodeAdmServiceReference.AdmWebServiceSoapClient();
                DyCodeAdmServiceReference.LetterType[] types = serv.GetLetterTypes();

                RibbonDropDownItem item = new RibbonDropDownItem();
                item.Label = "- Letter Type -";
                item.Tag = String.Empty;
                dropDownLetterType.Items.Add(item);

                foreach(DyCodeAdmServiceReference.LetterType t in types) {
                    item = new RibbonDropDownItem();
                    item.Label = t.Name;
                    item.Tag = t.LetterTypeCode;
                    dropDownLetterType.Items.Add(item);
                }
            }

            private void buttonGetLetterNo_Click(object sender, RibbonControlEventArgs e)
            {
                DyCodeAdmServiceReference.AdmWebServiceSoapClient serv = new DyCodeAdmServiceReference.AdmWebServiceSoapClient();
                if (!String.IsNullOrEmpty(dropDownLetterType.SelectedItem.Tag.ToString()))
                {
                    String letterNo = serv.GetLetterNo(dropDownLetterType.SelectedItem.Tag.ToString());
                    Globals.ThisAddIn.Application.ActiveDocument.Content.InsertAfter(letterNo);
                }
            }
        }

    Off course you need to add click event handler to Get Letter No. button, name it: buttonGetLetterNo_Click

    5. I think that's it. Now you can try to debug your project.

     

    Publish Word Add-in

    Beside ribbon visual designer, one of cool features about VSTO v3 and VS2008 is simplification of deployment. Back to old days with VSTO 2005, it's so hard to deploy VSTO project. You need to create a setup project, manually set CAS policy, etc, etc. Now, it's as simple as click Publish button. Here are the steps.

    1. Right click to Word Add-in project, and click Publish. You'll see this dialog. Specify the location to publish the application. Then click next.

    image

    2. Next screen allow you to select default installation path.

    image

    As you can see, it allow to install add-in from web site, UNC, or CD-ROM/Flash Disk/DVD. Choose last option. Click Next and Finish.

    3. In publish folder, you'll have these files. Double click to setup.exe, follow the instructions, and you are ready to use the add-in.

    image

     

    That's it. Hopefully this post will give you a quick intro about VSTO v3, especially to build and deploy a Word 2007 Add-in, also other technology like LINQ to SQL.

    Have a nice try. You can download this walkthrough solution files at: http://dycode.com/files/folders/codesamples/entry74.aspx

    Share this post: | | | |
  • Akhirnya, Proposal iMULAi-pun Selesai

    That's right…Finally, my proposal for iMULAi is finished. I just submitted it five minutes ago. I think I gonna post this blog in Bahasa Indonesia.

    Antara perasaan senang, gemetar, dan tegang, saya klik link yang bertuliskan "Jika anda sudah siap untuk mendaftarkan inovasi anda, Upload disini" pada situs iMULAi untuk meng-upload proposal yang sudah lebih dari 1 minggu dibuat. Lalu tampillah form yang harus diisi untuk men-submit proposal. Dengan agak gemetaran (sebenarnya bukan karena tegang, tapi karena kelaparan, karena melek semalaman sampai pagi, belum sarapan, semalam makan gak terlalu banyak, hanya dua bungkus A M**d dan segelas kopi yang menemani), saya isi form-nya, dan memilih 2 file yang akan di-upload. Memilih file-nya juga agak gemetaran, kuatirnya salah upload file. Setelah lengkap semuanya…eng ing eng…saatnya menekan tombol Save..This is it..this is the moment, there's no turning back :) Now or never..dan saya klik tombol keramat itu..Jebret ada error..ternyata file yang di-upload harus doc atau zip untuk proposal teknis, dan xls atau zip untuk proposal finansial. File yang barusan saya upload adalah docx dan xlsx, terpaksa harus me-save as kedua file tersebut ke dalam format Office 2003. Setelah siap semua, saatnya meng-upload lagi….eng ing eng…akhirnya berhasil ter-upload. Itulah pekerjaan 1 minggu lebih, hanya di-upload dalam waktu kurang dari 1 menit (emangnya mau berapa lama upload-nya kang?). Tinggal tunggu hasilnya. Semoga yang terbaiklah yang menang.

    Ide…ternyata tidak cukup ada di kepala. Menuangkannya dalam bentuk tulisan, bisa menarik orang yang membacanya, apalagi sampai bisa menang dana hibah…it's very challenging. Terlepas menang atau tidaknya, setidaknya otak ini sudah lebih ringan, setidaknya hati ini terpuaskan, tantangan itu terlewati sudah. Sudah lama ingin menuangkan ide tersebut menjadi tulisan, baru sekarang kesampaian. Ah…saatnya kembali ke rumah setelah di kantor yang luar biasa dingin ini semalaman. Akan kugauli kasur dan bantal sepuasnya hari ini. Melupakan sejenak kesibukan, sampai saatnya otak bekerja lagi ntar malam.

    Kepada juri-juri iMULAi, selamat menilai. Dengar-dengar sudah ada 30an proposal yang masuk…wah banyak juga ya. That's good. Berarti banyak orang-orang pintar dengan ide-ide cemerlang di tanah air tercinta ini. Senang bisa bersaing dengan kalian :)

    Bagi yang penasaran (kali aja ada yang penasaran) what my proposal (on behalf of my company) is all about..The title is Port Management Portal (PORTMAP). Here it is…

     

    Gambaran Inovasi

    Latar Belakang

    Indonesia adalah sebuah negara kepulauan terbesar di dunia dengan 17.509 pulau, sekitar 11.500 diantaranya didiami oleh manusia. Pulau-pulau tersebut dipisahkan oleh laut dan selat dan diapit oleh Samudera Pasifik dan India. Begitu luasnya laut Indonesia membuat Indonesia disebut sebagai negara maritim terbesar di dunia. Sebagai negara maritim dan perbatasannya dengan Samudera Pasifik dan India membuat Indonesia dapat diakses melalui laut dengan mudah dari mana saja. Hal tersebut membuat Indonesia telah menjadi menjadi perlintasan dan persinggahan dunia sejak dahulu kala. Sejak zaman kerajaan Sriwijaya Indonesia telah ramai dikunjungi para pedagang dari Tionghoa dan Arab untuk berdagang sehingga perekonomian tumbuh terutama di sekitar wilayah pelabuhan. Di berbagai peradaban, wilayah di sekitar pelabuhan laut dan sungai selalu menjadi pusat perdagangan sehingga berdampak pada pertumbuhan ekonomi di daerah tersebut.

    Pelabuhan mempunyai peran dan fungsi yang sangat penting dalam pergerakan dan pertumbuhan perekonomian suatu negara. Sejak awal perkembangan ekonomi dunia, pelabuhan dalam bentuknya yang paling sederhanapun telah memerankan diri sebagai faktor penting pergerakan ekonomi yang ditandai pertukaran arus barang atau logistik.

    Di Indonesia, perkembangan kuantitas dan kualitas pelabuhan juga semakin menunjukkan kecenderungan yang menggembirakan. Hampir di setiap kawasan atau daerah yang sedang mengalami pertumbuhan ekonomi dinamis, bisa dipastikan hadir pelabuhan pantai yang menopang perkembangan tersebut. Saat ini tercatat ada 141 buah pelabuhan bertaraf internasional di seluruh wilayah nusantara. Ke depannya, dari 141 pelabuhan tersebut akan ditetapkan 25 pelabuhan sebagai pelabuhan utama (hub port) yang diproyeksikan akan menjadi pintu penting kontak perdagangan (ekspor-impor) dengan manca negara.

    Pentingnya peran dan fungsi pelabuhan bagi Indonesia mengharuskan dilakukannya perbaikan dan pengembangan di berbagai sisi, mulai dari regulasi, manajemen, sampai infrastruktur. Salah satu sisi infrastruktur yang perlu segera mendapat perhatian adalah teknologi informasi (Information Technology – IT). Menurut beberapa referensi, pelabuhan berskala internasional seperti South Caroline State Port, tidak hanya didukung oleh infrastruktur pelabuhan yang lengkap, tapi juga ditunjang oleh infrastruktur teknologi informasi. Teknologi informasi dapat meningkatkan kemudahan dan efisiensi baik bagi customer maupun pengelola pelabuhan. Software aplikasi yang di-publish di internet dapat digunakan oleh customer atau agent kapal untuk melakukan booking penggunaan jasa kepelabuhanan secara online, dan kemudian dapat melihat schedule dan progress pelayanan. Di sisi lain, pengelola pelabuhan dapat dimudahkan dalam pengelolaan pelabuhan, seperti: scheduling & planning, monitoring, dan pelaporan kinerja pelabuhan kepada pihak manajemen.

    Dari 141 pelabuhan besar yang ada di Indonesia, seberapa banyak yang sudah berbasiskan IT dalam manajemennya? Tidak ada data yang pasti tentang itu. Akan tetapi, menurut pengetahuan kami, salah satu pelabuhan BUMN terbesar dan terdalam di Indonesia, Cigading Port, yang dikelola oleh PT. Krakatau Bandar Samudera (PT. KBS), sebelumnya belum memiliki software aplikasi untuk mengelola operasional pelabuhannya. Baru pada awal tahun 2007 PT. KBS berhasil men-deploy sebuah sistem yang mereka namakan Vessel Scheduling Application (VESSA). Sebagai catatan, pelabuhan ini sering dijadikan benchmark bagi pelabuhan-pelabuhan lainnya di Indonesia, terutama pelabuhan bulk cargo. Jika Cigading Port, yang notabene sering dijadikan benchmark, baru saja mengimplementasikan sistem manajemen pelabuhan, mungkin saja masih banyak pelabuhan-pelabuhan lain yang belum menerapkan sistem serupa.

    Sekarang mari kita bayangkan adanya sebuah sistem software yang generik yang dapat digunakan untuk mengakomodasi kebutuhan begitu banyak pelabuhan di Indonesia, bahkan di dunia. Manajemen pelabuhan pada dasarnya sama. Manajemen pelabuhan pada dasarnya selalu berurusan dengan hal-hal seperti: penjadwalan dan pengelolaan sandar kapal, pergerakan kapal, bongkar muat cargo dan container, dan pelayanan lainnya. Dengan demikian, ide untuk membuat sistem generik semacam itu bukanlah sebuah mimpi belaka.

    DyCode sendiri adalah pengembang dan implementor sistem VESSA yang telah disinggung di atas. Proses bisnis yang diakomodasi dalam VESSA memang masih spesifik untuk keperluan Cigading Port. Akan tetapi, karena Cigading Port sering dijadikan tolak ukur bagi pelabuhan lainnya di Indonesia, maka dapat diperkirakan bahwa proses bisnis di pelabuhan lainnya tidak jauh berbeda. Selain itu, kami pernah membandingkan fungsionalitas VESSA dengan software yang dibuat oleh perusahan Norwegia, Navtek AS, dengan produknya yang bernama Port Management Information System (PIMS), yang telah diimplementasikan di beberapa negara seperti Inggris, Malaysia, dan Saudi Arabia. Kami mendapati ternyata fungsionalitas keduanya tidak jauh berbeda. Artinya, proses bisnis manajemen pelabuhan di luar negeri juga tidak terlalu berbeda dengan pelabuhan dalam negeri.

    Kami menyakini bahwa seiring dengan semakin banyaknya implementasi sistem serupa di pelabuhan-pelabuhan lain, akan semakin banyak referensi proses bisnis yang bisa diakomodasi. Sehingga, pengembangan sistem manajemen pelabuhan yang generik untuk mengelola mayoritas pelabuhan menjadi lebih dimungkinkan.

    Inovasi

    Seperti tersirat di atas, inovasi yang kami usulkan adalah pengembangan sebuah sistem manajemen pelabuhan. Sistem tersebut akan dibangun segenerik mungkin sehingga bisa mengakomodasi berbagai proses bisnis mayoritas pelabuhan di Indonesia dan di dunia. Sistem akan diwujudkan sebagai aplikasi berbasis web dan diharapkan dapat diimplementasikan sebagai shared service yang ditawarkan dengan model bisnis Application Service Provider (ASP). Oleh karena itu, sistem ini kami namakan Portal Manajemen Pelabuhan atau Port Management Portal atau disingkat PORTMAP.

    Objectives

    Sasaran pengembangan PORTMAP adalah tersedianya sebuah sistem yang dapat mengakomodasi kebutuhan pengelola pelabuhan untuk mengoptimalkan manajemen operasional pelabuhan serta memberikan value-added services kepada pengguna jasa kepelabuhanan (customer). Sasaran selanjutnya adalah men-deploy sistem tersebut sebagai portal internet yang dapat dipakai bersama (shared) oleh berbagai pengelola pelabuhan dalam rangka melayani customer dan mengelola operasional pelabuhan masing-masing. Melalui portal ini pula para customer dapat memilih pelabuhan yang diinginkan untuk melayani kebutuhan sandar dan bongkar/muat cargo/container atau naik/turun penumpang mereka.

    Fungsionalitas

    Berdasarkan sasaran di atas dapat disimpulkan setidaknya ada dua pihak yang terlibat dalam PORTMAP, yaitu customer dan pengelola pelabuhan. Berikut ini dijelaskan lebih rinci sasaran fungsionalitas PORTMAP menurut persfektif kedua pihak tersebut.

    Customer

    Customer yang dimaksud di sini adalah perwakilan/pemilik kapal atau biasa disebut agent, pemilik barang (cargo owner), dan perusahaan bongkar muat (PBM). Fungsionalitas PORTMAP yang diperuntukan bagi customer adalah sebagai berikut.

    1. Registration

      Memungkinkan customer untuk melakukan registrasi ke dalam sistem PORTMAP. Begitu registrasi tersebut disetujui, customer akan memiliki account yang dapat digunakan untuk mengakses layanan-layanan di dalam PORTMAP.

    2. Booking

      Mengingat resource pelabuhan yang terbatas dan demi keteraturan, customer harus melakukan booking layanan sandar kapal atau layanan lainnya sebelum dapat dilayani. PORTMAP harus memudahkan customer untuk melakukan booking, baik melalui portal dengan cara mengisi form booking, atau dengan mengirim email atau pesan SMS dengan format tertentu. Dengan tersedianya ketiga access channel tersebut (portal, email, SMS) memungkinkan customer untuk dapat mem-booking dari mana saja dan kapan saja selama terhubung dengan internet atau berada dalam coverage area jaringan selular.

    3. Booking List

      Selain dikirim melalui email dan/atau SMS, status booking juga dapat dilihat oleh customer pada halaman booking list. Setiap customer tidak bisa melihat list booking milik customer lainnya.

    4. Schedule

      Berdasarkan data booking yang masuk ke PORTMAP pengelola pelabuhan akan melakukan scheduling dan membuat rencana layout sandar kapal. Hasil scheduling dan rencana layout sandar kapal dapat dilihat dan diunduh secara online oleh customer.

    5. Service Progress Monitoring

      PORTMAP memungkinkan customer untuk memonitor progress pelayanan, seperti: waktu-waktu penting, progress bongkar muat cargo, dan layanan-layanan lain yang digunakan. Waktu-waktu penting yang dimaksud adalah: Time of Arrival (TA), Time of Berthing (TB), Commenced Time (CT), Estimated Berthing Time (EBT), Shifting Time, sampai Time of Depature (TD). Progress bongkar/muat cargo ditampilkan per cargo dan per hari, berapa berat (tonnage) cargo yang dibongkar/muat, progress sampai saat ini, sisa tonnage, serta estimasi dan aktual laju bongkar/muat. Melalui fitur ini, customer juga dapat mengetahui status layanan, apakah masih dalam pelayanan (servicing) atau sudah selesai (served).

    Pengelola Pelabuhan

    Dalam mengelola operasional pelabuhan, pengelola biasanya memiliki dua perspektif: sebelum pelayanan (pre-service) dan pelayanan sampai selesai (servicing). Usaha-usaha yang dilakukan terhadap kapal atau customer dari booking sampai sesaat sebelum kedatangan kapal semuanya tercakup ke dalam Pre-service. Sementara semua usaha yang dilakukan sejak kapal tiba sampai berangkat lagi tercakup ke dalam Servicing. Adalah penting untuk memisahkan keduanya guna mempartisi data dan proses bisnis. Data yang diperoleh dalam proses Pre-service, seperti estimasi-estimasi sangat diperlukan untuk mengestimasi pendapatan dan menentukan prioritas pelayanan. Kadangkala prioritas pelayanan diperlukan mengingat keterbatasan resource pelabuhan. Data yang berkembang dalam proses Servicing merupakan data aktual, perlu dibedakan dengan data planning. Oleh karena itu, fungsionalitas bagi pengelola pelabuhan dibagi menjadi dua kelompok besar sebagai berikut.

    Pre-service Management
    1. Booking List

      Booking yang dilakukan oleh semua customer dapat dilihat oleh pengelola pada halaman ini. Dari sini pengelola dapat melihat data detail, meng-edit, menghapus, dan memberikan respon status untuk setiap booking. Setiap perubahan status akan dinotifikasi ke customer terkait dalam bentuk email dan/atau SMS. Status yang dikirim dapat disertai dengan pesan atau catatan tertentu.

    2. Planning

      Booking yang sudah dikonfirmasi dapat dilanjutkan ke tahap planning. Planning pada dasarnya melengkapi data booking dengan data tambahan yang disusulkan oleh customer dan data estimasi, seperti: estimasi lama bersandar (Estimation of Berthing Time) dan Estimated Time of Departure (ETD), yang dapat diestimasi dari tonnage cargo yang dibongkar/muat dan laju bongkar/muat perhari (berdasarkan kemampuan dan ketersediaan alat). Berdasarkan tarif yang berlaku dapat diestimasi pendapatan untuk setiap kapal.

    3. Scheduling

      Kapal-kapal yang sudah dilengkapi data planning-nya dan sudah di-approve untuk bersandar perlu segera dijadwalkan dan diatur tata letaknya pada dermaga. Untuk keperluan ini, pengelola dibantu dengan tool visual sehingga posisi kapal dapat ditempatkan dan diketahui dengan pasti nantinya pada dermaga-dermaga pelabuhan. Rancangan tool tersebut ditunjukan seperti gambar 1.

      Pada gambar tersebut diperlihatkan posisi kapal-kapal yang diwakili dengan gambar mirip peluru. Posisi horizontal menunjukan posisi kapal terhadap dermaga, sementara posisi horizontal adalah posisi waktu estimasi kedatangan (ETA). Tool ini direncanakan berbasis Microsoft Excel untuk memudahkan development, penggunaan, dan deployment.

    Servicing Management

    Semua fungsionalitas yang berhubungan dengan pelayanan aktual kapal tercakup dalam kategori ini, yaitu sebagai berikut.

    1. Start Service

      Saat kapal tiba (arrival) di pelabuhan, saatnya pelayanan dimulai. Fungsi ini digunakan untuk menandai mulainya pelayanan.

    2. Service Time Management

      Pencatatan waktu-waktu penting selama pelayanan, seperti: Time of Arrival (TA), Time of Berthing (TB), Commenced Time, Shifting Time, sampai Time of Depature (TD).

    3. Service Data Management

      Memungkinkan manajemen data selama pelayanan, seperti: bongkar muat cargo, penggunaan equipment (crane, conveyor), penggunaan air dan listrik, pengisian bahan bakar, delay time, dan aktivitas lainnya.

    4. Cargo Management

      Halaman ini memusatkan fungsi manajemen data cargo, termasuk menambahkan atau mengurangi data cargo di luar rencana awal (booking).

    5. Equipment Usage

      Menampilkan dan memperbaiki data penggunaan equipment. Dari sini diketahui berapa lama sebuah equipment telah digunakan sehingga bisa diketahui nilai produktivitas setiap equipment dan kapan waktunya untuk dilakukan maintenance.

    6. End Service

      End Service digunakan untuk menandai akhir pelayanan terhadap sebuah kapal. Pada saat mengakhiri pelayanan, juga dicatat waktu-waktu yang berhubungan dengan akhir pelayanan, seperti Unberthing Time, dan Time of Departure. Waktu tersebut dapat digunakan untuk menghitung lama penggunaan jasa sandar kapal.

    7. Service List

      Menampilkan semua data kapal yang sedang (servicing) dan sudah dilayani (served).

    Itulah sekelumit sasaran fungsionalitas yang akan diimplementasikan di dalam PORTMAP.

      

    Implementasi

    Setelah selesai dibangun, PORTMAP nantinya dapat diimplementasikan dalam 2 skema, yaitu:

    Customizable Solution

    PORTMAP dapat dipasarkan dan diimplementasikan sebagai customizable solution untuk setiap pelabuhan yang memerlukannya. Sebagai customizable solution, item data, proses bisnis, dan bentuk reporting dalam PORTMAP akan disesuaikan dengan kebutuhan pelabuhan yang mengimplementasikannya.

    Shared Service

    Alternatif implementasi lainnya adalah men-deploy PORTMAP sebagai shared service application dalam bentuk portal internet. Dengan skema demikian, diharapkan:

    • PORTMAP dapat digunakan secara bersama oleh semua perusahaan pelabuhan yang berlangganan (subscribe).
    • Karena sifatnya yang dibagi pakai (shared), perusahaan pelabuhan tidak harus membeli PORTMAP dan cost software ditanggung bersama di antara sesama pengguna.
    • Membebaskan perusahaan pelabuhan dari biaya deployment dan maintenance software karena hal tersebut sepenuhnya menjadi tanggung jawab pengelola PORTMAP.
    • PORTMAP dapat menjadi single entry bagi customer untuk menggunakan jasa-jasa kepelabuhanan dari pelabuhan yang diinginkan dan dapat berpindah ke pelabuhan lain dengan mudah melalui satu gerbang.

    Implementasi seperti ini menawarkan model bisnis Application Service Provider (ASP). Nantinya perlu studi kelayakan lebih lanjut untuk melihat feasibilitas model bisnis seperti itu.

    Alternatif implementasi manapun yang diambil, arsitektur deployment PORTMAP tetap mirip seperti dapat dilihat pada gambar 3.

      

    Hambatan Industri Yang Teratasi

    Dalam kaitannya dengan manajemen operasional pelabuhan berbasis IT, setidaknya ada dua fakta yang kami temui di lapangan, yaitu:

    1. Masih banyak pelabuhan, terutama di Indonesia, yang belum menerapkan sistem informasi berbasis IT untuk mendukung operasionalnya.
    2. Belum banyak solusi software aplikasi manajemen pelabuhan yang tersedia di pasaran. Bahkan untuk pasar Indonesia, sampai saat ini kami belum pernah mendengar atau menemukan solusi serupa. Untuk pasar duniapun, tidak banyak produsen yang menyediakan solusi ini. Salah satu pemain di luar negeri, tepatnya negera tetangga Malaysia, adalah Portrade AS dengan solusinya Integrated Port Management System (IPMS). Jika Malaysia bisa membuat solusi tersebut, mengapa kita tidak.

    Melihat kondisi tersebut, PORTMAP diharapkan dapat berkontribusi dalam penyediaan solusi manajemen operasional pelabuhan. Baik diimplementasikan sebagai customizable solution maupun shared service, diharapkan PORTMAP dapat membantu peningkatan kualitas pengelolaan pelabuhan di Indonesia dan di dunia. Dengan demikian diharapkan perolehan devisa negara dapat meningkat dan berkontribusi secara signifikan terhadap perekonomian negara.

    Implementasi PORTMAP diharapkan dapat mengatasi hambatan-hambatan yang dialami industri pelabuhan, baik secara internal maupun ekternal. Beberapa hambatan atau permasalahan yang dimaksud adalah sebagai berikut.

    1. Terjadi banyak duplikasi data di berbagai bagian operasional. Perpindahan data antara proses bisnis masih perlu dilakukan secara manual.
    2. Kesulitan dan kesalahan dalam proses scheduling dan planning
    3. Kesulitan untuk mengantisipasi delay dan waiting time
    4. Paperwork intensive
    5. Kesulitan memantau kondisi real di pelabuhan secara realtime, seperti posisi dan pergerakan kapal, progress bongkar muat, dan lain-lain
    6. Membuat dan menghitung berbagai jenis laporan secara manual, seperti Berth Occupancy Ratio (BOR), adalah pekerjaan yang menyita waktu
    7. Kesulitan customer untuk memperoleh informasi jadwal secara cepat dan mudah
    8. Customer tidak dapat melihat progress pelayanan secara realtime

    Sebenarnya masih banyak permasalahan lain yang lebih teknis yang terjadi di lapangan. Sekarang pertanyaannya, bagaimana permasalahan di atas dapat diatasi dengan implementasi PORTMAP? Kami jelaskan secara detail pada bagian Potensi Dampak Inovasi di bawah ini.

     

    Potensi Dampak Inovasi

    Implementasi PORTMAP berpotensi mengubah cara kerja manajemen operasional pelabuhan yang sebelumnya manual, redundan, paperwork-intensive, dan tidak terintegrasi menjadi lebih baik dengan berbasiskan software yang terintegrasi, otomatis, mudah, dan cepat.

    Untuk memperlihatkan bagaimana perubahan ke arah lebih baik yang dimaksud di atas, lagi-lagi kami melihatnya berdasarkan dua perspektif, yaitu:

    Pengelola Pelabuhan

    PORTMAP dapat mengubah cara kerja pengelola pelabuhan dalam mengelola pelabuhannya diantaranya dalam hal-hal sebagai berikut.

    1. Booking Management

      Sebelum berbasiskan sistem informasi, pengelolaan booking customer cukup menyulitkan. Data booking memang sudah dicatat menggunakan software Spreadsheet, tapi untuk keperluan notifikasi status booking tetap harus dilakukan manual melalui telepon, fax, atau email. Data tersebut juga tidak bisa langsung digunakan untuk keperluan scheduling. Dengan berbasiskan sistem seperti PORTMAP, pengelolaan booking menjadi terpusat. Notifikasi status dapat langsung dilakukan dari halaman booking list semudah mengklik tombol. Data booking dapat langsung digunakan dalam proses scheduling.

    2. Scheduling & Planning

      Proses scheduling tanpa bantuan sistem sangat time-consuming dan berkemungkinan terjadi kesalahan. Contraint-constraint tidak bisa di-apply, seperti time collision antara dua kapal atau lebih dan penempatan kapal pada dermaga yang kedalamannya tidak mencukupi. Estimasi pendapatan juga susah dihitung secara cepat, sehingga tidak bisa membuat prioritas pelayanan. PORTMAP dapat berperan mengurangi kerumitan dan kesalahan scheduling dengan menyediakan fungsionalitas scheduling secara visual dan mudah. Dengan PORTMAP juga diharapkan planning menjadi jauh lebih mudah dan cepat.

    3. Realtime Service Monitoring

      Tanpa sistem seperti PORTMAP, tidak dimungkinkan untuk memantau progress pelayanan secara realtime, seperti: progress bongkar/muat cargo. Posisi kapal-kapal pada dermaga juga tidak dapat diketahui secara realtime. Dengan bantuan PORTMAP, perhitungan progress tonnage bongkar/muat dapat dilakukan secara realtime.

    4. Paperless Administration

      Dalam proses bisnis pengelolaan pelabuhan, sangat banyak paperwork yang terjadi dimulai dari proses booking sampai selesai pelayanan. PORTMAP dapat menjadi media kolaborasi semua pihak sehingga paperwork dapat dikurangi.

    5. Reporting

      Merekap secara manual data kunjungan kapal dan penggunaan dermaga untuk menghitung Berth Occupancy Ratio (BOR) misalnya, dapat menguras waktu dan tenaga. Dengan bantuan PORTMAP semua reporting dapat dihasilkan seketika dan dapat dipastikan kebenarannya.

    Customer

    Dengan berbasiskan PORTMAP, diharapkan customer akan merasakan pengalaman yang berbeda dalam penggunaan jasa kepelabuhanan. Mulai dari booking, pemantauan pelayanan, sampai selesai pelayanan, semuanya dapat dilakukan secara online, mudah, dan cepat. Selain mendapati pengalaman baru yang lebih baik, kepuasan dan kepercayaan customer akan meningkat.

     

    Indikator Keberhasilan

    Keberhasilan implementasi PORTMAP dapat diukur berdasarkan besaran atau indikator sebagai berikut.

    Indikator Kuantitatif

    1. Waiting Time

      Waiting time adalah sebuah besaran waktu yang menyatakan lamanya kapal menunggu sejak kedatangannya (arrival) sampai bisa merapat ke dermaga (berthing). Ketika kapal mengalami waiting time, maka pengelola pelabuhan akan dikenai denda yang cukup besar perjamnya. Sehingga semakin kecil waiting time tentu semakin baik. Untuk menjadi pelabuhan berskala internasional, rata-rata waiting time di sebuah pelabuhan harus maksimal 1 jam. Waiting time di beberapa pelabuhan di Indonesia masih cukup besar, yaitu antara 2 – 4 jam.

      Perbaikan pada proses scheduling akan berpengaruh pada pengurangan waiting time. Salah satu indikator keberhasilan implementasi PORTMAP adalah berkurangnya waiting time.

    2. Berth Occupancy Ratio

      Ada sebuah besaran yang digunakan untuk menunjukan efisiensi penggunaan/utilisasi dermaga, yaitu Berth Occupancy Ratio (BOR), dimana semakin tinggi persentase BOR tentu semakin baik. Selain berpengaruh pada pengurangan waiting time, perbaikan pada scheduling juga akan berpengaruh pada peningkatan BOR.

    3. Paperwork

      Dengan imlementasi PORTMAP diharapkan terjadi pengurangan yang siginifikan terhadap jumlah dokumen yang beredar secara fisik. Oleh karena itu, pengurangan paperwork juga bisa menjadi indikator keberhasilan PORTMAP. Paperless administration telah terbukti mampu meningkatkan produktifitas dan penghematan di beberapa pelabuhan, seperti Pelabuhan Busan di Korea, yang mampu menghemat lebih dari 25 juta dolar US dari biaya logistik.

    Indikator Kualitatif

    1. Tingkat Kepuasan Customer

      Value-added services yang disediakan PORTMAP diharapkan dapat meningkatkan kepuasan customer.

    2. Birokrasi

      Implementasi PORTMAP diharapkan dapat mengurasi birokrasi dalam penggunaan layanan dengan cara mengurangi frekuensi tatap muka antara customer dan pengelola serta pengurangan paperwork. Hal tersebut juga dapat menghindari kemungkinan korupsi, kolusi, dan nepotisme (KKN) dan pungutan liar.

    3. Corporate Image

      Implementasi sistem seperti PORTMAP dapat meningkatkan corporate image dari perusahaan pengelola pelabuhan mengingat berbagai efisiensi yang ditawarkan dan pelayanan yang lebih baik.

     

    Untuk mengukur indikator-indikator tersebut tentu saja memerlukan waktu dan studi kasus. Begitu selesai dibangun, PORTMAP perlu segera diimplementasikan setidaknya di sebuah pelabuhan. Kami memprediksi setidaknya diperlukan waktu 6 bulan sejak deployment supaya PORTMAP bisa dioperasionalkan secara optimal. Setelah selang waktu tersebut, baru dapat diukur apakah indikator-indikator di atas mengalami perbaikan ke arah yang positif guna mengetahui tingkat keberhasilan PORTMAP.

     

    Lampiran

    Lampiran Gambaran Inovasi

    Rancangan PORTMAP Scheduling Tool

    Rancangan PORTMAP Scheduling Tool berbasis Microsoft Excel 2007

    Gambar 1 – Rancangan PORTMAP Scheduling Tool berbasis Microsoft Excel 2007

     

    System Architecture

    PORTMAP System Architechture

    Gambar 2 – PORTMAP System Architechture

     

    Deployment Architecture

    PORTMAP Deployment Architecture

    Gambar 3 – PORTMAP Deployment Architecture

     

    Demikian proposal kami buat iMULAi. All comments are welcome very much. Semoga ide ini berguna dan bisa sedikit berkontribusi demi menyokong kemajuan perekonomian bangsa kita (nasionalis banget gua ya ;) ).

    Updated on Monday, Jan 7, 2008 03:59

    Share this post: | | | |
  • iMULAi, 38 Hours More and Counting Down

    For you who are writing down your idea to be submitted to iMULAi, you still have 38 hours from now and counting down. As you might already know, iMULAI extends the proposal submission until Jan 5, 2008 18:00 WIB. For you who haven't know what iMULAi is or have known but still have no idea to submit, just forget iMULAi :) coz I think you won't have enough time to finish the document. It's not enough to have an idea, writing it down and complete the required documents is quite challenging. I need to spare time almost one week to prepare it. Even right now, I'm still writing one section called "Success Indicator" or "Indikator Keberhasilan" in Bahasa. I still can't find words to describe about it. Preparing financial application and reporting document is also time and brain consuming. I am used to prepare budgeting proposal for projects, but when it come to propose budgeting for research, it's not easy since all item must be as realistic as possible. Above those all, I'm not good at writing. Also, right now I'm quite busy to finish a project in Bontang. I and my team have some difficulties to deploy developed software to production server that is only caused by some bu**s**t rules.

    Maybe some of you are wondering what is my idea all about. The idea is related to following things:

    • Indonesia is the largest archipelagic country in the world having 17,509 islands. Those islands are separated by sea and bay and surrounded by two large oceans, that make Indonesia is the largest maritime country in the world.
    • There are 141 maritime ports in Indonesia.
    • Many maritime ports in Indonesia are still not based on IT in managing their operational.
    • What if there is a information system application that can be used to manage such a many ports in Indonesia, not to mention in the world? That system is so generic so that it can be implemented to any ports with minimal customization or configuration.

    It think you've get the idea. Maybe I'll post the complete idea after I finish it.

    This idea is dedicated to my company, DyCode, since we have had this idea since several months ago. I submit this idea to iMULAi on behalf of my company, not on behalf myself or other team. For all DyCoders, please support me and pray so that this idea hopefully has chance to win. I dedicate this to y'all.

    OK, it's almost 4 in the morning, I should finish this blog and continue to finish the last section. Hopefully tomorrow there're no any obstacles so that I can submit the idea. iMULAi team, please wait my proposal :)

    iMULAi…here we come.

    Share this post: | | | |
    Posted Jan 04 2008, 03:02 AM by andriyadi with no comments
    Filed under: