private static IObservable <View> CreateView(this XafApplication application, ExecuteActionJob job, IModelView modelView) => application.WhenViewCreating() .Select(t => { var objectType = modelView.AsObjectView.ModelClass.TypeInfo.Type; t.e.View = application.CreateView(job, modelView, application.CreateObjectSpace(objectType, true), objectType); return(t.e.View); }).FirstAsync().IgnoreElements();
private static IObservable <ShowViewParameters> ShowView(this XafApplication application) { return(application.WhenWindowCreated().When(TemplateContext.ApplicationWindow) .SelectMany(window => { var modelView = application.Model.ToReactiveModule <IModelReactiveModuleOneView>().OneView; if (modelView.View != null) { var showViewParameters = new ShowViewParameters(); var dialogController = new OneViewDialogController(); dialogController.AcceptAction.Caption = "Configure"; dialogController.CancelAction.Active[""] = false; showViewParameters.Controllers.Add(dialogController); showViewParameters.NewWindowTarget = NewWindowTarget.Separate; showViewParameters.Context = TemplateContext.PopupWindow; showViewParameters.TargetWindow = TargetWindow.NewWindow; showViewParameters.CreatedView = application.CreateView(modelView.View); application.ShowViewStrategy.ShowView(showViewParameters, new ShowViewSource(null, null)); return showViewParameters.ReturnObservable(); } return Observable.Empty <ShowViewParameters>(); }) .TraceOneView() .WhenNotDefault()); }
internal static IObservable <Unit> ExecuteAction(this XafApplication application, string jobId) => Observable.Using(application.CreateNonSecuredObjectSpace, objectSpace => objectSpace.GetObjectsQuery <ExecuteActionJob>().Where(actionJob => actionJob.Id == jobId).ToArray().ToNowObservable() .ConcatIgnored(job => { if (job.AuthenticateUserCriteria == null) { return(job.ReturnObservable()); } var user = objectSpace.FindObject(SecuritySystem.UserType, CriteriaOperator.Parse(job.AuthenticateUserCriteria)); return(user != null ? application.LogonUser(objectSpace.GetKeyValue(user)).FirstAsync().To(job) : Observable.Throw <Job>(new Exception($"{nameof(user)} not found"))); }) .SelectMany(job => application.CreateView(job, application.Model.Views[job.View.Name]).ToUnit() .Merge(application.ExecuteAction(job))) .ToUnit());
public static CompositeView NewView(this XafApplication application, IModelView modelView, IObjectSpace objectSpace = null) => (CompositeView)(objectSpace == null?(CompositeView)application.CallMethod("CreateView", modelView):application.CreateView(modelView, objectSpace));