Perluasan Fungsi Asprova Melalui Antarmuka COM

2011/10/04

COMインターフェイス

Penjadwal Produksi Asprova mempublikasikan antarmuka COM, yang memungkinkan perluasan fungsi melalui file EXE atau plugin (DLL). Anda dapat memperoleh objek proyek yang telah dimuat di memori dari file EXE atau DLL, serta mengakses objek tabel bawahan Asprova.
Asprova sendiri menyediakan Hook untuk menjalankan plugin pada waktu terjadinya suatu peristiwa, dan kunci plugin yang mewakili akses poin untuk peristiwa ini setara dengan hook do_action atau apply_filters di WordPress.

Apa itu Antarmuka COM

Asprova memiliki mekanisme untuk mempublikasikan data internal dan prosesnya melalui COM (Component Object Model), memungkinkan penambahan fungsi dari plugin (file ActiveX DLL: pemanggilan fungsi dari Asprova) atau klien otomasi (file EXE Standar: akses ke Asprova dari program eksternal).
File DLL ditempatkan di folder yang sama dengan EXE Asprova dan akan dimuat secara otomatis oleh Asprova saat startup.
DLL terdaftar sebagai perintah internal Asprova, sehingga dapat dilampirkan ke menu yang ditentukan pengguna untuk memanggil DLL dari Asprova. Namun, dalam kasus EXE, proyek aktif diperoleh dengan membuka file proyek yang ditentukan namanya.

Lokasi Penempatan DLL

DLL harus ditempatkan di lokasi berikut relatif terhadap EXE yang dijalankan:

  1. Tempatkan EXE dan DLL di direktori yang sama.
  2. Jalankan EXE dengan direktori DLL sebagai direktori saat ini.
  3. Tempatkan DLL di direktori system32.
  4. Tempatkan DLL di direktori Windows.
  5. Tetapkan direktori tempat DLL berada ke variabel lingkungan Path.

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

Pengaturan referensi disimpan dalam file proyek (.vbp) untuk memanfaatkan pustaka tipe objek ActiveX tanpa GUI dalam proyek, memungkinkan plugin (DLL yang dikompilasi dari file proyek) mengakses pustaka Asprova melalui antarmuka COM.
Dengan pengaturan referensi, Anda dapat menggunakan tipe objek tersebut saat mendeklarasikan variabel Dim atau membuat instance dengan operator new.

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

Saat mereferensikan 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

Dalam kasus plugin, fungsi yang dipanggil dari Asprova didaftarkan ke metode AutoRegistration pada kelas ASDefault.

Jika plugin telah didaftarkan sebagai "informasi plugin" di Asprova, fungsi AutoRegistration akan dipanggil secara otomatis saat Asprova dimulai, dan diimplementasikan dalam objek proyek.

COMポート2

Untuk EXE Standar (klien otomasi), kelas ASDefault tidak diperlukan.

Plugin didaftarkan dengan meneruskan empat argumen ke metode AddASPlugIn pada pengelola plugin Asprova (fungsi pendaftaran plugin), yang berarti: "Saya adalah proyek bernama Factory, memiliki metode AddOverTime (fungsi masuk) di kelas Overtime, jadi panggil saya pada waktu kunci plugin KeyHookGeneric."

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

Asprova menyediakan hook untuk menjalankan plugin pada setiap peristiwa tertentu.
Akses poin yang mewakili setiap peristiwa ini disebut kunci plugin. Misalnya, KeyHookGeneric adalah "penambahan perintah", yaitu akses poin pada saat perintah yang ditambahkan dijalankan, yang memicu eksekusi plugin dengan menjalankan perintah tersebut.

Option Explicit  
Public Function AutoRegistration(plugInManager As ASPPlugInManager, module As ASPModule) As Boolean  
    'Mengatur komentar untuk modul ini  
    module.Comment = "APS Extended Functionality PlugIns (VB)"  
    'Mendefinisikan variabel untuk menyimpan objek plugin  
    Dim plugIn As ASPPlugIn  
    ' ---------------------------------------------------------------------------------------------  
    'Memanggil pengelola plugin untuk mendaftarkan plugin baru. Nama metode yang dipanggil adalah AddASPlugIn  
    ' Param ke-1: Nama tampilan plugin  
    ' Param ke-2: ProgID yang mewakili modul dan kelas tempat plugin diimplementasikan  
    ' Param ke-3: Nama fungsi masuk plugin (nama panggilan)  
    ' Param ke-4: Nama kunci yang mewakili konteks penggunaan plugin  

    '(1) Menghitung lembur atau kerja Sabtu secara otomatis dan menetapkannya ke tabel kalender  
    Set plugIn = plugInManager.AddASPlugIn("Memasukkan lembur ke dalam lembur dan kerja Sabtu", "Factory1.OverTime", "AddOverTime", ASPlugInKeyName.KeyHookGeneric)  
    'Mengatur komentar dll. untuk plugin ini.  

    plugIn.Comment = "Mengalokasikan lembur menjadi 2 jam lembur di hari kerja dan 2 shift kerja di hari Sabtu."  
    'Urutan pemanggilan plugin (untuk kasus beberapa plugin dengan kunci plugin yang sama)  
    plugIn.Order = 1  
    'Mengembalikan True untuk menunjukkan pendaftaran otomatis berhasil.  
    AutoRegistration = True  
End Function

Saat Asprova dimulai dan memuat plugin secara otomatis, "nama tampilan fungsi masuk" (argumen pertama saat memanggil pengelola plugin) akan ditampilkan pada plugin perintah internal.
Plugin didaftarkan dengan memanggil pengelola plugin Asprova dari dalam plugin dan meneruskan empat argumen.
COMポート3

Konsep yang Sama dengan Port COM (Communication Port)

Sekadar informasi, COM pada port COM dan antarmuka COM adalah hal yang berbeda, tetapi dalam arti standar antarmuka eksternal, port COM dan antarmuka COM memiliki kesamaan.
Perangkat lunak atau perangkat keras memiliki antarmuka (port) yang menstandarkan metode pertukaran data untuk input/output dengan eksternal. Misalnya, port untuk server POP dan SMTP, atau port saat menghubungkan ke DB, semuanya adalah port TCP/IP.
Komputer standar dilengkapi dengan antarmuka seperti port PS/2, port USB, dan port LAN (Ethernet) untuk menghubungkan perangkat periferal seperti keyboard.
Dalam perangkat lunak, metode standar untuk mengelola pengiriman dan penerimaan data dengan perangkat eksternal atau jaringan komunikasi disediakan oleh OS atau lainnya, dan port digunakan untuk mengidentifikasi mitra komunikasi.
Di Windows, mekanisme "port COM" disediakan untuk memungkinkan aplikasi mengakses modem, printer, atau pemindai gambar dengan cara yang seragam. Aplikasi hanya perlu mengetahui port COM mana yang digunakan oleh perangkat target untuk menangani input/output dengannya.
Misalnya, saat menghubungkan barcode USB, COM13 mungkin ditetapkan, tetapi karena secara fisik tidak ada 13 antarmuka di PC, port COM13 hanyalah port virtual.
Dalam komunikasi jaringan menggunakan TCP/IP, "nomor port" dari 0 hingga 65535 digunakan sebagai alamat tambahan di bawah alamat IP yang dimiliki perangkat komunikasi atau komputer individu.
Ini memungkinkan satu komputer menyediakan beberapa layanan atau berkomunikasi dengan beberapa komputer secara bersamaan. Istilah "port" sering kali merujuk pada nomor port TCP/IP ini.

Memetakan Nilai Field Recordset ke Definisi Field Crystal Report melalui File ttx

Tabel kerja Asprova diekspor ke Access untuk menerbitkan tiket stok.
Meskipun sudah lama, Crystal Report 9 memiliki Parameter Field, jadi saya pikir VB akan mengirimkan parameter, tetapi ternyata cukup melempar Record Set, dan itu akan secara otomatis mengambil nilai dari field, sehingga laporan dapat ditampilkan di dalam Crystal Report Viewer, sebuah komponen ActiveX gratis.

    CrRep.Database.SetDataSource rs, 3, 1  
    CRViewer91.ReportSource = CrRep  
    CRViewer91.ViewReport

Bagian ini menunjukkannya. Argumen ketiga, 1, mewakili Nomor Tabel.

    'Mendapatkan ORDERCOD dari combo yang dipilih  
    result = Combo1.List(Combo1.ListIndex)  

    'Mengirim parameter dari VB6 ke CR menggunakan CRAXDRT  
    Dim CrApp As CRAXDRT.Application  
    Dim CrRep As CRAXDRT.Report  

    'Mendapatkan recordset 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 kemungkinan besar bermasalah di XP, dan crviewer9.dll sering menyebabkan masalah di PC lama. Jadi, pertama-tama saya downgrade ke CR8.5 dan mengubah kode seperti di bawah ini.
CR8.5 dibatasi hanya untuk tata letak formulir, jadi definisi field dibuat di file ttx, dan recordset dari VB dilemparkan untuk dipetakan ke formulir sesuai definisi field di file ttx.

Dim result As String  

    'Mendapatkan ORDERCOD dari kotak combo yang dipilih  
    result = Combo1.List(Combo1.ListIndex)  

    'Mendapatkan recordset 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

Jika Anda menentukan file ttx (rpt.ttx) di Report Expert pada file CR, nilai field dari recordset dalam kode akan secara otomatis dipetakan ke field di file CR.
reportexpert
Metode mendefinisikan nama field, atribut, dan panjang dalam file ttx dengan pemisah tab mungkin sudah dianggap klasik di Jepang, tetapi di Indonesia masih sangat digunakan.

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

Tambahkan "Microsoft ActiveX Data Objects 2.1 Library" dari 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 memanfaatkan Jet Database Engine (MDB).
File MDB dalam format MS-Access sebenarnya adalah file Jet Database Engine (mesin basis data relasional yang dikembangkan oleh Microsoft), yaitu hanya kontainer penyimpanan data, dan terpisah dari aplikasi Microsoft Access yang menyediakan GUI.
Ini berarti file MDB dapat digunakan bahkan di lingkungan di mana MS-Access tidak terinstal.
Anda dapat memanipulasi tabel menggunakan ADO di Excel VBA pada PC tanpa MS-Access terinstal, atau mengunduh Runtime dari situs MS untuk membukanya, dan ini tidak melanggar batasan lisensi.
Runtime adalah "program yang mengambil hanya fungsi eksekusi dari perangkat lunak yang memiliki fungsi pengembangan dan eksekusi, dengan fungsi pengembangan dihilangkan." Dengan kata lain, "lingkungan eksekusi tanpa lingkungan pengembangan."

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

Notepad adalah utilitas untuk mengedit file teks, tetapi bukan satu-satunya aplikasi yang bisa mengedit file teks—logikanya sama persis.
Koneksi dari sistem ke DB (RDB) biasanya menggunakan salah satu dari ADO atau ODBC, dengan perbedaan sebagai berikut:

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

Ada penyedia ODBC di dalam OLEDB yang menghubungkan ke RDB, tetapi pengembang dapat mengakses OLEDB melalui antarmuka ADO.
Pergi dari "pengembang ⇒ ODBC ⇒ OLE (RDB, Excel, dll.)" melalui jalan biasa ke Cikarang memakan waktu 3 jam, tetapi menggunakan "pengembang ⇒ ADO ⇒ OLE (RDB, Excel, dll.)" melalui Tol (jalan tol) hanya butuh 1,5 jam—sama saja lol.
Mengenai metode pembuatan objek koneksi dan objek recordset, terserah mana yang Anda pilih.
Gunakan fungsi CreateObject untuk membuat variabel objek baru dan tetapkan referensi ke objek dengan Set.

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

Penetapan referensi objek menggunakan New membuat objek baru dengan Set dan New, lalu 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

Meskipun PC menggunakan Windows 64-bit, lingkungan pengembangan VB6 adalah 32-bit, jadi gunakan MySQL ODBC Connector versi 32-bit.
Untuk koneksi ADODB, ini tidak relevan, tetapi saat menggunakan koneksi DSN, menginstal driver ODBC 32-bit pada Windows 64-bit menyebabkan driver MySQL 5.1 yang seharusnya terinstal tidak muncul di layar pengaturan ODBC di Panel Kontrol, yang bisa membingungkan. Oleh karena itu, gunakan perintah berikut dari command prompt untuk menampilkan layar Administrator Sumber Data ODBC 32-bit dan lakukan pengaturan DSN.

  • %windir%\SysWOW64\odbcad32.exe

Untuk koneksi DSN:

'Membuat objek koneksi untuk DSN driver MySQL 5.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:

'Membuat objek koneksi untuk ADO driver MySQL 5.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

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 (path lengkap)
Dim strFilename As String
strFilename = "C:\SO\Delivery Schedule.xls"  
'Nama sheet
Dim strSheetName As String
strSheetName = "Delivery Schedule"  
'Membuat Application
Set xlApp = CreateObject("Excel.Application")  
'Membuka EXCEL
'xlApp.Workbooks.Open FileName:=strFilename, UpdateLinks:=0  
'Membuat objek Workbook
'Set xlBook = xlApp.Workbooks(Dir(strFilename))
Set xlBook = xlApp.Workbooks.Open(strFilename)  
'Membuat objek Worksheet
Set xlSheet = xlBook.Worksheets(strSheetName)  
'Mendapatkan data Worksheet
Dim cnt As Integer
cnt = 1  
Do
    'ORDCOD = Worksheets("Delivery Schedule").Cells(cnt, 1).Text juga bisa 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 <> ""

Ngomong-ngomong, saat menetapkan nama file (path lengkap) untuk pembuatan objek buku dari variabel, Anda harus menghapus ekstensi file, kalau tidak akan error entah kenapa. Namun, jika path tetap dimasukkan sebagai string seperti contoh di atas, tidak ada masalah.
Gunakan InStrRev untuk mendapatkan posisi titik dan menghapus ekstensi.

strFilename = CurDir & "\data\" & strFilename  
'Menghapus ekstensi (jika tidak dilakukan akan error)  
strFilename = Left(strFilename, InStrRev(strFilename, ".") - 1)  

Set xlBook = xlApp.Workbooks.Open(strFilename)

Mendapatkan dan menambahkan nama worksheet dilakukan sebagai berikut:

'Mendapatkan nama worksheet  
j = 0  
For Each ws In xlBook.Worksheets  
    sheetArry(j) = ws.Name  
    j = j + 1  
Next  

'Menambahkan worksheet 6  
Set xlSheet = xlBook.Worksheets.Add  'Menambahkan worksheet  
xlSheet.Name = "New sheet"

Mengakses File Teks (CSV) dari VB

Tambahkan Microsoft Scripting Runtime dari pengaturan referensi. FileSystemObject adalah komponen untuk menangani sistem file dengan mudah 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  
'Menghubungkan 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 file CSV ke objek
Set objFile = objFSO.OpenTextFile("C:\APS_ERP\VB" & CSVNAME)  
'Membaca satu baris demi satu dan menyimpan ke 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

Istilah Terkait OLE DB

Hubungan antara middleware dan komponen hingga mengakses DB melalui ADO mirip dengan proses pengiriman barang laut dari pengirim (Shipper) ke penerima (Consignee).
oledb
Untuk mengakses RDB, Excel, atau file teks (Consignee) dari program aplikasi pengembangan (Shipper), Anda meminta prosedur kepada penyedia data OLE DB (Forwarder), tetapi berurusan langsung dengan OLE DB melibatkan dokumen yang rumit dan merepotkan, jadi Anda menyerahkannya ke ADO (perusahaan kargo).

  • OLE DB (Object Linking and Embedding DataBase)
    Antarmuka pemrograman yang dikembangkan oleh Microsoft untuk mengakses basis data dengan metode yang seragam terlepas dari jenis basis datanya.
    Yaitu DB (Consignee) << OLE DB diwujudkan sebagai kumpulan komponen COM (bagian program) dan dapat digunakan dari bahasa pemrograman apa pun. OLE DB secara konseptual dibagi menjadi "konsumen (consumer)" dan "penyedia (provider)". Konsumen adalah aplikasi yang perlu mengakses data, sedangkan penyedia adalah komponen perangkat lunak yang mengimplementasikan antarmuka dan menyediakan data ke konsumen.
  • Antarmuka COM
    Mekanisme untuk mempublikasikan data internal dan isi proses melalui COM (Component Object Model), memungkinkan akses ke fungsi yang dipublikasikan aplikasi dari plugin (file ActiveX DLL) atau klien otomasi (file EXE Standar) untuk mengembangkan dan mempublikasikan plugin.
  • ADO (ActiveX Data Object)
    Komponen untuk mengakses basis data melalui penyedia OLE DB. Antarmuka pemrograman yang membuat OLE DB dapat digunakan dalam bentuk kontrol ActiveX. Dengan ADO, Anda dapat langsung memanipulasi rekord tabel dari VB.
  • Kontrol ActiveX
    Teknologi yang sebelumnya disebut kontrol OLE, diperluas untuk mendukung internet. Kontrol ActiveX diunduh dari server web melalui jaringan dan digunakan untuk menambahkan fungsi ke browser web Internet Explorer dari Microsoft.

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

Perbedaan antara Kunci Plugin dan Antarmuka

Jika Anda mendefinisikan kunci plugin (KeyHookGeneric) di bagian pemanggilan fungsi masuk dalam metode AutoRegistration kelas AsDefault plugin, fungsi masuk akan dipanggil dan dijalankan ketika peristiwa yang sesuai terjadi di Asprova (perintah yang ditambahkan dijalankan).
Demikian pula, jika Anda mendefinisikan antarmuka (IEIIFilterCalc ReplenishOrderLotSizing) di bagian pemanggilan fungsi masuk dalam metode AutoRegistration kelas AsDefault EII (Extension Interface Implementation), fungsi masuk akan dipanggil dan dijalankan ketika peristiwa yang sesuai terjadi di Asprova (penciptaan pengisian ulang otomatis).
Namun, antarmuka disesuaikan agar overhead pemanggilan lebih kecil dibandingkan kunci plugin, sehingga cocok untuk perubahan logika yang sering dipanggil seperti ekspansi pesanan, pengisian ulang otomatis, atau pengelompokan lot.
DLL plugin dikembangkan untuk penambahan fungsi (fungsi), sedangkan DLL antarmuka ekstensi dikembangkan untuk perubahan pada logika yang ada.
プラグインDLL
Menggunakan antarmuka ekstensi menghasilkan overhead pemanggilan yang lebih kecil dibandingkan kunci plugin, sehingga digunakan saat menambahkan fungsi masuk yang ingin dipanggil dari peristiwa yang sering terjadi dalam penjadwalan ulang.

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 "Unit Ukuran Lot Produksi", tetapi FilterCalcReplenishOrderLotSizing dipanggil saat pengikatan dalam perintah "Ekspansi Pesanan", memperoleh tiga objek berikut untuk mengubah (menimpa) ukuran lot pesanan pengisian ulang dan meneruskan hasilnya ke ArgList:

  1. Array item pengisian ulang ArgAsObject(kArgItem)
  2. Daftar instruksi input kerja dari proses pertama 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 2D) dan daftar instruksi output kerja (item)

Proses Ekspansi Pesanan

  1. Membuat kerja pesanan induk (instruksi input kerja dan instruksi output kerja)
    Pesanan induk dalam keadaan awal adalah pesanan pemesanan atau pesanan produksi yang didaftarkan.
    Membuat instruksi input kerja dan instruksi output kerja dari BOM produksi.
  2. Pengisian ulang otomatis
    Memeriksa apakah instruksi input kerja dari kerja pesanan induk adalah target pengikatan.
    Jika pesanan induk lebih awal dari stok (kuantitas absolut),
    instruksi input kerja bukan target pengikatan. Membuat pesanan produksi untuk kekurangan instruksi input kerja secara otomatis.
    Membuat pesanan produksi untuk kekurangan instruksi input kerja (item input) pesanan induk sebagai pesanan anak.
    Membuat pesanan produksi untuk kekurangan instruksi input kerja pesanan anak sebagai pesanan cucu.
  3. Pengikatan antar pesanan pertama kali
    Pengikatan pesanan pemesanan, pesanan produksi, pesanan pembelian, dan pesanan stok dengan pengaturan pengisian ulang otomatis.
    Pesanan produksi tanpa pengaturan pengisian ulang otomatis (item yang terhubung melalui BOM produksi).

Contoh Mengelompokkan Proses Sebelumnya untuk 7 Kali Penyelesaian Pesanan Produksi

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

プラグインDLL
Untuk mengakses setiap tabel Asprova, Anda perlu melalui objek proyek Asprova yang dimuat di memori, dan metode untuk memperoleh objek proyek ini berbeda antara DLL dan EXE. Dalam kasus DLL, daftar objek yang terkait dengan kunci plugin dimuat ke argumen args sebagai ASPArgList, dan objek proyek diperoleh darinya, sedangkan dalam kasus EXE, proyek aktif diperoleh dari objek dokumen yang memuat file proyek yang ditentukan.

Dalam Kasus Plugin Ekstensi (DLL)

'(Definisi dan pengambilan objek dalam ASPArgList)  
'------------------------------------------------------------------  
Public Function AddPersonPlan(args As ASPArgList) As TReturnType  
'Objek setiap tabel APS diakses dari objek proyek  
'Objek proyek diperoleh dari antarmuka args  
'Menerima argumen dengan menetapkan objek proyek dari objek ASPAgrList ke variabel tipe ASBProject  

Dim project As aslib.ASBProject  
Set project = args.ArgAsObject(kArgProject)  

'Menetapkan RootObject dari objek proyek ke variabel tipe ASORootObject  
Dim root As aslib.ASORootObject  
Set root = project.RootObject  

'Menetapkan RootCalendar dari objek proyek ke variabel tipe ASBCalendar  
Dim calendarRoot As aslib.ASBCalendar  
Set calendarRoot = project.RootCalendar  

'Menetapkan RootResource dari objek proyek ke variabel tipe ASBResource  
Dim resourceRoot As aslib.ASBResource  
Set resourceRoot = project.RootResource  

'Menetapkan orderRoot dari objek proyek ke variabel tipe ASBOrder  
Dim orderRoot As aslib.ASBOrder  
Set orderRoot = project.orderRoot  

'Menetapkan itemRoot dari objek proyek 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 (jumlah rekord) dari objek kalender
    calendarCount1 = calendarRoot.ChildCount  

'Mendapatkan ID properti kode sumber daya menggunakan objek root  
propID1 = root.LookupPropID("Cal_Resource")  

'Loop hingga rekord selesai  
'Argumen ChildAsCalendar dimulai dari 1 (0 mewakili data terakhir)  
For i = 1 To calendarCount1  
    'Mengakses rekord  
    Set calendar = calendarRoot.ChildAsCalendar(i)  

    'Mengakses nilai properti dengan metode GetAsStr. Jika properti bukan nilai array, tetapkan 1 ke argumen kedua  
    res1 = calendar.GetAsStr(propID1, 1)  
Next  

End Function

Dalam Kasus EXE Standar

Berbeda dengan plugin atau antarmuka ekstensi, Anda perlu memperoleh objek Asprova dari program EXE di luar Asprova. Dalam kasus ini, file proyek yang ditentukan dimuat ke objek dokumen, dan proyek aktif diperoleh dari objek dokumen tersebut.

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 nama yang ditentukan  
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 kerja■■■  
'Mendapatkan objek kerja  
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 (diperoleh dari objek root)  
propID1 = root.LookupPropID("Work_OperationOutMainItemQty")  

'Mendapatkan semua kerja proyek dan melakukan pencocokan sekali  
operationList.FilterByExprStr ("WorkUser_MostRightOrderItem=='" & Left(Combo1.Text, 7) & "')  

'Menyortir 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 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 (diperoleh dari objek root)  
propID2 = root.LookupPropID("Res_Code")  

'Jumlah rekord 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 rekord yang cocok di tabel item  
ItemCount=Item.ChildCount  

End Sub