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. Production Scheduler di Indonesia Di dalam pekerjaan manajemen produksi di pabrik-pabrik massal berbasis perakitan yang banyak ditemukan dalam industri roda dua dan roda empat di Indonesia, rencana produksi dan rencana beban memiliki hubungan yang saling terkait erat. Karena rencana produksi disusun berdasarkan jumlah, maka ada permintaan kuat untuk melihat rencana beban juga berdasarkan jumlah per mesin. Secara umum, rencana produksi dan rencana beban diharapkan disusun dalam satuan hari atau shift. Di dalam pikiran perencana Indonesia, ada pola pikir seperti: “Hari ini (atau dalam shift ini), berapa unit yang akan diproduksi oleh mesin ini? Jika ada kelebihan kapasitas sebanyak sekian unit, kapan unit tersebut akan ... 続きを見る
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:
- Tempatkan EXE dan DLL di direktori yang sama.
- Jalankan EXE dengan direktori DLL sebagai direktori saat ini.
- Tempatkan DLL di direktori system32.
- Tempatkan DLL di direktori Windows.
- 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.
- Kelas Proyek Asprova
Dim project As aslib.ASBProject - Daftar objek yang terkait dengan kunci plugin yang digunakan dalam DLL plugin ekstensi
Dim ArgList As ASPArgList - Kelas Item
Dim item As ASBItem
Saat mereferensikan pustaka Asprova dari plugin, daftarkan dua pustaka kelas Asprova berikut dari pengaturan referensi lingkungan pengembangan:
- As 1.1 Type Library
- 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.
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.
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.
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).
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.
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:
- Array item pengisian ulang ArgAsObject(kArgItem)
- Daftar instruksi input kerja dari proses pertama pesanan induk ArgAsObject(kArgObjectList)
- Daftar ukuran lot ArgAsSafeArray(kSafeArrayArgDouble)
Ukuran Lot
- Ukuran lot adalah pengisian ulang otomatis "ya"
- Ukuran lot ditentukan saat pembuatan pesanan pengisian ulang
- Daftar instruksi input kerja (array 2D) dan daftar instruksi output kerja (item)
Proses Ekspansi Pesanan
- 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. - 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. - 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
- 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. - 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. - Karena kondisi adalah inst.Operation.OperationMainRes.Code='M4', (2) tidak dijalankan.
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