ecco come creare un sistema di moduli aggiuntivi a runtime, dove la base rimane semplice ma con i moduli aggiuntivi (plugins) aumenti le capacità del gestionale,,, nulla di che ma sempre valida 
diventa semplice ma diventa potente per la vostra app, invece di scrivere tonnellate di codice in unica app create tante app figlia, dove passando dei parametri tale applicazione figlia farà il suo lavoro, se tali parametri non passano applicazione figlia non funzionerà (proteggere il vostro lavoro)
come creare un menu dinamicamente
come aprire il plugins
codice chiusura richiesta menu
qui manca la regola che è soggettiva a secondo del vostro progetto
diventa semplice ma diventa potente per la vostra app, invece di scrivere tonnellate di codice in unica app create tante app figlia, dove passando dei parametri tale applicazione figlia farà il suo lavoro, se tali parametri non passano applicazione figlia non funzionerà (proteggere il vostro lavoro)
come creare un menu dinamicamente
B4X:
Sub addService(menu As MenuBar)
Dim m1 As Menu
m1.Initialize("PluIns","")
m1.Text = "Plug Ins"
m1.Tag = "plugins"
m1.MenuItems.Clear
Dim value As String = File.ListFiles(File.Combine(File.DirApp,"plugins"))
value = value.Replace("(ArrayList)","").Replace("[","").Replace("]","")
Dim values() As String = Regex.Split(",",value)
For i=0 To values.Length-1
Log(values(i))
Dim m As Map
m.Initialize
Dim mi As MenuItem
mi.Initialize(values(i),"plugins")
mi.Text = values(i).Replace(".jar","")
m.Put("kay","plugins")
m.Put("name",values(i).Replace(".jar",""))
m.Put("file",values(i).Replace(" ",""))
m.Put("dir",File.Combine(File.DirApp,"plugins"))
mi.Tag = m
m1.MenuItems.Add(mi)
Next
menu.Menus.Add(m1)
End Sub
come aprire il plugins
B4X:
Sub plugins_Action
Dim shl As Shell
Dim mi As MenuItem = Sender
Dim m As Map = mi.Tag
shl.Initialize("shl", "java", Array As String("-cp", m.GetValueAt(2), "b4j.example.main", "Ivano Monti"))
shl.WorkingDirectory = m.GetValueAt(3)
shl.Run(10000)
End Sub
codice chiusura richiesta menu
B4X:
Sub shl_ProcessCompleted (Success As Boolean, ExitCode As Int, StdOut As String, StdErr As String)
If Success And ExitCode = 0 Then
Log("Success")
Log(StdOut)
Else
Log("Error: " & StdErr)
End If
End Sub
qui manca la regola che è soggettiva a secondo del vostro progetto
Last edited: