Hello,
i have written a new controller, that overrides the ObjectCreating Event from the NewObjectViewController, because it does not use Nested ObjectSpace.
The new Event looks like this:
C#void InsuredPersonTariffSelectionController_ObjectCreating(object sender, ObjectCreatingEventArgs e)
{
var listView = Frame.GetController<LinkToListViewController>();
var nestedFrame = listView.Frame as NestedFrame;
if (nestedFrame == null)
return;
var detailView = nestedFrame.ViewItem.View;
var insuredPerson = detailView.CurrentObject as IInsuredPerson;
if (e.ObjectType == typeof(IInsuredPersonTariff) && insuredPerson != null)
{
e.ObjectSpace = XPObjectSpace.FindObjectSpaceByObject(insuredPerson).CreateNestedObjectSpace();
var insuredPersonTariff = e.ObjectSpace.CreateObject<IInsuredPersonTariff>();
insuredPersonTariff.InsuredPerson = e.ObjectSpace.GetObject(insuredPerson as IInsuredPerson);
e.NewObject = insuredPersonTariff;
}
}
The problem is, if i do not use the new created NestedObjectSpace instead of the old e.ObjectSpace, i cannot get the insuredPerson-Object with the e.ObjectSpace.GetObject-Method.
My workaround works fine, but because of this workaround i have to override a second event, too.
I have to override the CustomProcessSelectedItem-Event from the ListViewProcessCurrentObjectController.
C#void listViewController_CustomProcessSelectedItem(object sender, CustomProcessListViewSelectedItemEventArgs e)
{
if (e.InnerArgs.CurrentObject is IInsuredPersonTariff)
{
var oldObjectSpace = XPObjectSpace.FindObjectSpaceByObject(e.InnerArgs.CurrentObject);
var nestedObjectSpace = oldObjectSpace.CreateNestedObjectSpace();
ShowViewParameters showViewParameters = new ShowViewParameters();
showViewParameters.CreatedView = Application.CreateDetailView(nestedObjectSpace, nestedObjectSpace.GetObject(e.InnerArgs.CurrentObject), true);
showViewParameters.Context = TemplateContext.View;
showViewParameters.TargetWindow = TargetWindow.NewModalWindow;
Application.ShowViewStrategy.ShowView(showViewParameters, new ShowViewSource(Frame, null));
e.Handled = true;
}
}
if i do not override this controller, i get an exception that the selected Item is not saved at the moment and cannot open the DetailView.
My Questions are:
- Why is not used a NestedObjectSpace in the NewObjectViewController instead of the XPObjectSpace?
- Is it possible to use the NestedObjectSpace without the change i used for the ListViewProcessCurrentObjectController?
My used DomainComponents:
C# [DomainComponent]
public interface IInsuredPersonTariff
{
/// <summary>
/// Tarif
/// </summary>
[ImmediatePostData]
[DataSourceProperty("AvailableTariffs")]
[DevExpress.Xpo.Delayed]
ITariff Tariff { get; set; }
/// <summary>
/// Verfügbaren Tarife einer Sparten(NonPersistenDc)
/// </summary>
[NonPersistentDc]
[ImmediatePostData]
IList<ITariff> AvailableTariffs { get; }
/// <summary>
/// Beitrag
/// </summary>
decimal Contribution { get; set; }
/// <summary>
/// Versicherte Person
/// </summary>
[ImmediatePostData]
IInsuredPerson InsuredPerson { get; set; }
}
[DomainComponent]
public interface IInsuredPerson
{
IContractBase Contract { get; set; }
[BackReferenceProperty("InsuredPerson")]
IList<IInsuredPersonTariff> InsuredPersonTariffs { get; }
}
/// <summary>
/// Tarif
/// </summary>
[DomainComponent]
[NavigationItem]
[XafDefaultProperty("Name")]
public interface ITariff
{
//Some Propertys...
}
Hello Michael,
We are working on your issue and will get back to you as soon as we can.