home *** CD-ROM | disk | FTP | other *** search
/ Delphi Anthology / aDELPHI.iso / Runimage / Delphi50 / Demos / Midas / InternetExpress / CustomerList / customerlistwebmodule.pas < prev    next >
Pascal/Delphi Source File  |  1999-08-11  |  6KB  |  196 lines

  1. (*
  2.   InternetExpress Example.
  3.  
  4.   The default page displays a customer list.
  5.   Clicking on a link displays a master detail form.
  6.   The master detail page has a link that
  7.   returns to the customer list. This link is only
  8.   executed after asking the user if pending updates can
  9.   be discarded.
  10.  
  11.   Demonstrates:
  12.  
  13.   TWebModule.Actions
  14.   TMidasPageProducer
  15.   TDataForm
  16.   TFieldGroup
  17.   TDataGrid
  18.   TDataNavigator
  19.   Styles and StyleSheets
  20.   Customizing TMidasPageProducer.HTMLDoc
  21.     Custom tags
  22.     Custom Java Script
  23.   TXMLBroker.Params.AssignStrings
  24.   Use of IScriptProducer, IScriptManager
  25.  
  26.  
  27. *)
  28. unit CustomerListWebModule;
  29.  
  30. interface
  31.  
  32. uses
  33.   Windows, Messages, SysUtils, Classes, HTTPApp, MidItems, XMLBrokr,
  34.   CompProd, PagItems, MidProd, Db, DBClient, MConnect, WebComp;
  35.  
  36. type
  37.   TWebModule1 = class(TWebModule)
  38.     DCOMConnection1: TDCOMConnection;
  39.     CustList: TMidasPageProducer;
  40.     XMLBroker1: TXMLBroker;
  41.     Data: TMidasPageProducer;
  42.     DataForm1: TDataForm;
  43.     FieldGroup1: TFieldGroup;
  44.     DataNavigator1: TDataNavigator;
  45.     OrderNo: TFieldText;
  46.     SaleDate: TFieldText;
  47.     ShipDate: TFieldText;
  48.     DataGrid1: TDataGrid;
  49.     DataNavigator2: TDataNavigator;
  50.     ItemNo: TTextColumn;
  51.     PartNo: TTextColumn;
  52.     Qty: TTextColumn;
  53.     Discount: TTextColumn;
  54.     StatusColumn1: TStatusColumn;
  55.     OrderNo2: TTextColumn;
  56.     ItemsTotal: TFieldText;
  57.     AmountPaid: TFieldText;
  58.     CustNames: TClientDataSet;
  59.     ReconcileError: TMidasPageProducer;
  60.     procedure DataHTMLTag(Sender: TObject; Tag: TTag;
  61.       const TagString: String; TagParams: TStrings;
  62.       var ReplaceText: String);
  63.     procedure CustListHTMLTag(Sender: TObject; Tag: TTag;
  64.       const TagString: String; TagParams: TStrings;
  65.       var ReplaceText: String);
  66.     procedure XMLBroker1RequestRecords(Sender: TObject;
  67.       Request: TWebRequest; out RecCount: Integer;
  68.       var OwnerData: OleVariant; var Records: String);
  69.     procedure DataBeforeGetContent(Sender: TObject);
  70.     procedure ReconcileErrorHTMLTag(Sender: TObject; Tag: TTag;
  71.       const TagString: String; TagParams: TStrings;
  72.       var ReplaceText: String);
  73.   private
  74.     procedure AddScript(Data: Pointer;
  75.       AddScriptElements: IAddScriptElements);
  76.     { Private declarations }
  77.   public
  78.     { Public declarations }
  79.   end;
  80.  
  81. var
  82.   WebModule1: TWebModule1;
  83.  
  84. implementation
  85.  
  86.  
  87. {$R *.DFM}
  88.  
  89. procedure TWebModule1.DataHTMLTag(Sender: TObject; Tag: TTag;
  90.   const TagString: String; TagParams: TStrings; var ReplaceText: String);
  91. var
  92.   CustNo: Integer;
  93. begin
  94.   // See the HTMDoc property for location of tags.
  95.   if TagString = 'HREFCUSTLIST' then
  96.   begin
  97.     // provide value for <A HREF= to return to customer list
  98.     ReplaceText := Request.ScriptName;
  99.     // Note that the HTMLDoc property has an onclick handler
  100.     // to prevent this HREF from being followed if there are
  101.     // pending updates.
  102.   end
  103.   else if TagString = 'CUSTOMER' then
  104.   begin
  105.     // HTML describing customer
  106.     if XMLBroker1.Params.Count = 0 then
  107.       XMLBroker1.FetchParams;
  108.     CustNo := XMLBroker1.Params[0].AsInteger;
  109.     CustNames.Active := True;
  110.     CustNames.Locate('CustNo', VarArrayOf([CustNo]), []);
  111.     ReplaceText :=
  112.       Format('<H1>Customer Number: %d</H1>' +
  113.               '<H1>Customer Name: %s</H1>',
  114.         [CustNo,
  115.          CustNames.FieldByName('Company').AsString]);
  116.   end;
  117. end;
  118.  
  119. procedure TWebModule1.CustListHTMLTag(Sender: TObject; Tag: TTag;
  120.   const TagString: String; TagParams: TStrings; var ReplaceText: String);
  121. var
  122.   CompanyField, CustNoField: TField;
  123. begin
  124.   // See the HTMDoc property for location of tags
  125.  
  126.   // Generate list of customer HREFS.  XMLBroker1 will
  127.   // use the Name/Value pairs to set Params.
  128.   if TagString = 'CUSTOMERLIST' then
  129.   begin
  130.     CompanyField := CustNames.FieldByName('Company');
  131.     CustNoField := CustNames.FieldByName('CustNo');
  132.     CustNames.Open;
  133.     while not CustNames.Eof do
  134.     begin
  135.       ReplaceText := Format('%s<A HREF="%s/Data?CustNo=%d">%s</A><BR>'#13#10,
  136.         [ReplaceText, Request.ScriptName, CustNoField.AsInteger, CompanyField.AsString]);
  137.       CustNames.Next;
  138.     end;
  139.   end;
  140. end;
  141.  
  142. procedure TWebModule1.XMLBroker1RequestRecords(Sender: TObject;
  143.   Request: TWebRequest; out RecCount: Integer; var OwnerData: OleVariant;
  144.   var Records: String);
  145. begin
  146.   // Set params using name/value pairs in URL
  147.   XMLBroker1.Params.AssignStrings(Request.QueryFields);
  148. end;
  149.  
  150. // Add a JavaScript method to check for pending updates.
  151. procedure TWebModule1.AddScript(Data: Pointer; AddScriptElements: IAddScriptElements);
  152. begin
  153.   with AddScriptElements.ScriptManager do
  154.   if XMLDocuments.Count > 0 then
  155.     with XMLDocuments.Items[0] do
  156.     if RowSets.Count > 0 then
  157.       with RowSets.Items[0] do
  158.       AddScriptElements.AddFunction('CheckData',
  159.         Format(
  160.        'function CheckData()'#13#10 +
  161.        '{'#13#10 +
  162.        '  if ((%0:s.forcepost() != 0) ||'#13#10 +
  163.        '    (%0:s.DeltaChanges.row.length >0))'#13#10 +
  164.        '  {'#13#10 +
  165.        '     return confirm("Data has been changed.  Discard changes?");'#13#10 +
  166.        '  };'#13#10 +
  167.        '};'#13#10, [RowSetVarName]));
  168. end;
  169.  
  170. procedure TWebModule1.DataBeforeGetContent(Sender: TObject);
  171. var
  172.   ScriptProducer: IScriptProducer;
  173. begin
  174.   if Data.GetInterface(IScriptProducer, ScriptProducer) then
  175.     ScriptProducer.ScriptManager.AddElementsIntf.AddPass(AddScript, nil);
  176. end;
  177.  
  178. procedure TWebModule1.ReconcileErrorHTMLTag(Sender: TObject; Tag: TTag;
  179.   const TagString: String; TagParams: TStrings; var ReplaceText: String);
  180. begin
  181.   // See the HTMDoc property for location of tags.
  182.   if TagString = 'HREFCUSTLIST' then
  183.   begin
  184.     // provide value for <A HREF= to return to customer list
  185.     ReplaceText := Request.ScriptName;
  186.   end
  187.   else if TagString = 'REDIRECT' then
  188.   begin
  189.     // Get redirect value send with delta packet.
  190.     ReplaceText := Request.ContentFields.Values[SRedirect];
  191.   end;
  192.  
  193. end;
  194.  
  195. end.
  196.