Probleme mit Navigationspunkten bei Version 1.42


Thomas Wölfer
Thomas Wölfer

12. Mai 2009


Bei Version 1.42 der Baustatik haben wir dummerweise ein Problem reingebaut: Ein paar der intern vergebenen Namen für Ergebnisse wurden verändert. Das wäre weiter kein Problem, wenn diese Namen nicht auch in den Navigationspunkten gespeichert würden. Hat man nun eine Eingabedatei mit einer vorherigen Version angelegt und enthält diese Datei Navigationspunkte mit solchen "geänderten" Ergebnissen, dann kann man die Navigationspunkte nicht mehr anspringen.

Das äußert sich dann entweder beim Befehl "Navigationspunkte anspringen", beim öffnen der Ausgabesteuerung oder beim Drucken bzw. der Druckvorschau mit einer Fehlermeldung. Im nächsten Update wird das nicht mehr passieren, bis dahin gibt es 2 Workarounds:

1.) Man öffnet die Datei und versucht die Navigationspunkte nacheinander anzuspringen. Diejenigen, bei denen das zu einer Fehlermeldung führt, muss man löschen. Das ist zwar ärgerlich, aber dafür kann man danach wenigstens wieder mit den Daten arbeiten. (Speichern nicht vergessen.)

2.) Wem das manuelle löschen zu umständlich ist, der kann das folgende Makro verwenden: Es entfernt die Ergebnisse aus den betroffenen Navigationspunkten, behält die Punkte aber bei. Das heist, man hat hinterher noch alle Navigationspunkte, allerdings enthalten einige davon dann eben nicht mehr die Ergebnisse, die sie zuvor enthielten.

Nochmals sorry dafür: Hoffe mal, sowas kommt nicht wieder vor.

Hier das Makro:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using DIE.Globals;
using DIE.Applications.Faltwerk.Objects.BeamStations;
using DIE.Applications.Faltwerk.Results.Descriptors;
using DIE.Framework.ApplicationModell;
using DIE.Framework.ApplicationModell.Commands;
using DIE.Applications.Faltwerk.Results;

namespace MeineMakros
{
    public class RepairNaviResult : UserCommandBase
    {
        public RepairNaviResult() : base(@"RepairNaviResult", @"RepairNaviResult")
        {
        }
        
        public override void Execute(IExecuteCommandContext context)
        {
            if(context.TargetDocument != null)
            {
                foreach(BeamStation beamStation in context.TargetDocument.GetObjects(typeof (IBeamStation)))
                {
                    if(beamStation.ResultInfos != null && beamStation.ResultInfos.Exists(IsInvalid))
                    {
                        ResultInfoList resultInfoList = new ResultInfoList();
                        
                        foreach(IResultInfo original in beamStation.ResultInfos)
                        {
                            if(original.ResultDescriptor != null)
                            {
                                resultInfoList.Add(original);
                            }
                        }
                        
                        if(resultInfoList.Count > 0)
                        {
                            beamStation.ResultInfos = resultInfoList;
                        }
                        else
                        {
                            beamStation.ResultInfos = null;
                        }
                    }
                }
            }
        }
        
        private static bool IsInvalid(IResultInfo resultInfo)
        {
            return resultInfo.ResultDescriptor == null;
        }
}
}