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 实现了验证码的生成,我修改成 ...
随机推荐
- Road(bzoj 2750)
Description C国有n座城市,城市之间通过m条单向道路连接.一条路径被称为最短路,当且仅当不存在从它的起点到终点的另外一条路径总长度比它小.两条最短路不同,当且仅当它们包含的道路序列不同.我 ...
- 【bzoj4031】[HEOI2015]小Z的房间 && 【bzoj4894】天赋 (矩阵树定理)
来两道矩阵树模板: T1:[bzoj4031][HEOI2015]小Z的房间 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形 ...
- inotify+rsync的初步配置
inotify的简单配置 Linux内核从2.6.13开始,引入了inotify机制.通过intofity机制,能够对文件系统的变化进行监控,如对文件进行创建.删除.修改等操作,可以及时通知应用程序 ...
- k8s之Service资源
1.Service概述 service是kubernetes中最核心的资源对象之一,service和pod之间是通过Label串起来,相同的Service的pod的Label是一样的.同一个servi ...
- Java中判断String对象是否为空的方法
Java原生的方法: String对象中有一个isEmpty的方法判断是否为空,其实isEmpty完全等同于string.length()==0,注意如果String本身是null,那么使用strin ...
- Maven插件maven-antrun-plugin的使用
以下引用官方的介绍http://maven.apache.org/plugins/maven-antrun-plugin/: 一.什么是maven-antrun-plugin? 该插件提供从Maven ...
- Cesium加载三维倾斜摄影数据
具体技术来源自论文 基于Cesium的倾斜摄影三维模型Web加载与应用研究. 技术架构图 应用实例 利用一个实际实例来详细说明如何利用Cesium加载倾斜摄影数据,并进行可视化和交互操作. 首先,利用 ...
- 给button添加长按手势并侦测到此button
1, 添加手势 self.longPressRecognizer = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@ ...
- Android 震动 和 停止 代码
<span style="font-size:18px;">MainActivity.java</span> package com.Utils.vibra ...
- 【hibernate】Hibernate中get()和load()的区别
Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别. 1. get() 使用get()来根据ID进行单条查询: 1 User user= ...