Referenz der Projektdatei: .acproj
Signatur
<Project> <PropertyGroup> <SchemaVersion>2</SchemaVersion> <AssemblyName>Kunden</AssemblyName> <SourceRoot>source</SourceRoot> <BaseOutputPath>build</BaseOutputPath> <DeliveryRoot>delivery</DeliveryRoot> <Configurations>Kunde</Configurations> <TargetAccess>any</TargetAccess> <Template>template</Template> <Accde>false</Accde> <AppMode></AppMode> <ConnectionProfile>DEV</ConnectionProfile> <Finish>FinishBuild</Finish> <Test>AllTests</Test> <ControlBlocks>control-blocks</ControlBlocks> <NeutralLanguage>sl</NeutralLanguage> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)' == 'Release'"> <Accde>true</Accde> <AppMode>Production</AppMode> <ConnectionProfile>PROD</ConnectionProfile> </PropertyGroup> <ItemGroup> <TablePolicy Include="tblLaender" Policy="SeedData" /> <TablePolicy Include="tblCache" Policy="Ignore" /> </ItemGroup> </Project>
Zusammenfassung
Die Projektdatei benennt eine Access-Anwendung, den Ort ihrer Quellen und die Art, wie jede Build-Konfiguration sie
baut. Sie ist MSBuild-XML; dotnet build liest also dieselbe Datei, und jedes Werkzeug des SDK liest sie auf dieselbe
Weise.
Eigenschaften
| Element | Erforderlich | Standardwert | Bedeutung |
|---|---|---|---|
SchemaVersion | ja | – | 2. Ein Projekt des DATEC Access SDK (Schema 1) wird mit dem Hinweis abgelehnt, migrate auszuführen. |
AssemblyName | ja | – | Der Name der Anwendung: Dateiname der Datenbank und Name ihres VBA-Projekts; ein gültiger VBA-Bezeichner. |
SourceRoot | nein | source | Der Ordner mit den Standardorten der Quellen (Quellstruktur und Formate), relativ zur Projektdatei. Eine Art von Quellen, die Quellelemente an einen anderen Ort legen, verwendet ihn nicht. |
BaseOutputPath | nein | build | Der Ordner für alles, was ein Build erzeugt, relativ zur Projektdatei, wie BaseOutputPath in MSBuild: die Datenbank einer Konfiguration in ihrem Ausgabeordner <BaseOutputPath>\<configuration>, eine Auslieferung in <BaseOutputPath>\Delivery. Ein Ordner im Projektordner (ohne ..); nicht versioniert und nie nach Quellen durchsucht. |
DeliveryRoot | nein | delivery | Der Ordner der Auslieferungseinstellungen, relativ zur Projektdatei: delivery-settings.json, die Auslieferungsprofile, publisher.json und die Starterprojekte. Ein Ordner im Projektordner (ohne ..); mit den Quellen versioniert. |
Configurations | nein | keine | Build-Konfigurationen neben Debug und Release, durch ; getrennt, wie in einem SDK-artigen MSBuild-Projekt (Kunde;Test). Eine Konfiguration mit eigener Eigenschaftsgruppe (siehe unten) kennt das SDK auch, ohne dass sie hier steht. |
TargetAccess | nein | any | x86, x64 oder any: die Bitbreite von Access, die die Anwendung benötigt. check schlägt fehl, wenn das Access des Rechners eine andere hat. |
Template | nein | keine | Ein SDK-Projekt, auf dem die Anwendung aufbaut: ein Ordner mit genau einer .acproj oder die Datei selbst; relativ, absolut oder unterhalb eines Ordners der Einstellung paths.templates (WKL_ACCESS_TEMPLATES, SDK-Einstellungen). Siehe Vorlagen. |
Accde | nein | false | Erzeugt nach der ACCDB eine ACCDE. Eine ACCDE läuft nur in einem Access der Bitbreite, die sie erzeugt hat (Microsoft); bauen Sie die ACCDE für 64-Bit-Office mit 64-Bit-Access. |
AppMode | nein | keiner | Development, Administration oder Production: der Modus des Anwendungsmodells der WKL Forms Object Library, für den die ACCDE erzeugt wird. Siehe AppMode. |
ConnectionProfile | nein | keines | Das Verbindungsprofil des WKL Linked Tables Manager (DEV, TEST, PROD …), mit dem der Build Tabellen verknüpft; ohne Profil werden keine Tabellen verknüpft. Der Build verbindet sich mit den Datenquellen des Profils; der Build-Rechner benötigt daher die Treiber, Netzwerkzugriff und eine Anmeldung ohne Rückfrage; roundtrip tut dasselbe. |
Finish | nein | keine | Eine öffentliche Funktion eines Standardmoduls der Quellen, die der Build am Ende ausführt. Siehe Abschlussfunktion. |
Test | nein | keine | Eine öffentliche Funktion eines Standardmoduls der Quellen, die die Namen der Testprozeduren zurückgibt, die wkl-office test ausführt. Siehe Testfunktion. |
ControlBlocks | nein | der der Vorlage, dann paths.controlBlocks | Der Ordner der Steuerelementbausteine der WKL Forms Object Library, die Platzhalter in Formularen ersetzen. Es gilt der erste gesetzte Wert: diese Eigenschaft, die der Vorlage, die Umgebungsvariable WKL_ACCESS_CONTROL_BLOCKS, die Einstellung paths.controlBlocks (SDK-Einstellungen). Ein relativer Pfad gilt ab dem Ordner der Projektdatei. Auf einem Entwickler-PC der Ordner control-blocks des Release-Pakets, zum Beispiel %LOCALAPPDATA%\WKL\Access Components\<version>\control-blocks. |
NeutralLanguage | nein | keine | Der Sprachcode der neutralen Texte (source/texts/neutral.json), zum Beispiel sl: die Sprache, in der die Anwendung geschrieben ist. Diese Sprache braucht keine eigene Textdatei, und Schlüssel ohne Text in ihr werden nicht gemeldet. Siehe Quellenstruktur: Anwendungstexte. |
AccessDefaultFolder<Kind> | nein | der Basisordner des ersten Elements dieser Art, sonst der Standardort | Der Ordner, in den der Export ein neues Objekt dieser Art schreibt, relativ zur Projektdatei, zum Beispiel <AccessDefaultFolderForm>ui\pages</AccessDefaultFolderForm>. <Kind> ist der Elementname ohne Access (siehe Quellelemente); Arten aus einer einzigen Datei haben keine solche Eigenschaft. |
Eine PropertyGroup mit Condition="'$(Configuration)' == '<name>'" überschreibt Accde, AppMode und
ConnectionProfile für diese Konfiguration; die übrigen Eigenschaften gelten für alle Konfigurationen gleich (siehe
Hinweise).
Elemente
| Element | Metadaten | Bedeutung |
|---|---|---|
TablePolicy Include="<table>" | Policy | Was Build und Export mit den Daten einer lokalen Tabelle tun (siehe unten). Eine nicht genannte Tabelle ist SchemaOnly. |
ProjectReference Include="<path>" | – | Ein anderes Access-Projekt, dessen Datenbank als Bibliothek referenziert wird. Wird gelesen, aber noch von keinem Build-Schritt verwendet. |
| Richtlinie | Export schreibt | Build lädt |
|---|---|---|
SchemaOnly | das Schema | die leere Tabelle |
SeedData | Schema und Daten | Schema und Daten (Nachschlagewerte, Konfiguration) |
FullData | Schema und Daten | Schema und Daten (kleine lokale Datenbanken, die mit ihren Daten geführt werden) |
Generated | das Schema | die leere Tabelle; die Abschlussfunktion füllt sie |
Ignore | nichts | nichts (Caches, benutzerbezogener Zustand) |
Quellelemente
Ohne weitere Angabe liegen die Quellen an festen Orten unterhalb von SourceRoot
(Quellstruktur und Formate). Quellelemente legen eine Art von Quellen an einen anderen Ort: Jedes
Element erfasst die Dateien, die sein Attribut Include nennt, relativ zum Ordner der Projektdatei.
<ItemGroup> <AccessForm Include="ui\pages\*.form.txt;ui\dialogs\*.form.txt" Exclude="ui\pages\old\**" /> <AccessTable Include="db\tables\*.table.json" /> <AccessReferences Include="db\references.json" /> </ItemGroup>
| Element | Art | Standardort unterhalb von SourceRoot |
|---|---|---|
AccessQuery | Abfragen .query.txt | queries/*.query.txt |
AccessModule | Standardmodule .bas | modules/*.bas |
AccessClass | Klassenmodule .cls | classes/*.cls |
AccessForm | Formulare .form.txt | forms/*.form.txt |
AccessReport | Berichte .report.txt (Seiteneinstellungen .print.json daneben) | reports/*.report.txt |
AccessMacro | Makros .macro.txt | macros/*.macro.txt |
AccessTable | Tabellenschemas .table.json | tables/*.table.json |
AccessTableData | Tabellendaten .jsonl (mit dem Ordner <table>.files daneben) | data/*.jsonl |
AccessRelations, AccessReferences, AccessProperties | je eine Datei | relations/relations.json, references.json, application/properties.json |
AccessAppModel, AccessRibbonModel, AccessNavPaneModel | je eine Datei | application/app-model.json, ribbons/ribbon.json, navigation/navpane.json |
AccessRibbon, AccessImage, AccessTheme, AccessTexts | Menübänder, Bilder, Designordner, Textdateien | ribbons/*.xml, resources/images/*, themes/*, texts/*.json |
Regeln:
IncludeundExcludenennen Dateien oder Muster, mehrere durch;getrennt, mit den Platzhalterzeichen von MSBuild:?steht für ein Zeichen,*für beliebig viele Zeichen innerhalb eines Datei- oder Ordnernamens,**für beliebig viele Ordner. Groß- und Kleinschreibung spielt keine Rolle. Der Basisordner eines Musters ist der Ordner vor dem ersten Platzhalterzeichen, beiui\pages\*.form.txtalsoui\pages.- Ein Element erfasst nur Dateien mit der Dateinamenerweiterung seiner Art: Unter
AccessFormerfasstui\pages\*die.form.txt-Dateien dort, nicht die Seiteneinstellungen eines Berichts daneben. - Eine Art ohne Elemente bleibt an ihrem Standardort. Ein Projekt ohne Quellelemente wird genau wie bisher gelesen.
- Nennt ein Element eine Datei ausdrücklich und erfasst sie auch ein Muster eines anderen Elements, gehört die Datei zu dem Element, das sie nennt. Erfassen zwei Muster dieselbe Datei, ist das ein Fehler: Nennen Sie die Datei ausdrücklich in einem Element, oder grenzen Sie die Muster ein.
checkund jeder Befehl, der die Quellen liest, melden als Fehler:- ein Element, das keine Datei erfasst;
- eine Datei mit der Erweiterung eines Objekts, einer Tabelle oder von Tabellendaten, die kein Element erfasst, unterhalb von
SourceRootoder unterhalb des Basisordners eines Musters (eine bewusst ausgelassene Datei schließen Sie mitExcludeaus); - zwei Dateien mit demselben Objekt.
- Die Ordner
build,obj,.gitund.vsim Projektordner und der Ordner vonBaseOutputPathwerden nie durchsucht. - Der Export schreibt jedes Objekt in die Datei zurück, aus der es stammt. Ein neues Objekt kommt nach
AccessDefaultFolder<Kind>; ist das nicht gesetzt, in den Basisordner des ersten Elements seiner Art, sonst an seinen Standardort. - Pfade in Meldungen (
check,roundtrip) sind relativ zum Ordner der Projektdatei.
Hinweise
- Was nicht in der Datei steht. Verweise (in Prioritätsreihenfolge) und Datenbankeigenschaften (typisiert) sind eigene Quellen,
source/references.jsonundsource/application/properties.json; ein Export schreibt also nie die Datei neu, die ein Mensch bearbeitet. - Andere Elemente bleiben MSBuild überlassen: Das SDK liest nur die oben genannten Eigenschaften und Elemente; die Datei darf also eigene Eigenschaften und den
Importder MSBuild-Targets enthalten. - Bedingungen. Eine Eigenschaftsgruppe mit SDK-Eigenschaften akzeptiert nur die Form
'$(Configuration)' == '<name>'; eine andere Bedingung wird abgelehnt. In einer Konfigurationsgruppe übernimmt das SDKAccde,AppModeundConnectionProfile; eine andere SDK-Eigenschaft dort (SchemaVersion,AssemblyName,SourceRoot,BaseOutputPath,DeliveryRoot,Configurations,TargetAccess,Template,Finish,Test,ControlBlocks,NeutralLanguage,AccessDefaultFolder<Kind>) wird abgelehnt, und eigene Eigenschaften bleiben MSBuild überlassen. Elementgruppen mit SDK-Elementen akzeptieren keine Bedingung.
AppMode
Das Anwendungsmodell der WKL Forms Object Library (application/app-model.json) verlangt für jeden Modus andere
Starteigenschaften: Entwicklung (eine ACCDB), Administration (eine ACCDE im vollständigen Access) und Produktion (eine
ACCDE in der Runtime) – in der Produktion zum Beispiel keine Umgehungstaste und keine Access-Spezialtasten. Die
Anwendung korrigiert sie selbst, wenn sie bei ihrem Start EnsureApplication aufruft. Mit AppMode schreibt der Build
sie sofort in die ACCDE, sodass die ausgelieferte Datei ab dem ersten Öffnen stimmt, noch bevor Code läuft. AppIcon
wird aus der ACCDE entfernt, weil es eine Datei des Build-Rechners benennt; die Anwendung schreibt beim ersten Start das
Symbol des Benutzerrechners. Die ACCDB bleibt eine Entwicklungsdatenbank. check lehnt einen unbekannten Modus ab und
warnt, wenn die Quellen kein Anwendungsmodell enthalten oder die Konfiguration keine ACCDE erzeugt.
Vorlagen
Objekte, Tabellen (mit ihren Richtlinien), Beziehungen, Verweise und Eigenschaften der Vorlage kommen zu denen der
Anwendung hinzu. Eine Quelle der Anwendung ersetzt die gleichnamige der Vorlage; die Verweise der Anwendung stehen
zuerst; eine Eigenschaft der Anwendung hat Vorrang. Design, Modelle und die Abschlussfunktion stammen aus der Vorlage,
wenn die Anwendung keine eigenen hat. Eine Vorlage, die selbst eine Vorlage nennt, wird abgelehnt. export schreibt
nichts, was allein die Vorlage beiträgt; um ein Objekt der Vorlage für eine Anwendung zu ändern, kopieren Sie seine
Datei in die Quellen der Anwendung.
Eine Vorlage, auf der mehrere Anwendungen aufbauen, gehört nicht in das Repository der Anwendung: Setzen Sie
<Template> auf den Ordnernamen der Vorlage und die Umgebungsvariable WKL_ACCESS_TEMPLATES auf den Ordner, der sie
enthält (mehrere Ordner durch ; getrennt). Eine neue Fassung der Vorlage kommt dann mit dem nächsten Bau an.
Abschlussfunktion
Der Build führt sie mit Application.Run nach den Modellen aus, vor der letzten Kompilierung und der ACCDE, für
Schritte, die das SDK nicht kennt (zum Beispiel das Füllen von Generated-Tabellen). Sie gibt bei Erfolg "" oder
"OK" zurück; jeder andere Text bricht den Build mit diesem Text ab. Ein Fehler, den sie nicht behandelt, öffnet den
Laufzeitfehlerdialog von VBA, den der Build abbricht und meldet. Sie darf höchstens 5 Minuten laufen; danach wird das
verborgene Access des Builds beendet, und der Build schlägt fehl. Sie sollte dem VBA-Fehlergerüst einer
Automatisierungshilfe folgen: ihre Fehler behandeln und einen Text zurückgeben, statt einen Fehler auszulösen. check
lehnt einen Namen ab, der keine öffentliche Funktion eines Standardmoduls ist.
Testfunktion
wkl-office test ruft sie mit Application.Run im verborgenen Access des Laufs auf. Sie gibt die Namen der
Testprozeduren zurück – öffentliche Prozeduren (Sub oder Function) von Standardmodulen ohne Argumente –, als Array
(Array("Orders_Create", "Orders_Delete")) oder als einen Text mit durch Kommas getrennten Namen. Ein Projekt, das eine
Testfunktion nennt, erhält bei jedem Build das Testmodul WklTest des SDK, auch wenn seine Quellen keines enthalten;
ein Modul WklTest in den Quellen wird immer durch das des SDK ersetzt, und der nächste Export schreibt das des SDK in
die Quellen. check lehnt einen Namen ab, der keine öffentliche Funktion eines Standardmoduls ist. Siehe
Eine Anwendung testen.
Platzhalter für WKL-Steuerelemente
Ein Rechteck in einem Formular, dessen Tag wkl:<Kind> lautet (wkl:Grid, wkl:ActionBar …), wird beim Laden des
Formulars durch den Steuerelementbaustein <Kind>.control.txt ersetzt, mit Name, Position, Größe und Verankerung des
Rechtecks. Das Release-Paket der WKL Forms Object Library liefert die Bausteine in control-blocks mit. check nennt
jeden Platzhalter, dessen Baustein fehlt. Der Export schreibt das Formular mit dem Steuerelement; seine Quelle benötigt
den Platzhalter also nicht mehr.
Codebeispiel
Eine Release-Konfiguration, die eine ACCDE für die Produktion erzeugt und Tabellen mit dem Produktionsprofil verknüpft:
<PropertyGroup Condition="'$(Configuration)' == 'Release'"> <Accde>true</Accde> <AppMode>Production</AppMode> <ConnectionProfile>PROD</ConnectionProfile> </PropertyGroup>
wkl-office build Kunden.acproj -c Release
Verwandte Themen
- Projektordner – welche Datei wo liegt und was versioniert wird
- Build-Konfiguration und Auslieferungsprofil – was eine Konfiguration und ein Profil festlegen