sampleda.lpr 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. program sampleda;
  2. {$mode objfpc}
  3. uses
  4. JS, Classes, SysUtils, Web, DB, dasdk, dadataset;
  5. Type
  6. { TSampleForm }
  7. TSampleForm = Class(TComponent)
  8. Private
  9. divWrapper : TJSHTMLElement;
  10. btnGetData : TJSHTMLButtonElement;
  11. tblBody : TJSHTMLElement;
  12. FConn : TDAConnection;
  13. FDataset : TDADataset;
  14. procedure AfterLoad(DataSet: TDataSet; Data: JSValue);
  15. procedure BindElements;
  16. procedure CreateDataset;
  17. procedure DoClientsOpen(DataSet: TDataSet);
  18. function DoGetDataClick(aEvent: TJSMouseEvent): boolean;
  19. procedure DoLoginOK(result: Boolean; UserInfo: TDAUserInfo);
  20. Public
  21. Procedure Show;
  22. end;
  23. { TSampleForm }
  24. procedure TSampleForm.CreateDataset;
  25. begin
  26. FConn:=TDaConnection.Create(Self);
  27. FConn.URL:='https://sample.remobjects.com/bin';
  28. FConn.OnLogin:=@DoLoginOK;
  29. FConn.StreamerType:=stBin;
  30. FDataset:=TDaDataset.Create(Self);
  31. FDataset.DAConnection:=FConn;
  32. FDataset.TableName:='Clients';
  33. FDataset.AfterOpen:=@DoClientsOpen;
  34. end;
  35. procedure TSampleForm.BindElements;
  36. begin
  37. btnGetData:=TJSHTMLButtonElement(Document.getElementById('btn-fetch'));
  38. btnGetData.onClick:=@DoGetDataClick;
  39. tblBody:=TJSHTMLElement(Document.getElementById('tableRows'));
  40. divWrapper:=TJSHTMLElement(Document.getElementById('wrapper'));
  41. end;
  42. procedure TSampleForm.AfterLoad(DataSet: TDataSet; Data: JSValue);
  43. begin
  44. Writeln('Loaded');
  45. end;
  46. procedure TSampleForm.DoClientsOpen(DataSet: TDataSet);
  47. Function escape(S : String) : String;
  48. begin
  49. Result:=StringReplace(S,'&','&',[rfReplaceAll]);
  50. Result:=StringReplace(S,'<','&lt;',[rfReplaceAll]);
  51. Result:=StringReplace(S,'>','&gt;',[rfReplaceAll]);
  52. Result:=StringReplace(S,'"','&quot;',[rfReplaceAll]);
  53. Result:=StringReplace(S,'''','&#39;',[rfReplaceAll]);
  54. end;
  55. Var
  56. FID,FName,FPhone : TField;
  57. HTML : String;
  58. begin
  59. Writeln('Clients open :',Dataset.RecordCount);
  60. FID:=Dataset.FieldByname('ClientId');
  61. FName:=Dataset.FieldByname('ClientName');
  62. FPhone:=Dataset.FieldByname('ContactPhone');
  63. While not Dataset.EOF do
  64. begin
  65. html:=Html+'<TR><TD>'+Escape(FID.AsString)+'</TD>'
  66. +'<TD>'+Escape(FName.AsString)+'</TD>'
  67. +'<TD>'+Escape(FPhone.AsString)+'</TD></TR>';
  68. Dataset.Next;
  69. end;
  70. tblBody.InnerHTMl:=HTML;
  71. divWrapper['style']:='';
  72. end;
  73. function TSampleForm.DoGetDataClick(aEvent: TJSMouseEvent): boolean;
  74. begin
  75. FConn.LoginEx('User=simple;Password=simple;');
  76. Result:=False;
  77. end;
  78. procedure TSampleForm.DoLoginOK(result: Boolean; UserInfo: TDAUserInfo);
  79. begin
  80. Writeln('Login :',result);
  81. if Result then
  82. begin
  83. divWrapper['style']:='display: none;';
  84. FDataset.Active:=False;
  85. FDataset.Load([],@AfterLoad);
  86. end
  87. else
  88. window.Alert('Failed to log in !')
  89. end;
  90. procedure TSampleForm.Show;
  91. begin
  92. CreateDataset;
  93. BindElements;
  94. end;
  95. begin
  96. With TSampleForm.Create(Nil) do
  97. Show;
  98. end.