Example #1
0
 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());