Gradnja aplikacije Access iz besedilnih izvornih datotek
Aplikacijo Access s kontrolniki WKL hranite kot besedilo v sistemu za upravljanje izvorne kode in iz njega z enim ukazom zgradite ACCDB in ACCDE, tako da vsak razvijalec in vsak računalnik za gradnjo izdela enako aplikacijo.
Novi projekti: WKL Office SDK gradi, izvaža in preverja aplikacije Access iz izvornih datotek z več koraki kot to orodje za gradnjo (stanje in usklajevanje z odprtim Accessom, krožna preverba, MSBuild, dodatek za Access), datoteko
access-app.jsonpa prevzame z ukazomwkl-office migrate access-app.json -o <folder>(dokumentacija WKL Office SDK, „Selitev projekta orodja za gradnjo WKL Forms Object Library“). To orodje za gradnjo za obstoječe projekte še naprej deluje.
Zahteva WKL Forms Object Library 1.38 ali novejšo (orodje za gradnjo je del izdaje); hišna tema Riviera v paketu 1.44
ali novejšo; -Normalize in finish 1.45.1 ali novejšo.
Pregled rešitve
- Vir je repozitorij. Moduli in moduli razreda, kot jih izvozi urejevalnik VBA, obrazci, poročila, poizvedbe in makri, kot jih zapiše
SaveAsText, tabele kot SQL, tema Officea in trakovi kot datoteke. ACCDB in ACCDE sta izdelka gradnje in se ne hranita. - Projektna datoteka
access-app.jsonnavaja ime aplikacije, njene sklice in mape z izvornimi datotekami (referenčni priročnik). - En ukaz gradi:
tools\build\Build-AccessApp.ps1 -Project access-app.json. Access zažene skrito, v vrstnem redu, ki ga Access potrebuje (temo pred obrazci), in se ustavi s korakom, ki ni uspel. - Kontrolniki WKL v obrazcih pridejo z besedilom obrazca, če je bil obrazec urejen v Accessu in shranjen s
SaveAsText. Obrazec, ki ga ustvari skript, dobi na mestu kontrolnika pravokotnik z lastnostjo Oznaka (Tag)wkl:<Kind>; gradnja ga zamenja z izdanim gradnikom kontrolnika te vrste.
Izvedba
Repozitorij s to strukturo:
my-app/ +- access-app.json +- src/ +- tables/01-customer.sql +- modules/basApp.bas, clsCustomer.cls +- forms/frmShell.form.txt, frmStranke.form.txt +- ribbons/AppRibbon.xml +- theme/ (deli paketa .thmx: [Content_Types].xml, theme/theme/theme1.xml ...)
Projektna datoteka:
{
"name": "Stranke",
"references": [ { "library": "WklForms", "major": 2, "minor": 0 } ],
"tables": "src/tables",
"modules": "src/modules",
"theme": { "folder": "src/theme", "name": "Riviera" },
"ribbons": "src/ribbons",
"forms": "src/forms",
"properties": { "AppTitle": "Stranke", "StartUpForm": "frmShell", "CustomRibbonID": "AppRibbon" }
}
Gradnja (iz katerega koli okna PowerShell; skript se sam znova zažene v bitni različici Officea):
& '<release>\tools\build\Build-AccessApp.ps1' -Project .\my-app\access-app.json
Izhodna mapa my-app\out nato vsebuje Stranke.accdb in Stranke.accde.
Hišna tema „Riviera“ je v paketu izdaje pod themes\riviera. Če jo želite uporabiti namesto kopije v svojem
projektu, temo usmerite na paket (<package> pomeni mapo paketa izdaje):
"theme": { "folder": "<package>/themes/riviera", "name": "Riviera" }
Če izdelate lastno temo, v datoteki theme1.xml pred korenskim elementom ne sme biti komentarjev: Access tako temo
brez sporočila zavrže.
Spremembe, narejene v Accessu, vrnete v repozitorij tako, da razvojno podatkovno zbirko izvozite v mape z izvornimi
datotekami iste projektne datoteke. Export-AccessApp.ps1 je poleg skripta za gradnjo (<project> pomeni mapo
vašega projekta):
.\tools\build\Export-AccessApp.ps1 -Project <project>\access-app.json -Database <project>\dev\Stranke.accdb .\tools\build\Export-AccessApp.ps1 -Project <project>\access-app.json -Only frmStranke,basApp
Skript zapiše module, kot jih izvozi urejevalnik VBA, obrazce, poročila, poizvedbe in makre, kot jih zapiše
SaveAsText (brez vrstice Checksum, ki se spremeni ob vsakem shranjevanju), in trakove iz USysRibbons. Tabele,
tema in lastnosti podatkovne zbirke se ne zapišejo nazaj: določene so v izvornih datotekah. Objekti, ki obstajajo samo v
mapi, so navedeni, ne pa izbrisani. Podatkovno zbirko najprej zaprite v svojem Accessu; skript jo odpre v lastnem,
skritem Accessu. Z -Normalize iz besedil obrazcev in poročil izpusti vrstice, ki jih Access ob vsakem shranjevanju
zapiše na novo, tudi brez spremembe – GUID, bloke NameMap in RecSrcDt ter NoSaveCTIWhenDisabled –, zato primerjava
pokaže le prave spremembe; gradnja te vrednosti znova ustvari.
Korake, ki jih orodje ne pozna – skupine podokna za krmarjenje, skrite objekte –, zapišite v lastno funkcijo, ki jo gradnja izvede po lastnostih in jo navedete v projektni datoteki:
"finish": "FinishBuild"
Public Function FinishBuild() As String
On Error GoTo Failed
CurrentDb.Properties("StartUpShowDBWindow") = False ' any step the tool does not know
FinishBuild = "OK"
Exit Function
Failed:
FinishBuild = "Fehler " & Err.Number & ": " & Err.Description
End Function
Vsako besedilo razen "" ali "OK" ustavi gradnjo s tem besedilom.
Opombe
- Za gradnjo je potreben Access. Gradnja uporablja Accessova
LoadFromTextinSysCmd 603; Access Runtime ne more graditi. Na računalniku mora biti izdaja WKL registrirana v bitni različici Officea, kot na razvijalskem računalniku (Namestitev izdanega paketa). - Korak ACCDE se ponovi. Access se iz izdelave ACCDE občasno vrne brez datoteke in brez napake; skript poskusi do trikrat in preveri datoteko.
- Brez pogovornih oken. Access teče skrito; modul, ki se ne prevede, ustavi gradnjo s korakom in namigom, naj ga prevedete v urejevalniku VBA. Končan je samo primerek Accessa, ki ga je zagnal skript.
- Zaupanja vredno mesto samo med gradnjo. Izhodna mapa je med gradnjo zaupanja vredno mesto za trenutnega uporabnika, nato pa se odstrani. Če želite zgrajeno aplikacijo odpreti od tam, mapi zaupajte sami:
<release>\tools\deploy\Set-AccessTrustedLocation.ps1 -Path <output folder>(za posameznega uporabnika, brez skrbniških pravic). Brez tega Access podatkovno zbirko odpre z onemogočeno aktivno vsebino: brez VBA, brez kode zagonskega obrazca, kontrolniki WKL pa se ne naložijo. - Izvozi brez normalizacije spremenijo nekatere vrstice. Access ob vsakem shranjevanju v besedilo obrazca zapiše nove vrednosti, tudi če se obrazec ni spremenil (GUID-i v binarnih blokih,
NameMap,RecSrcDt,NoSaveCTIWhenDisabled); izvažajte z-Normalize, da jih ne prenesete v repozitorij. - Slike ohranijo pot računalnika, na katerem so bile vstavljene. Lastnost
Picturekontrolnika slike, vstavljene iz datoteke, ob prvem izvozu vsebuje absolutno pot do te datoteke, vendar le kot podatek (vdelana slika je v besedilu obrazca); gradnja iz besedila ohrani samo ime datoteke, zato naslednji izvoz to vrstico enkrat prikaže kot spremenjeno. - Ob odpiranju zgrajene podatkovne zbirke se zažene zagonski obrazec.
StartUpFormzačne veljati, ko se podatkovna zbirka odpre; skript, ki zgrajeno podatkovno zbirko nato odpre za lastne korake, zažene aplikacijo, odprtega obrazca pa ni mogoče skriti ali spremeniti v pogledu načrta (napaka 2564). Take korake zapišite v funkcijofinish, ki se izvede, preden se podatkovna zbirka znova odpre, ali paStartUpFormv lastnem skriptu nastavite nazadnje. - Orodje ne zajema povezanih tabel (ob zagonu uporabite
WklLinkManager.EnsureLinks), podatkov lokalnih tabel razen stavkovINSERTin relacij.
Sorodne teme
- Vstavljanje kontrolnikov WKL v obrazce s kodo – gradniki kontrolnikov
- Izdelava skrbniške aplikacije: vadnica predloge WKL Administration Shell Template