da.pas 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2018 by Michael Van Canneyt, member of the
  4. Free Pascal development team
  5. Remobjects Data Abstract external classes.
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. unit DA;
  13. {$mode objfpc}
  14. {$modeswitch externalclass}
  15. interface
  16. uses Types, JS, DASDK;
  17. Type
  18. // Forward classes
  19. TDADataTable = class;
  20. TDABIN2DataStreamer = class;
  21. TDAJSONDataStreamer = class;
  22. TDARemoteDataAdapter = Class;
  23. TDAChange = class;
  24. TDADelta = class;
  25. TDADeltas = class;
  26. TDAField = class;
  27. TDALookupField = class;
  28. TDADataTableRow = class;
  29. TDAExpression = class;
  30. TDADynamicWhere = class;
  31. TDAConstantExpression = class;
  32. TDAParameterExpression = class;
  33. TDANullExpression = class;
  34. TDAFieldExpression = class;
  35. TDAMacroExpression = class;
  36. TDAUnaryExpression = class;
  37. TDABinaryExpression = class;
  38. TDABetweenExpression = class;
  39. TDAListExpression = class;
  40. TDAUtil = Class;
  41. TDARemoteDataAdaptor = Class;
  42. TDAStream = String;
  43. TDADataStreamer = class external name 'RemObjects.DataAbstract.DataStreamer' (TJSObject)
  44. Public
  45. procedure initializeRead;
  46. procedure initializeWrite;
  47. procedure finalizeWrite;
  48. function getStream : TDAStream;
  49. procedure setStream(aStream : TDAStream);
  50. procedure readDataset(aDataset : TDADataTable);
  51. function readDelta : TDADelta;
  52. procedure writeDelta(aDelta : TDADelta);
  53. Property Stream : TDAStream Read getStream write setStream;
  54. end;
  55. TDADataStreamerClass = Class of TDADataStreamer;
  56. TDABIN2DataStreamer = class external name 'RemObjects.DataAbstract.Bin2DataStreamer' (TDADataStreamer)
  57. function readByte : Byte;
  58. function readInteger : NativeInt;
  59. function readAnsiStringWithLength : String;
  60. function readUtf8StringWithLength : string;
  61. function read (aType : string) : TJSObject;
  62. function readParam (acount : Integer) : TDADataParameter;
  63. function readField(acount : Integer) : TDAField;
  64. Procedure writeByte(aValue : Byte);
  65. Procedure writeInteger(aValue : NativeInt);
  66. Procedure writeAnsiStringWithLength(aValue : String);
  67. Procedure write(aType : string; aValue : TJSObject);
  68. end;
  69. TDAJSONDataStreamer = class external name 'RemObjects.DataAbstract.JSONDataStreamer' (TDADataStreamer)
  70. end;
  71. TDARemoteDataAdapter = Class external name 'RemObjects.DataAbstract.RemoteDataAdapter' (TJSObject)
  72. Public
  73. Constructor New(Const aURL, aDataServiceName, aLoginServiceName : String;
  74. aStreamerClass : TDADataStreamerClass);
  75. end;
  76. TDAChange = class external name 'RemObjects.DataAbstract.Change' (TJSObject)
  77. end;
  78. TDAChangeArray = array of TDAChange;
  79. TLogField = record
  80. name : string;
  81. datatype : string;
  82. end;
  83. TLogFieldArray = array of TLogfield;
  84. TDADelta = class external name 'RemObjects.DataAbstract.Delta' (TJSObject)
  85. Private
  86. FData : TDAChangeArray; external name 'data';
  87. FKeyFields : TStringDynArray; external name 'keyfields';
  88. FLoggedFields : TLogFieldArray; external name 'loggedfields';
  89. FName : string; external name 'name';
  90. Public
  91. Function intFindId(anId : Integer) : TDAChange;
  92. Property data : TDAChangeArray Read FData;
  93. Property keyFields : TStringDynArray Read FKeyFields;
  94. Property LoggedFields : TLogFieldArray Read FLoggedFields;
  95. Property Name : String Read FName;
  96. end;
  97. TDADeltas = class external name 'RemObjects.DataAbstract.Deltas' (TJSObject)
  98. Public
  99. Function FindByName (Const aName : String) : TDADelta;
  100. end;
  101. TDATableRowNotifyEvent = reference to procedure(row : TDADataTableRow);
  102. TDADataTableRowArray = array of TDADataTableRow;
  103. TDAFieldArray = Array of TDAField;
  104. TDADataTable = class external name 'RemObjects.DataAbstract.DataTable' (TJSObject)
  105. Public
  106. name : string;
  107. rows : TDADataTableRowArray;
  108. fields : TDAFieldArray;
  109. deletedrows : TDADataTableRowArray;
  110. frecordbuffer : TJSArray;
  111. fNextRecID : Integer;
  112. fIndex : Integer;
  113. bofFlag : Boolean;
  114. eofFlag : Boolean;
  115. dynamicWhere : TJSObject;
  116. onNewRecord : TDATableRowNotifyEvent;
  117. onBeforeDelete: TDATableRowNotifyEvent;
  118. onAfterDelete: TDATableRowNotifyEvent;
  119. onBeforeScroll: TDATableRowNotifyEvent;
  120. onAfterScroll: TDATableRowNotifyEvent;
  121. Procedure checkRequired;
  122. Procedure locate(aName : String; aValue : JSValue);
  123. procedure addLookupField(const aName,aSourceField : String; aLookupTable : TDADataTable;
  124. const aLookupKeyField, aLookupResultField : String);
  125. procedure getNextId;
  126. function appendRow : TDADataTableRow;
  127. procedure deleteRow;
  128. procedure markDeleted;
  129. function fieldNumByName(Const aName : string) : Integer;
  130. function fieldByName(Const aName : string) : TDAField;
  131. procedure setFieldValue(Const aName : string; aValue : JSValue);
  132. function getFieldValue(Const aName : string) : JSValue;
  133. procedure setFieldAsString(Const aName, aValue : String);
  134. function getFieldAsString(Const aName : string) : String;
  135. function currentRow : TDADataTableRow;
  136. procedure first;
  137. procedure last;
  138. procedure next;
  139. procedure prev;
  140. Function findId(anID: Integer) : TDADataTableRow;
  141. function eof : boolean;
  142. function bof : boolean;
  143. procedure post;
  144. procedure cancel;
  145. end;
  146. TDAField = class external name 'RemObjects.DataAbstract.Field' (TJSObject)
  147. Public
  148. alignment : string;
  149. blobtype: string;
  150. businessClassID : String;
  151. calculated : string;
  152. customAttributes : string;
  153. dataType : string;
  154. name: string;
  155. type_ : string external name 'type';
  156. logChanges : boolean;
  157. readOnly : boolean;
  158. serverAutoRefresh : Boolean;
  159. serverCalculated : Boolean;
  160. description : string;
  161. decimalPrecision : Integer;
  162. decimalScale : integer;
  163. defaultValue : string;
  164. dictionaryEntry : String;
  165. displayLabel : String;
  166. displayWidth : integer;
  167. inPrimaryKey : Boolean;
  168. visible : boolean;
  169. required : boolean;
  170. size : integer;
  171. Procedure checkReadOnly;
  172. end;
  173. TDALookupField = class external name 'RemObjects.DataAbstract.LookupField' (TJSObject)
  174. Public
  175. sourceField : string;
  176. lookupTable : TDADataTable;
  177. lookupKeyField: String;
  178. lookupResultField : string;
  179. end;
  180. TDADataTableRow = class external name 'RemObjects.DataAbstract.DataTableRow' (TJSObject)
  181. Public
  182. recID : Integer;
  183. state : string;
  184. __oldValues : array of JSValue;
  185. __newValues : array of JSValue;
  186. end;
  187. TDAExpression = class external name 'RemObjects.DataAbstract.Expression' (TJSObject);
  188. TDADynamicWhere = class external name 'RemObjects.DataAbstract.DynamicWhere' (TJSObject)
  189. Public
  190. constructor New(anExpression : TDAExpression);
  191. function toXML : String;
  192. end;
  193. TDAConstantExpression = class external name 'RemObjects.DataAbstract.ConstantExpression' (TDAExpression)
  194. Public
  195. constructor new (aType : String; aValue : JSValue; ANull : Byte);
  196. end;
  197. TDAParameterExpression = class external name 'RemObjects.DataAbstract.ParameterExpression' (TDAExpression)
  198. Public
  199. constructor new (const aName, aType : String; aSize : Integer);
  200. end;
  201. TDANullExpression = class external name 'RemObjects.DataAbstract.NullExpression' (TDAExpression)
  202. public
  203. constructor new;
  204. end;
  205. TDAFieldExpression = class external name 'RemObjects.DataAbstract.FieldExpression' (TDAExpression)
  206. public
  207. constructor new(aName : string);
  208. end;
  209. TDAMacroExpression = class external name 'RemObjects.DataAbstract.MacroExpression' (TDAExpression)
  210. public
  211. constructor new(aName : string);
  212. end;
  213. TDAUnaryExpression = class external name 'RemObjects.DataAbstract.UnaryExpression' (TDAExpression)
  214. public
  215. constructor new(aNode : TDAExpression; aOperator : string);
  216. end;
  217. TDABinaryExpression = class external name 'RemObjects.DataAbstract.BinaryExpression' (TDAExpression)
  218. public
  219. constructor new(aNode1,aNode2 : TDAExpression; aOperator : string);
  220. end;
  221. TDABetweenExpression = class external name 'RemObjects.DataAbstract.BetweenExpression' (TDAExpression)
  222. public
  223. constructor new(aNode1,aNode2,aNode3 : TDAExpression);
  224. end;
  225. TDAListExpression = class external name 'RemObjects.DataAbstract.ListExpression' (TDAExpression)
  226. public
  227. constructor new(aList : array of TDAExpression);
  228. end;
  229. TDAUtil = Class external name 'RemObjects.DataAbstract.Util' (TJSObject)
  230. Public
  231. function createDataParameter(aName : String;aValue : JSValue) : TJSObject;
  232. function createRequestInfo(IncludeSchema : Boolean; MaxRecords : Integer; UserFilter : String; Parameters : Array of JSValue) : TJSObject;
  233. function createRequestInfoV5(IncludeSchema : Boolean; MaxRecords : Integer; UserFilter : String; Parameters : Array of JSValue) : TJSOBject;
  234. function createRequestInfoV6(SQL : String; MaxRecords : Integer; UserFilter : String; Parameters : Array of JSValue) : TJSObject;
  235. procedure setupScriptingCallBacks;
  236. end;
  237. TDACallBack = procedure;
  238. TDALoginNeededCallBack = reference to procedure(aCallBack : TDACallBack);
  239. TDAChangeFailHandler = reference to procedure (aData : TDAChange);
  240. TDARemoteDataAdaptor = Class external name 'RemObjects.DataAbstract.RemoteDataAdapter' (TJSObject)
  241. Private
  242. FSendReducedDelta : boolean; external name 'sendReducedDelta';
  243. Public
  244. onLoginNeeded : TDALoginNeededCallBack;
  245. onChangeFail : TDAChangeFailHandler;
  246. function getDataService() : TDADataAbstractService;
  247. function getLoginService() : TDASimpleLoginService;
  248. procedure login(aUserID,aPassword,aConnectionName : String; OnSuccess : TDASuccessEvent; OnFailed : TDAFailedEvent);
  249. procedure logout(OnSuccess : TDASuccessEvent; OnFailed : TDAFailedEvent);
  250. function createStreaer: TDAJSONDatastreamer;
  251. procedure setSendReducedDelta (aValue : Boolean);
  252. procedure getSchema(aFilter : String;OnSuccess : TDASuccessEvent; OnFailed : TDAFailedEvent);
  253. function buildDelta(aTable : TDADataTable) : TDADelta;
  254. procedure createTableFromSchema(const aTableName : String; aTable : TDADataTable; CallBack: TDACallBack);
  255. procedure executeCommand(const aName : String; Parameters: TDADataParameterArray; OnSuccess : TDASuccessEvent; OnFailed : TDAFailedEvent);
  256. function getAutoGetScripts : Boolean;
  257. procedure setAutoGetScripts(aValue : boolean);
  258. Procedure getSQLData(aTable : TDADataTable; const SQL : String;OnSuccess : TDASuccessEvent; OnFailed : TDAFailedEvent);
  259. Procedure getData(aTable : TDADataTable; aRequest : TDATableRequestInfo;OnSuccess : TDASuccessEvent; OnFailed : TDAFailedEvent);
  260. procedure applyUpdates(aTable : TDADataTable; OnSuccess : TDASuccessEvent; OnFailed : TDAFailedEvent);
  261. property sendReducedDelta : Boolean Read FSendReducedDelta Write setSendReducedDelta;
  262. property AutoGetScripts : boolean Read getAutoGetScripts write setAutoGetScripts;
  263. end;
  264. TDAHTMLTableView = class external name 'RemObjects.DataAbstract.Views.HtmlTableView'
  265. Public
  266. constructor new(aTable : TDADataTable; aHTMLTableID : String);
  267. end;
  268. TDAVerticalHTMLTableView = class external name 'RemObjects.DataAbstract.Views.VerticalHtmlTableView'
  269. Public
  270. constructor new(aTable : TDADataTable; aHTMLTableID : String);
  271. end;
  272. Implementation
  273. end.