private static object Create(Type objectType, object criteria) { Server.DataPortalResult result = null; Server.DataPortalContext dpContext = null; try { OnDataPortalInitInvoke(null); if (!YYT.Security.AuthorizationRules.CanCreateObject(objectType)) { throw new System.Security.SecurityException(string.Format( Resources.UserNotAuthorizedException, "create", objectType.Name)); } var method = Server.DataPortalMethodCache.GetCreateMethod(objectType, criteria); DataPortalClient.IDataPortalProxy proxy; proxy = GetDataPortalProxy(method.RunLocal); dpContext = new YYT.Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote); OnDataPortalInvoke(new DataPortalEventArgs(dpContext, objectType, DataPortalOperations.Create)); try { result = proxy.Create(objectType, criteria, dpContext); } catch (Server.DataPortalException ex) { result = ex.Result; if (proxy.IsServerRemote) { ApplicationContext.SetGlobalContext(result.GlobalContext); } throw new DataPortalException( string.Format("DataPortal.Create {0} ({1})", Resources.Failed, ex.InnerException.InnerException), ex.InnerException, result.ReturnObject); } if (proxy.IsServerRemote) { ApplicationContext.SetGlobalContext(result.GlobalContext); } OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, DataPortalOperations.Create)); } catch (Exception ex) { OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, DataPortalOperations.Create, ex)); throw; } return(result.ReturnObject); }
/// <summary> /// Delete a business object. /// </summary> /// <param name="objectType">Type of business object to create.</param> /// <param name="criteria">Criteria object describing business object.</param> /// <param name="context"> /// <see cref="Server.DataPortalContext" /> object passed to the server. /// </param> public DataPortalResult Delete(Type objectType, object criteria, DataPortalContext context) { try { DataPortalResult result = null; if (criteria is int) { result = InvokeMethod(context.FactoryInfo.FactoryTypeName, context.FactoryInfo.DeleteMethodName, context); } else { result = InvokeMethod(context.FactoryInfo.FactoryTypeName, context.FactoryInfo.DeleteMethodName, criteria, context); } return(result); } catch (Exception ex) { throw new DataPortalException( context.FactoryInfo.DeleteMethodName + " " + Resources.FailedOnServer, ex, new DataPortalResult()); } }
/// <summary> /// Called by the business object's Save() method to /// insert, update or delete an object in the database. /// </summary> /// <remarks> /// Note that this method returns a reference to the updated business object. /// If the server-side DataPortal is running remotely, this will be a new and /// different object from the original, and all object references MUST be updated /// to use this new object. /// </remarks> /// <param name="obj">A reference to the business object to be updated.</param> /// <returns>A reference to the updated business object.</returns> public static object Update(object obj) { Server.DataPortalResult result = null; Server.DataPortalContext dpContext = null; DataPortalOperations operation = DataPortalOperations.Update; Type objectType = obj.GetType(); try { OnDataPortalInitInvoke(null); DataPortalMethodInfo method; var factoryInfo = ObjectFactoryAttribute.GetObjectFactoryAttribute(objectType); if (factoryInfo != null) { var factoryType = FactoryDataPortal.FactoryLoader.GetFactoryType(factoryInfo.FactoryTypeName); var bbase = obj as Core.BusinessBase; if (bbase != null && bbase.IsDeleted) { if (!YYT.Security.AuthorizationRules.CanDeleteObject(objectType)) { throw new System.Security.SecurityException(string.Format(Resources.UserNotAuthorizedException, "delete", objectType.Name)); } method = Server.DataPortalMethodCache.GetMethodInfo(factoryType, factoryInfo.DeleteMethodName, new object[] { obj }); } else { if (!YYT.Security.AuthorizationRules.CanEditObject(objectType)) { throw new System.Security.SecurityException(string.Format(Resources.UserNotAuthorizedException, "save", objectType.Name)); } method = Server.DataPortalMethodCache.GetMethodInfo(factoryType, factoryInfo.UpdateMethodName, new object[] { obj }); } } else { string methodName; if (obj is CommandBase) { methodName = "DataPortal_Execute"; operation = DataPortalOperations.Execute; if (!YYT.Security.AuthorizationRules.CanEditObject(objectType)) { throw new System.Security.SecurityException(string.Format(Resources.UserNotAuthorizedException, "execute", objectType.Name)); } } else { var bbase = obj as Core.BusinessBase; if (bbase != null) { if (bbase.IsDeleted) { methodName = "DataPortal_DeleteSelf"; if (!YYT.Security.AuthorizationRules.CanDeleteObject(objectType)) { throw new System.Security.SecurityException(string.Format(Resources.UserNotAuthorizedException, "delete", objectType.Name)); } } else if (bbase.IsNew) { methodName = "DataPortal_Insert"; if (!YYT.Security.AuthorizationRules.CanCreateObject(objectType)) { throw new System.Security.SecurityException(string.Format(Resources.UserNotAuthorizedException, "create", objectType.Name)); } } else { methodName = "DataPortal_Update"; if (!YYT.Security.AuthorizationRules.CanEditObject(objectType)) { throw new System.Security.SecurityException(string.Format(Resources.UserNotAuthorizedException, "save", objectType.Name)); } } } else { methodName = "DataPortal_Update"; if (!YYT.Security.AuthorizationRules.CanEditObject(objectType)) { throw new System.Security.SecurityException(string.Format(Resources.UserNotAuthorizedException, "save", objectType.Name)); } } } method = Server.DataPortalMethodCache.GetMethodInfo(obj.GetType(), methodName); } DataPortalClient.IDataPortalProxy proxy; proxy = GetDataPortalProxy(method.RunLocal); dpContext = new Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote); OnDataPortalInvoke(new DataPortalEventArgs(dpContext, objectType, operation)); try { if (!proxy.IsServerRemote && ApplicationContext.AutoCloneOnUpdate) { // when using local data portal, automatically // clone original object before saving ICloneable cloneable = obj as ICloneable; if (cloneable != null) { obj = cloneable.Clone(); } } result = proxy.Update(obj, dpContext); } catch (Server.DataPortalException ex) { result = ex.Result; if (proxy.IsServerRemote) { ApplicationContext.SetGlobalContext(result.GlobalContext); } throw new DataPortalException( String.Format("DataPortal.Update {0} ({1})", Resources.Failed, ex.InnerException.InnerException), ex.InnerException, result.ReturnObject); } if (proxy.IsServerRemote) { ApplicationContext.SetGlobalContext(result.GlobalContext); } OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, operation)); } catch (Exception ex) { OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, operation, ex)); throw; } return(result.ReturnObject); }
internal static object Fetch(Type objectType, object criteria) { Server.DataPortalResult result = null; Server.DataPortalContext dpContext = null; try { OnDataPortalInitInvoke(null); if (!YYT.Security.AuthorizationRules.CanGetObject(objectType)) { throw new System.Security.SecurityException(string.Format(Resources.UserNotAuthorizedException, "get", objectType.Name)); } var method = Server.DataPortalMethodCache.GetFetchMethod(objectType, criteria); DataPortalClient.IDataPortalProxy proxy; proxy = GetDataPortalProxy(method.RunLocal); dpContext = new Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote); OnDataPortalInvoke(new DataPortalEventArgs(dpContext, objectType, DataPortalOperations.Fetch)); try { result = proxy.Fetch(objectType, criteria, dpContext); } catch (Server.DataPortalException ex) { result = ex.Result; if (proxy.IsServerRemote) { ApplicationContext.SetGlobalContext(result.GlobalContext); } string innerMessage = string.Empty; if (ex.InnerException is YYT.Reflection.CallMethodException) { if (ex.InnerException.InnerException != null) { innerMessage = ex.InnerException.InnerException.Message; } } else { innerMessage = ex.InnerException.Message; } throw new DataPortalException( String.Format("DataPortal.Fetch {0} ({1})", Resources.Failed, innerMessage), ex.InnerException, result.ReturnObject); } if (proxy.IsServerRemote) { ApplicationContext.SetGlobalContext(result.GlobalContext); } OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, DataPortalOperations.Fetch)); } catch (Exception ex) { OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, DataPortalOperations.Fetch, ex)); throw; } return(result.ReturnObject); }
public DataPortalResult Update(object obj, DataPortalContext context) { try { SetContext(context); Authorize(new AuthorizeRequest(obj.GetType(), obj, DataPortalOperations.Update)); DataPortalResult result; DataPortalMethodInfo method; var factoryInfo = ObjectFactoryAttribute.GetObjectFactoryAttribute(obj.GetType()); if (factoryInfo != null) { var factoryType = FactoryDataPortal.FactoryLoader.GetFactoryType(factoryInfo.FactoryTypeName); var bbase = obj as Core.BusinessBase; if (bbase != null && bbase.IsDeleted) { method = Server.DataPortalMethodCache.GetMethodInfo(factoryType, factoryInfo.DeleteMethodName, new object[] { obj }); } else { method = Server.DataPortalMethodCache.GetMethodInfo(factoryType, factoryInfo.UpdateMethodName, new object[] { obj }); } } else { string methodName; var bbase = obj as Core.BusinessBase; if (bbase != null) { if (bbase.IsDeleted) { methodName = "DataPortal_DeleteSelf"; } else if (bbase.IsNew) { methodName = "DataPortal_Insert"; } else { methodName = "DataPortal_Update"; } } else if (obj is CommandBase) { methodName = "DataPortal_Execute"; } else { methodName = "DataPortal_Update"; } method = DataPortalMethodCache.GetMethodInfo(obj.GetType(), methodName); } context.TransactionalType = method.TransactionalType; IDataPortalServer portal; switch (method.TransactionalType) { case TransactionalTypes.EnterpriseServices: portal = new ServicedDataPortal(); try { result = portal.Update(obj, context); } finally { ((ServicedDataPortal)portal).Dispose(); } break; case TransactionalTypes.TransactionScope: portal = new TransactionalDataPortal(); result = portal.Update(obj, context); break; default: portal = new DataPortalSelector(); result = portal.Update(obj, context); break; } return(result); } catch (YYT.Server.DataPortalException ex) { Exception tmp = ex; throw; } catch (Exception ex) { throw new DataPortalException( "DataPortal.Update " + Resources.FailedOnServer, ex, new DataPortalResult()); } finally { ClearContext(context); } }
public DataPortalResult Delete(Type objectType, object criteria, DataPortalContext context) { var portal = new DataPortalSelector(); return(portal.Delete(objectType, criteria, context)); }
public DataPortalResult Update(object obj, DataPortalContext context) { var portal = new DataPortalSelector(); return(portal.Update(obj, context)); }
public DataPortalResult Create( Type objectType, object criteria, DataPortalContext context) { LateBoundObject obj = null; IDataPortalTarget target = null; var eventArgs = new DataPortalEventArgs(context, objectType, DataPortalOperations.Create); try { // create an instance of the business object. obj = new LateBoundObject(objectType); target = obj.Instance as IDataPortalTarget; if (target != null) { target.DataPortal_OnDataPortalInvoke(eventArgs); target.MarkNew(); } else { obj.CallMethodIfImplemented("DataPortal_OnDataPortalInvoke", eventArgs); obj.CallMethodIfImplemented("MarkNew"); } // tell the business object to create its data if (criteria is int) { obj.CallMethod("DataPortal_Create"); } else { obj.CallMethod("DataPortal_Create", criteria); } if (target != null) { target.DataPortal_OnDataPortalInvokeComplete(eventArgs); } else { obj.CallMethodIfImplemented( "DataPortal_OnDataPortalInvokeComplete", eventArgs); } // return the populated business object as a result return(new DataPortalResult(obj.Instance)); } catch (Exception ex) { try { if (target != null) { target.DataPortal_OnDataPortalException(eventArgs, ex); } else { obj.CallMethodIfImplemented( "DataPortal_OnDataPortalException", eventArgs, ex); } } catch { // ignore exceptions from the exception handler } object outval = null; if (obj != null) { outval = obj.Instance; } throw new DataPortalException( "DataPortal.Create " + Resources.FailedOnServer, ex, new DataPortalResult(outval)); } }
public DataPortalResult Update(object obj, DataPortalContext context) { DataPortalOperations operation = DataPortalOperations.Update; Type objectType = obj.GetType(); var target = obj as IDataPortalTarget; LateBoundObject lb = new LateBoundObject(obj); try { if (target != null) { target.DataPortal_OnDataPortalInvoke( new DataPortalEventArgs(context, objectType, operation)); } else { lb.CallMethodIfImplemented( "DataPortal_OnDataPortalInvoke", new DataPortalEventArgs(context, objectType, operation)); } // tell the business object to update itself var busObj = obj as Core.BusinessBase; if (busObj != null) { if (busObj.IsDeleted) { if (!busObj.IsNew) { // tell the object to delete itself lb.CallMethod("DataPortal_DeleteSelf"); } if (target != null) { target.MarkNew(); } else { lb.CallMethodIfImplemented("MarkNew"); } } else { if (busObj.IsNew) { // tell the object to insert itself lb.CallMethod("DataPortal_Insert"); } else { // tell the object to update itself lb.CallMethod("DataPortal_Update"); } if (target != null) { target.MarkOld(); } else { lb.CallMethodIfImplemented("MarkOld"); } } } else if (obj is CommandBase) { operation = DataPortalOperations.Execute; // tell the object to update itself lb.CallMethod("DataPortal_Execute"); } else { // this is an updatable collection or some other // non-BusinessBase type of object // tell the object to update itself lb.CallMethod("DataPortal_Update"); if (target != null) { target.MarkOld(); } else { lb.CallMethodIfImplemented("MarkOld"); } } if (target != null) { target.DataPortal_OnDataPortalInvokeComplete( new DataPortalEventArgs(context, objectType, operation)); } else { lb.CallMethodIfImplemented("DataPortal_OnDataPortalInvokeComplete", new DataPortalEventArgs(context, objectType, operation)); } return(new DataPortalResult(obj)); } catch (Exception ex) { try { if (target != null) { target.DataPortal_OnDataPortalException( new DataPortalEventArgs(context, objectType, operation), ex); } else { lb.CallMethodIfImplemented( "DataPortal_OnDataPortalException", new DataPortalEventArgs(context, objectType, operation), ex); } } catch { // ignore exceptions from the exception handler } throw new DataPortalException( "DataPortal.Update " + Resources.FailedOnServer, ex, new DataPortalResult(obj)); } }
private DataPortalResult InvokeMethod(string factoryTypeName, string methodName, object e, DataPortalContext context) { object factory = FactoryLoader.GetFactory(factoryTypeName); YYT.Reflection.MethodCaller.CallMethodIfImplemented(factory, "Invoke", context); object result = null; try { result = YYT.Reflection.MethodCaller.CallMethod(factory, methodName, e); YYT.Reflection.MethodCaller.CallMethodIfImplemented(factory, "InvokeComplete", context); } catch (Exception ex) { YYT.Reflection.MethodCaller.CallMethodIfImplemented(factory, "InvokeError", ex); throw; } return(new DataPortalResult(result)); }
/// <summary> /// Creates an instance of the object. /// </summary> /// <param name="dataPortalContext"> /// Data portal context object. /// </param> /// <param name="objectType"> /// Business object type. /// </param> /// <param name="operation"> /// Data portal operation being performed. /// </param> /// <param name="exception"> /// Exception encountered during processing. /// </param> public DataPortalEventArgs(Server.DataPortalContext dataPortalContext, Type objectType, DataPortalOperations operation, Exception exception) : this(dataPortalContext, objectType, operation) { _exception = exception; }
/// <summary> /// Creates an instance of the object. /// </summary> /// <param name="dataPortalContext"> /// Data portal context object. /// </param> /// <param name="objectType"> /// Business object type. /// </param> /// <param name="operation"> /// Data portal operation being performed. /// </param> public DataPortalEventArgs(Server.DataPortalContext dataPortalContext, Type objectType, DataPortalOperations operation) { _dataPortalContext = dataPortalContext; _operation = operation; _objectType = objectType; }