Detail Antarmuka COM dan Ekstensi Plugin Asprova

4 Oktober 2011

COMインターフェイス

Penjadwal produksi Asprova menyediakan antarmuka COM yang memungkinkan Anda memperluas fungsionalitas dengan file EXE atau plugin (DLL). Dengan ini, Anda dapat memperoleh objek proyek yang diekspansi dalam memori dan mengakses objek tabel tingkat bawah Asprova.

Inti Asprova menyediakan Hook untuk menjalankan plugin pada saat terjadinya suatu peristiwa, dan kunci plugin yang merupakan titik akses untuk peristiwa ini setara dengan hook do_action atau apply_filters di WordPress.

Diagram terstruktur tentang penjadwal produksi, tabel PSI, dan perencanaan beban di Indonesia

Penjadwal Produksi di Indonesia

Perencanaan produksi dan perencanaan beban saling terkait erat dan memerlukan verifikasi berbasis kuantitas. Penting untuk membandingkan jumlah produksi,…

続きを見る

Yang dipelajari dari artikel ini

  • Asprova dapat memperluas fungsinya melalui antarmuka COM.
  • File DLL harus ditempatkan di folder yang sama dengan EXE Asprova.
  • Kunci plugin mirip dengan hook do_action di WordPress.
  • Plugin Asprova didaftarkan dengan empat argumen.
  • Untuk mengakses Jet Database Engine dari VB, gunakan ADO.

Apa itu Antarmuka COM

Asprova menggunakan COM (Component Object Model) untuk membuka data internal dan isi pemrosesan. Dengan ini, dimungkinkan untuk menambahkan fungsi dari plugin (file ActiveX DLL) dan klien otomatisasi (file Standard EXE). Plugin berfungsi dengan memanggil fungsi dari Asprova, sedangkan klien otomatisasi berfungsi dengan mengakses Asprova dari program eksternal.

File DLL ditempatkan di folder yang sama dengan EXE Asprova dan akan dimuat secara otomatis saat startup. DLL terdaftar sebagai perintah internal Asprova dan dapat dipanggil dari Asprova dengan memasukkannya ke dalam menu yang ditentukan pengguna. Di sisi lain, untuk EXE, proyek aktif dapat diperoleh dengan membuka nama file proyek yang ditentukan.

Lokasi Penempatan DLL

DLL harus ditempatkan di lokasi tertentu yang dapat diakses oleh EXE yang dijalankan. Dengan demikian, EXE dapat mengenali DLL dengan benar dan menjalankan fungsinya dengan normal. Berikut adalah langkah-langkah spesifik untuk menempatkan DLL.

  1. Tempatkan EXE dan DLL dalam direktori yang sama. Dengan cara ini, EXE dapat langsung menemukan DLL.
  2. Saat menjalankan EXE, atur direktori DLL sebagai direktori saat ini. Dengan cara ini, EXE akan menggunakan DLL dalam direktori tersebut secara prioritas.
  3. Tempatkan DLL di direktori system32. Direktori ini diakui sebagai bagian dari sistem Windows, sehingga berguna jika DLL digunakan secara luas.
  4. Tempatkan DLL di direktori Windows. Ini juga efektif saat menggunakan DLL di seluruh sistem.
  5. Atur direktori tempat DLL ditempatkan dalam variabel lingkungan Path. Dengan cara ini, sistem dapat lebih mudah mengenali DLL secara keseluruhan.

Contoh: Jika DLL tidak ditemukan dalam aplikasi tertentu, mungkin karena pengaturan variabel lingkungan Path yang kurang. Dalam kasus ini, masalah dapat diselesaikan dengan pengaturan yang tepat.

Poin: Dengan mengatur lokasi penempatan DLL dengan benar, EXE dapat mengenali DLL dengan lancar dan berfungsi dengan baik.

Pengaturan Referensi Lingkungan Pengembangan (Menggunakan Pustaka Asprova dari Dalam Plugin)

Pengaturan referensi disimpan dalam file proyek (.vbp file) untuk menggunakan pustaka tipe objek ActiveX yang tidak memiliki GUI dalam proyek. Dengan ini, pustaka Asprova dapat diakses dari plugin (DLL yang dikompilasi dari file proyek) melalui antarmuka COM.

Dengan melakukan pengaturan referensi, Anda dapat menggunakan tipe objek tersebut saat deklarasi variabel Dim, atau membuat instance dengan operator new.

  1. Kelas Proyek Asprova Dim project As aslib.ASBProject
  2. Daftar objek terkait dengan kunci plugin yang digunakan dalam DLL plugin ekstensi Dim ArgList As ASPArgList
  3. Kelas Item Dim item As ASBItem

Ketika merujuk pustaka Asprova dari plugin, daftarkan dua pustaka kelas Asprova berikut dari pengaturan referensi lingkungan pengembangan.

  1. As 1.1 Type Library
  2. AsPlugInManager 1.0 Type Library

Struktur File Proyek Plugin

Untuk plugin, fungsi yang dipanggil dari Asprova didaftarkan ke metode AutoRegistration dari kelas ASDefault. Jika terdaftar sebagai plugin dalam "Informasi Plugin" Asprova, fungsi AutoRegistration akan dipanggil secara otomatis saat Asprova dimulai dan diimplementasikan dalam objek proyek.

COMポート2
Untuk Standard EXE (klien otomatisasi), kelas ASDefault tidak diperlukan.

Plugin didaftarkan dengan memberikan empat argumen ke metode AddASPlugIn dari manajer plugin Asprova (fungsi pendaftaran plugin). Isinya adalah "Saya adalah proyek bernama Factory, dan telah menyiapkan metode AddOverTime dalam kelas Overtime, jadi tolong panggil pada saat plugin key KeyHookGeneric."

Pemetaan Hook dan Fungsi yang Sesuai dengan Kunci Plugin (Titik Akses)

Asprova menyediakan hook untuk menjalankan plugin pada setiap acara tertentu. Hook ini berfungsi sebagai titik akses yang mewakili setiap acara dan disebut kunci plugin. Misalnya, KeyHookGeneric menunjukkan "penambahan perintah", dan menjalankan plugin pada saat perintah yang ditambahkan diaktifkan.

Option Explicit

Public Function AutoRegistration(plugInManager As ASPPlugInManager, module As ASPModule) As Boolean

    'Mengatur komentar untuk modul ini
    module.Comment = "Fungsi Ekstensi APS PlugIns (VB)"

    'Mendefinisikan variabel untuk menyimpan objek plugin
    Dim plugIn As ASPPlugIn

    ' ---------------------------------------------------------------------------------------------

    'Memanggil manajer plugin dan mendaftarkan plugin baru. Nama metode pemanggilan adalah AddASPlugIn

    ' Param1: Nama tampilan plugin
    ' Param2: ProgID yang mewakili modul dan kelas tempat plugin diimplementasikan
    ' Param3: Nama fungsi entri plugin (nama panggilan)
    ' Param4: Nama kunci yang mewakili konteks di mana plugin digunakan

    '(1) Menghitung lembur dan kerja akhir pekan secara otomatis dan mengaturnya ke dalam tabel kalender
    Set plugIn = plugInManager.AddASPlugIn("Mengintegrasikan lembur ke kerja lembur dan kerja Sabtu", "Factory1.OverTime", "AddOverTime", ASPlugInKeyName.KeyHookGeneric)

    'Mengatur komentar dan lain-lain untuk plugin ini.

    plugIn.Comment = "Mengalokasikan lembur ke lembur hari kerja 2 jam dan kerja Sabtu 2 shift."

    'Urutan pemanggilan plugin (untuk kasus di mana ada beberapa plugin dengan kunci plugin yang sama)
    plugIn.Order = 1

    'Mengembalikan True untuk menunjukkan bahwa pendaftaran otomatis berhasil.
    AutoRegistration = True

End Function

Asprova secara otomatis memuat plugin saat startup dan menampilkan "nama tampilan fungsi entri" pada plugin perintah internal. Dengan memanggil manajer plugin Asprova dari dalam plugin dan memberikan empat argumen, plugin dapat didaftarkan.

COMポート3

Pemikiran yang Sama dengan Port COM (communication port)

COM pada port COM dan antarmuka COM adalah hal yang berbeda, tetapi keduanya memiliki kesamaan dalam hal standar antarmuka eksternal. Perangkat lunak dan perangkat keras memiliki antarmuka (port) yang distandarisasi untuk memasukkan dan mengeluarkan data dengan eksternal. Sebagai contoh, port server POP dan SMTP, serta port saat menghubungkan DB adalah port TCP/IP.

Komputer standar dilengkapi dengan port PS/2 atau port USB untuk menghubungkan perangkat periferal seperti keyboard, serta port LAN (port Ethernet).

Dalam perangkat lunak, metode standar untuk menangani pengiriman dan penerimaan data dengan perangkat eksternal atau jaringan komunikasi disediakan oleh OS, dan port digunakan untuk mengidentifikasi mitra komunikasi.

Di Windows, disediakan "port COM" dengan metode input/output yang disatukan agar perangkat lunak aplikasi dapat mengakses modem, printer, pemindai gambar, dan lainnya secara seragam. Perangkat lunak aplikasi hanya perlu mengetahui port COM mana perangkat target terhubung untuk menangani input/output.

Misalnya, ketika menghubungkan pemindai kode batang USB, COM13 dialokasikan, tetapi secara fisik tidak ada 13 antarmuka di PC, sehingga COM13 adalah virtual. Dalam komunikasi jaringan yang menggunakan TCP/IP, "nomor port" dari 0 hingga 65535 digunakan sebagai alamat tambahan di bawah alamat IP perangkat komunikasi atau komputer.

Dengan ini, satu komputer dapat menyediakan beberapa layanan atau berkomunikasi dengan beberapa komputer secara bersamaan. Ketika hanya disebut "port", sering kali merujuk pada nomor port TCP/IP.

Memetakan Nilai Field Set Rekaman ke Definisi Field Crystal Report melalui File ttx

Ekspor tabel kerja Asprova ke Access untuk menerbitkan kartu kerja. Crystal report 9 memiliki Parameter Field, dan memungkinkan Passing Parameter dari VB. Namun, ketika Record Set diteruskan, nilai secara otomatis diambil dari field dan laporan dapat ditampilkan di Crystal Report Viewer, sebuah komponen ActiveX viewer gratis.

    CrRep.Database.SetDataSource rs, 3, 1

    CRViewer91.ReportSource = CrRep

    CRViewer91.ViewReport

Argumen ketiga dari kode ini, 1, mewakili Nomor Tabel.

    'Mendapatkan ORDERCOD dari kombo yang dipilih

    result = Combo1.List(Combo1.ListIndex)


    'Passing parameter dari VB6 ke CR menggunakan CRAXDRT

    Dim CrApp As CRAXDRT.Application

    Dim CrRep As CRAXDRT.Report


    'Mendapatkan set rekaman ORDERCOD dari ORDERTBL

    Dim conn As New ADODB.Connection

    Dim rs As ADODB.Recordset


    Dim mySQL As String


    cn.Open _

        "Provider = Microsoft.Jet.OLEDB.4.0; " & _

            "Data Source = " & CurDir & "\NNA.mdb"


    Set CrApp = New CRAXDRT.Application

    Set CrRep = CrApp.OpenReport(App.Path & "\reports\TravelSheet.rpt", & _

                    crOpenReportByTempCopy)


    CrRep.DiscardSavedData


    If result <> "ALL" Then

        mySQL = "SELECT * FROM OPERATIONTBL WHERE ORDERCOD='" & _

            Combo1.Text & "' ORDER BY ORDERCOD"

    Else

        mySQL = "SELECT * FROM OPERATIONTBL ORDER BY ORDERCOD"


    End If

    With rs

        .ActiveConnection = cn

        .CursorLocation = adUseServer

        .CursorType = adOpenKeyset

        .LockType = adLockOptimistic

        .Properties("IRowsetIdentity") = True


        .Open mySQL

    End With

    CrRep.Database.SetDataSource rs, 3, 1

    CRViewer91.ReportSource = CrRep

    CRViewer91.ViewReport

Namun, aplikasi pengembangan yang menggunakan komponen non-standar seperti Crystal Report Viewer di Win7 cenderung menimbulkan masalah di XP, dan crviewer9.dll dapat menyebabkan masalah pada PC lama. Oleh karena itu, downgrade ke CR8.5 dan ubah kode seperti berikut.

Dim result As String


    'Mendapatkan ORDERCOD dari kotak kombo yang dipilih

    result = Combo1.List(Combo1.ListIndex)


    'Mendapatkan set rekaman ORDERCOD dari ORDERTBL

    Dim conn As New ADODB.Connection

    Dim rs As ADODB.Recordset


    Dim mySQL As String


    cn.Open _

        "Provider = Microsoft.Jet.OLEDB.4.0; " & _

            "Data Source = " & CurDir & "\DNN.mdb"


    If result <> "ALL" Then

        mySQL = "SELECT * FROM OPERATIONTBL WHERE ORDERCOD='" & _

                    Combo1.Text & "' ORDER BY ORDERCOD"


    Else

        mySQL = "SELECT * FROM OPERATIONTBL ORDER BY ORDERCOD"


    End If


    rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic


    With rptControl

        .WindowTitle = "Travel Sheet"

        .ReportFileName = App.Path & "\Reports\TravelSheet.rpt"


        .SetTablePrivateData 0, 3, rs

        .WindowShowPrintBtn = True

        .WindowShowPrintSetupBtn = True


        .RetrieveDataFiles

        .WindowState = crptMaximized

        .Destination = crptToWindow

        .Action = 1

    End With

Ketika file ttx (rpt.ttx) ditentukan di Report Expert file CR, nilai field dari set rekaman dalam kode secara otomatis dipetakan ke field dalam file CR.

reportexpert

Metode mendefinisikan nama field, atribut, dan panjang dalam file ttx dengan pemisah tab adalah klasik di Jepang, tetapi masih aktif digunakan di Indonesia.

ORDERCOD	string	100

PROCNO	number

RESOURCE	string	100

ITEM	string	100

QTY	number

STARTDATE	string	100

ENDDATE	string	100

WORKTIME	string	100

PARENTITEM	string	100

CLASS	number

Mengakses Jet Database Engine dari VB

Untuk mengakses Jet Database Engine dari VB, pertama-tama tambahkan "Microsoft ActiveX Data Objects 2.1 Library" pada pengaturan referensi.

Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset

conn.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source = C:\Users\Toshiba\Desktop\ERP\VB\LinkWithERP.mdb"

'DELETE
Dim query1 As String
query1 = "DELETE * FROM ORDER_SOURCE"
rs.Open query1, cn, adOpenKeyset, adLockOptimistic

'SELECT
Dim query2 As String
query2 = "SELECT * FROM ORDER_SOURCE"
rs.Open query2, cn, adOpenKeyset, adLockOptimistic

Do Until rs.EOF
    X1 = rs!Order_Code
    X2 = rs!Order_Item
    X3 = rs!Order_Qty

    rs.MoveNext
Loop

ADO dan ODBC adalah middleware untuk menggunakan Jet Database Engine (MDB). File MDB dalam format MS-Access adalah file mesin database relasional yang dikembangkan oleh Microsoft, dan merupakan wadah untuk menyimpan data.

Ini adalah file terpisah yang independen dari aplikasi Microsoft Access, dan dapat digunakan bahkan di lingkungan yang tidak memiliki MS-Access terinstal.

Bahkan pada PC yang tidak memiliki MS-Access terinstal, Anda dapat menggunakan ADO dengan Excel VBA untuk memanipulasi tabel, dan dapat membukanya dengan mengunduh Runtime dari situs MS. Ini tidak melanggar batasan lisensi. Runtime adalah program yang hanya mengambil fungsi eksekusi, menghilangkan fungsi pengembangan aplikasi.

  • http://www.microsoft.com/ja-jp/download/details.aspx?id=4438

Sama seperti Notepad bukan satu-satunya aplikasi untuk mengedit file teks, koneksi dari sistem ke DB (RDB) umumnya adalah koneksi ADO atau ODBC. Perbedaan antara keduanya adalah sebagai berikut:

  • ADO adalah antarmuka untuk mengoperasikan OLEDB sebagai kontrol ActiveX
  • ODBC adalah antarmuka yang menyediakan RDB dari OLEDB

Di dalam OLEDB terdapat penyedia ODBC yang menghubungkan ke RDB, tetapi pengembang dapat mengakses OLEDB melalui antarmuka ADO. Metode pembuatan objek koneksi dan objek set rekaman adalah dengan menggunakan fungsi CreateObject untuk menghasilkan variabel objek baru, dan menggunakan Set untuk menetapkan referensi ke objek pada variabel objek.

Dim conn As Variant
Dim rs As Variant
Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

Penetapan referensi objek menggunakan New dilakukan dengan menggunakan Set dan New untuk membuat objek baru, dan menetapkan referensi objek ke variabel objek.

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset

Mengakses MySQL dari VB

Meski pada PC Windows versi 64bit, lingkungan pengembangan VB6 berjalan dalam 32bit, sehingga diperlukan penggunaan MySQL ODBC Connector versi 32bit.

Untuk koneksi ADODB tidak ada masalah, tetapi saat melakukan koneksi DSN dan menginstal driver ODBC versi 32bit pada Windows versi 64bit, driver MySQL5.1 yang diinstal mungkin tidak muncul ketika layar pengaturan ODBC diaktifkan dari panel kontrol.

Dalam kasus ini, jalankan perintah berikut dari command prompt untuk menampilkan layar administrator sumber data ODBC versi 32bit dan lakukan pengaturan DSN.

  • %windir%\SysWOW64\odbcad32.exe

Untuk koneksi DSN, gunakan kode berikut untuk membuat objek koneksi.

'Objek koneksi untuk DSN driver Mysql5.1

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset

Dim dsn As String
dsn = "dsn=xxx;uid=yyy;pwd=zzz"
conn.Open dsn
conn.CursorLocation = 3

Untuk koneksi ADODB, gunakan kode berikut untuk membuat objek koneksi.

'Objek koneksi untuk ADO driver Mysql5.1

Dim conn As New ADODB.Connection

Dim rs As ADODB.Recordset

Dim strConn, xServer, xDatabase, xUID, xPass As String

If conn.State = 0 Then

    xServer = "localhost"

    xDatabase = "xxx"

    xUID = "yyy"

    xPass = "zzz"

    strConn = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & xServer & _
               ";PORT=3306" & _
               ";DATABASE=" & xDatabase & _
               ";USER=" & xUID & _
               ";PASSWORD=" & xPass & _
               ";OPTION=3;"
    conn.Open strConn

End If

'DELETE

Dim query1 As String

query1 = "DELETE * FROM ORDER_SOURCE"

rs.Open query1, strConn

'SELECT

Dim query2 As String

query2 = "SELECT * FROM ORDER_SOURCE"

rs.Open query2, strConn

Do Until rs.EOF

    X1 = rs!Order_Code

    X2 = rs!Order_Item

    X3 = rs!Order_Qty

    rs.MoveNext

Loop

Mengakses Excel dari VB

Untuk mengakses Excel dari VB, pertama-tama tambahkan Microsoft Excel 12.0 Object Library dari pengaturan referensi.

'Objek terkait Excel

Dim xlApp As Excel.Application

Dim xlBook As Excel.Workbook

Dim xlSheet As Excel.Worksheet



'Nama file (jalur lengkap)

Dim strFilename As String

strFilename = "C:\SO\Delivery Schedule.xls"



'Nama sheet

Dim strSheetName As String

strSheetName = "Delivery Schedule"



'Pembuatan Aplikasi

Set xlApp = CreateObject("Excel.Application")



'Membuka EXCEL

'xlApp.Workbooks.Open FileName:=strFilename, UpdateLinks:=0



'Pembuatan objek Workbook

'Set xlBook = xlApp.Workbooks(Dir(strFilename))

Set xlBook = xlApp.Workbooks.Open(strFilename)



'Pembuatan objek Worksheet

Set xlSheet = xlBook.Worksheets(strSheetName)



'Pengambilan data Worksheet

Dim cnt As Integer

cnt = 1



Do

    'ORDCOD = Worksheets("Delivery Schedule").Cells(cnt, 1).Text juga dapat digunakan

    ORDCOD = xlSheet.Cells(cnt, 1).Text

    ORDITM = xlSheet.Cells(cnt, 2).Text

    ORDQTY = xlSheet.Cells(cnt, 3).Text



    cnt = cnt + 1

Loop While ORDCOD <> ""

Saat membuat objek buku, jika Anda memasukkan nama file dari variabel, Anda harus menghapus ekstensi agar dapat diambil. Namun, jika Anda memasukkan jalur tetap sebagai string, tidak ada masalah. Gunakan InStrRev untuk mendapatkan posisi titik dan mengecualikan ekstensi.

strFilename = CurDir & "\data\" & strFilename

'Menghapus ekstensi (jika tidak dilakukan akan terjadi kesalahan)

strFilename = Left(strFilename, InStrRev(strFilename, ".") - 1)



Set xlBook = xlApp.Workbooks.Open(strFilename)

Pendapatkan dan tambahkan nama worksheet sebagai berikut.

'Pendapatkan nama worksheet

j = 0

For Each ws In xlBook.Worksheets

    sheetArry(j) = ws.Name

    j = j + 1

Next



'Tambahkan worksheet ke-6

Set xlSheet = xlBook.Worksheets.Add  'Tambahkan worksheet

xlSheet.Name = "New sheet"

VB dari Akses ke File Teks (CSV)

Untuk mengakses file CSV dengan VB, pertama-tama tambahkan Microsoft Scripting Runtime dari pengaturan referensi. FileSystemObject adalah komponen yang memudahkan pengelolaan sistem file di Windows.

'Membuat objek koneksi DB dan objek recordset

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset



'Membuat objek komponen untuk menangani file CSV

Dim objFSO As New Scripting.FileSystemObject



'Terhubung ke DB

conn.Open _

    "Provider = Microsoft.Jet.OLEDB.4.0; " & _

    "Data Source = " & CurDir & "\SO.mdb"



'Membuat recordset dengan SELECT (kosong)

query1 = "SELECT * FROM ORDER_SOURCE"

rs.Open query1, conn, adOpenStatic, adLockOptimistic



'Membaca data dari file CSV ke dalam objek

Set objFile = objFSO.OpenTextFile("C:\APS_ERP\VB\" & CSVNAME)



'Membaca baris demi baris dan menyimpannya ke dalam recordset

cnt = 0

Do Until objFile.AtEndOfStream

    strMastflow = objFile.ReadLine

    arrMastflow = Split(strMastflow, ",")



    rs.AddNew

    rs("Order_Code") = arrMastflow(0)

    rs("Order_Item") = arrMastflow(1)

    rs("Order_Qty") = arrMastflow(2)

    rs.Update



    cnt = cnt + 1

Loop

Contoh:Dengan menggunakan metode ini, dimungkinkan untuk membaca file CSV langsung dari VB dan menyimpannya ke dalam database. Terutama, dengan menggunakan ADODB.Connection dan ADODB.Recordset, integrasi dengan database dapat dilakukan dengan lancar.

Poin:Saat menangani file CSV dengan VB, penting untuk memanfaatkan FileSystemObject dan melakukan integrasi dengan database secara efisien.

Istilah Terkait OLE DB

Hubungan middleware dan komponen hingga mengakses database melalui ADO mirip dengan proses pengiriman barang dari pengirim (Shipper) ke penerima (Consignee) melalui transportasi laut.

oledb

Untuk mengakses RDB atau Excel, Texfile (Consignee) dari program aplikasi pengembangan (Shipper), diperlukan perantara (Forwarder) yang disebut OLE DB data provider, namun karena interaksi langsung dengan OLE DB cukup rumit, maka diserahkan kepada ADO (penyedia kargo).

  • OLE DB (Object Linking and Embedding DataBase) adalah antarmuka pemrograman yang dikembangkan oleh Microsoft untuk mengakses database dengan cara yang seragam tanpa bergantung pada jenis database. Terhadap DB (Consignee), OLE DB diwujudkan sebagai kumpulan komponen COM dan dapat digunakan dari bahasa pemrograman apapun. OLE DB dibagi menjadi "konsumen (consumer)" dan "penyedia (provider)", di mana konsumen adalah aplikasi yang mengakses data, dan penyedia adalah komponen perangkat lunak yang mengimplementasikan antarmuka untuk menyediakan data kepada konsumen.
  • Antarmuka COM adalah mekanisme untuk mempublikasikan data internal dan isi pemrosesan dengan COM (Component Object Model). Dari plugin (file ActiveX DLL) atau klien otomasi (file Standard EXE), dapat mengakses fungsi yang dipublikasikan oleh aplikasi dan mengembangkan serta mempublikasikan plugin.
  • ADO (ActiveX Data Object) adalah komponen untuk mengakses database melalui penyedia OLE DB, dan merupakan antarmuka pemrograman yang memungkinkan penggunaan OLE DB dalam bentuk kontrol ActiveX. Dengan menggunakan ADO, dapat memanipulasi catatan tabel langsung dari VB.
  • Kontrol ActiveX adalah teknologi yang sebelumnya disebut kontrol OLE yang telah diperluas untuk mendukung internet. Kontrol ActiveX diunduh dari server web melalui jaringan dan digunakan untuk menambahkan fungsi ke Internet Explorer.

Plugin DLL dikembangkan untuk penambahan fungsi (fungsi), sedangkan antarmuka ekstensi DLL dikembangkan untuk perubahan terhadap logika yang ada. Perbedaannya adalah apakah mendefinisikan kunci plugin (KeyHookGeneric) dalam metode AutoRegistration kelas AsDefault, atau mendefinisikan antarmuka (IEIIFilterCalc ReplenishOrderLotSizing).

Perbedaan Kunci Plugin dan Antarmuka

Saat menggunakan plugin di Asprova, jika Anda mendefinisikan kunci plugin (KeyHookGeneric) dalam metode AutoRegistration dari kelas AsDefault, fungsi entri akan dipanggil dan dijalankan ketika peristiwa yang sesuai terjadi.

Demikian pula, jika Anda mendefinisikan antarmuka (IEIIFilterCalc ReplenishOrderLotSizing) dalam metode AutoRegistration dari kelas AsDefault EII (Extension Interface Implementation), fungsi entri akan dipanggil ketika peristiwa yang sesuai terjadi.

Antarmuka disesuaikan agar memiliki overhead panggilan yang lebih kecil dibandingkan dengan kunci plugin, sehingga cocok untuk perubahan logika yang sering dipanggil seperti pengembangan pesanan, pengisian otomatis, dan penggabungan lot. Plugin DLL bertujuan untuk menambahkan fungsi, sedangkan ekstensi antarmuka DLL dikembangkan untuk mengubah logika yang ada.

プラグインDLL

Menggunakan antarmuka ekstensi lebih cocok untuk menambahkan fungsi entri yang ingin dipanggil dari peristiwa yang sering terjadi dalam penjadwalan ulang, karena memiliki overhead panggilan yang lebih kecil dibandingkan dengan menggunakan kunci plugin.

Antarmuka Ekstensi (DLL) untuk Mengubah Ukuran Lot Pesanan Pengisian Ulang

Ukuran lot pesanan pengisian ulang ditentukan oleh "Ukuran Lot Produksi MAX", "Ukuran Lot Produksi MIN", dan "Ukuran Lot Produksi UNIT", namun FilterCalcReplenishOrderLotSizing dipanggil saat pengikatan dalam perintah "Ekspansi Pesanan", memperoleh tiga objek berikut untuk mengubah (menimpa) ukuran lot pesanan pengisian ulang, dan memberikan hasilnya ke ArgList.

  1. Array item pengisian ulang ArgAsObject(kArgItem)
  2. Daftar instruksi input kerja dari proses awal pesanan induk ArgAsObject(kArgObjectList)
  3. Daftar ukuran lot ArgAsSafeArray(kSafeArrayArgDouble)

Ukuran Lot

  1. Ukuran lot adalah pengisian ulang otomatis "ya"
  2. Ukuran lot ditentukan saat pembuatan pesanan pengisian ulang
  3. Daftar instruksi input kerja (array dua dimensi) dan daftar instruksi output kerja (item)

Proses Ekspansi Pesanan

  1. Menghasilkan pekerjaan pesanan induk (instruksi input kerja dan instruksi output kerja). Pada keadaan awal, pesanan induk adalah pesanan penjualan atau pesanan terdaftar yang merupakan pesanan produksi, dan menghasilkan instruksi input kerja dan instruksi output kerja dari BOM produksi.
  2. Dalam pengisian ulang otomatis, memeriksa apakah instruksi input kerja dari pekerjaan pesanan induk adalah target pengikatan. Jika pesanan induk berada pada tanggal sebelumnya dari stok (jumlah absolut), instruksi input kerja tidak menjadi target pengikatan, dan pesanan produksi untuk instruksi input kerja yang kurang secara otomatis dihasilkan. Pesanan produksi untuk kekurangan instruksi input kerja (item input) dari pekerjaan pesanan induk dihasilkan sebagai pesanan anak, dan pesanan produksi untuk kekurangan instruksi input kerja dari pesanan anak dihasilkan sebagai pesanan cucu.
  3. Pada pengikatan pertama antar pesanan, dilakukan pengikatan pesanan penjualan, pesanan produksi, pesanan pembelian, dan pesanan stok yang memiliki pengaturan pengisian ulang otomatis. Pesanan produksi tanpa pengaturan pengisian ulang otomatis (item yang terhubung dalam BOM produksi) juga diikat.

Contoh Penggabungan Proses Awal dalam 7 Kali Penyelesaian Pesanan Produksi

  1. Pada pengisian ulang otomatis pertama, item B1 masuk ke dalam item, dan daftar B masuk ke dalam inst. Jumlah kekurangan instruksi input B1 dari pekerjaan M4 (karena tidak ada stok, RemainingQty adalah B itu sendiri) ditambahkan 7 kali.
  2. Pada pengisian ulang otomatis kedua, item C masuk ke dalam item, dan daftar A masuk ke dalam inst. Jumlah kekurangan instruksi input C dari pekerjaan M2 ditambahkan 7 kali.
  3. Karena kondisi inst.Operation.OperationMainRes.Code='M4', (2) tidak dijalankan.

プラグインDLL

Untuk mengakses setiap tabel Asprova, perlu melalui objek proyek Asprova yang diekspansi di memori. Metode mendapatkan objek proyek ini berbeda antara DLL dan EXE.

Dalam kasus DLL, daftar objek yang terkait dengan kunci plugin ASPArgList dimuat ke dalam argumen args, dan objek proyek diperoleh dari sini, tetapi dalam kasus EXE, proyek aktif diperoleh dari objek dokumen yang memuat file proyek yang ditentukan.

Dalam Kasus Ekstensi Plugin (DLL)

'(Definisi dan Pengambilan Objek dalam ASPArgList)

'------------------------------------------------------------------

Public Function AddPersonPlan(args As ASPArgList) As TReturnType



    'Objek dari setiap tabel APS diakses dari objek proyek.

    'Objek proyek diperoleh dari antarmuka args.

    'Argumen diterima dengan menetapkan objek proyek dari objek ASPAgrList ke variabel tipe ASBProject.



    Dim project As aslib.ASBProject

    Set project = args.ArgAsObject(kArgProject)



    'Objek RootObject dari objek proyek ditetapkan ke variabel tipe ASORootObject.

    Dim root As aslib.ASORootObject

    Set root = project.RootObject



    'Objek RootCalendar dari objek proyek ditetapkan ke variabel tipe ASBCalendar.

    Dim calendarRoot As aslib.ASBCalendar

    Set calendarRoot = project.RootCalendar



    'Objek RootResource dari objek proyek ditetapkan ke variabel tipe ASBResource.

    Dim resourceRoot As aslib.ASBResource

    Set resourceRoot = project.RootResource



    'Objek orderRoot dari objek proyek ditetapkan ke variabel tipe ASBOrder.

    Dim orderRoot As aslib.ASBOrder

    Set orderRoot = project.orderRoot



    'Objek itemRoot dari objek proyek ditetapkan ke variabel tipe ASBItem.

    Dim itemRoot As aslib.ASBItem

    Set itemRoot = project.itemRoot



    'Definisi variabel untuk menyimpan ID properti

    Dim propID1 As Long



'(Akses ke Objek yang Diperoleh)

'------------------------------------------------------------------

    'Jumlah anak dari objek kalender (jumlah rekaman)

    calendarCount1 = calendarRoot.ChildCount



    'Menggunakan objek root untuk mendapatkan ID properti kode sumber daya.

    propID1 = root.LookupPropID("Cal_Resource")



    'Loop sampai rekaman selesai.

    'Argumen ChildAsCalendar dimulai dari 1 (0 mewakili data terakhir).

    For i = 1 To calendarCount1

        'Akses ke rekaman.

        Set calendar = calendarRoot.ChildAsCalendar(i)



        'Akses nilai properti dengan metode GetAsStr. Jika properti bukan nilai array, atur argumen kedua ke 1.

        res1 = calendar.GetAsStr(propID1, 1)

    Next



End Function

Dalam Kasus EXE Standar

Saat mendapatkan objek Asprova dari program EXE yang berada di luar Asprova, Anda perlu memuat file proyek ke dalam objek dokumen dan kemudian mendapatkan proyek aktif dari sana. Berikut adalah langkah-langkahnya.

Private Sub Command1_Click()

    '■■■Objek terkait Asprova■■■

    'Definisi objek proyek Asprova

    Dim m_pProject As ASBProject

    Dim m_pDoc As ASFDocument

    'Mendapatkan aplikasi Asprova

    Dim app As ASFApplication

    Set app = New ASFApplication

    'Membuka dokumen Asprova dengan menentukan nama

    Set m_pDoc = app.Deserialize(CurDir & "\data.aru")

    'Mendapatkan proyek aktif dari dokumen

    Set m_pProject = m_pDoc.ActiveProject

    '■■■Pencocokan dengan item pesanan akhir dari tabel pekerjaan■■■

    'Mendapatkan objek pekerjaan

    Dim operation As ASBOperation

    Dim operationList As ASOObjectList

    Set operationList = m_pProject.GetOperationList(False)

    'Mendapatkan objek root

    Dim root As ASORootObject

    Set root = m_pProject.RootObject

    'Mendapatkan propID (dari objek root)

    propID1 = root.LookupPropID("Work_OperationOutMainItemQty")

    'Mendapatkan semua pekerjaan proyek dan mencocokkan sekaligus

    operationList.FilterByExprStr ("WorkUser_MostRightOrderItem=='" & Left(Combo1.Text, 7) & "')

    'Mengurutkan berdasarkan waktu mulai produksi secara ascending.

    operationList.SortByExprStr ("Work_OperationProductionStartTime,a")

    Do

        'Mendapatkan data dari daftar

        Set operation = operationList.Object(i)

        'Mendapatkan nilai

        PrdQty = operation.GetAsStr(propID1, 1)

        'Menyimpan nilai

        operation.SetAsStr propID1, 1, Text1.Text

        i = i + 1

    Loop While i <= operationList.ObjectCount

    '■■■Memeriksa data dari tabel sumber daya satu per satu■■■

    'Definisi objek sumber daya

    Dim RootResource As AsLib.ASBResource

    Dim resource As AsLib.ASBResource

    'Mendapatkan objek root sumber daya

    Set RootResource = m_pProject.RootResource

    'Mendapatkan propID (dari objek root)

    propID2 = root.LookupPropID("Res_Code")

    'Jumlah rekaman dalam tabel sumber daya

    ResourceCount = RootResource.ChildCount

    For i = 1 To ResourceCount

        Set resource = RootResource.ChildAsResource(i)

        ResCode = resource.GetAsStr(propID2, 1)

    Next i

    '■■■Pencocokan dengan kode item dari tabel item■■■

    'Definisi objek item

    Dim RootItem As ASBItem

    Dim Item As ASBItem

    'Mendapatkan objek root item

    Set RootItem = m_pProject.RootItem

    'Mendapatkan objek item

    Set Item = RootItem.FindChild(Left(Combo1.Text, 7))

    'Jumlah rekaman yang cocok dalam tabel item

    ItemCount=Item.ChildCount
End Sub

Pertanyaan yang Sering Diajukan|Antarmuka COM Asprova

Berikut adalah ringkasan singkat dari pertanyaan yang sering muncul sesuai dengan isi artikel ini.

Apa itu Antarmuka COM Asprova?

Antarmuka COM Asprova adalah mekanisme yang mempublikasikan data internal dan isi pemrosesan. Dengan ini, memungkinkan penambahan fungsi dari plugin atau klien otomatisasi.

Bagaimana cara mendaftarkan plugin Asprova?

Plugin Asprova didaftarkan menggunakan metode AddASPlugIn dari manajer plugin. Dengan memberikan empat argumen pada metode ini, plugin dapat diatur untuk dijalankan pada acara tertentu.

Di mana sebaiknya file DLL ditempatkan?

File DLL harus ditempatkan di folder yang sama dengan EXE Asprova. Dengan demikian, EXE dapat mengenali DLL dengan benar dan menjalankan fungsinya dengan normal.