/// <summary> /// Update a business object. /// </summary> /// <param name="request">The request parameter object.</param> /// <returns>Result of the update operation - updated object</returns> public MobileResponse Update(MobileUpdateRequest request) { var result = new MobileResponse(); Type t = null; object obj = null; try { // unpack object obj = request.ObjectToUpdate; // load type for business object t = obj.GetType(); object o = null; var factoryInfo = GetMobileFactoryAttribute(t); if (factoryInfo == null) { SetContext(request); new Csla.Server.DataPortal().Authorize(new AuthorizeRequest(t, obj, DataPortalOperations.Update)); o = Csla.DataPortal.Update(obj); } else { if (string.IsNullOrEmpty(factoryInfo.UpdateMethodName)) { throw new InvalidOperationException(Resources.UpdateMethodNameNotSpecified); } SetContext(request); new Csla.Server.DataPortal().Authorize(new AuthorizeRequest(t, obj, DataPortalOperations.Update)); object f = FactoryLoader.GetFactory(factoryInfo.FactoryTypeName); o = Csla.Reflection.MethodCaller.CallMethod(f, factoryInfo.UpdateMethodName, obj); } result.Object = o; result.GlobalContext = ApplicationContext.GlobalContext; } catch (Csla.Reflection.CallMethodException ex) { var inspected = new DataPortalExceptionHandler().InspectException(t, obj, "DataPortal.Update", ex); result.Error = inspected.InnerException; } catch (Exception ex) { var inspected = new DataPortalExceptionHandler().InspectException(t, obj, "DataPortal.Update", ex); result.Error = inspected; } finally { ClearContext(); } return(result); }
public async Task <WcfResponse> Update(UpdateRequest request) #endif { var result = new WcfResponse(); try { request = ConvertRequest(request); // unpack object object obj = GetCriteria(request.ObjectData); var processor = new MobileRequestProcessor(); var updateRequest = new MobileUpdateRequest( obj, (IPrincipal)MobileFormatter.Deserialize(request.Principal), (ContextDictionary)MobileFormatter.Deserialize(request.GlobalContext), (ContextDictionary)MobileFormatter.Deserialize(request.ClientContext), request.ClientCulture, request.ClientUICulture); #if NET40 var updateResponse = processor.Update(updateRequest); #else var updateResponse = await processor.Update(updateRequest).ConfigureAwait(false); #endif if (updateResponse.Error != null) { result.ErrorData = new WcfErrorInfo(updateResponse.Error); } result.GlobalContext = MobileFormatter.Serialize(updateResponse.GlobalContext); result.ObjectData = MobileFormatter.Serialize(updateResponse.Object); } catch (Exception ex) { result.ErrorData = new WcfErrorInfo(ex); } finally { MobileRequestProcessor.ClearContext(); } return(ConvertResponse(result)); }
/// <summary> /// Update a business object. /// </summary> /// <param name="request">The request parameter object.</param> /// <returns>Result of the update operation - updated object</returns> public async Task <MobileResponse> Update(MobileUpdateRequest request) { var serverDataPortal = new Csla.Server.DataPortal(); var result = new MobileResponse(); Type businessObjectType = null; object obj = null; var operation = DataPortalOperations.Update; try { // unpack object obj = request.ObjectToUpdate; if (obj is Csla.Core.ICommandObject) { operation = DataPortalOperations.Execute; } // load type for business object businessObjectType = obj.GetType(); SetContext(request); serverDataPortal.Initialize(new InterceptArgs { ObjectType = businessObjectType, Parameter = obj, Operation = operation }); serverDataPortal.Authorize(new AuthorizeRequest(businessObjectType, obj, operation)); object newObject = null; var factoryInfo = GetMobileFactoryAttribute(businessObjectType); if (factoryInfo == null) { newObject = await Csla.Reflection.MethodCaller.CallGenericStaticMethodAsync(typeof(Csla.DataPortal), "UpdateAsync", new Type[] { businessObjectType }, true, obj).ConfigureAwait(false); } else { if (string.IsNullOrEmpty(factoryInfo.UpdateMethodName)) { throw new InvalidOperationException(Resources.UpdateMethodNameNotSpecified); } object f = FactoryLoader.GetFactory(factoryInfo.FactoryTypeName); newObject = await Csla.Reflection.MethodCaller.CallMethodTryAsync(f, factoryInfo.UpdateMethodName, obj).ConfigureAwait(false); } result.Object = newObject; #pragma warning disable CS0618 // Type or member is obsolete result.GlobalContext = ApplicationContext.GlobalContext; #pragma warning restore CS0618 // Type or member is obsolete } catch (Csla.Reflection.CallMethodException ex) { var inspected = new DataPortalExceptionHandler().InspectException(businessObjectType, obj, "DataPortal.Update", ex); result.Error = inspected.InnerException; } catch (Exception ex) { var inspected = new DataPortalExceptionHandler().InspectException(businessObjectType, obj, "DataPortal.Update", ex); result.Error = inspected; } finally { if (result.Error != null) { serverDataPortal.Complete(new InterceptArgs { ObjectType = businessObjectType, Parameter = obj, Operation = operation, Exception = result.Error, Result = new DataPortalResult(result.Object, result.Error, result.GlobalContext) }); } else { serverDataPortal.Complete(new InterceptArgs { ObjectType = businessObjectType, Parameter = obj, Operation = operation, Result = new DataPortalResult(result.Object, result.GlobalContext) }); } ClearContext(); } return(result); }
public async Task<WcfResponse> Update(UpdateRequest request) #endif { var result = new WcfResponse(); try { request = ConvertRequest(request); // unpack object object obj = GetCriteria(request.ObjectData); var processor = new MobileRequestProcessor(); var updateRequest = new MobileUpdateRequest( obj, (IPrincipal)MobileFormatter.Deserialize(request.Principal), (ContextDictionary)MobileFormatter.Deserialize(request.GlobalContext), (ContextDictionary)MobileFormatter.Deserialize(request.ClientContext), request.ClientCulture, request.ClientUICulture); #if NET40 var updateResponse = processor.Update(updateRequest); #else var updateResponse = await processor.Update(updateRequest).ConfigureAwait(false); #endif if (updateResponse.Error != null) { result.ErrorData = new WcfErrorInfo(updateResponse.Error); } result.GlobalContext = MobileFormatter.Serialize(updateResponse.GlobalContext); result.ObjectData = MobileFormatter.Serialize(updateResponse.Object); } catch (Exception ex) { result.ErrorData = new WcfErrorInfo(ex); } finally { MobileRequestProcessor.ClearContext(); } return ConvertResponse(result); }
/// <summary> /// Update a business object. /// </summary> /// <param name="request">The request parameter object.</param> /// <returns>Result of the update operation - updated object</returns> #if NET40 public MobileResponse Update(MobileUpdateRequest request)
public async Task<MobileResponse> Update(MobileUpdateRequest request) #endif { var serverDataPortal = new Csla.Server.DataPortal(); var result = new MobileResponse(); Type businessObjectType = null; object obj = null; var operation = DataPortalOperations.Update; try { // unpack object obj = request.ObjectToUpdate; if (obj is Csla.Core.ICommandObject) operation = DataPortalOperations.Execute; // load type for business object businessObjectType = obj.GetType(); SetContext(request); serverDataPortal.Initialize(new InterceptArgs { ObjectType = businessObjectType, Parameter = obj, Operation = operation }); serverDataPortal.Authorize(new AuthorizeRequest(businessObjectType, obj, operation)); object newObject = null; var factoryInfo = GetMobileFactoryAttribute(businessObjectType); if (factoryInfo == null) { #if NET40 newObject = Csla.DataPortal.Update(obj); #else newObject = await Csla.Reflection.MethodCaller.CallGenericStaticMethodAsync(typeof(Csla.DataPortal), "UpdateAsync", new Type[] { businessObjectType }, true, obj).ConfigureAwait(false); #endif } else { if (string.IsNullOrEmpty(factoryInfo.UpdateMethodName)) throw new InvalidOperationException(Resources.UpdateMethodNameNotSpecified); object f = FactoryLoader.GetFactory(factoryInfo.FactoryTypeName); #if NET40 newObject = Csla.Reflection.MethodCaller.CallMethod(f, factoryInfo.UpdateMethodName, obj); #else newObject = await Csla.Reflection.MethodCaller.CallMethodTryAsync(f, factoryInfo.UpdateMethodName, obj).ConfigureAwait(false); #endif } result.Object = newObject; result.GlobalContext = ApplicationContext.GlobalContext; } catch (Csla.Reflection.CallMethodException ex) { var inspected = new DataPortalExceptionHandler().InspectException(businessObjectType, obj, "DataPortal.Update", ex); result.Error = inspected.InnerException; } catch (Exception ex) { var inspected = new DataPortalExceptionHandler().InspectException(businessObjectType, obj, "DataPortal.Update", ex); result.Error = inspected; } finally { if (result.Error != null) serverDataPortal.Complete(new InterceptArgs { ObjectType = businessObjectType, Parameter = obj, Operation = operation, Exception = result.Error, Result = new DataPortalResult(result.Object, result.Error, result.GlobalContext) }); else serverDataPortal.Complete(new InterceptArgs { ObjectType = businessObjectType, Parameter = obj, Operation = operation, Result = new DataPortalResult(result.Object, result.GlobalContext) }); ClearContext(); } return result; }
/// <summary> /// Update a business object. /// </summary> /// <param name="request">The request parameter object.</param> /// <returns>Result of the update operation - updated object</returns> public MobileResponse Update(MobileUpdateRequest request) { var result = new MobileResponse(); Type t = null; object obj = null; try { // unpack object obj = request.ObjectToUpdate; // load type for business object t = obj.GetType(); object o = null; var factoryInfo = GetMobileFactoryAttribute(t); if (factoryInfo == null) { SetContext(request); new Csla.Server.DataPortal().Authorize(new AuthorizeRequest(t, obj, DataPortalOperations.Update)); o = Csla.DataPortal.Update(obj); } else { if (string.IsNullOrEmpty(factoryInfo.UpdateMethodName)) throw new InvalidOperationException(Resources.UpdateMethodNameNotSpecified); SetContext(request); new Csla.Server.DataPortal().Authorize(new AuthorizeRequest(t, obj, DataPortalOperations.Update)); object f = FactoryLoader.GetFactory(factoryInfo.FactoryTypeName); o = Csla.Reflection.MethodCaller.CallMethod(f, factoryInfo.UpdateMethodName, obj); } result.Object = o; result.GlobalContext = ApplicationContext.GlobalContext; } catch (Csla.Reflection.CallMethodException ex) { var inspected = new DataPortalExceptionHandler().InspectException(t, obj, "DataPortal.Update", ex); result.Error = inspected.InnerException; } catch (Exception ex) { var inspected = new DataPortalExceptionHandler().InspectException(t, obj, "DataPortal.Update", ex); result.Error = inspected; } finally { ClearContext(); } return result; }