Ik pas al een tijdje het “datacontext” begrip toe in mijn eigen programma’s, waarbij ik gemakkelijk kan omschakelen tussen database-servers voor “development” en “live” data.
Nu wil ik samen daarmee ook andere directories gebruiken, bv voor uitvoer (“Export”). Standaard had ik daarvoor in “/home/user/Data/myApp/” een map “Export/”, maar nu wil ik schakelen tussen
“live/Export” en “dev/Export”.
In mijn configuratie-bestand maak (definieer) ik daarvoor volgende settings:
(ik gebruik het DataContext object myContext)
myContext.newDirSet("Export", "Export of data here")
Dat bewaart:
[DirSet]
Export="Export of data here"
..
Uitgebreider voorbeeld: een programma dat gegevens met foto’s opslaat in een database, daarvoor kan importeren en er ook uit kan exporteren zou volgende directories kunnen gebruiken:
(telkens de naam en de verklaring)[DirSet]
Export=”Export of data here”
Import=”Import of data here”
Cam=”Camera images come here”
DbPictures=”Database URL’s to pictures here”
Je kan ze inlezen in een array van strings:
myContext.getAllDirSetNames()
(en zo ook tellen met array.Count)
Ik houd bovenstaande omschakelmogelijkheden aan tussen mijn echt gebruikte gegevens en mijn ontwikkelomgeving:
(terug te vinden in ~.config/gambas3/myApp.conf
)
[DataContext0]
Name="live"
...
[DataContext1]
Name="dev"
...
Met het omschakelen van DataContext 0 naar 1 moeten ook de Dirset keuzes aangepast van 0 naar 1.
Daarvoor heb ik config settings nodig:
[Dirset0-Export]
Dir="/home/user/Data/myApp/live/Export"
[Dirset1-Export]
Dir="/home/user/Data/myApp/dev/Export"
Die maak ik met:
myContext.setDirValue(0, "Export", "path", User.Home)
(maak een variabele om te gebruiken ipv User.Home)
In de klasse CDataContext heb ik voor de directory instellingen dus:
newDirSet(sName As String, Optional sDescription As String) As Boolean
updDirSet(sName As String, sNewDescription As String) As Boolean
getDirSetDescription(sName As String) As String
getContextDirSet(iContextId As Integer, sDirSetName As String) As String
getDirValue(iContextId As Integer, sDirSetName As String, sKey As String) As String
setDirValue(iContextId As Integer, sDirSetName As String, sKey As String, sDir As String) As Boolean
getAllDirSetNames() As String[]
Met de bedoeling redelijk universeel toepasbaar te zijn, vanaf je een DataContext hebt gedefinieerd kan je het gebruiken, ook los van database instellingen:
https://sourceforge.net/projects/garlic3/files/Lib/DataContext/
Gebruik: het project bevat Classes en een Module, en een uitvoerbaar (desktop) programma met FMain en een menu om te testen wat het doet.
Als je het compileert als “library” dan gaat die code niet mee, en kan je het als (project properties) “library” gebruiken in een ander Gambas3 project.