Exemple #1
0
        public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic)
        {
            try
            {
                RafyEnvironment.ThreadPortalCount++;

                object res = null;

                //只是不要纯客户端,都直接使用本地访问
                if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly)
                {
                    res = FinalDataPortal.Fetch(objectType, criteria);
                }
                else
                {
                    var proxy = GetDataPortalProxy();

                    var dpContext = CreateDataPortalContext();

                    var result = proxy.Fetch(objectType, criteria, dpContext);

                    res = ReadServerResult(result);
                }

                return res;
            }
            finally
            {
                RafyEnvironment.ThreadPortalCount--;
            }
        }
Exemple #2
0
        /// <summary>
        /// 使用门户查询
        /// </summary>
        /// <param name="objectType"></param>
        /// <param name="criteria"></param>
        /// <param name="loc">如果一个数据层方法需要在本地执行,应该在把本参数指明为 Local。</param>
        /// <returns></returns>
        public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic)
        {
            try
            {
                RafyEnvironment.ThreadPortalCount++;

                object res = null;

                //只是不要纯客户端,都直接使用本地访问
                if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly)
                {
                    res = FinalDataPortal.Fetch(objectType, criteria);
                }
                else
                {
                    var proxy = GetDataPortalProxy();

                    var dpContext = CreateDataPortalContext();

                    var result = proxy.Fetch(objectType, criteria, dpContext);

                    res = ReadServerResult(result);
                }

                return(res);
            }
            finally
            {
                RafyEnvironment.ThreadPortalCount--;
            }
        }
Exemple #3
0
        /// <summary>
        /// Called by the business object's Save() method to
        /// insert, update or delete an object in the database.
        /// </summary>
        /// <param name="obj">A reference to the business object to be updated.</param>
        /// <param name="loc">The loc.</param>
        /// <returns>
        /// A reference to the updated business object.
        /// </returns>
        /// <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>
        public static object Update(object obj, DataPortalLocation loc = DataPortalLocation.Dynamic)
        {
            object res = null;

            //只是不要纯客户端,都直接使用本地访问
            if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly)
            {
                /*********************** 代码块解释 *********************************
                 *
                 * 由于开发人员平时会使用单机版本开发,而正式部署时,又会选用 C/S 架构。
                 * 所以需要保证单机版本和 C/S 架构版本的模式是一样的。也就是说,在单机模式下,
                 * 在通过门户访问时,模拟网络版,clone 出一个新的对象。
                 * 这样,在底层 Update 更改 obj 时,不会影响上层的实体。
                 * 而是以返回值的形式把这个被修改的实体返回给上层。
                 *
                 * 20120828
                 * 但是,当在服务端本地调用时,不需要此模拟功能。
                 * 这是因为在服务端本地调用时(例如服务端本地调用 RF.Save),
                 * 在开发体验上,数据层和上层使用的实体应该是同一个,数据层的修改应该能够带回到上层,不需要克隆。
                 *
                 **********************************************************************/

                try
                {
                    RafyEnvironment.ThreadPortalCount++;

                    //ThreadPortalCount == 1 表示第一次进入数据门户
                    if (FakeRemoteIfOnClient &&
                        RafyEnvironment.Location.IsWPFUI && RafyEnvironment.Location.ConnectDataDirectly && RafyEnvironment.ThreadPortalCount == 1)
                    {
                        res = ObjectCloner.Clone(obj);
                    }
                    else
                    {
                        res = obj;
                    }

                    FinalDataPortal.Update(res);
                }
                finally
                {
                    RafyEnvironment.ThreadPortalCount--;
                }
            }
            else
            {
                var proxy = GetDataPortalProxy();

                var dpContext = CreateDataPortalContext();

                var result = proxy.Update(obj, dpContext);

                res = ReadServerResult(result);
            }

            return(res);
        }
Exemple #4
0
        public static object Update(object obj, DataPortalLocation loc = DataPortalLocation.Dynamic)
        {
            var proxy = GetDataPortalProxy(loc);

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

            var result = proxy.Update(obj, dpContext);

            if (proxy.IsServerRemote) DistributionContext.SetGlobalContext(result.GlobalContext);

            return result.ReturnObject;
        }
Exemple #5
0
        private static IDataPortalProxy GetDataPortalProxy(DataPortalLocation loc)
        {
            if (loc == DataPortalLocation.Local) return new LocalProxy();

            if (_proxyType == null)
            {
                string proxyTypeName = DistributionContext.DataPortalProxy;
                if (proxyTypeName == "Local") return new LocalProxy();

                _proxyType = Type.GetType(proxyTypeName, true, true);
            }
            return Activator.CreateInstance(_proxyType) as IDataPortalProxy;
        }
        public static object Update(object obj, DataPortalLocation loc = DataPortalLocation.Dynamic)
        {
            var proxy = GetDataPortalProxy(loc);

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

            var result = proxy.Update(obj, dpContext);

            if (proxy.IsServerRemote)
            {
                DistributionContext.SetGlobalContext(result.GlobalContext);
            }

            return(result.ReturnObject);
        }
Exemple #7
0
        public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic)
        {
            var proxy = GetDataPortalProxy(loc);

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

            Server.DataPortalResult result = null;

            try
            {
                result = proxy.Fetch(objectType, criteria, dpContext);
            }
            finally
            {
                if (proxy.IsServerRemote && result != null) { DistributionContext.SetGlobalContext(result.GlobalContext); }
            }
            //不能等于 ReturnObject=null
            return result.ReturnObject;
        }
        private static IDataPortalProxy GetDataPortalProxy(DataPortalLocation loc)
        {
            if (loc == DataPortalLocation.Local)
            {
                return(new LocalProxy());
            }

            if (_proxyType == null)
            {
                string proxyTypeName = DistributionContext.DataPortalProxy;
                if (proxyTypeName == "Local")
                {
                    return(new LocalProxy());
                }

                _proxyType = Type.GetType(proxyTypeName, true, true);
            }
            return(Activator.CreateInstance(_proxyType) as IDataPortalProxy);
        }
Exemple #9
0
        /// <summary>
        /// 使用门户查询
        /// </summary>
        /// <param name="objectType"></param>
        /// <param name="criteria"></param>
        /// <param name="loc">如果一个数据层方法需要在本地执行,应该在把本参数指明为 Local。</param>
        /// <returns></returns>
        public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic)
        {
            object res = null;

            ////只是不要纯客户端,都直接使用本地访问
            //if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly)
            //{
            //    res = FinalDataPortal.Fetch(objectType, criteria);
            //}
            //else
            //{
            var proxy = GetDataPortalProxy();

            var dpContext = CreateDataPortalContext();

            var result = proxy.Fetch(objectType, criteria, dpContext);

            res = ReadServerResult(result);
            //}

            return(res);
        }
        public static object Fetch(Type objectType, object criteria, DataPortalLocation loc = DataPortalLocation.Dynamic)
        {
            var proxy = GetDataPortalProxy(loc);

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

            Server.DataPortalResult result = null;

            try
            {
                result = proxy.Fetch(objectType, criteria, dpContext);
            }
            finally
            {
                if (proxy.IsServerRemote && result != null)
                {
                    DistributionContext.SetGlobalContext(result.GlobalContext);
                }
            }
            //不能等于 ReturnObject=null
            return(result.ReturnObject);
        }
 public DomainService()
 {
     this._dataPortalLocation = LEnvironment.IsOnServer() ? DataPortalLocation.Local : DataPortalLocation.Local;
 }
Exemple #12
0
 public Service()
 {
     this._dataPortalLocation = RafyEnvironment.IsOnServer() ? DataPortalLocation.Local : DataPortalLocation.Dynamic;
 }
 public DomainService()
 {
     this._dataPortalLocation = LEnvironment.IsOnServer() ? DataPortalLocation.Local : DataPortalLocation.Local;
 }
Exemple #14
0
 public Service()
 {
     this._dataPortalLocation = RafyEnvironment.IsOnServer() ? DataPortalLocation.Local : DataPortalLocation.Dynamic;
 }
Exemple #15
0
        /// <summary>
        /// Called by the business object's Save() method to
        /// insert, update or delete an object in the database.
        /// </summary>
        /// <param name="obj">A reference to the business object to be updated.</param>
        /// <param name="loc">The loc.</param>
        /// <returns>
        /// A reference to the updated business object.
        /// </returns>
        /// <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>
        public static object Update(object obj, DataPortalLocation loc = DataPortalLocation.Dynamic)
        {
            try
            {
                RafyEnvironment.ThreadPortalCount++;

                object res = null;

                //只是不要纯客户端,都直接使用本地访问
                if (loc == DataPortalLocation.Local || RafyEnvironment.Location.ConnectDataDirectly)
                {
                    /*********************** 代码块解释 *********************************
                     *
                     * 由于开发人员平时会使用单机版本开发,而正式部署时,又会选用 C/S 架构。
                     * 所以需要保证单机版本和 C/S 架构版本的模式是一样的。也就是说,在单机模式下,
                     * 在通过门户访问时,模拟网络版,clone 出一个新的对象。
                     * 这样,在底层 Update 更改 obj 时,不会影响上层的实体。
                     * 而是以返回值的形式把这个被修改的实体返回给上层。
                     *
                     * 20120828
                     * 但是,当在服务端本地调用时,不需要此模拟功能。
                     * 这是因为在服务端本地调用时(例如服务端本地调用 RF.Save),
                     * 在开发体验上,数据层和上层使用的实体应该是同一个,数据层的修改应该能够带回到上层,不需要克隆。
                     *
                    **********************************************************************/

                    //ThreadPortalCount == 1 表示第一次进入数据门户
                    if (RafyEnvironment.Location.IsWPFUI && RafyEnvironment.Location.ConnectDataDirectly && RafyEnvironment.ThreadPortalCount == 1)
                    {
                        res = ObjectCloner.Clone(obj);
                    }
                    else
                    {
                        res = obj;
                    }

                    FinalDataPortal.Update(res);
                }
                else
                {
                    var proxy = GetDataPortalProxy();

                    var dpContext = CreateDataPortalContext();

                    var result = proxy.Update(obj, dpContext);

                    res = ReadServerResult(result);
                }

                return res;
            }
            finally
            {
                RafyEnvironment.ThreadPortalCount--;
            }
        }