kbmmw 5.09 发布
New stuff
=========
- Added kbmMWSmartBind.pas unit with optional kbmMWSmartBindVCL.pas and kbmMWSmartBindFMX.pas
Provides new easy to use multiway databinding between data, controls and objects.
- Added support for XML-RPC and JSON-RPC. Include kbmMWJSONRPCTransStream and/or kbmMWXMLRPCTransStream units
and select JSONRPC or XMLRPC as transport stream format in request/response transports.
- Updated TkbmMWONArray, added:
procedure MoveAppend(const AValue:TkbmMWONArray);
procedure MoveInsert(const AIndex:TkbmNativeInt; const AValue:TkbmMWONArray);
procedure CopyAppend(const AValue:TkbmMWONArray);
procedure CopyInsert(const AIndex:TkbmNativeInt; const AValue:TkbmMWONArray);
procedure Insert(const AIndex:TkbmNativeInt; const AValues:array of variant); overload;
- Updated TkbmMWONObject, added:
property PropertyValueAsVariant[const AIndex:TkbmNativeInt]:variant read GetPropertyValueAsVariant write SetPropertyValueAsVariant;
- Added function IkbmMWScheduledEvent.SyncQueued:IkbmMWScheduledEvent which works similar to Synchronized
except it will queue the operation and not block to prevent certain deadlock scenarios.
- Added IkbmMWScheduledEvent.AfterEnd and IkbmMWScheduledEvent.SynchronizedAfterEnd optional handlers
which will be called when the event has run and it is never to be run again (it is truely ending).
- Added IkbmMWScheduledEvent.Executed:boolean property that returns true if the event has been executed
at least once.
- Added properties OnAnonymousAfterEndProcedure:TkbmMWOnAnonymousScheduledProcedure and OnSimpleAnonymousAfterEndProcedure:TkbmMWOnSimpleAnonymousScheduledProcedure
to IkbmMWScheduledEvent. See AfterEnd explanation.
- Added property IkbmMWScheduledEvent.IsSynchronized which indicates if an event is running synchronized (or syncqueued).
- Added new methods to TkbmMWRTTI:
class function IskbmMWONCustomObject(const AVariant:variant):boolean;
class function GetkbmMWONCustomObject(const AVariant:variant; var ACustomObject:TkbmMWONCustomObject):boolean;
class function CompareValue(const AValue1,AValue2:TValue):integer;
class function GetIsInteger(const AValue:TValue):boolean;
class function GetIsInt64(const AValue:TValue):boolean;
class function GetIsBoolean(const AValue:TValue):boolean;
class function IsDesigntime:boolean;
- Added TkbmMWThreadList<T>.Count property in kbmMWGlobal.pas
- Added TkbmMWThreadDictionary<TKey,TValue> and TkbmMWThreadObjectDictionary<TKey,TValue> class
in kbmMWGlobal.pas
- Added function kbmMWSafeDelphiIdentifier(AIdentifier:string):string; to kbmMWGlobal.pas
- Added new functions to TkbmMWJSONMarshal:
class function GenerateDelphiClassFromUTF8File(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
class function GenerateDelphiClassFromUTF16File(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
class function GenerateDelphiClassFromUTF8Stream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
class function GenerateDelphiClassFromUTF16Stream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
They generate Delphi source code that is able to marshal/demarshal provided JSON data.
- Added new functions to Use (kbmMWSmartUtils.pas):
class function IsObject(const AVariant:Variant):boolean
class function IsObject<T>(const AVariant:Variant):boolean
class function IsDateTime(const AVariant:Variant)
class function IsString(const AVariant:Variant):boolean
class function IsDouble(const AVariant:Variant):boolean
class function IsInteger(const AVariant:Variant):boolean
class function IsInt64(const AVariant:Variant):boolean
- Added new functions to TkbmMWYAMLMarshal:
class function GenerateDelphiClassFromUTF8File(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
class function GenerateDelphiClassFromUTF16File(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
class function GenerateDelphiClassFromUTF8Stream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
class function GenerateDelphiClassFromUTF16Stream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
They generate Delphi source code that is able to marshal/demarshal provided YAML data.
- Added TkbmMWLockFreeCountLock to kbmMWLockFree.pas
Provides a simple way to count interests in a resource.
- Added class function TkbmMWONCustomMarshal.GenerateDelphiClass(const AUnitName:string; const AMainClassName:string; const AON:TkbmMWONCustomObject):string;
- Added support for ORM to detect primary key field changes and automaticaly update datastorage accordingly.
- Added support for marshalling/demarshalling data of type variant.
- Added new function to kbmMWHTTPUtils.pas
function kbmMWIsMimetypeTextual(const AMimeType:string):boolean;
- Added support for rewriting ALTER TABLE PRIMARY KEY SQL
- Added new functions to TkbmMWXMLMarshal:
class function FromFile<T>(const AFileName:string):T; overload;
class function FromFile(const AFileName:string; AResultClass:TClass):TObject; overload;
Provides easy access to marshalling and demarshalling in one line.
class procedure SaveToFile(const AFileName:string; const AValue:TValue); overload;
class function GenerateDelphiClassFromFile(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
class function GenerateDelphiClassFromStream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
They generate Delphi source code that is able to marshal/demarshal provided YAML data.
Changes/minor additions
=======================
- Improved TkbmMWONNative.SetAsFmtString to correctly use AFormat.FormatSettings when handling decimal comma.
- Improved TkbmMWONArray.GetAsVariant and TkbmMWONObject.GetAsVariant to allow for returning embededded kbmMW supported object/record
as variant when needed for kbmMW SKUs supporting SmartService.
- Improved TkbmMWONArray.GetAsValue and TkbmMWONObject.GetAsVariant to allow for returning embededded kbmMW supported object/record
as TValue when needed for kbmMW SKUs supporting SmartService.
- Improved TkbmMWONArray.SetAsVariant and TkbmMWONObject.SetAsVariant to handle variant embededded kbmMW supported object/record
when needed for kbmMW SKUs supporting SmartService.
- Improved TkbmMWONArray.SetAsValue and TkbmMWONObject.SetAsValue to handle TValue embededded kbmMW supported object/record
when needed for kbmMW SKUs supporting SmartService.
- Improved TkbmMWONArray.Add(const AValues:array of variant) to handle variant embededded kbmMW supported object/record
when needed for kbmMW SKUs supporting SmartService.
- Updated class function TkbmMWProcess.ExecuteProcess to support optional TEncoding argument.
- Improved TkbmMWJSONStreamer to differenciate between number and integer, although JSON standard only knows about number.
It is of interest when converting object notation to other formats.
- Added optional argument const ABestMatch:boolean = false to TkbmMWRTTIKnownTypes.Get and GetClass functions.
If true and no known exact type is found, it will attempt to find usable parent type.
- Added optional const AWait:boolean = true argument to several TkbmMWScheduler.Unschedule and Clear methods.
- Updated kbmSQLite.pas adapter to respect default Journal mode and default page size.
- Improved updating SQLite journal mode and page size.
- Improved TkbmMWLinqStage.AsStrings to attempt better formatting of data.
- Improved REST transport stream format.
- Improved kbmMWCustomServerMessagingTransport.pas to allow encrypted subscription and unsubscription
message to be proxied without knowing key.
- Improved TkbmMWNullableReplacementVisualizer.
- Updated TkbmMWRESTAttribute, added Required property default false.
Indicates if an argument is required or not.
- Improved TkbmMWRTTI.GetQualifiedName to attempt to generate qualified names for non registered types too.
Fixes
=====
- Fixed TkbmMWProcess.ExecuteProcess to terminate job on function end, if AJob handled given in arguments.
- Fixed various bugs and some leaks in kbmMW Scheduler.
- Fixed bugs in TkbmMWRTTI methods.
- Fixed TkbmMWRemoteDesktopClient.Connect to unsubscribe from previous subscription if any.
- Fixed bugs in TkbmMWOracleMetaData.
- Fixed bugs in kbmMWGlobal.pas.
- Fixed bugs and leaks in kbmMWORM.pas.
- Fixed typo bug in TkbmMWORM.GenerateDelphiClass.
- Fixed access violation when reregistering kbmMW in Delphi due to internal Delphi RTTI bug.
- Fixed AutoCommit issue in UniDAC database adapter.
- Fixed bugs in kbmMWCustomServerMessagingTransport.pas.
kbmmw 5.09 发布的更多相关文章
- 开启kbmmw 5.09 中的XML-RPC和 JSON-RPC 服务
kbmmw 5.09 里面增加了XML-RPC和 JSON-RPC 服务支持,但是默认没有开启. 需要在安装前,修改kbmMWConfig.inc文件. 加入以下定义 {$DEFINE KBMMW_J ...
- koahub.js 0.09 发布,新增钩子机制
koahubjs发布0.09 新增钩子机制添加钩子机制,控制器钩子和函数钩子修复自动加载bug,实现除自动加载导出的default外,还能自动加载其他的方法记koahubjs钩子开发过程在使用koah ...
- kbmMW 5.09测试报告(1)-Scheduler
这个版本除了增加新的SmartBinding功能,同时提供了大量的功能更新以及bug修正.其中,SmartBinding的介绍,xalion已经第一时间写了初识kbmmw 中的smartbind功能, ...
- kbmmw 5.04 发布
增加了一大波功能,消灭了一大堆问题,也肯定引进了一大票BUG.We are happy to announce the release of our latest version of kbmMW. ...
- kbmmw 5.02发布
5.02.00 May 27 2017 Important notes (changes that may break existing code) ========================= ...
- kbmmw 5.01 发布
Important notes (changes that may break existing code) ============================================= ...
- KbmMW 4.5 发布
We are happy to announce the release of kbmMW v. 4.50.00 Professional, Enterprise and CodeGear Editi ...
- kbmMW 5.09.00是个必须升级的版本!
这几天遇到的几个问题,从5.08.10升级到5.09.00,自然解决了! 所以建议大家都升级到这个版本. 例如我遇到的问题: 1.在线程中使用ClientQuery注意的问题 2.Invalid pr ...
- 使用kbmmw 实现图形验证码
首先感谢图形验证码的提供者 晴空无彩虹 https://blog.csdn.net/u011784006/article/details/80827181 他用FMX 实现了验证码的生成,我修改成 ...
随机推荐
- 【Tyvj2133&BZOJ1146】网络管理Network(树套树,DFS序,树状数组,主席树,树上差分)
题意:有一棵N个点的树,每个点有一个点权a[i],要求在线实现以下操作: 1:将X号点的点权修改为Y 2:查询X到Y的路径上第K大的点权 n,q<=80000 a[i]<=10^8 思路: ...
- [转]结队开发之多storyboard
转自Haven's Blog Storyboard的出现,让开发变得像讲故事一样,UI间的关系流程也一目了然.它其实是xib的升级版本,将多个xib统一管理了.任何事都有双面性,Storyboar ...
- AC日记——乘积最大 洛谷 P1018
题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...
- 牛客网 牛客小白月赛1 B.简单题2-控制输出格式
B.简单题2 链接:https://www.nowcoder.com/acm/contest/85/B来源:牛客网 和A题一样,控制输出格式就可以. 代码: 1 #include<iostr ...
- 机器学习实战读书笔记(二)k-近邻算法
knn算法: 1.优点:精度高.对异常值不敏感.无数据输入假定 2.缺点:计算复杂度高.空间复杂度高. 3.适用数据范围:数值型和标称型. 一般流程: 1.收集数据 2.准备数据 3.分析数据 4.训 ...
- 从壹开始 [ Ids4实战 ] 之三║ 详解授权持久化 & 用户数据迁移
回顾 哈喽大家周三好,今天终于又重新开启 IdentityServer4 的落地教程了,不多说,既然开始了,就要努力做好
- 配置tomcat启动参数-Dfile.encoding=UTF-8后,IDEA控制台乱码
配置tomcat启动参数-Dfile.encoding=UTF-8后,IDEA控制台出现乱码 解决方法: 在idea的bin目录(如:D:\JetBrains\IntelliJ IDEA 2018.1 ...
- java多线程04----------final和static
final和static关键字 final关键字 1.final关键字在单线程中的特点: 1)final修饰的静态成员:必须在进行显示初始化或静态代码块赋值,并且仅能赋值一次. 2)final修饰的类 ...
- filter和spring 的interceptor都是单例的,都不是线程安全的
Filter 是在 Servlet 容器启动时就初始化的,因此可以认为是以单例对象存在的,如果一个请求线程对其中的成员变量修改的话,会影响到其他的请求线程,因此认为是多线程不安全的.
- indy9在程序关闭时出现terminate thread timeout的BUG解决办法
indy9在程序关闭时出现terminate thread timeout的BUG解决办法 INDY9线程有BUG,在退出程序的时候会报错:terminate thread timeout(终止线程超 ...