Gerade hatte ich mal wieder die Fehlermeldung “InfoPath cannot execute any view-related object model calls. The view is not ready.”, allerdings diesmal aus einem Grund, der ein bisschen verzwickt ist.
Allgemein kann diese Fehlermeldung aus verschiedenen Gründen auftreten: Zum Einen beim Versuch, die Ansicht eines InfoPath Formulars von außen (von einem ASP.NET Web Form mit XmlFormView Control) aufzurufen. Für diesen Fall gibt es einen Workaround:
- ein string-Feld in der Datenquelle von außen mit dem Namen der Ansicht belegen
- im Formular das Feld auslesen und die Ansicht wechsel (oder die Defaultansicht setzen)
Zum Anderen kann die Meldung auftreten, wenn man versucht zweimal in der gleichen Methode die Ansicht zu wechseln. Hier kann man sich helfen, indem man sich in einer Variable die zu öffnende Ansicht merkt und erst am Ende der Methode tatsächlich wechselt.
string viewName = "NextStep";
// ...
if (condition)
{
viewName = "ThisStep";
}
else
{
viewName = "ErrorScreen";
}
// ...
this.ViewInfos.SwitchView(viewName);
Neu war mir, dass es auch nicht erlaubt ist, die Ansicht in einer Regel zu ändern und dann noch einmal im Code. Beide gelten zusammen quasi als ein Aufruf oder eine Transaktion. Mein Workaround hier: Den Ansichtenwechsel aus dieser Regel entfernen und auch im Code ausführen. Gegebenenfalls auch unter Einsatz der eben vorgestellten Lösung für zwei Wechsel in einer Methode.