Hallo und Danke für deine Antwort.
Das geht schon in die richtige Richtung.
Ich würde es jedoch bevorzugen, den üblichen Dialog für die Wertesatz-Auswahl aufzurufen.
Darin können relativ einfach noch Variablen, welche als "veränderbar" gekennzeichnet wurden, manuell angepasst werden.
Ausserdem ist die grafische Ansicht ebenfalls ziemlich praktisch.
Ich habe meinen Code zwischenzeitlich noch etwas erweitert.
Jetzt erhalte ich die gewünschten Dialoge,
jedoch wird die Zuweisung nicht richtig vorgenommen.
Nach dem Einfügen des Seitenmakros und der Auswahl der Wertesätze,
werden die Werte scheinbar auf der Seite angepasst.
Wenn ich jedoch die betreffende seite neu lade (bzw. neu öffne),
sind die Zuweisungen wieder weg.
Woran könnte das liegen?
Hier ist die überarbeitete Execute() Methode:
public bool Execute(ActionCallingContext ctx)
{
//Eingabedialog für den Pfad zum gewünschten Seitenmakro
string value = "Eingabefeld";
PageMacroInputBox pageMacroInputBox = new PageMacroInputBox();
//Wurde ein gültiger Pfad angageben, soll das Makro im aktuellen Projekt eignefügt werden
if (pageMacroInputBox.Show("Seitenmakro einfügen...", "Makroname (inkl. Pfad):", ref value) == DialogResult.OK)
{
//Projekt
SelectionSet selectionSet = new SelectionSet();
Project MyProject = selectionSet.GetCurrentProject(false);
//Seitenmakro
PageMacro pageMacro = new PageMacro();
pageMacro.Open(value, MyProject);
Page[] macroPages = pageMacro.Pages;
List<string> pages = new List<string>();
//Platzhalterobjekte im Seitenmakro
List<Placement> placeHolders = new List<Placement>();
foreach (Page page in MyProject.Pages)
{
pages.Add(page.Name.ToString());
}
foreach (Page macroPage in macroPages)
{
//Platzhalterobjekte nur auf den Makroseiten ermitteln, die noch nicht im Projekt vorhanden sind
if(!pages.Contains(macroPage.Name))
{
foreach (Placement placement in macroPage.AllPlacements)
{
if (placement is PlaceHolder)
{
placeHolders.Add(placement);
}
}
}
}
//bestehende Seiten im Projekt nicht überschreiben
bool[] overwrite = new bool[macroPages.Count()];
//Seitenmakro einfügen
Insert insert = new Insert();
insert.PageMacro(pageMacro, MyProject, overwrite, PageMacro.Enums.NumerationMode.NumberPreferPrefix);
insert.Dispose();
//Benutzereinstellung auslesen -> Wertesätze nur zuweisen, wenn Benutzer die Einstellung aktiviert hat
Settings settings = new Settings();
if (settings.GetBoolSetting("USER.MacrosGui.PagePlaceholderAutoOpen", 0))
{
foreach (Placement placeholder in placeHolders)
{
Edit editPlaceHolders = new Edit();
editPlaceHolders.BringToFront((PlaceHolder)placeholder);
editPlaceHolders.SetFocusToGED();
//Mit der Aktion "XMPlaceHolderAssignRecordAction" wird das Dialogfenster für die Wertesatz Zuweisung geöffnet
CommandLineInterpreter oCLI = new CommandLineInterpreter();
oCLI.Execute("XMPlaceHolderAssignRecordAction");
oCLI.Execute("ProjectOptionsGuiIGfWindOnAssignRecord");
//Wird die Seite mit dieser Aktion neu gezeichnet, sieht man wie sich die Werte nach der Zuweisung ändern:
oCLI.Execute("XGedRedrawAction");
//Nachdem alle Platzhalterobjekte durchlaufen wurden (bzw. die Aktion beendet ist),
//kann die betreffende Seite im grafischen Bereich erneut geöffnet werden und die zugewiesenen Wertesätze sind wieder weg.
//Als würden die Änderungen gemacht, jedoch danach nicht gespeichert werden...
}
}
}
return true;
}
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP