Seiteneigenschaften manipulieren

Problemstellung

Unter gewissen Bedingungen soll das Normblatt der Seiten angepasst werden (zB. für Aufgaben jeweils ein etwas anderes, oder bei automatisierten Importen). Klar kann man das auch manuell erledigen: Alle betreffenden Seiten markieren, Normblattname anpassen und fertig. Aber das ist absolut nicht smart.

Lösungansatz

Was muss nun eigentlich passieren? Da auf die Parameter von Seiten (und auch von Bauteilen u.ä.) nicht via Array oder ähnlichem Konstrukt zugegriffen werden kann, müssen die erst selektiert werden. Das geht wie von Johann Weiher umgesetzt über edit:

// übernommen von https://suplanus.de/selectionset-pages/ Zeile 58 ff
private void SelectPage(string page) {
  ActionCallingContext actionCallingContext = new ActionCallingContext();
  actionCallingContext.AddParameter("PAGENAME", page);
  new CommandLineInterpreter().Execute("edit", actionCallingContext);
}

Alternativ könnte der Nutzer auch einzelne Seiten markieren und dann die Funktion ausführen. Das macht beispielsweise Sinn, wenn es um diverse Einstellungen geht. Nun aber noch eben das neue Normblatt definieren. Dafür gibt es die XEsSetPagePropertyAction, die noch die Eigenschaft und den Wert braucht. Es macht hier Sinn es sich an zu gewöhnen ein Try-Catch-Block um den Aufruf zu setzen, damit der Nutzer nicht nachher kryptische Fehlermeldungen bekommt und das ganze mit unter direkt abbricht.

private void setNormblatt(string page, string normblatt) {
  SelectPage(page);
  ActionCallingContext actionCallingContext = new ActionCallingContext();
  actionCallingContext.AddParameter("PropertyIdentName", "11016");
  actionCallingContext.AddParameter("PropertyIndex",     "0");
  actionCallingContext.AddParameter("PropertyValue",     normblatt);
  try {
    new CommandLineInterpreter().Execute("XEsSetPagePropertyAction", actionCallingContext);
  } catch (Exception e) {
    //Fehlerbehandlung
  }
}

Übrigens lassen sich so auch Werte verändern, die sonst Schreibgeschützt sind. Wird nach dem Upgrade vergessen den Nutzernamen sauber zu setzen und er erscheint groß geschrieben, kann man den so noch bereinigen. Dafür wäre es möglich über XEsGetPagePropertyAction erst den wert zu lesen und dann verändert(alles klein geschrieben, abgeschnitten, …) wieder einzutragen. Das Abfangen von Rückgabewerten aus Funktionen ist übrigens hier kurz beschrieben, bzw. findet sich auch in API-Hilfe von EPlan.

private void lastEditorToLow(string page) {
  SelectPage(page);
  
  string value = string.Empty;
  
  ActionCallingContext actionCallingContext = new ActionCallingContext();
  actionCallingContext.AddParameter("PropertyIdentName", "11020");
  actionCallingContext.AddParameter("PropertyIndex",     "0");
  try {
    new CommandLineInterpreter().Execute("XEsGetPagePropertyAction", actionCallingContext);
    actionCallingContext.GetParameter("PropertyValue", value);
  } catch (Exception e) {
    //Fehlerbehandlung
  }
  
  value = value.ToLower().Replace(" ","."); // alles Klein und . statt Leerzeichen
  
  actionCallingContext.AddParameter("PropertyValue",     value);
  try {
    new CommandLineInterpreter().Execute("XEsSetPagePropertyAction", actionCallingContext);
  } catch (Exception e) {
    //Fehlerbehandlung
  }
}

Ein Gedanke zu „Seiteneigenschaften manipulieren“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert