PAGE.RUN Crash

I have just been battling a strange error. When I called a certain page in our solution all clients just crashed, hard.

So what was different with this page? It’s card page,  connected to a list page, works great when users double click on a record in the list page the card opens – Works perfectly.

But if I open the card page directly with PAGE.RUN(xxx,SomeRec) all clients crash!

In the stack trace, I could see something about subforms (DoBuildSubform) so I suspected the culprint was a pagepart (Yeah, Microsoft still calls it “forms” in their code) and I removed my subforms. Sure enough, now everything worked. I inserted each pagepart until I found the offending page.

The sub page uses the BusinessChart control, and it was the only control on that page. Running the sub page didn’t reviel anything strange, so I was puzzled for awhile …

Poking around, I suddenly notices that the PageType was a ListPart, with only one control on the page. There was really no listable thing to do, so I tried to change it into a CardPart instead – and sure enough, now everything worked 🙂

TL;DR Putting a control add-in on a ListPart subpage can crash all clients when the parent page is called with PAGE.RUN or PAGE.RUNMODAL – Change to CardPart to fix crash.

Type: System.ArgumentOutOfRangeException
Message: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
StackTrace:
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at Microsoft.Dynamics.Nav.Client.FormBuilder.ActionBuilder.CreateOpenAndCreateAction(LogicalForm parentForm, ActionDefinition actionDef, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\ActionBuilder.cs:line 998
   at Microsoft.Dynamics.Nav.Client.FormBuilder.ActionBuilder.CreateMenuAction(ActionDefinition actionDef, LogicalControl parent, UIBuilderContext context, String& imageName) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\ActionBuilder.cs:line 377
   at Microsoft.Dynamics.Nav.Client.FormBuilder.ActionBuilder.CreateAction(ActionDefinition actionDef, LogicalControl parent, UIBuilderContext context, String& imageName) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\ActionBuilder.cs:line 115
   at Microsoft.Dynamics.Nav.Client.FormBuilder.ActionBuilder.DoBuild(ActionDefinition definition, LogicalControl parent, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\ActionBuilder.cs:line 1273
   at Microsoft.Dynamics.Nav.Client.FormBuilder.CommandBarBuilder.CreateActions(CommandBarDefinition definition, UIBuilderContext context, LogicalControl logicalControl) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\CommandBarBuilder.cs:line 247
   at Microsoft.Dynamics.Nav.Client.FormBuilder.CommandBarBuilder.DoBuild(CommandBarDefinition definition, LogicalControl parent, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\CommandBarBuilder.cs:line 72
   at Microsoft.Dynamics.Nav.Client.FormBuilder.UIPartBuilder.DoBuild(MasterPage definition, BindingManager bindingManager, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\UIPartBuilder.cs:line 162
   at Microsoft.Dynamics.Nav.Client.FormBuilder.PageBuilder.Build(MasterPage definition, BindingManager bindingManager, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Framework\PageBuilder.cs:line 117
   at Microsoft.Dynamics.Nav.Client.FormBuilder.InfopartBuilderBase`1.CreatePart(TDefinition definition, FormHostControl infopart, UIBuilderContext partContext, Boolean filteringAllowed) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\InfopartBuilderBase.cs:line 103
   at Microsoft.Dynamics.Nav.Client.FormBuilder.PageInfopartBuilder.CreatePagePart(InfopartPageDefinition infoPartDefinition, FormHostControl infopart, UIBuilderContext partContext, Boolean filteringAllowed) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\PageInfopartBuilder.cs:line 236
   at Microsoft.Dynamics.Nav.Client.FormBuilder.PageInfopartBuilder.DoBuildPagePartCommon(InfopartPageDefinition definition, LogicalControl parent, UIBuilderContext context, BuildingUIPart type, Boolean filteringAllowed) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\PageInfopartBuilder.cs:line 169
   at Microsoft.Dynamics.Nav.Client.FormBuilder.PageInfopartBuilder.DoBuildSubForm(InfopartPageDefinition definition, LogicalControl parent, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\PageInfopartBuilder.cs:line 121
   at Microsoft.Dynamics.Nav.Client.FormBuilder.PlaceholderBuilder.BuildChildControls(ControlContainerPlaceHolder definition, LogicalControl parent, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\PlaceHolderBuilder.cs:line 58
   at Microsoft.Dynamics.Nav.Client.FormBuilder.PlaceholderBuilder.DoBuild(ControlContainerPlaceHolder definition, LogicalControl parent, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\PlaceHolderBuilder.cs:line 44
   at Microsoft.Dynamics.Nav.Client.FormBuilder.PageBuilder.BuildContent(ContentAreaDefinition contentArea, LogicalForm form, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Framework\PageBuilder.cs:line 1184
   at Microsoft.Dynamics.Nav.Client.FormBuilder.CardPageBuilder.DoBuild(MasterPage definition, BindingManager bindingManager, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Builders\CardPageBuilder.cs:line 49
   at Microsoft.Dynamics.Nav.Client.FormBuilder.PageBuilder.Build(MasterPage definition, BindingManager bindingManager, UIBuilderContext context) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\Framework\PageBuilder.cs:line 117
   at Microsoft.Dynamics.Nav.Client.FormBuilder.BuilderSession.CreateLogicalForm(MasterPage metadata, FormState formState) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.Builder\BuilderSession\BuilderSession.cs:line 328
   at Microsoft.Dynamics.Nav.Client.PageRunCallbackHandler.RunPage(FormRunRequest formRequest) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.UI\PageRunCallbackHandler.cs:line 136
   at Microsoft.Dynamics.Nav.Client.ServiceConnection.ProcessServerResponse(Object response) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.ServiceConnection\ServiceConnection.cs:line 2082
   at Microsoft.Dynamics.Nav.Client.ServiceConnection.CallServer[T](BeginCallServerMethod beginCallServerMethod, EndCallServerMethod`1 endCallServerMethod) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.ServiceConnection\ServiceConnection.cs:line 2029
   at Microsoft.Dynamics.Nav.Client.ServiceConnectionBase.ValidateField(NavRecordState& state, NavDataSet recDataSet, Int32 controlId) in S:\Depot\NAV110\Platform\ClientServerShared\Prod.Types\ServiceConnection\ServiceConnectionBase.cs:line 421
   at Microsoft.Dynamics.Nav.Client.DataBinder.NstDataAccess.ValidateField(ValidationItem validationItem) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.UI\Databinder\NSTDataAccess.cs:line 602
   at Microsoft.Dynamics.Nav.Client.DataBinder.NavBindingManager.ValidateField(ValidationItem validationItem) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.UI\Databinder\NavBindingManager.cs:line 1541
   at Microsoft.Dynamics.Nav.Client.Validation.RowEntryValidateItem.ValidateItem(ValidationItem validationItem) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.UI\Validation\RowEntryValidateItem.cs:line 44
   at Microsoft.Dynamics.Nav.Client.Validation.ValidationHelper.ExecuteValidation(ValidationItem validationItem, String message) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.UI\Validation\ValidationHelper.cs:line 434
   at Microsoft.Dynamics.Nav.Client.Validation.ValidationHelper.ValidateItem(ValidationItem validationItem) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.UI\Validation\ValidationHelper.cs:line 406
   at Microsoft.Dynamics.Nav.Client.Validation.ValidationHelper.Validate(IValidationCaller validationCaller, ValidationItem validationItem) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.UI\Validation\ValidationHelper.cs:line 233
   at Microsoft.Dynamics.Nav.Client.DataBinder.NavBindingManager.Validate(IValidationCaller validationCaller, ValidationItem validationItem) in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.UI\Databinder\NavBindingManager.cs:line 1479
   at Microsoft.Dynamics.Nav.Client.Validation.FieldValidationRule.<ValidateValue>d__4.MoveNext() in S:\Depot\NAV110\Platform\Client\Shared\Prod.Client.UI\Validation\FieldValidationRule.cs:line 66
   at Microsoft.Dynamics.Framework.UI.ValidationRule.ValidateRuleCollection(ValidationResult result, IEnumerable`1 rules, Object value, IValidationCaller validationCaller) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Validation\ValidationRule.cs:line 89
   at Microsoft.Dynamics.Framework.UI.EditLogicalControl.ValidateHost(IValidationCaller validationCaller, ValidationResult validationResult) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Forms\EditLogicalControl.cs:line 783
   at Microsoft.Dynamics.Framework.UI.ValidationHolder.ValidateInternal(IValidationCaller validationCaller, ValidationResult validationResult) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Validation\ValidationHolder.cs:line 159
   at Microsoft.Dynamics.Framework.UI.ValidationHolder.PerformValidation(IValidationCaller validationCaller, ValidationResult validationResult) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Validation\ValidationHolder.cs:line 136
   at Microsoft.Dynamics.Framework.UI.ValidationHolder.Validate(ValidationResult validationResult) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Validation\ValidationHolder.cs:line 120
   at Microsoft.Dynamics.Framework.UI.EditLogicalControl.SetObjectValue(Object value) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Forms\EditLogicalControl.cs:line 436
   at Microsoft.Dynamics.Framework.UI.StringControl.TrySettingStringValue(String value) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Forms\StringControl.cs:line 186
   at Microsoft.Dynamics.Framework.UI.SaveValueInteraction.InvokeCore(SaveValueInteractionInput logicalInteractionInput) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Interactions\LogicalInteractions\SaveValueInteraction.cs:line 132
   at Microsoft.Dynamics.Framework.UI.InteractionInvoker.Invoke[T](String interactionName, Action`1 invokeMethod, T input) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Interactions\InteractionInvoker.cs:line 42
   at Microsoft.Dynamics.Framework.UI.LogicalInteraction`1.Invoke(T logicalInteractionInput) in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Interactions\LogicalInteraction.cs:line 40
   at Microsoft.Dynamics.Framework.UI.InteractionManager.<>c__DisplayClass8_0.<InvokeInteractions>b__3() in S:\Depot\NAV110\Platform\Client\Shared\Prod.ClientFwk\Interactions\InteractionManager.cs:line 125
Source: mscorlib