-
Notifications
You must be signed in to change notification settings - Fork 3
Citavi Architektur
Daniel Lutz edited this page Aug 19, 2020
·
2 revisions
- Aufbau des Citavi-API und Interaktion mit dem Citavi User-Interface
- Einrichten der Entwicklungsumgebung
- Add-Ons erstellen, die keinen User-Aufruf benötigen (z.B. Filter für die Titelnavigation)
- Menüs und Symbolleisten von Citavi per Add-On erweitern
- Übersteuern von eingebauten Citavi-Befehlen
- Tipps & Tricks
Beispiel
ProjectShell projectShell = Program.ActiveProjectShell;
Project project = projectShell.Project;
int referencesCount = project.References.Count;
int referenceKeywordsCount = project.References[32].Keywords.Count;
MessageBox.Show(referencesCount.ToString());
MessageBox.Show(referenceKeywordsCount.ToString());
Beispiel 1
ProjectShell projectShell = Program.ActiveProjectShell;
MainForm mainForm = projectShell.MainForms[0];
Reference reference = mainForm.ActiveReference;
string title = reference.Title;
MessageBox.Show(title);
Beispiel 2
ProjectShell projectShell = Program.ActiveProjectShell;
Reference reference = projectShell.Project.References[34];
// PrimaryMainForm ist das vom Anwender zuletzt aktivierte Hauptformular
projectShell.PrimaryMainForm.ActiveReference = reference;
UI (Shell) <-> Engine
Die Shell kommuniziert mit der Engine über Objekte, Eigenschaften und Methodenaufrufe.
Die Engine schickt bei jeder Änderung ein Event. Die Shell kann diese Events abonnieren und so auf Änderungen reagieren.
Beispiel 1
Program.ActiveProjectShell.PrimaryMainForm.ActiveReference.Title = "Hello World";
Interner Ablauf
- Die Shell ändert den Titel der ActiveReference
- Die Reference löst ein PropertyChanged-Event aus
- Das MainForm «hört» auf dieses Event und aktualisiert alle relevanten Anzeigen von selbst.
Beispiel 2
Project project = Program.ActiveProjectShell.Project;
Person luhmann = new Person(project);
luhmann.LastName = "Luhmann";
luhmann.FirstName = "Niklas";
Reference reference = Program.ActiveProjectShell.
PrimaryMainForm.ActiveReference;
reference.Authors.Add(luhmann);
- Alle Entities (
Reference
,Person
,Keyword
usw.), die zum Projekt gehören, werden beiProject.Save()
automatisch gespeichert - Eine Entity ist immer einem Projekt zugeordnet, kann aber «gebunden» oder «ungebunden» sein.
- «Gebunden» bedeutet, dass die Entity ein Element der entsprechenden Project-Collection ist:
Person
->Project.Persons
,Reference
->Project.References
- jede Entity hat die Property
IsBound
. - Dieser Ansatz gibt uns die Freiheit, Entities ungebunden anzulegen, die niemals gespeichert werden.
- «Gebunden» bedeutet, dass die Entity ein Element der entsprechenden Project-Collection ist:
Beispiel 1: Direkte Bindung
// sozialeSysteme wird project zugeordnet, ist aber ungebunden
Reference sozialeSysteme = new Reference(project, ReferenceType.Book);
// sozialeSysteme wird nicht gespeichert
project.Save();
// soziale Systeme wird zu project.References hinzugefügt d.h. gebunden
project.References.Add(sozialeSysteme);
// soziale Systeme wird gespeichert
project.Save();
Beispiel 2: Indirekte Bindung
// sozialeSysteme wird als ungebundene Reference erstellt
Reference sozialeSysteme = new Reference(project, ReferenceType.Book);
// luhmann wird als ungebundene Person erstellt
Person luhmann = new Person(project, "Luhmann", "Niklas");
// luhmann wird als Autor zu sozialeSysteme hinzugefügt, beide bleiben ungebunden
sozialeSysteme.Authors.Add(luhmann);
// sozialeSysteme wird gebunden und luhmann wird automatisch mit gebunden d.h. zu project.Persons hinzugefügt
project.References.Add(sozialeSysteme);
// sozialeSysteme und luhmann werden beide gespeichert
project.Save();
// reference und alle zugehörigen Entities (Authors, Keywords, Publishers, Tasks usw.) werden automatisch nach second kopiert und dort gebunden. Auch Covers und verknüpfte Dateien im CitaviFiles-Ordner werden automatisch kopiert.
Project first = Program.ProjectShells[0].Project;
Project second = Program.ProjectShells[1].Project;
Reference reference = first.References[21];
second.References.Add(reference);
Es gibt in Citavi zwei Arten von Add-On-Schnittstellen:
- Schnittstellen ohne User-Interaktion
- Schnittstellen mit User-Interaktion (Menüeinträge)