2016-8-28版本: Phenix6(for WebAPI & WF & CSLA)开发平台 :
http://download.csdn.net/detail/phenixiii/9615312
CSLA & Delphi 爱好者 & Phenix for .net 开发平台用户交流群:206648373
以下是版本升级告示:
在IDE中设计业务类的映射关系演示:
2011-10-9升级:
BusinessBase取子业务对象集合时,可以从本地的业务对象集合中过滤出来:
/// <summary> /// 取从业务对象集合 /// </summary> /// <param name="expression">条件表达式</param> /// <param name="source">数据源</param> public TDetail GetDetail<TDetail, TDetailBusiness>(Expression<Func<TDetailBusiness, bool>> expression, TDetail source) where TDetail : BusinessListBase<TDetail, TDetailBusiness> where TDetailBusiness : BusinessBase<TDetailBusiness> { }
2011-10-24升级:
排除未注册的业务类,当Fetch时陷入死循环的缺陷。
2011-11-09升级:
AddIn,添加“构建指令类”功能。
2011-11-27升级:
框架案例.zip新增Phenix.Windows.dll源码,你可以重新编译支持非v10.1版本的DevExpress
新增功能:在业务类的OnInsertingSelf、OnUpdatingSelf中中嵌入了附加的条件语句,可以实现如下效果的提交语句:
update PH_Department set DP_Name = ‘aaa‘ where DP_ID = 33221343543545
and not exists (select * from PH_Department where DP_Name = ‘aaa‘ and DP_ID <> 33221343543545)
本案例实现了DP_Name不允许重复的业务逻辑。不过业务类中我们无需添加类似逻辑代码,唯一索引验证功能在框架中已默认实现。
/// <summary>
/// 新增本对象集合之前
/// 在运行持久层的程序域里被调用
/// </summary>
/// <param name="transaction">数据库事务</param>
/// <param name="limitingConditions">限制保存的条件</param>
protected virtual void OnInsertingSelf(DbTransaction transaction, out Criterions[] limitingConditions)
{
limitingConditions = 需要限制保存的条件;
}
/// <summary>
/// 更新本对象集合之前
/// 在运行持久层的程序域里被调用
/// </summary>
/// <param name="transaction">数据库事务</param>
/// <param name="limitingConditions">限制保存的条件</param>
protected virtual void OnUpdatingSelf(DbTransaction transaction, out Criterions[] limitingConditions)
{
limitingConditions = 需要限制保存的条件;
}
当提交时满足限制条件则抛出CheckSaveException异常。如果是通过BarManager提交的,则可以在它的OnSaveFailed(e)事件里处理这个异常,如果不想由BarManager提示的话,则可以将e.Applied=true。
2011-12-05升级:
恢复FieldRuleAttribute功能
2011-12-14升级:
BusinessListBase<T, TBusiness>新增功能:与Fetch()函数对应,可通过GetRecordCount()函数获取指定条件下的记录数
2011-12-19升级:
类似下面的语句可以产生Exists、UnExists语句:
WorkingProcessLocks = ProcessLockList.Fetch(
ProcessLock.AllowexecuteProperty == true & ProcessLock.NameProperty == "a"& ProcessLockList.Exists(ProcessLock.AllowexecuteProperty == false));
Command Text="select PL_NAME,PL_ALLOWEXECUTE,PL_TIME,PL_USERNUMBER,PL_REMARK from PH_PROCESSLOCK where (( PL_ALLOWEXECUTE = :PK_PL_ALLOWEXECUTE689faafad8d2 and PL_NAME = :POCESSLOCK_PL_NAME0a99cadeeaee )and (
exists (select * from PH_PROCESSLOCK where PL_ALLOWEXECUTE = :PK_PL_ALLOWEXECUTEae66969bf88a )))
2011-12-21升级:
排除SQLServer数据库下的bug。
2011-12-26升级:
加入“权限管理、系统应用框架”源码。
请留意版权声明:Phenix.license.txt
2012-01-16升级:
纠正Phenix.Services.Host.exe在Win7-64位旗舰版下注册Phenix.Addin不到VS2010执行目录下的情况。
2012-03-31升级:
支持简繁体;
纠正一些细小bug;
2012-05-13升级:
重新整理授权规则类及配套的辅助代码生成工具Addin;
内含系列说明书:
Phenix.NET企业应用软件快速开发平台使用指南.01.简介
Phenix.NET企业应用软件快速开发平台使用指南.02.部署开发环境
Phenix.NET企业应用软件快速开发平台使用指南.03.Addin工具使用方法
Phenix.NET企业应用软件快速开发平台使用指南.04.登录应用系统
Phenix.NET企业应用软件快速开发平台使用指南.05.业务对象公共接口的授权
Phenix.NET企业应用软件快速开发平台使用指南.06.ReadWriteAuthorization组件
Phenix.NET企业应用软件快速开发平台使用指南.07.ExecuteAuthorization组件
2012-5-16升级:
添加说明书:
Phenix.NET企业应用软件快速开发平台使用指南.08.业务对象公共接口的数据验证
Phenix.NET企业应用软件快速开发平台使用指南.09.EditValidation组件
2012-6-1升级:
添加说明书并整理公共接口:
Phenix.NET企业应用软件快速开发平台使用指南.10.BarManager组件
Phenix.NET企业应用软件快速开发平台使用指南.11.业务对象生命周期及其状态
2012-6-25升级:
添加说明书并整理公共接口:
Phenix.NET企业应用软件快速开发平台使用指南.12.业务结构对象模型
2012-7-12升级:
CSLA封装到4.3.12版本
增加分页Fetch机制:Phenix.Business.BusinessListPageBase<T,TBusiness>
添加说明书并整理公共接口:
Phenix.NET企业应用软件快速开发平台使用指南.13.日志服务
Phenix.NET企业应用软件快速开发平台使用指南.14.过程锁
Phenix.NET企业应用软件快速开发平台使用指南.15.业务码
Phenix.NET企业应用软件快速开发平台使用指南.16.分页检索业务对象
2012-7-24升级:
添加说明书并整理公共接口:
Phenix.NET企业应用软件快速开发平台使用指南.17.条件检索业务对象
Phenix.NET企业应用软件快速开发平台使用指南.18.数据库设计规则
2012-8-6升级:
添加说明书并整理公共接口:
Phenix.NET企业应用软件快速开发平台使用指南.19.缓存
Phenix.NET企业应用软件快速开发平台使用指南.20.动态刷新
2012-8-30
CSLA封装到4.3.13版本
优化缓存性能
2012-12-05
全面优化性能
支持SQLserver能力已经验证
加强Fetch的查询条件表达式
2012-12-31
支持诸如下述Fetch方法:
List<string> names = new List<string>() {"ADMIN"};
ProcessLockList.Fetch(mm => !names.Contains(mm.Name));
2013-1-4
修正bug
补充:Phenix.Business.BusinessBase类RefreshLink函数
2013-1-6
修正bug:对SqlServer的支持等
2013-1-11
修正bug:分页功能、计算字段功能、GetLink功能
完善:允许混合LAN和WAN环境下连同一应用服务器
2013-1-12
优化Addin: 枚举的Caption属性带字段缓存
2013-1-27
支持诸如下述Fetch方法:
List<string> shopcodelist = pdlist.Select(mm => mm.ShopCode).ToList();
SPA_Business.Shop_BaseList ssl = SPA_Business.Shop_BaseList.Fetch(mm => shopcodelist.Contains(mm.Shopcode));
补充:Phenix.Business.BusinessBase类RefreshLink函数
修正bug:对SqlServer的支持等
修正bug:分页功能、计算字段功能、GetLink功能
完善:允许混合LAN和WAN环境下连同一应用服务器
优化Addin: 枚举的Caption属性带字段缓存
优化性能
优化升级客户端文件性能
2013-2-4
修正bug:带CheckDirtyOnSaving = true乐观锁机制的删除,当未能删除时应该抛CheckDirtyException异常
2013-2-7
支持诸如下述Fetch方法:
ProcessLockList.Fetch(mm => mm.Name.Contains("ADMIN");
2013-2-14
支持同构/异构节点的树状业务类:Phenix.Business.BusinessTreeBase、Phenix.Business.BusinessTreeNodeBase
对应的窗体组件:Phenix.Windows.TreeListDragDropManager,管理TreeList控件的构建和拖拽等功能
2013-3-14
修正bug:对SqlServer的支持等
重构:BusinessListPageBase
2013-3-17
优化性能等
FieldAggregateAttribute增加ToDoOnUpdate属性:控制在update的时候是否需要ToDo主表的对应字段
2013-3-21
发布:Phenix.Web.Mvc源码
2013-4-7
扩展Phenix.Windows.BarManager组件:
解决因Execl文档存在多个Sheet且未指定Sheet名称或Sheet名称错误的问题而影响导入,可通过弹出“输入Execl的Sheet名称”对话框来让用户更改Sheet的名称,起到系统容错的作用
2013-4-8
补充Addin功能:
对于映射视图的业务/查询类,当使用“初始化/编辑业务类”、“初始化/编辑查询类”时,会自动为当前工程添加或重写该视图的SQL文件,文件名为视图名.SQL
2013-4-9
Phenix.NET企业应用软件快速开发平台.权限管理.01.简介
Phenix.NET企业应用软件快速开发平台.权限管理.02.搭建解决方案
2013-4-15
优化全景数据获取
优化Selected清单与界面的交互方式
Phenix.NET企业应用软件快速开发平台.权限管理.03.角色管理工程
2013-4-16
优化缓存性能
2013-4-24
重构树状业务类:Phenix.Business.BusinessTreeBase、Phenix.Business.BusinessTreeNodeBase,仅支持同构节点
对应的窗体组件:Phenix.Windows.TreeListManager,管理TreeList控件的属性设置、拖拽权限验证等功能
添加说明书:
《Phenix.NET企业应用软件快速开发平台.权限管理.04.岗位管理工程.树状结构》
2013-4-28
优化缓存、动态刷新性能
添加说明书:
《Phenix.NET企业应用软件快速开发平台.权限管理.05.部门管理工程.快捷导航》
2013-5-3
修正bug:前一版升级缺陷
2013-5-8
添加说明书:
《Phenix.NET企业应用软件快速开发平台.权限管理.06.表过滤器管理工程.级联选择》
2013-5-27
完善带属性联结表的多对多数据处理方法
完善执行规则验证机制,可支持传递给验证类的上下文Phenix.Business.Rules.AuthorizationContext带Arguments参数供判断
升级CSLA到4.3.14版本
升级Phenix.Extended支持到12.2.X版本DevExpress控件包
升级配置库:需重启Phenix.Services.Host.exe以便自动升级
添加说明书:
《Phenix.NET企业应用软件快速开发平台.权限管理.07.切片管理工程.勾选编辑》
《Phenix.NET企业应用软件快速开发平台.权限管理.08.用户管理工程.执行规则》
《Phenix.NET企业应用软件快速开发平台.权限管理.09.用户日志管理工程.勾选删除》
2013-6-12
优化主从数据处理Filter方法及性能
支持带主从层级关系GridView的GridControl
支持Linq条件中带Array的Fetch方法
优化缓存性能
添加说明书:
《Phenix.NET企业应用软件快速开发平台.权限管理.10.程序集管理工程.主从结构》
2013-6-22
添加说明书:
《Phenix.NET企业应用软件快速开发平台.使用案例.业务数据的缺省值-序号》
《Phenix.NET企业应用软件快速开发平台.使用案例.业务数据的读写-加解密》
《Phenix.NET企业应用软件快速开发平台.权限管理.11.自动解除用户登录失败锁工程.服务插件》
2013-6-23
修正bug:当业务对象的AllowEdit属性值为false而业务对象集合的AllowEditItem属性值为true时,BarManager的Edit功能按钮应该是不允许被点击的
2013-6-27
修正bug:恢复支持带非long类型主键的类,这些对象在new时主键不会被赋值,也不会在尝试赋值时抛出异常
2013-6-29
重构Phenix.StandardRule.Information:添加简单的评审流程
2013-7-4
提供Phenix.Core.Net.RemotingConfig.Timeout配置属性,控制remoting请求在超时前等待的毫秒数
提供Phenix.Core.Data.DbConnectionInfo.MSSqlConnectTimeout配置属性,控制MSSql数据库的Connect Timeout超时等待时间(秒)
提供Fetch超时配置属性:在你要Fetch的业务(集合)类里,覆写
/// <summary>
/// 等待Fetch命令执行的时间(秒数), null 指示不限制
/// 默认值为 null
/// </summary>
[System.ComponentModel.Browsable(false)]
[System.ComponentModel.DataAnnotations.Display(AutoGenerateField = false)]
public virtual int? FetchTimeout
{
get { return null; }
}
2013-7-19
添加SHB.Charge.Subject演示工程和视频链接
2013-8-23
修正组件有时会发生序列化错误的问题
Phenix.Windows的BarManager组件中添加两事件:
/// <summary>
/// 删除按钮触发提示被否决后事件
/// </summary>
[Description("当点击删除按钮提示被否决之后触发"), Category("ToolBar")]
public event EventHandler<BarItemDeleteEventArgs> DeleteRejected;
/// <summary>
/// 取消按钮触发提示被否决后事件
/// </summary>
[Description("当点击取消按钮提示被否决之后触发"), Category("ToolBar")]
public event EventHandler<BarItemClickEventArgs> CancelRejected;
2013-9-2
扩展EditValidation、ReadWriteAuthorization,可支持DevExpress.XtraTreeList.Columns.TreeList
修正bug:对SqlServer的支持
2013-9-11
修正级联删除bug
2013-9-18
修正前一版本GetDatail的bug
2013-9-24
修正Addin构建编辑业务类界面上的配置属性AllowReservedColumn,使之与IsBusinessCodeColumn、IsInputerColumn等配置属性无关联
2013-10-18
扩充业务基类、业务集合基类的:
/// <summary>
/// 构建本业务对象之前
/// 在运行持久层的程序域里被调用
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="command">DbCommand</param>
/// <param name="criterions">条件集</param>
protected virtual void OnFetchingSelf(DbConnection connection, DbCommand command, Criterions criterions)
{
}
/// <summary>
/// 构建本业务对象之前
/// 在运行持久层的程序域里被调用
/// </summary>
/// <param name="transaction">数据库事务</param>
/// <param name="command">DbCommand</param>
/// <param name="criterions">条件集</param>
protected virtual void OnFetchingSelf(DbTransaction transaction, DbCommand command, Criterions criterions)
{
}
可重载后对command.CommandText进行处理,如果被赋过SQL语句,则会跳过框架持久层引擎自动拼装SQL的功能,也就是可以干预数据提取过程
2013-10-26
1,增加host服务程序的监控功能,崩溃时可启动新进程:Phenix.Services.Host.Monitor.exe,64位执行Phenix.Services.Host.Monitor.x64.bat、32位执行Phenix.Services.Host.Monitor.x86.bat
2,重构分页业务类:Phenix.Business.BusinessListPageBase、Phenix.Business.BusinessPageBase,业务对象含分页号PageNo属性,可用于界面BindingSource.Filter的过滤显示
3,重写说明书:
《Phenix.NET企业应用软件快速开发平台.使用指南.16.分页检索业务对象》
4,配置库表PH_AssemblyClass添加AC_Authorised字段,默认下只有AC_Type = Phenix.Core.Dictionary.AssemblyClassType.Form时才AC_Authorised = 1,也就是窗体上的控件、组件可被授权控制,
其他如业务类等对象,普通应用场景下不会要求权限控制到属性级别,所以AC_Authorised = 0,当然,如果改成了1,框架就允许授权控制到它
4,重新梳理业务类的GetLink和GetDetail函数,解决了缓存不完善的情况发生
2013-11-7
1,可选择仅允许一个用户一个IP地址登录系统
2,提醒密码复杂度(长度大于6位且含数字和大小写字母或特殊字符)
3,提醒密码过期天数
2013-11-16
1,针对调用编辑函数时抛出的Csla.Core.UndoException,提供更为详细的提示信息,比如可指出业务对象与Parent之间EditLevel的不一致、业务对象中含有未打上[Csla.NotUndoable]标签的业务对象字段等现象;
2,Link对象可跟随业务对象一起编辑、提交,本功能可用业务对象的下列属性开关:
/// <summary>
/// 可自动保存关联的业务对象
/// 缺省为 true
/// </summary>
[System.ComponentModel.Browsable(false)]
[System.ComponentModel.DataAnnotations.Display(AutoGenerateField = false)]
public virtual bool AutoSaveLinks
{
get { return true; }
}
3,Phenix.Addin在构建业务对象代码时, 提供了自动生成工厂方法New()函数代码的功能,可提供新建业务对象强类型传参填充所有字段的功能,方便设计大批量数据导入功能的业务场景;当然,如果倾向于通用性且能忍受反射机制带来的性能损耗,也可调用BusinessListBase<T, TBusiness>提供的工厂方法New()函数:
/// <summary>
/// 新增业务对象集合
/// </summary>
/// <param name="source">数据源</param>
/// <param name="propertyInfos">数据属性信息队列, 顺序与数据源columnIndex一致, 当为null、空队列时按source列名与业务类属性名匹配条件进行数据填充</param>
public static T New(DataTable source, IList<Phenix.Core.Mapping.IPropertyInfo> propertyInfos)
2013-11-29
Phenix.Core.Mapping.CriteriaFieldAttribute新增属性:
/// <summary>
/// 条件操作忽略大小写
/// 仅针对字符串类型的字段
/// 缺省为 false
/// </summary>
public bool OperateIgnoreCase { get; set; }
2013-12-6
1,添加说明书:
《Phenix.NET企业应用软件快速开发平台.使用案例.Web服务开发注意事项》
2,Phenix.Core.Mapping.ClassAttribute新增属性:
/// <summary>
/// 是否从服务器获取序号
/// 在New业务对象时为PrimaryKey字段赋服务器上的唯一值, 这在本地处于多进程环境里是更加稳妥的
/// 缺省为 false, 也就是从本地(一个进程有一个)序号生成器获取,性能高
/// </summary>
public bool SequenceFromServer { get; set; }
2014-1-17
增加:
/// <summary>
/// 清除关联业务对象Cache
/// </summary>
protected void ClearLinkCache(Type type)
/// <summary>
/// 清除从业务对象Cache
/// </summary>
protected void ClearDetailCache(Type type)
2014-2-26
1,增加:Phenix.Business.Tunnel.FastSaveCommand,提供快速批量提交数据功能,具体见:
《Phenix.NET企业应用软件快速开发平台.使用案例.业务数据的读写-快速保存》
2,改进:将业务类的GetDetail()拆分为GetCompositionDetail()、GetAggregationDetail(),以区分“组合关系”、“聚合关系”,
对于GetAggregationDetail(),当业务对象被删除时,其Detail业务对象仅清空外键字段,不做级联删除;而GetCompositionDetail(),就是原来的GetDetail(),可做级联删除
3,支持:32/64位Win7操作系统、Visual Studio 2010/2012/2013上,Addin工具的注册
4,添加说明书:
《Phenix.NET企业应用软件快速开发平台.权限管理.12.重置口令.工作流》
5,BusinessListBase<T, TBusiness>新增功能:与GetRecordCount()函数用法相同,可根据指定条件删除记录:
/// <summary>
/// 删除记录
/// </summary>
/// <param name="criteriaExpression">条件表达式</param>
public static int DeleteRecord(CriteriaExpression criteriaExpression)
比如:删除用户工号等于"3333"的用户记录:UserList.DeleteRecord(User.UserNumberProperty == "3333");
204-3-1
1,添加说明书:
《Phenix.NET企业应用软件快速开发平台.使用指南.21.异构服务集群》
2,解除Phenix.Windows.Client.csproj安全性异常
3,纠正Phenix.Services.Host.x86/x64.exe初始化时无法搭建配置库的问题
2014-3-27
1,添加说明书:
《Phenix.NET企业应用软件快速开发平台.权限管理.13.打印用户清单.自定义报表》
2,支持DevExpressComponents-13.2.X版本;
3,允许映射视图的类含多个表的主键时可自动提交主表数据,见测试工程:
Phenix.Test.使用指南.12.8.1.1
Phenix.Test.使用指南.12.8.1.2
2014-5-22
1,补充:BusinessBase类NewPure函数,可新增未初始化字段值的业务对象
2,新增测试工程:
Phenix.Test.使用指南.11.2.1
Phenix.Test.使用指南.11.2.2
Phenix.Test.使用指南.11.2.3
Phenix.Test.使用指南.11.2.4
Phenix.Test.使用指南.11.2.5
Phenix.Test.使用指南.11.3.2.1.4
Phenix.Test.使用指南.11.3.2.2
Phenix.Test.使用指南.11.5.1.1
Phenix.Test.使用指南.11.5.2.2
Phenix.Test.使用指南.12.6.2.1
Phenix.Test.使用指南.12.6.2.2
Phenix.Test.使用指南.12.6.2.8
Phenix.Test.使用指南.12.6.2.12
Phenix.Test.使用指南.15.6
Phenix.Test.使用指南.16.3
Phenix.Test.使用指南.17.3
3,重构Phenix.Windows.CriteriaCombineControl动态查询条件功能,重构Phenix.Security.Windows.UserManage以演示动态查询条件功能
4,Phenix.Core.AppSettings新增可自定义config文件路径配置属性:ConfigFilename,见测试工程:
Phenix.Test.使用指南.3.13.1
5,BusinessBase、BusinessListBase类新增以下方法:
/// <summary>
/// 检索出从业务对象队列
/// </summary>
public IList<TDetailBusiness> FindDetailBusinesses<TDetailBusiness>()
where TDetailBusiness : BusinessBase<TDetailBusiness>
6,修正web应用中Phenix.Business.Security.UserPrincipal.User的缓存问题
7,修正IDE环境下调试web应用时Phenix.Core.AppConfig.AppType不等于AppType.Webform的现象
2014-6-24
1,新增测试工程:
Phenix.Test.使用指南.12.6.2.5.1
Phenix.Test.使用指南.12.8.4
2,修正了Phenix.Business、Phenix.Addin、Phenix.Workflow的一些bug
3,废除Phenix.Workflow的Phenix.Business.Workflow.ResumeCommand,将
Phenix.Business.Workflow.ResumeCommand.Execute(workflowTaskInfo);
改成
workflowTaskInfo.ProceedWorkflow();
4,修正bug:对SqlServer日期数据的支持
5,业务对象Fetch提速
2014-7-31
1,Phenix.Windows的BarManager组件新增属性:
/// <summary>
/// OnFetched时是否自动进入编辑状态
/// </summary>
[DefaultValue(false), Description("OnFetched时是否自动进入编辑状态?\n点击Fetch功能按钮检索到数据后自动点击Edit功能按钮"), Category("Phenix")]
public bool AutoEditOnFetched { get; set; }
/// <summary>
/// OnSaved时是否自动进入编辑状态
/// </summary>
[DefaultValue(false), Description("OnSaved时是否自动进入编辑状态?\n点击Save功能按钮保存好数据后自动点击Edit功能按钮"), Category("Phenix")]
public bool AutoEditOnSaved { get; set; }
/// <summary>
/// 双击编辑控件时是否自动进入编辑状态
/// </summary>
[DefaultValue(false), Description("双击编辑控件时是否自动进入编辑状态?\n双击编辑控件后自动点击Edit功能按钮"), Category("Phenix")]
public bool AutoEditOnEditControlByDoubleClick { get; set; }
/// <summary>
/// 需要过程锁独占窗体, 一旦发现被他人占用将提示 ProcessLockException 信息
/// </summary>
[DefaultValue(false), Description("需要过程锁独占窗体, 一旦发现被他人占用将提示 ProcessLockException 信息"), Category("Phenix")]
public bool NeedLockProcess
2,整理动态刷新程序集,拆分出Phenix.Renovate.Client.Core.dll,便于业务层使用
3,BusinessListBase类新增一次下载全部从业务对象的系列函数FetchDetail(),可与BusinessBase类中带(TDetail source)参数的GetDetail()函数组合使用,将它们过滤进各主业务对象的Detail缓存中,具体使用方法见测试工程:
Phenix.Test.使用指南.11.3.2.2
4,Addin工具"初始化/编辑业务类"功能,新增ClassDetailAttribute的所见即所得设置界面
5,如显式声明ClassDetailAttribute的CascadingDelete=false,在级联删除时自动将子表的外键字段赋值为null
6,撤销FieldLinkAttribute的CascadingSave、CascadingDelete属性及其功能
7,新增测试工程:
Phenix.Test.使用指南.12.6.2.7
Phenix.Test.使用指南.12.7.4
Phenix.Test.使用指南.17.1.8.2
Phenix.Test.使用指南.20
8,优化Phenix.Windows的BarManager组件性能,添加对DevExpress.XtraVerticalGrid.VGridControl控件的支持
9,添加说明书:
《Phenix.NET企业应用软件快速开发平台.设计规范.数据库设计规范》
《Phenix.NET企业应用软件快速开发平台.设计规范.分析模型技术方案》
2014-8-8
1,Phenix.Windows的BarManager组件新增属性:
/// <summary>
/// OnFetched时是否自动进入编辑状态
/// </summary>
[DefaultValue(false), Description("OnFetched时是否自动进入编辑状态?\n点击Fetch功能按钮检索到数据后自动点击Edit功能按钮"), Category("Phenix")]
public bool AutoEditOnFetched { get; set; }
/// <summary>
/// OnSaved时是否自动进入编辑状态
/// </summary>
[DefaultValue(false), Description("OnSaved时是否自动进入编辑状态?\n点击Save功能按钮保存好数据后自动点击Edit功能按钮"), Category("Phenix")]
public bool AutoEditOnSaved { get; set; }
/// <summary>
/// 双击编辑控件时是否自动进入编辑状态
/// </summary>
[DefaultValue(false), Description("双击编辑控件时是否自动进入编辑状态?\n双击编辑控件后自动点击Edit功能按钮"), Category("Phenix")]
public bool AutoEditOnEditControlByDoubleClick { get; set; }
/// <summary>
/// 需要过程锁独占窗体, 一旦发现被他人占用将提示 ProcessLockException 信息
/// </summary>
[DefaultValue(false), Description("需要过程锁独占窗体, 一旦发现被他人占用将提示 ProcessLockException 信息"), Category("Phenix")]
public bool NeedLockProcess
2,整理动态刷新程序集,拆分出Phenix.Renovate.Client.Core.dll,便于业务层使用
3,BusinessListBase类新增一次下载全部从业务对象的系列函数FetchDetail(),可与BusinessBase类中带(TDetail source)参数的GetDetail()函数组合使用,将它们过滤进各主业务对象的Detail缓存中,具体使用方法见测试工程:
Phenix.Test.使用指南.11.3.2.2
4,Addin工具"初始化/编辑业务类"功能,新增ClassDetailAttribute的所见即所得设置界面
5,如显式声明ClassDetailAttribute的CascadingDelete=false,在级联删除时自动将子表的外键字段赋值为null
6,撤销FieldLinkAttribute的CascadingSave、CascadingDelete属性及其功能
7,新增测试工程:
Phenix.Test.使用指南.12.6.2.7
Phenix.Test.使用指南.12.7.4
Phenix.Test.使用指南.17.1.8.2
Phenix.Test.使用指南.20
8,优化Phenix.Windows的BarManager组件性能,添加对DevExpress.XtraVerticalGrid.VGridControl控件的支持
9,添加说明书:
《Phenix.NET企业应用软件快速开发平台.设计规范.数据库设计规范》
《Phenix.NET企业应用软件快速开发平台.设计规范.分析模型技术方案》
10,Phenix.Windows的UnifyControlLayout组件新增属性:
/// <summary>
/// 统一 GridView 焦点行颜色
/// 当为 Color.Empty 时禁用本功能
/// </summary>
public static Color GridViewFocusedRowColor { get; set; }
2014-9-19
1,Addin工具"初始化/编辑业务类"功能,纠正树状表结构无法自动生成代码的错误
2,Phenix.Windows的BarManager组件,不仅在点击编辑、新增等按钮时可以自动将焦点定位到BindingSource属性指定的控件上,当界面初始化、点击检索按钮时也可以
3,修补在两层架构(客户端直连数据库)下数据访问安全漏洞;修补后,在IDE里调试程序可以不用每次都输入数据库连接串,而直接运行时每次都会要求重新输入数据库连接串
4,优化缓存性能
5,Phenix.Windows的BarManager组件新增属性:
/// <summary>
/// 需要单步提交时锁死游标
/// </summary>
[DefaultValue(false), Description("单步提交时锁死游标\n当 AllowMultistepSubmit = false 或者 AllowMultistepSubmitMaster = false 状态下设置为 true 时, 不允许移动当前编辑的游标"), Category("Phenix")]
public bool NeedLockPositionInOnestepSubmit { get; set; }
6,添加说明书:
《Phenix.NET企业应用软件快速开发平台.使用案例.如何将枚举属性绑定到LookUpEdit》
2014-10-30
1,Phenix.Windows添加UnifyControlEnvironmental组件,可通过以下静态配置属性统一界面上的:
/// <summary>
/// 统一控件 Font
/// 当为 SystemFonts.DefaultFont 时禁用本功能
/// </summary>
public static Font Font
/// <summary>
/// 统一控件 BackColor
/// 当为 Color.Empty 时禁用本功能
/// </summary>
public static Color BackColor
/// <summary>
/// 统一控件 ForeColor
/// 当为 Color.Empty 时禁用本功能
/// </summary>
public static Color ForeColor
/// <summary>
/// 统一控件 RightToLeft
/// 当为 RightToLeft.Inherit 时禁用本功能
/// </summary>
public static RightToLeft RightToLeft
2,Phenix.Services.Host增加ServiceUpgraded功能按钮:点击确认后,之前连接的终端会在请求服务时被提示“服务已升级,您操作的版本已不匹配,请退出系统重新登录!”使用本功能,建议在应用于系统升级时的步骤:客户端和服务端都开启状况 -> 关闭服务Host -> Host下目录及子目录更新新的dll -> 启动服务Host -> 点击ServiceUpgraded功能按钮并确认 -> 之前登录的客户端在操作数据时会弹出提示
3,Phenix.Core.Cache.ObjectCache,在现有Extremely属性开关可控制是否在本地磁盘上做缓存外,还增加以下属性作为它的阀值:
/// <summary>
/// 极端方式最小阈值: 缓存流长度
/// 缺省为 1024 * 1024 / 2
/// </summary>
public static int ExtremelyThresholdMin
/// <summary>
/// 极端方式最大阈值: 缓存流长度
/// 缺省为 1024 * 1024 * 4
/// </summary>
public static int ExtremelyThresholdMax
4,增加:Phenix.Business.Tunnel.FastFetchCommand,提供快速批量Fetch数据功能,具体见:
《Phenix.NET企业应用软件快速开发平台.使用案例.业务数据的读写-快速Fetch》
5,新增测试工程:
Phenix.Test.使用案例.业务数据的读写-快速Save
Phenix.Test.使用案例.业务数据的读写-快速Fetch
6,BusinessListBase类Filter()系列函数,新增按条件表达式过滤出业务对象集合的功能,使用案例见新增测试工程:
Phenix.Test.使用指南.11.3.2.6
7,BusinessListBase类新增OrderBy()系列函数的排序功能,使用案例见新增测试工程:
Phenix.Test.使用指南.11.3.2.7
8,Phenix.Services.Client.Security.LogOn组件增加UpgradeFileSubdirectoryName属性(缺省是"ClientLibrary"子目录),使得服务端可为不同的客户端提供指定子目录下的文件下载升级
2014-11-14
1,Addin工具“初始化/编辑业务类”功能,可自动生成三个文件:虚拟类、可编辑类、不可编辑类,不可编辑类是通过在其Class上加Phenix.Core.Mapping.ReadOnlyAttribute标签来定义的
2,Addin工具添加“刷新视图”功能
3,解决在WEB架构下Phenix.Business.Security.User的Identity属性内容乱码的问题
4,解决高并发下对象缓存日志更新时偶尔会死锁的问题
5,解决在‘提交时填充值‘模式下的业务码未能填充的问题,并重写测试工程:
Phenix.Test.使用指南.15.6
2014-12-18
1,Phenix.Business.Security.UserPrincipal.User.Identity.NeedCheckServerVersion属性可设置为false,以禁用Phenix.Services.Host的ServiceUpgraded功能
2,配置表PH_AssemblyClassMethod上增加了字段,可用于自己开发的权限模块里,针对窗体的菜单进行配置:
AM_AllowVisible NUMERIC(1) NULL, --是否允许显示即使没权限(null: 默认、0:允许显示、1:不允许显示),针对AC_Type = Form上的功能按钮
AM_AM_ID NUMERIC(15) NULL, --所属程序集类方法(针对AC_Type = Form上的树状菜单,为便于查看可在自己的权限配置界面上手工调整到与实际菜单结构一致)
3,ADDIN工具的“初始化/编辑业务类”设计界面中:
添加“Build Easy Entity”功能按钮,可生成轻量级的Entity对象,继承自Phenix.Core.Mapping.EntityBase<T>
添加“Instance Variable List”页,不仅可浏览、定位到所有实例字段,还能为它打上或撤销Csla.NotUndoableAttribute标签
4,Phenix.Core.Mapping.EntityBase<T>提供简单的回滚机制:
/// <summary>
/// 启动编辑
/// 开始记录编辑过程
/// </summary>
void BeginEdit();
/// <summary>
/// 取消编辑
/// 将当前状态恢复回原始状态
/// </summary>
void CancelEdit();
/// <summary>
/// 提交编辑
/// 将原始状态更新为当前状态
/// </summary>
void ApplyEdit();
6, 新增测试工程:
Phenix.Test.使用指南.03.3
Phenix.Test.使用指南.03.5
7,将Phenix.Core.Net.RemotingConfig.CompressionSupported配置属性的默认值调整为false,因为在分析实际应用中Remoting的报文交互,发现压缩过程会出现timeout报文,由此废弃的连接时而会有所堆积增加,使得可供连接的余量会有所下降,影响到并发响应带宽(如果应用系统是千位级别下的并发连接可忽略此影响),为此建议在带宽充足、特别是要求千位级别以上的连接响应请求的场景下关闭本功能
2015-1-15
1,修正bug:BusinessCode流水号未能归零的缺陷
2,Phenix.Services.Host系统SystemInfo配置界面Security页上添加NoLogin选项,允许禁用用户登录验证服务(返回的User.Identity.IsAuthenticated=false),但其他服务仍然可被调用
3,为Phenix.Core.Mapping.EntityBase<T>添加配套的EntityListBase<T, TEntity>,并能通过ADDIN工具自动生成
4,在Phenix.Services.Client.Library.Registration注册器上添加连接服务的测试速度函数:
/// <summary>
/// 测试连接速度
/// </summary>
/// <param name="servicesAddress">主机IP地址</param>
/// <returns>历时毫米数</returns>
public static double TestServicesSpeed(string servicesAddress)
2015-2-1
1,为了编程风格的统一,在Phenix.Business里继承了EntityBase<T>、EntityListBase<T, TEntity>,可直接在这些类里调用静态的Fetch()函数,且可通过ADDIN工具生成代码
2015-3-24
1,优化配置数据(比如程序集信息)的缓存机制
2,优化透明的持久化机制
3,打上Flags标记的枚举值,可在数据库查询中拼装出按位与(AND)的条件表达式,
对于类似“executeModify & ExecuteModify.NonnullToNull) == ExecuteModify.NonnullToNull”的条件操作符为CriteriaOperate.Like
对于类似“executeModify & ExecuteModify.NonnullToNull) <> ExecuteModify.NonnullToNull”的条件操作符为CriteriaOperate.Unlike
2015-4-23
1,优化内存提升性能
2,优化权限验证功能
3,优化界面验证功能
4,排除在服务端代码里修改业务对象属性值未能回传给客户端的缺陷(可用“Phenix.Test.使用指南.12.6.2.2”测试)
2015-6-17
1,为EntityBase<T>、EntityListBase<T, TEntity>,添加IsNew、IsDeleted、IsSelfDirty等状态属性及Save()函数,可按Entity的状态提交数据库增删改表记录,并重写测试工程:
Phenix.Test.使用指南.03.5
2,优化BarManager组件处理业务对象属性值验证的提示功能
3,添加Phenix.Business.EntityPageBase<T>、Phenix.Business.EntityListPageBase<T, TEntity>以支持分页
4,添加Phenix.Core.Data.ServiceBase<T>、Phenix.Business.ServiceBase<T>以支持批量的业务逻辑处理的服务
5,将冗余字段的隐式(默认)自动处理方法改成需显式申明才能生效,具体见《使用指南》的12.9.2章节,以及《权限管理》的7.3.3章节
6,Phenix.Web.Mvc增加"检查安全"标签CheckSecurityAttribute,可自动验证Controller调用方的权限,并自动注册后台服务的代理
7,Phenix.Services.Host系统SystemInfo配置界面Security页上添加PasswordExpirationRemindDays(密码变更天数提醒)、PasswordExpirationDays(密码失效过期天数)输入项,可对登录用户的密码变更情况进行控制
2015-7-29
1,增强跨域用户验证安全性
2,解决客户端登录升级大文件时被杀毒软件扫描锁住造成无法继续下载升级的问题
3,轻量级的Entity对象,推荐使用Phenix.Core.dll的Phenix.Core.Data命名空间下的EntityBase<T>、EntityListBase<T, TEntity>、EntityPageBase<T>、EntityListPageBase<T, TEntity>、ServiceBase<T>
4,强化对OleDb的封装,除了继承CSLA的类仍保留OracleConnection/SqlConnection外,只要涉及到持久化的代码都使用OleDbConnection,建议利用Phenix.Core.Data.DbCommandHelper操作数据库,需注意OleDb是要求按次序CreateParameter的
5,Phenix.Core.Windows.BaseForm和Phenix.Windows.BaseForm,新增PgUpMoveBackControl属性,默认“当输入上页键时选择上一个可用控件并使其成为活动控件”
6,Phenix.AddIn工具的业务类编辑界面,添加Reset All Property - Switch GetSet Method菜单,可改GetProperty()、SetProperty()代码为直接操作字段,也可以切换回来
7,部门资料Phenix.Core.Security.DepartmentInfo类增加InHeadquarters属性,可用来判断当前用户是否属于总部,比如:
Phenix.Core.Security.DepartmentInfo department = Phenix.Business.Security.UserPrincipal.User.Identity.Department;
bool inHeadquarters = department != null && department.InHeadquarters.HasValue && department.InHeadquarters.Value;
为此,Phenix.Security.Windows.DepartmentManage工程亦添加对这个属性的设置功能,具体开发方法参考:
《Phenix.NET企业应用软件快速开发平台.权限管理.05.部门管理工程.添加属性》
8,对于含禁用字段(FieldAttribute.IsDisabledColumn)的业务对象,作废“新增对象时, 如唯一键冲突则作废新对象并将原对象上禁用字段置为Phenix.Core.Mapping.CodingStandards.DefaultDisabledFalseValue”功能。现改为直接抛出异常,在这个异常的InnerException属性里包含了CheckRepeatedException异常对象(抽取方法可使用Phenix.Core.AppUtilities.FindException<CheckRepeatedException>(异常)函数),可依此自行判断处理(建议业务系统要么提供恢复禁用的功能,要么提示用户修改这个业务对象的唯一键内容)
2015-8-17
1,提供Phenix.VSPackage.vsix以支持Microsoft Visual Studio 2015
2,修正映射到数字型表字段的decimal业务类属性在被赋值时,框架自动处理其精度范围规则时产生的一个bug缺陷
3,Phenix.Core.Data.EntityListBase<T, TEntity>新增UpdateRecord()、DeleteRecord()系列静态函数,可按条件批量更新、批量删除
4,在Phenix.Extensions解决方案里添加Phenix.Security.Plugin.Authoriser工程,可支持扩展的权限验证功能,具体开发方法参考:
《Phenix.NET企业应用软件快速开发平台.权限管理.13.扩展为AD用户权限验证.服务插件》
2015-9-30
1,提供基于ASP.NET Web API的服务(“\Bin.NET4.6”目录,需运行在.NET Framework 4.6环境),具体见:
《Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务》
2,提供基于HttpClient的客户端程序集Phenix.Web.Client.DLL及其工程源码,示例见测试工程:
Phenix.Test.使用指南.21.3
Phenix.Test.使用指南.21.5
3,新增Web浏览器AJAX应用的开发示例:
Phenix.Test.使用指南.21.3.html
4,优化:BarManager组件Fetch功能,添加ParallelFetch属性,默认为在阻塞主线程下并行Fetch多个数据集的方法, 本功能仅适用于主数据集且其IsAsynchronousFetch=false
5,优化:BusinessBase类IsDirty、IsSelfDirty、IsDeleted、IsSelfDeleted属性相关功能的优化,可提升Save性能
6,优化:BusinessBase类Selected属性不参与CSLA的Undoable功能
7,优化:BusinessBase、BusinessListBase类新增NotUndoable属性,默认(false)为参与多级撤销,如果覆写它并返回true的话则不参与并阻断Detail对象的多级撤销,BarManager组件的检索功能按钮被点击后将直接进入到可编辑状态,编辑功能按钮已无必要(将不可操作),而取消功能按钮、提交功能按钮都始终保持着可操作状态,具体参考:
《Phenix.NET企业应用软件快速开发平台.使用指南.11.业务对象生命周期及其状态》第11.5.3章节
8,弃用:Phenix.Business.CheckSavableException,改由Csla.Rules.ValidationException替代
9,弃用:BusinessBase、BusinessListBase类的IgnoreSaveError、SaveErrors属性及其功能,改由AloneTransaction属性替代,为此改写了《Phenix.NET企业应用软件快速开发平台.使用指南.12.业务结构对象模型》第12.6.2.10章节
2015-10-31
1,修复最近优化中产生的bug
2,优化:丰富BusinessBase、BusinessListBase类的CheckRules()、CheckSelfRules()、CheckObjectRules()、CheckSelfObjectRules()系列方法
3,优化:BusinessBase、BusinessListBase类Save()时,在客户端会自动检查全部的Rules,传到服务端的业务对象在持久化之前仅自动检查ObjectRules
4,优化:Phenix.Business.CriteriaBase添加数据源键DataSourceKey属性,可指定Fetch哪个数据源,具体见:
《Phenix.NET企业应用软件快速开发平台.使用指南.22.数据库集群》
5,优化:BarManager组件添加“恢复”按钮,可恢复当前禁用对象
6,优化:BarManager组件提交对象时,如发现因唯一键原因提交失败,则会判断是否是与被禁用对象冲突,并提示用户可恢复被禁用对象并加入到当前集合中供继续编辑
7,实现WebAPI数据服务的Fetch()、Save()、Execute()功能,具体见:
《Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务》
2015-12-26
1,Phenix.Services.Host系统SystemInfo配置界面System页上,添加定时清理日志的配置项,可自动清理几个月之前的日志
2,提供全新的Phenix.Core.Clip.dll、Phenix.Web.Client,可支持Xamarin的开发
3,Phenix.AddIn工具,添加以业务类、查询类为模板自动生成Phenix.Core.Clip的实体类、查询类的功能
4,重写开发示例:
Phenix.Test.使用指南.21.3
Phenix.Test.使用指南.21.5
5,修复多Host环境下配置权限后未能自动刷新的bug
6,添加说明书:
《Phenix.NET企业应用软件快速开发平台.使用案例.如何利用监控手段辅助调试》
《Phenix.NET企业应用软件快速开发平台.使用案例.如何绕过默认的持久层操作》
2016-1-20
1,添加直接获取业务码功能,提升批量处理性能,具体见《Phenix.NET企业应用软件快速开发平台使用指南.15.业务码》15.6.5章节,并重写开发示例:
Phenix.Test.使用指南.15.6
2,Phenix.Core.Data.ServiceBase<T>添加异步服务功能,具体见《Phenix.NET企业应用软件快速开发平台.使用指南.23.异步服务》及测试工程:
Phenix.Test.使用指南.23.2
3,当Phenix.Core.Net.NetConfig.ServicesFixed=true时,登录界面(Phenix.Services.Client.Security.LogOnDialog)的服务IP输入框会被隐藏掉,此时需在代码里向Phenix.Core.Net.NetConfig.ServicesAddress赋值上正确的服务IP或配置在config文件里
4,当Phenix.Core.Net.NetConfig.ServicesFixed=false时,登录界面(Phenix.Services.Client.Security.LogOnDialog)的服务IP输入框会根据以往登录历史,被自动填充上一个曾经最快登录过的服务IP(为默认服务IP)
5,组件Phenix.Services.Client.Security.LogOn增加UpgradeServicesAddress属性,可指定升级(客户端的)服务器地址
2016-3-3
1,WebAPI数据服务的Fetch(),允许匿名获取数据,只要在服务端的业务类、实体类上将ClassAttribute的属性值 OnAnonymity = true
2016-4-15
1,修复业务属性的缺省值定义未能起作用的缺陷等
2,新增Phenix.Algorithm程序集,提供ZeroOneDynamicProgramming类"0-1背包问题"算法,使用方法示例见工程:
Phenix.Test.背包问题
3,添加说明书:
《Phenix.NET企业应用软件快速开发平台.研发规范.系统部署升级要点》
4,Phenix.Addin的注册方法,改成运行Bin.Top目录下的Host程序,要求开发环境的操作系统部署.NET4.5或以上版本
2016-5-30
1,为Phenix.Security.Windows.FormClassManage工程添加文档:
《Phenix.NET企业应用软件快速开发平台.权限管理.14.窗体管理.刷新权限配置信息》
2,提供phenix.js用于AJAX+WebAPI的应用开发
3,新增Web浏览器AJAX应用的开发示例:
Phenix.Test.使用指南.21.5.html
4,CSLA、Phenix.Core和Phenix.Business等程序集都引用到Newtonsoft.Json.dll,支持业务类、实体类的JSON序列化(MemberSerialization.OptOut模式)
5,Addin工具自动生成支持JSON序列化(MemberSerialization.OptOut模式)的业务类、实体类的构造函数
6,优化WebAPI服务,改写《Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务》
7,业务集合对象、实体集合对象按照查询时带入的OrderByInfo及字段上的FieldOrderByAttribute标签维持排序状态,具体见《Phenix.NET企业应用软件快速开发平台.使用指南.12.业务结构对象模型》第12.6.1.3段落及测试工程:
Phenix.Test.使用指南.12.6.1.3
2016-6-30
1,为《Phenix.NET企业应用软件快速开发平台.使用指南.04.登录应用系统》添加"4.1.5 指定升级服务的地址"章节,示例工程:
Phenix.Test.使用指南.04.1.5
2,修订Phenix.Windows的BarManager组件,阻止快速点击功能按钮
3,优化Phenix.Algorithm程序集的ZeroOneDynamicProgramming类,可支持需撑满背包且在一个超载范围内的问题,使用方法示例见工程:
Phenix.Test.背包问题
2016-7-14
1,优化Phenix.Algorithm程序集的ZeroOneDynamicProgramming类,增加IGoodsGroup类以支持物品的分组问题,使用方法示例见工程:
Phenix.Test.背包问题
2016-8-17
1,修正两层架构下数据安全问题
2,修正本地缓存数据刷新问题