LAMPIRAN
Code Web Services AS400 Platform : Imports System.Web.Services Imports System.Web.Services.Protocols Imports System.ComponentModel Imports System.Data.OleDb Imports System.Data.Odbc Imports System.Data Imports System.Data.SqlClient ' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. ' <System.Web.Script.Services.ScriptService()> _ <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1) > _ _ Public Class LifeasiaService Inherits System.Web.Services.WebService <WebMethod()> _ Public Function HelloWorld() As String Return "Hello World" End Function <WebMethod()> _ Public Function DisplayDataAS400(ByVal ID As String) As DataTable Dim ds As DataSet = New DataSet() Dim cn As New OleDbConnection("Provider=IBMDA400.DataSource.1;Data Source=#######;;User Id=#######;Password=#######;;Default Collection=#######;") Dim cmd2 As OleDbCommand = New OleDbCommand("select chdrenq.chdrnum, repnum,statcode,cnttype,occdate,register,cntcurr,ptdate,btdate,billchnl,billfre q,mandref,facthous,bankkey,bankacckey " & _ ", instfrom, billcd, agntnum, zservstat, znfopt " & _ "from chdrenq left join chsb on chdrenq.chdrnum = chsb.chdrnum " & _ "left join hpad on chdrenq.chdrnum = hpad.chdrnum " & _ "where chdrenq.chdrnum = '" & ID & "'", cn) cn.Open() Dim reader As OleDbDataReader = cmd2.ExecuteReader Dim MyTable As DataTable = New DataTable("Data") MyTable.Load(reader) reader.Close() cn.Close() Return MyTable 'Return ds End Function
124
125 <WebMethod()> _ Public Function GetDataAS400(ByVal ID As String) As DataTable Dim MyConn As New OleDbConnection("Provider=IBMDA400.DataSource.1;Data Source=#######;;User Id=#######;;Password=#######;;Default Collection=#######;") Dim ds As DataSet = New DataSet() Dim cmd2 As OleDbCommand = New OleDbCommand("select chdrenq.chdrnum, repnum,statcode,cnttype,occdate,register,cntcurr,ptdate,btdate,billchnl,billfre q,mandref,facthous,bankkey,bankacckey " & _ ", instfrom, billcd, agntnum, zservstat, znfopt " & _ "from chdrenq left join chsb on chdrenq.chdrnum = chsb.chdrnum " & _ "left join hpad on chdrenq.chdrnum = hpad.chdrnum " & _ "where chdrenq.chdrnum = '" & ID & "'", MyConn) MyConn.Open() Dim reader As OleDbDataReader = cmd2.ExecuteReader Dim MyTable As DataTable = New DataTable("Data") MyTable.Load(reader) reader.Close() MyConn.Close() Return MyTable 'Return ds End Function End Class
Code Web Services VB6 Platform : Option Explicit Private Const ENC = "http://schemas.xmlsoap.org/soap/encoding/" Private Const XSI = "http://www.w3.org/1999/XMLSchema‐instance" Private Const XSD = "http://www.w3.org/1999/XMLSchema" Private m_EndPointURL As String Private Sub Class_Initialize() m_EndPointURL = "http://localhost:8080/" End Sub Private Sub SetSoapHeader(ByRef Connector As SoapConnector30, _ ByRef Serializer As SoapSerializer30, _ ByVal WSName As String, ByVal service As String, _ ByVal Method As String) Dim URI As String URI = service & "/" & Method Connector.Property("EndPointURL") = m_EndPointURL & WSName Connector.Property("SoapAction") = URI Call Connector.BeginMessage Serializer.Init Connector.InputStream Serializer.StartEnvelope , ENC
126 Serializer.SoapNamespace "xsi", XSI Serializer.SoapNamespace "SOAP‐ENC", ENC Serializer.SoapNamespace "xsd", XSD Serializer.StartBody Serializer.StartElement Method, service, , service & Method End Sub Private Sub SetSoapFooter(ByRef Connector As SoapConnector30, _ ByRef Serializer As SoapSerializer30) Serializer.EndElement Serializer.EndBody Serializer.EndEnvelope Connector.EndMessage End Sub Private Sub AddWSParam( _ ByRef Serializer As SoapSerializer30, sFieldName As String, sValue As String, sService As String, sMethod As String) Serializer.StartElement sFieldName, sService, , sMethod Serializer.WriteString sValue Serializer.EndElement End Sub Private Function ParseCPL_XML2AABRec(nodes As MSXML2.IXMLDOMNode, ClassName As String, StringFields As String) As AABRecordString.CTable Dim rsResult As AABRecordString.CTable Dim strField As String Dim node As MSXML2.IXMLDOMNode Dim childnode As MSXML2.IXMLDOMNode 'Initiate AABRecordstring Set rsResult = New AABRecordString.CTable Set ParseCPL_XML2AABRec = rsResult If StringFields = "" Then Exit Function Do While Not Trim(StringFields) = "" strField = GetToken(StringFields, "|") rsResult.AddFieldDef strField, fdtString Loop 'add recordset from ClassName childnodes Set node = GetNode(nodes, ClassName) Do While Not node Is Nothing Set childnode = node.childNodes.nextNode rsResult.AddNew Do While Not childnode Is Nothing On Error Resume Next rsResult.Record.fields(childnode.baseName) = childnode.Text On Error GoTo 0 Set childnode = childnode.nextSibling Loop rsResult.Update Set node = node.nextSibling Loop Set ParseCPL_XML2AABRec = rsResult Set rsResult = Nothing Set node = Nothing Set childnode = Nothing End Function
127 Private Function GetNode(ByRef node As MSXML2.IXMLDOMNode, _ ByVal tag As String) As MSXML2.IXMLDOMNode 'Get node object base on tag of passing parameter Dim childnode As MSXML2.IXMLDOMNode Set GetNode = Nothing If UCase(Trim(node.baseName)) = UCase(Trim(tag)) Then Set GetNode = node Exit Function End If If node.childNodes.length > 0 Then For Each childnode In node.childNodes Set GetNode = GetNode(childnode, tag) If Not GetNode Is Nothing Then Exit For Next End If End Function 'End of generic method to call CPS webservice Public Function GetDataID(ByVal CodeID As Variant) As Variant '‐‐> Versi Internet/B2B Dim sSQL As String Dim Connector As SoapConnector30 Dim Serializer As SoapSerializer30 Dim Reader As SoapReader30 Dim strFields As String Dim RevNo As Long Dim Remark As String Dim SendDate As String Dim SendUserId As String Set Connector = New HttpConnector30 Set Serializer = New SoapSerializer30 Set Reader = New SoapReader30 strFields = "ID|Data" SetSoapHeader Connector, Serializer, "Service1.asmx", "SOA", "getData" If Trim(CodeID) <> "" Then AddWSParam Serializer, "ID", CStr(CodeID), "SOA", "getData" On Error Resume Next SetSoapFooter Connector, Serializer Reader.Load Connector.OutputStream Set GetDataID = Nothing Exit Function On Error GoTo 0 'SetSoapFooter Connector, Serializer 'Reader.Load Connector.OutputStream If Not Reader.Fault Is Nothing Then Set GetDataID = Nothing Set Connector = Nothing Set Serializer = Nothing Set Reader = Nothing Exit Function End If Set GetDataID = ParseCPL_XML2AABRec(Reader.Dom, "clsData", strFields)
128 Set Connector = Nothing Set Serializer = Nothing Set Reader = Nothing End Function Public Function GetDataDesc(ByVal CodeID As Variant) As String Dim connect As ADODB.Connection Dim rs As ADODB.Recordset Dim q As String Set connect = New ADODB.Connection connect.CommandTimeout = 30 connect.Provider = "sqloledb" connect.open "driver={SQL Server};server= DAFD3AIASQL01\DALDWR7CSQL01;uid=#######;pwd=#######;database=#######" q = "Select Data from data with(nolock) Where ID = '" & CodeID & "'" Set rs = connect.Execute(q) 'If rs.BOF Then GetDataDesc = rs("data") 'End If rs.Close Set rs = Nothing End Function Public Function GetListData() As Variant Dim connect As ADODB.Connection Dim rs As ADODB.Recordset Dim q As String Set connect = New ADODB.Connection connect.CommandTimeout = 30 connect.Provider = "sqloledb" connect.open "driver={SQL Server};server=DAFD3AIASQL01\DALDWR7CSQL01;uid=#######;pwd=#######;database=### ####" q = "Select * from data with(nolock)" Set rs = connect.Execute(q) 'If rs.BOF Then GetListData = rs 'End If rs.Close Set rs = Nothing End Function Public Function GetToken(strSource As String, strSeparator As String) As String Dim I As Integer If strSeparator = "" Then GetToken = strSource strSource = ""
129 Else I = InStr(strSource, strSeparator) If I > 0 Then GetToken = Left(strSource, I ‐ 1) strSource = Mid(strSource, I + Len(strSeparator)) Else GetToken = strSource strSource = "" End If End If End Function Public Function HelloWorld() As String HelloWorld = "Pesan Hello World Dikirim dari WSDL HelloWorld()" End Function
Code Web Services .NET Platform : Imports System.Web.Services Imports System.Web.Services.Protocols Imports System.ComponentModel Imports System.Data Imports System.Data.SqlClient ' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. ' <System.Web.Script.Services.ScriptService()> _ <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1) > _ _ Public Class Service1 Inherits System.Web.Services.WebService <WebMethod()> _ Public Function HelloWorld() As String Return "Hello World" End Function <WebMethod()> _ Public Function DisplayData(ByVal ID As String) As DataSet Dim MyConn As New SqlConnection("server=DAFD3AIASQL01\DALDWR7CSQL01;user=#######;password=####### ;database=#######") Dim ds As DataSet = New DataSet() Dim cmd2 As SqlDataAdapter = New SqlDataAdapter(" select " & _ "isnull(nld_kode_surat,'') 'Code', " & _ "isnull(nld_kode_sts,'') 'Letters Type', " & _ "isnull(t2_teks_1,'') 'Status' " & _ " From " & _ "negativelist_dtl (nolock) " & _ "inner join negativelist (nolock) on nl_nopolis = nld_nopolis " & _
130 "inner join tablems2 (nolock) on t2_key_3=nld_kode_surat " & _ "where " & _ "nld_nopolis ='" & ID & "' " & _ "and nld_flag=1 " & _ "and isnull(nl_tgl_ubah,'01/01/1900') = isnull(nld_tgl_ubah,'01/01/1900') " & _ "and t2_key_1='NEGLST' " & _ "and t2_key_2='lettercode' ", MyConn) cmd2.Fill(ds, "data") Return ds End Function <WebMethod()> _ Public Function GetData(ByVal ID As String) As DataSet Dim MyConn As New SqlConnection("server=DAFD3AIASQL01\DALDWR7CSQL01;user=#######;password=####### ;database=#######") Dim ds As DataSet = New DataSet() Dim cmd2 As SqlDataAdapter = New SqlDataAdapter(" select distinct " & _ "isnull(nl_nopolis,''), " & _ "isnull(nl_status,''), " & _ "isnull(nl_keterangan,''), " & _ "isnull(nl_id_buat,''), " & _ "isnull(nl_tgl_buat,'01/01/1900'), " & _ "isnull(nl_id_ubah,''), " & _ "isnull(nl_tgl_ubah,'01/01/1900') " & _ " From " & _ "negativelist_dtl (nolock) " & _ "inner join negativelist (nolock) on nl_nopolis = nld_nopolis " & _ "inner join tablems2 (nolock) on t2_key_3=nld_kode_surat " & _ "where " & _ "nld_nopolis ='" & ID & "' " & _ "and nld_flag=1 " & _ "and isnull(nl_tgl_ubah,'01/01/1900') = isnull(nld_tgl_ubah,'01/01/1900') " & _ "and t2_key_1='NEGLST' " & _ "and t2_key_2='lettercode' ", MyConn) cmd2.Fill(ds, "data") Return ds End Function End Class
Code Menu Utama Window Application : Public Class MainForm Protected Overrides ReadOnly Property CreateParams() As CreateParams Get Dim cp As CreateParams = MyBase.CreateParams Const CS_DBLCLKS As Int32 = &H8 Const CS_NOCLOSE As Int32 = &H200 cp.ClassStyle = CS_DBLCLKS Or CS_NOCLOSE Return cp
131 End Get End Property Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click Me.Close() End Sub Private Sub LifeAsiaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LifeAsiaToolStripMenuItem.Click ReleaseForm.Close() AccentForm.Close() LifeasiaForm.Show() End Sub Private Sub ReleaseToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReleaseToolStripMenuItem.Click LifeasiaForm.Close() AccentForm.Close() ReleaseForm.Show() End Sub Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click Dim MsgB As String MsgB = "This application just a sample of implementation SOA." & vbCr & "Created by Dedy ‐ Winarto" MsgBox(MsgB, MsgBoxStyle.Information, "About") End Sub Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.TopMost = True End Sub Private Sub AccentToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AccentToolStripMenuItem.Click ReleaseForm.Close() LifeasiaForm.Close() AccentForm.Show() End Sub End Class
Code Menu AS400 Window Application : Public Class LifeasiaForm Private Sub Search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Search.Click Dim d1 As New LifeasiaServices.LifeasiaServiceSoapClient
132 Dim MyData As DataTable ContractNo.Text = "" SPNo.Text = "" ContractStatus.Text = "" RCD.Text = "" PropED.Text = "" NFOpt.Text = "" ContractRegister.Text = "" Currency.Text = "" PremiumStatus.Text = "" LastPayment.Text = "" LastIssue.Text = "" IssueDt.Text = "" TimeStamp.Text = "" NextBill.Text = "" PayMeth.Text = "" BillFreq.Text = "" TotalPremium.Text = "" Dreksa.Text = "" UnitHold.Text = "" MandateAcc.Text = "" MandateStatus.Text = "" FactHouse.Text = "" BankCode.Text = "" AccountNo.Text = "" Payor.Text = "" PaidTD.Text = "" BilledTD.Text = "" ProductCode.Text = "" AgentNo.Text = "" AgentName.Text = "" SSCode.Text = "" SSName.Text = "" MyData = New DataTable("Data") MyData = d1.GetDataAS400(Int(PolicyNo.Text)) If MyData.Rows.Count >= 1 Then ContractNo.Text = MyData.Rows(0)(0).ToString() SPNo.Text = MyData.Rows(0)(1).ToString() If MyData.Rows(0)(2).ToString() = "WD" Then ContractStatus.Text = "Withdrawn" ElseIf MyData.Rows(0)(2).ToString() = "PR" Then ContractStatus.Text = "Proposal" Else ContractStatus.Text = MyData.Rows(0)(2).ToString() End If PremiumStatus.Text = "Proposal" RCD.Text = MyData.Rows(0)(4).ToString() PropED.Text = MyData.Rows(0)(4).ToString() NFOpt.Text = "" ContractRegister.Text = MyData.Rows(0)(5).ToString() Currency.Text = MyData.Rows(0)(6).ToString()
133 PaidTD.Text = MyData.Rows(0)(7).ToString() BilledTD.Text = MyData.Rows(0)(8).ToString() LastPayment.Text = MyData.Rows(0)(15).ToString() IssueDt.Text = "" LastIssue.Text = "" Dreksa.Text = "" UnitHold.Text = "" TimeStamp.Text = "" NextBill.Text = MyData.Rows(0)(16).ToString() Payor.Text = "" PayMeth.Text = MyData.Rows(0)(9).ToString() BillFreq.Text = MyData.Rows(0)(10).ToString() TotalPremium.Text = "" MandateAcc.Text = MyData.Rows(0)(11).ToString() MandateStatus.Text = "" FactHouse.Text = MyData.Rows(0)(12).ToString() BankCode.Text = MyData.Rows(0)(13).ToString() AccountNo.Text = MyData.Rows(0)(14).ToString() ProductCode.Text = MyData.Rows(0)(3).ToString() AgentNo.Text = MyData.Rows(0)(17).ToString() AgentName.Text = "" SSCode.Text = MyData.Rows(0)(18).ToString() SSName.Text = "" Else MsgBox("Data not Found!", MsgBoxStyle.Information, "Information") End If Dim MyList As DataTable MyList = d1.DisplayDataAS400(Int(PolicyNo.Text)) DataGridView1.DataSource = MyList.DefaultView 'MyDataGrid.DataBind() End Sub End Class
Code Menu VB6 Window Application : Public Class AccentForm Dim CuAdd1 As String Dim CuAdd2 As String Dim CuAdd3 As String Dim CuAdd4 As String Dim CuAdd5 As String Dim CuPostalCode As String Dim CuPhone As String Dim CoAdd1 As String
134 Dim CoAdd2 As String Dim CoAdd3 As String Dim CoAdd4 As String Dim CoAdd5 As String Dim CoPostalCode As String Dim CoPhone As String Private Sub Search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Search.Click Dim d1 As New AccentServices.AccentServiceSoapClient() Dim sex As String Dim MyData As DataSet MyData = New DataSet() 'MsgBox(PolicyNo.Text, MsgBoxStyle.Information) MyData = d1.GetAccentData(PolicyNo.Text) ClientNo.Text = "" ClientName.Text = "" PlaceOB.Text = "" DateOB.Text = "" IdentityNo.Text = "" Occupation.Text = "" Marital.Text = "" Nationality.Text = "" Email.Text = "" SegmentCode.Text = "" SMale.Checked = False SFemale.Checked = False MaritalLabel.Visible = False Address1.Text = "" Address2.Text = "" Address3.Text = "" Address4.Text = "" Address5.Text = "" PhoneNo.Text = "" PostalCode.Text = "" CompanyCode.Text = "" If MyData.Tables(0).Rows.Count >= 1 Then ClientNo.Text = MyData.Tables("data").Rows(0)(0).ToString() ClientName.Text = MyData.Tables("data").Rows(0)(1).ToString() PlaceOB.Text = MyData.Tables("data").Rows(0)(2).ToString() DateOB.Text = MyData.Tables("data").Rows(0)(3).ToString() IdentityNo.Text = MyData.Tables("data").Rows(0)(4).ToString() Occupation.Text = MyData.Tables("data").Rows(0)(5).ToString() Marital.Text = MyData.Tables("data").Rows(0)(6).ToString() If MyData.Tables("data").Rows(0)(6).ToString() = "M" Then MaritalLabel.Text = "Married" MaritalLabel.Visible = True ElseIf MyData.Tables("data").Rows(0)(6).ToString() = "W" Then MaritalLabel.Text = "Widowed" MaritalLabel.Visible = True ElseIf MyData.Tables("data").Rows(0)(6).ToString() = "S" Then
135 MaritalLabel.Text = "Single" MaritalLabel.Visible = True End If sex = MyData.Tables("data").Rows(0)(7).ToString() If sex = "M" Then SMale.Checked = True Else SFemale.Checked = True End If Nationality.Text = MyData.Tables("data").Rows(0)(8).ToString() Email.Text = MyData.Tables("data").Rows(0)(9).ToString() CoAdd1 = MyData.Tables("data").Rows(0)(10).ToString() CoAdd2 = MyData.Tables("data").Rows(0)(11).ToString() CoAdd3 = MyData.Tables("data").Rows(0)(12).ToString() CoAdd4 = MyData.Tables("data").Rows(0)(13).ToString() CoAdd5 = MyData.Tables("data").Rows(0)(14).ToString() CoPostalCode = MyData.Tables("data").Rows(0)(15).ToString() CoPhone = MyData.Tables("data").Rows(0)(16).ToString() If MyData.Tables("data").Rows(0)(17).ToString() IsNot "" Then CuAdd1 = MyData.Tables("data").Rows(0)(17).ToString() CuAdd2 = MyData.Tables("data").Rows(0)(18).ToString() CuAdd3 = MyData.Tables("data").Rows(0)(19).ToString() CuAdd4 = MyData.Tables("data").Rows(0)(20).ToString() CuAdd5 = MyData.Tables("data").Rows(0)(21).ToString() CuPostalCode = MyData.Tables("data").Rows(0)(22).ToString() CuPhone = MyData.Tables("data").Rows(0)(23).ToString() Address1.Text = CoAdd1 Address2.Text = CoAdd2 Address3.Text = CoAdd3 Address4.Text = CoAdd4 Address5.Text = CoAdd5 PostalCode.Text = CoPostalCode PhoneNo.Text = CoPhone If CuAdd1 = CoAdd1 Then Button1.Visible = False Else Button1.Visible = True End If Else CuAdd1 = "" Address1.Text = CoAdd1 Address2.Text = CoAdd2 Address3.Text = CoAdd3 Address4.Text = CoAdd4 Address5.Text = CoAdd5 PostalCode.Text = CoPostalCode PhoneNo.Text = CoPhone Button1.Visible = False End If SegmentCode.Text = ""
136 CompanyCode.Text = "" Else MsgBox("Data not Found!", MsgBoxStyle.Information, "Information") End If MyData = d1.DisplayAccentData(PolicyNo.Text) DataGridView1.DataSource = MyData.Tables("data").DefaultView 'MyDataGrid.DataBind() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If CuAdd1 = Address1.Text Then Address1.Text = CoAdd1 Address2.Text = CoAdd2 Address3.Text = CoAdd3 Address4.Text = CoAdd4 Address5.Text = CoAdd5 PostalCode.Text = CoPostalCode PhoneNo.Text = CoPhone Else Address1.Text = CuAdd1 Address2.Text = CuAdd2 Address3.Text = CuAdd3 Address4.Text = CuAdd4 Address5.Text = CuAdd5 PostalCode.Text = CuPostalCode PhoneNo.Text = CuPhone End If End Sub End Class
Code Menu .NET Window Application : Public Class ReleaseForm Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim d1 As New ReleaseServices.Service1SoapClient() Dim MyData As DataSet MyData = New DataSet() MyData = d1.GetData(Int(txtpolicy.Text)) txtcontract.Text = "" txtstatus.Text = "" txtdesc.Text = "" txtreqid.Text = "" txtreqdate.Text = "" txtChangeID.Text = "" txtChangeDate.Text = ""
137 If MyData.Tables(0).Rows.Count >= 1 Then txtcontract.Text = MyData.Tables("data").Rows(0)(0).ToString() txtstatus.Text = MyData.Tables("data").Rows(0)(1).ToString() txtdesc.Text = MyData.Tables("data").Rows(0)(2).ToString() txtreqid.Text = MyData.Tables("data").Rows(0)(3).ToString() txtreqdate.Text = MyData.Tables("data").Rows(0)(4).ToString() txtChangeID.Text = MyData.Tables("data").Rows(0)(5).ToString() txtChangeDate.Text = MyData.Tables("data").Rows(0)(6).ToString() Else MsgBox("Data not Found!", MsgBoxStyle.Information, "Information") End If MyData = d1.DisplayData(Int(txtpolicy.Text)) MyDataGrid.DataSource = MyData.Tables("data").DefaultView 'MyDataGrid.DataBind() End Sub End Class
138
Hasil wawancara : 1. Problem apa yang sedang dialami oleh PT. XYZ Insurance di dalam ruang lingkup IS? Problem utama yang saat ini sedang dialami oleh perusahaan adalah kita masih menggunakan arsitektur IT yang kaku. Yang dimaksud dengan arsitektur yang kaku adalah aplikasi dan database masih terpecah ke dalam silos – silos aplikasi sesuai dengan fungsi bisnisnya. Contohnya kita memliki aplikasi product processor Unitlink dengan platform AS/400 dan juga Accident and Health dengan platform VB6. Kemudian kita juga memiliki aplikasi – aplikasi laiinyya seperti untuk collection, administrative surat, print polis dan sebagainya. Padahal setiap aplikasi memiliki ketergantungan data yang pada akhirnya kita paksakan dengan menggunakan transfer data. 2. Kemudian apa Solusi yang akan kita kemukakan terkait dengan masalah ini? Seperti yang sudah kita bahas pada meeting bahwa kita akan menggunakan teknologi arsitektur SOA. Pertama, ini sesuai dengan arahan regional kita untuk menghindari adanya perubahan yang mempengaruhi arsitektur kita. Kedua, seperti yang sudah kita analisa bersama, SOA memberikan sebuah komunikasi yang fleksibel antar aplikasi dan platform karena menggunakan bahasa XML yang universal 3. Apakah methodology yang akan kita gunakan dalam perancangan dan penerapan SOA ini? Kita akan focus pada methodology SOMA (Service Oriented Modelling Architecture) yang dikeluarkan oleh IBM. Secara umum, SOMA hanya menyediakan rangkaian proses kerja secara high level view saja, dimulai dari business requirement hingga deployment. Saya rasa ni cukup worthed, hanya saja kita perlu memikirkan kembali tools – tools apa saja yang dapat digunakan untuk mendukung flow SOMA tersebut 4. Kemudian kemana kita akan menerapkannya pertama kali? Mengingat banyak sekali aplikasi yang dimiliki oleh perusahaan Ya, kita akan focus ke Customer Service Management sebagai tahap awal dari keseluruhan roadmap project kita. Customer Service memiliki aplikasi khusus yang mereka gunakan yaitu : CARES. Salah satu fungsi utama yang digunakan oleh aplikasi tersebut adalah Inquiry. Nasabah menghubungin Customer Service kita, dan menggunakan CARES untuk melayani nasabahanya. Disinilah, banyak sekali kebutuhan dari aplikasi CARES terhadap data dari aplikasi – aplikasi yang lainnya 5. Masalah apa yang sering timbul terkait dengan Customer Service Management?
139
Pertama, ketergantungan aplikasi CARES terhadap aplikasi dari database yang lainnya sangat besar. Mengapa? Karena CARES mengkonsumsi data yang disediakan oleh aplikasi – aplikasi yang lainnya, sehingga ada sedikit saja perubahan yang terjadi , maka CARES juga harus mengikutinya. Disni terlihat besarnya ketergantungan antara aplikasi yang satu dengan aplikasi yang lainnya. Hal ini tentu sangat menyulitkan dan merepotkan bagi para system analyst dan programmer untuk selalu menyesuaikan dengan situasi dan kondisi yang ada. Kedua, CARES belum memiliki fasilitas untuk inquiry data ke ACCENT. Akibatnya Customer Service masih harus mmbuka manual aplikasi tersebut untuk kemudian mencari data sesuai dengan kebutuhan customer Ketiga, teknologi pembacaan data yang dilakukan antara CARES dengan data LifeAsia masih sebatas menggunakan technology Screen Scrapping, sehingga customer service harus melakukan koneksi terlebih dahulu ke aplikasi LifeAsia. Teknologi ini mau kita tinggalkan karena sudah old dan memiliki performance yang buruk. Keempat, dipengaruhi factor ketiga, kita pada akhirnya lebih sering menggunakan data warehouse sebagai penyedia data pengganti LifeAsia karena lebih cepat meskipun datanya sudah H-2 6. Maka sebagai tahap awal kita akan melakukan penerapan SOA pada Customer Service Management. Ya, saya harap kalian bisa membantu saya menerapkan SOA disini terutama pada Customer Service Managementnya. Tidak perlu sampai level production, cukup hingga level development sebagai trigger atau langkah awal untuk maju ke fase selanjutnya. Tentu saja waktu dan ruang lingkup kalian tidak akan cukup untuk menerapkan SOA dari semua sisi. 7. Setelah SOA berhasil dirancang dan diterapkan di Customer Service Management, bagaimana hasilnya? Hasilnya sangat memuaskan. Pertama dengan adanya web service ini dapat menghilangkan ketergantungan antara aplikasi CARES dengan yang lainnya. Ditambah dengan kita dapat menghemat proses development. Dari sisi performance juga ok. Jika lihat speednya cukup stabil bahkan lebih cepat dari teknologi screen scrapping. Dengan ini kita bias mendapatkan data secara real time 8. Apakah akan diterapkan di level production? Tentunya, namun tidak semudah itu. Masih banyak yang harus dipertimbangkan seperti misalnya security dan sebagainya. Mungkin kalian lebih tau mengenai hal
140
ini. Kita akan lakukan research lebih dalam mengenai hal ini. Jika kalian bisa membantu tentunya sangat bagus. 9. Bagaimana Rencana kedepan ? Apabila ini berhasil kita terapkan dengan baik di production kelak, tentu akan kita terapkan di area bisnis yang lainnya agar proses bisnis dan development bias berjalan lebih baik lagi. Dan sesuai usul kalian dengan semakin banyaknya service yang ada, tools seperti ESB sepertinya mulai harus dipertimbangkan