示例#1
0
        private async Task <object> DoCreateAsync(Type objectType, object criteria, bool isSync)
        {
            Server.DataPortalResult  result    = null;
            Server.DataPortalContext dpContext = null;
            try
            {
                if (!Csla.Rules.BusinessRules.HasPermission(ApplicationContext, Rules.AuthorizationActions.CreateObject, objectType, Server.DataPortal.GetCriteriaArray(criteria)))
                {
                    throw new Csla.Security.SecurityException(string.Format(
                                                                  Resources.UserNotAuthorizedException,
                                                                  "create",
                                                                  objectType.Name));
                }
                Reflection.ServiceProviderMethodInfo method;
                if (criteria is Server.EmptyCriteria)
                {
                    method = ServiceProviderMethodCaller.FindDataPortalMethod <CreateAttribute>(objectType, null, false);
                }
                else
                {
                    method = ServiceProviderMethodCaller.FindDataPortalMethod <CreateAttribute>(objectType, Server.DataPortal.GetCriteriaArray(criteria), false);
                }
                var proxy = GetDataPortalProxy(method);

                dpContext =
                    new Csla.Server.DataPortalContext(ApplicationContext, GetPrincipal(), proxy.IsServerRemote);

                try
                {
                    result = await proxy.Create(objectType, criteria, dpContext, isSync);
                }
                catch (AggregateException ex)
                {
                    if (ex.InnerExceptions.Count > 0)
                    {
                        if (ex.InnerExceptions[0] is Server.DataPortalException dpe)
                        {
                            HandleCreateDataPortalException(dpe, isSync, proxy);
                        }
                    }
                    throw new DataPortalException(
                              string.Format("DataPortal.Create {0}", Resources.Failed),
                              ex, null);
                }
                catch (Server.DataPortalException ex)
                {
                    HandleCreateDataPortalException(ex, isSync, proxy);
                }
            }
            catch
            {
                throw;
            }
            return(result.ReturnObject);
        }
示例#2
0
        private static object Create(Type objectType, object criteria)
        {
            Server.DataPortalResult result;

            MethodInfo method = MethodCaller.GetCreateMethod(objectType, criteria);

            DataPortalClient.IDataPortalProxy proxy;
            proxy = GetDataPortalProxy(RunLocal(method));

            Server.DataPortalContext dpContext =
                new Csla.Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote);

            OnDataPortalInvoke(new DataPortalEventArgs(dpContext));

            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));

            return(result.ReturnObject);
        }
示例#3
0
 /// <summary>
 /// Create new instance of object.
 /// </summary>
 /// <param name="objectType">Type of business object to create.</param>
 /// <param name="criteria">Criteria object describing business object.</param>
 /// <param name="context">Data portal context from client.</param>
 public CreateRequest(Type objectType, object criteria, Csla.Server.DataPortalContext context)
 {
     _objectType = objectType;
     _criteria   = criteria;
     _context    = context;
 }
示例#4
0
 /// <summary>
 /// Create new instance of object.
 /// </summary>
 /// <param name="objectType">Type of business object to create.</param>
 /// <param name="criteria">Criteria object describing business object.</param>
 /// <param name="context">Data portal context from client.</param>
 public FetchRequest(Type objectType, object criteria, Csla.Server.DataPortalContext context)
 {
     _objectType = objectType;
       _criteria = criteria;
       _context = context;
 }
示例#5
0
        private async Task <object> DoCreateAsync(Type objectType, object criteria, bool isSync)
        {
            Server.DataPortalResult  result    = null;
            Server.DataPortalContext dpContext = null;
            try
            {
                DataPortal.OnDataPortalInitInvoke(null);

                if (!Csla.Rules.BusinessRules.HasPermission(Rules.AuthorizationActions.CreateObject, objectType))
                {
                    throw new Csla.Security.SecurityException(string.Format(
                                                                  Resources.UserNotAuthorizedException,
                                                                  "create",
                                                                  objectType.Name));
                }

                var method = Server.DataPortalMethodCache.GetCreateMethod(objectType, criteria);

                DataPortalClient.IDataPortalProxy proxy;
                proxy = GetDataPortalProxy(objectType, method.RunLocal);

                dpContext =
                    new Csla.Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote);

                DataPortal.OnDataPortalInvoke(new DataPortalEventArgs(dpContext, objectType, criteria, DataPortalOperations.Create));

                try
                {
                    result = await proxy.Create(objectType, criteria, dpContext, isSync);

                    GlobalContext = result.GlobalContext;
                    if (isSync && proxy.IsServerRemote)
                    {
                        ApplicationContext.ContextManager.SetGlobalContext(GlobalContext);
                    }
                }
                catch (AggregateException ex)
                {
                    if (ex.InnerExceptions.Count > 0)
                    {
                        var dpe = ex.InnerExceptions[0] as Server.DataPortalException;
                        if (dpe != null)
                        {
                            HandleCreateDataPortalException(dpe, isSync, proxy);
                        }
                    }
                    throw new DataPortalException(
                              string.Format("DataPortal.Create {0}", Resources.Failed),
                              ex, null);
                }
                catch (Server.DataPortalException ex)
                {
                    HandleCreateDataPortalException(ex, isSync, proxy);
                }
                DataPortal.OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, criteria, DataPortalOperations.Create));
            }
            catch (Exception ex)
            {
                DataPortal.OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, criteria, DataPortalOperations.Create, ex));
                throw;
            }
            return(result.ReturnObject);
        }
示例#6
0
 /// <summary>
 /// Create new instance of object.
 /// </summary>
 /// <param name="obj">Business object to update.</param>
 /// <param name="context">Data portal context from client.</param>
 public UpdateRequest(object obj, Csla.Server.DataPortalContext context)
 {
     _object  = obj;
     _context = context;
 }
示例#7
0
 /// <summary>
 /// Create new instance of object.
 /// </summary>
 /// <param name="obj">Business object to update.</param>
 /// <param name="context">Data portal context from client.</param>
 public UpdateRequest(object obj, Csla.Server.DataPortalContext context)
 {
   _object = obj;
   _context = context;
 }
示例#8
0
        private async Task <object> DoFetchAsync(Type objectType, object criteria, bool isSync)
        {
            Server.DataPortalResult  result    = null;
            Server.DataPortalContext dpContext = null;
            try
            {
                DataPortal.OnDataPortalInitInvoke(null);

                if (!Csla.Rules.BusinessRules.HasPermission(Rules.AuthorizationActions.GetObject, objectType, Server.DataPortal.GetCriteriaArray(criteria)))
                {
                    throw new Csla.Security.SecurityException(string.Format(
                                                                  Resources.UserNotAuthorizedException,
                                                                  "get",
                                                                  objectType.Name));
                }

                var method = Reflection.ServiceProviderMethodCaller.FindDataPortalMethod <FetchAttribute>(objectType, Server.DataPortal.GetCriteriaArray(criteria), false);
                var proxy  = GetDataPortalProxy(objectType, method);

                dpContext =
                    new Csla.Server.DataPortalContext(GetPrincipal(), proxy.IsServerRemote);

                DataPortal.OnDataPortalInvoke(new DataPortalEventArgs(dpContext, objectType, criteria, DataPortalOperations.Fetch));

                try
                {
                    result = await proxy.Fetch(objectType, criteria, dpContext, isSync);

                    GlobalContext = result.GlobalContext;
                    if (isSync && proxy.IsServerRemote)
                    {
                        ApplicationContext.ContextManager.SetGlobalContext(GlobalContext);
                    }
                }
                catch (AggregateException ex)
                {
                    if (ex.InnerExceptions.Count > 0)
                    {
                        var dpe = ex.InnerExceptions[0] as Server.DataPortalException;
                        if (dpe != null)
                        {
                            HandleFetchDataPortalException(dpe, isSync, proxy);
                        }
                    }
                    throw new DataPortalException(
                              string.Format("DataPortal.Fetch {0}", Resources.Failed),
                              ex, null);
                }
                catch (Server.DataPortalException ex)
                {
                    HandleFetchDataPortalException(ex, isSync, proxy);
                }
                DataPortal.OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, criteria, DataPortalOperations.Fetch));
            }
            catch (Exception ex)
            {
                DataPortal.OnDataPortalInvokeComplete(new DataPortalEventArgs(dpContext, objectType, criteria, DataPortalOperations.Fetch, ex));
                throw;
            }
            return(result.ReturnObject);
        }