home *** CD-ROM | disk | FTP | other *** search
/ Delphi Anthology / aDELPHI.iso / Runimage / Delphi50 / Source / Vcl / mtsrdm.pas < prev    next >
Pascal/Delphi Source File  |  1999-08-11  |  7KB  |  216 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {       MTS Remote Data Module                          }
  6. {                                                       }
  7. {       Copyright (c) 1999 Inprise Corporation          }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit MtsRdm;
  12.  
  13. {$H+,X+}
  14.  
  15. interface
  16.  
  17. uses Windows, Classes, Forms, DataBkr, Mtx, MIDAS;
  18.  
  19. type
  20.   { TMtsDataModule }
  21.  
  22.   TMtsDataModule = class(TRemoteDataModule, IAppServer, IObjectControl)
  23.   private
  24.     FAutoComplete: Boolean;
  25.     FOnActivate: TNotifyEvent;
  26.     FOnDeActivate: TNotifyEvent;
  27.     FObjectContext: IObjectContext;
  28.   protected
  29.     { IObjectControl }
  30.     procedure Activate; safecall;
  31.     procedure Deactivate; stdcall;
  32.     function CanBePooled: Bool; stdcall;
  33.     { IAppServer }
  34.     function AS_GetProviderNames: OleVariant; safecall;
  35.     function AS_ApplyUpdates(const ProviderName: WideString; Delta: OleVariant;
  36.       MaxErrors: Integer; out ErrorCount: Integer;
  37.       var OwnerData: OleVariant): OleVariant; safecall;
  38.     function AS_GetRecords(const ProviderName: WideString; Count: Integer;
  39.       out RecsOut: Integer; Options: Integer; const CommandText: WideString;
  40.       var Params, OwnerData: OleVariant): OleVariant; safecall;
  41.     function AS_DataRequest(const ProviderName: WideString;
  42.       Data: OleVariant): OleVariant; safecall;
  43.     function AS_GetParams(const ProviderName: WideString; var OwnerData: OleVariant): OleVariant; safecall;
  44.     function AS_RowRequest(const ProviderName: WideString; Row: OleVariant;
  45.       RequestType: Integer; var OwnerData: OleVariant): OleVariant; safecall;
  46.     procedure AS_Execute(const ProviderName: WideString;
  47.       const CommandText: WideString; var Params, OwnerData: OleVariant); safecall;
  48.  
  49.     procedure CallComplete(Complete: Boolean); virtual;
  50.     property ObjectContext: IObjectContext read FObjectContext;
  51.   public
  52.     constructor Create(AOwner: TComponent); override;
  53.     procedure SetComplete;
  54.     procedure SetAbort;
  55.     procedure EnableCommit;
  56.     procedure DisableCommit;
  57.     function IsInTransaction: Bool;
  58.     function IsSecurityEnabled: Bool;
  59.     function IsCallerInRole(const Role: WideString): Bool;
  60.   published
  61.     property AutoComplete: Boolean read FAutoComplete write FAutoComplete default True;
  62.     property OnActivate: TNotifyEvent read FOnActivate write FOnActivate;
  63.     property OnDeactivate: TNotifyEvent read FOnDeactivate write FOnDeactivate;
  64.   end;
  65.   {$EXTERNALSYM TMtsDataModule}
  66.  
  67. implementation
  68.  
  69. uses ComObj;
  70.  
  71. constructor TMtsDataModule.Create(AOwner: TComponent);
  72. begin
  73.   inherited Create(AOwner);
  74.   FAutoComplete := True;
  75. end;
  76.  
  77. procedure TMtsDataModule.Activate;
  78. begin
  79.   FObjectContext := GetObjectContext;
  80.   if Assigned(FOnActivate) then FOnActivate(Self);
  81. end;
  82.  
  83. procedure TMtsDataModule.Deactivate;
  84. begin
  85.   if Assigned(FOnDeactivate) then FOnDeactivate(Self);
  86.   FObjectContext := nil;
  87. end;
  88.  
  89. function TMtsDataModule.CanBePooled: Bool;
  90. begin
  91.   Result := False;
  92. end;
  93.  
  94. procedure TMtsDataModule.SetComplete;
  95. begin
  96.   if Assigned(FObjectContext) then FObjectContext.SetComplete;
  97. end;
  98.  
  99. procedure TMtsDataModule.SetAbort;
  100. begin
  101.   if Assigned(FObjectContext) then FObjectContext.SetAbort;
  102. end;
  103.  
  104. procedure TMtsDataModule.EnableCommit;
  105. begin
  106.   if Assigned(FObjectContext) then FObjectContext.EnableCommit;
  107. end;
  108.  
  109. procedure TMtsDataModule.DisableCommit;
  110. begin
  111.   if Assigned(FObjectContext) then FObjectContext.DisableCommit;
  112. end;
  113.  
  114. function TMtsDataModule.IsInTransaction: Bool;
  115. begin
  116.   if Assigned(FObjectContext) then Result := FObjectContext.IsInTransaction
  117.   else Result := False;
  118. end;
  119.  
  120. function TMtsDataModule.IsSecurityEnabled: Bool;
  121. begin
  122.   if Assigned(FObjectContext) then Result := FObjectContext.IsSecurityEnabled
  123.   else Result := False;
  124. end;
  125.  
  126. function TMtsDataModule.IsCallerInRole(const Role: WideString): Bool;
  127. begin
  128.   if Assigned(FObjectContext) then Result := FObjectContext.IsCallerInRole(Role)
  129.   else Result := False;
  130. end;
  131.  
  132. { IAppServer support }
  133.  
  134. procedure TMtsDataModule.CallComplete(Complete: Boolean);
  135. begin
  136.   if AutoComplete then
  137.     if Complete then
  138.       SetComplete else
  139.       SetAbort;
  140. end;
  141.  
  142. function TMtsDataModule.AS_GetProviderNames: OleVariant;
  143. begin
  144.   try
  145.     Result := inherited AS_GetProviderNames;
  146.   finally
  147.     CallComplete(True);
  148.   end;
  149. end;
  150.  
  151. function TMtsDataModule.AS_ApplyUpdates(const ProviderName: WideString; Delta: OleVariant;
  152.   MaxErrors: Integer; out ErrorCount: Integer;
  153.   var OwnerData: OleVariant): OleVariant;
  154. begin
  155.   try
  156.     Result := inherited AS_ApplyUpdates(ProviderName, Delta, MaxErrors, ErrorCount, OwnerData);
  157.     if ErrorCount > MaxErrors then
  158.       CallComplete(False) else
  159.       CallComplete(True);
  160.   except
  161.     CallComplete(False);
  162.     raise;
  163.   end;
  164. end;
  165.  
  166. function TMtsDataModule.AS_GetRecords(const ProviderName: WideString; Count: Integer;
  167.   out RecsOut: Integer; Options: Integer; const CommandText: WideString;
  168.   var Params, OwnerData: OleVariant): OleVariant;
  169. begin
  170.   try
  171.     Result := inherited AS_GetRecords(ProviderName, Count, RecsOut, Options,
  172.       CommandText, Params, OwnerData);
  173.   finally
  174.     CallComplete(True);
  175.   end;
  176. end;
  177.  
  178. function TMtsDataModule.AS_DataRequest(const ProviderName: WideString;
  179.   Data: OleVariant): OleVariant;
  180. begin
  181.   { No SetComplete call because I don't know what the developer is doing here.
  182.     Developer needs to call SetComplete in the OnDataRequest event. }
  183.   Result := inherited AS_DataRequest(ProviderName, Data);
  184. end;
  185.  
  186. function TMtsDataModule.AS_GetParams(const ProviderName: WideString; var OwnerData: OleVariant): OleVariant;
  187. begin
  188.   try
  189.     Result := inherited AS_GetParams(ProviderName, OwnerData);
  190.   finally
  191.     CallComplete(True);
  192.   end;
  193. end;
  194.  
  195. function TMtsDataModule.AS_RowRequest(const ProviderName: WideString; Row: OleVariant;
  196.   RequestType: Integer; var OwnerData: OleVariant): OleVariant;
  197. begin
  198.   try
  199.     Result := inherited AS_RowRequest(ProviderName, Row, RequestType, OwnerData);
  200.   finally
  201.     CallComplete(True);
  202.   end;
  203. end;
  204.  
  205. procedure TMtsDataModule.AS_Execute(const ProviderName: WideString;
  206.   const CommandText: WideString; var Params, OwnerData: OleVariant);
  207. begin
  208.   try
  209.     inherited AS_Execute(ProviderName, CommandText, Params, OwnerData);
  210.   finally
  211.     CallComplete(True);
  212.   end;
  213. end;
  214.  
  215. end.
  216.