mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 18:29:27 +02:00
* Examples added
git-svn-id: trunk@15333 -
This commit is contained in:
parent
6a5318f1b9
commit
ef213e67d6
70
.gitattributes
vendored
70
.gitattributes
vendored
@ -2169,6 +2169,76 @@ packages/fcl-res/xml/versiontypes.xml svneol=native#text/plain
|
||||
packages/fcl-res/xml/winpeimagereader.xml svneol=native#text/plain
|
||||
packages/fcl-web/Makefile svneol=native#text/plain
|
||||
packages/fcl-web/Makefile.fpc svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/createusers.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/createusers.lpr svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/extgrid-json.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/extgrid-json.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/extgrid-xml.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/extgrid-xml.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/extgrid.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/extgrid.lpr svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/lazwebdata.pas svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/reglazwebdata.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/wmusers.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/wmusers.lrs svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo/wmusers.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo2/extgrid-json.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo2/extgrid-json.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo2/extgrid-xml.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo2/extgrid-xml.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo2/extgrid.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo2/extgrid.lpr svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo2/wmusers.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo2/wmusers.lrs svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo2/wmusers.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/extgrid-json.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/extgrid-json.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/extgrid-xml.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/extgrid-xml.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/extgrid.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/extgrid.lpr svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/tralala.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/tralala.lrs svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/tralala.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/wmusers.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/wmusers.lrs svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo3/wmusers.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/dmusers.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/dmusers.lrs svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/dmusers.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/extgrid-json.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/extgrid-json.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/extgrid-xml.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/extgrid-xml.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/extgrid.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/extgrid.lpr svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo5/extgrid-json.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo5/extgrid-json.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo5/extgrid-xml.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo5/extgrid-xml.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo5/extgrid.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo5/extgrid.lpr svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo5/wmusers.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo5/wmusers.lrs svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo5/wmusers.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/extgrid-json.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/extgrid-json.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/extgrid-xml.html svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/extgrid-xml.js svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/extgrid.ini svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/extgrid.lpi svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/extgrid.lpr svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/wmusers.lfm svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/wmusers.lrs svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demo6/wmusers.pp svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/demos.txt svneol=native#text/plain
|
||||
packages/fcl-web/examples/webdata/users.dbf -text
|
||||
packages/fcl-web/fpmake.pp svneol=native#text/plain
|
||||
packages/fcl-web/fptemplate.txt svneol=native#text/plain
|
||||
packages/fcl-web/src/base/README.txt svneol=native#text/plain
|
||||
|
77
packages/fcl-web/examples/webdata/demo/createusers.lpi
Normal file
77
packages/fcl-web/examples/webdata/demo/createusers.lpi
Normal file
@ -0,0 +1,77 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="7"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
</Flags>
|
||||
<MainUnit Value="0"/>
|
||||
<TargetFileExt Value=""/>
|
||||
<Icon Value="0"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<ProjectVersion Value=""/>
|
||||
<Language Value=""/>
|
||||
<CharSet Value=""/>
|
||||
</VersionInfo>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="createusers.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="createusers"/>
|
||||
<CursorPos X="16" Y="35"/>
|
||||
<TopLine Value="15"/>
|
||||
<UsageCount Value="20"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="../../fpc/packages/fcl-db/src/dbase/dbf.pas"/>
|
||||
<UnitName Value="dbf"/>
|
||||
<CursorPos X="3" Y="1477"/>
|
||||
<TopLine Value="1436"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
<JumpHistory Count="0" HistoryIndex="-1"/>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="8"/>
|
||||
<Target>
|
||||
<Filename Value="createusers"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)/"/>
|
||||
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
136
packages/fcl-web/examples/webdata/demo/createusers.lpr
Normal file
136
packages/fcl-web/examples/webdata/demo/createusers.lpr
Normal file
@ -0,0 +1,136 @@
|
||||
program createusers;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Classes, SysUtils, dbf, CustApp, db
|
||||
{ you can add units after this };
|
||||
|
||||
type
|
||||
|
||||
{ TMyApplication }
|
||||
|
||||
TMyApplication = class(TCustomApplication)
|
||||
private
|
||||
procedure CreateUsers(DS: TDataset);
|
||||
protected
|
||||
procedure DoRun; override;
|
||||
public
|
||||
constructor Create(TheOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
procedure WriteHelp; virtual;
|
||||
end;
|
||||
|
||||
{ TMyApplication }
|
||||
|
||||
Type
|
||||
TUserRecord = Record
|
||||
L,N,E : string;
|
||||
end;
|
||||
|
||||
Const
|
||||
UserCount = 8;
|
||||
Users : Array[1..UserCount] of TUserRecord = (
|
||||
(L:'Daniel';N:'Daniel mantione'; E:'daniel@freepascal.org'),
|
||||
(L:'Florian';N:'Florian Klaempfl'; E:'florian@freepascal.org'),
|
||||
(L:'Joost';N:'Joost van der Sluis'; E:'joost@freepascal.org'),
|
||||
(L:'Jonas';N:'Jonas Maebe'; E:'jonas@freepascal.org'),
|
||||
(L:'Michael';N:'Michael van canneyt'; E:'michael@freepascal.org'),
|
||||
(L:'Marco';N:'Marco Van De Voort'; E:'marco@freepascal.org'),
|
||||
(L:'Pierre';N:'Pierre Muller'; E:'pierre@freepascal.org'),
|
||||
(L:'Tomas';N:'Tomas Hajny'; E:'tomas@freepascal.org')
|
||||
) ;
|
||||
|
||||
|
||||
procedure TMyApplication.CreateUsers(DS : TDataset);
|
||||
|
||||
Var
|
||||
I : integer;
|
||||
|
||||
begin
|
||||
For I:=1 to UserCount do
|
||||
begin
|
||||
DS.Append;
|
||||
DS.FieldByName('Login').AsString:=Users[i].L;
|
||||
DS.FieldByName('Name').AsString:=Users[i].N;
|
||||
DS.FieldByName('Email').AsString:=Users[i].E;
|
||||
If Random(2)<1 then
|
||||
DS.FieldByname('LastLogin').AsDatetime:=Date-Random(10);
|
||||
DS.Post;
|
||||
end;
|
||||
end;
|
||||
procedure TMyApplication.DoRun;
|
||||
var
|
||||
ErrorMsg: String;
|
||||
DB : TDBF;
|
||||
begin
|
||||
// quick check parameters
|
||||
ErrorMsg:=CheckOptions('h','help');
|
||||
if ErrorMsg<>'' then begin
|
||||
ShowException(Exception.Create(ErrorMsg));
|
||||
Terminate;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
// parse parameters
|
||||
if HasOption('h','help') then begin
|
||||
WriteHelp;
|
||||
Terminate;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
{ add your program here }
|
||||
DB:=TDBF.Create(Self);
|
||||
try
|
||||
With DB.FieldDefs do
|
||||
begin
|
||||
Add('ID',ftAutoInc,0,True);
|
||||
Add('Login',ftString,30,true);
|
||||
Add('Name',ftString,50,True);
|
||||
Add('Email',ftString,50,False);
|
||||
Add('LastLogin',ftDate,0,False);
|
||||
end;
|
||||
DB.TableName:='users.dbf';
|
||||
DB.TableLevel:=7;
|
||||
DB.CreateTable;
|
||||
DB.Open;
|
||||
CreateUsers(DB);
|
||||
finally
|
||||
DB.Free;
|
||||
end;
|
||||
// stop program loop
|
||||
Terminate;
|
||||
end;
|
||||
|
||||
constructor TMyApplication.Create(TheOwner: TComponent);
|
||||
begin
|
||||
inherited Create(TheOwner);
|
||||
StopOnException:=True;
|
||||
end;
|
||||
|
||||
destructor TMyApplication.Destroy;
|
||||
begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TMyApplication.WriteHelp;
|
||||
begin
|
||||
{ add your help code here }
|
||||
writeln('Usage: ',ExeName,' -h');
|
||||
end;
|
||||
|
||||
var
|
||||
Application: TMyApplication;
|
||||
|
||||
{$IFDEF WINDOWS}{$R createusers.rc}{$ENDIF}
|
||||
|
||||
begin
|
||||
Application:=TMyApplication.Create(nil);
|
||||
Application.Title:='My Application';
|
||||
Application.Run;
|
||||
Application.Free;
|
||||
end.
|
||||
|
11
packages/fcl-web/examples/webdata/demo/extgrid-json.html
Normal file
11
packages/fcl-web/examples/webdata/demo/extgrid-json.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS JSON Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-json.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
95
packages/fcl-web/examples/webdata/demo/extgrid-json.js
Normal file
95
packages/fcl-web/examples/webdata/demo/extgrid-json.js
Normal file
@ -0,0 +1,95 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/Read/name/",
|
||||
update: "extgrid.cgi/Provider/Update/name/",
|
||||
create: "extgrid.cgi/Provider/Insert/name/",
|
||||
destroy: "extgrid.cgi/Provider/Delete/name/"
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.JsonReader ({
|
||||
root: "rows",
|
||||
idProperty: "ID",
|
||||
messageProperty: 'message', // Must be specified here
|
||||
fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.JsonWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
11
packages/fcl-web/examples/webdata/demo/extgrid-xml.html
Normal file
11
packages/fcl-web/examples/webdata/demo/extgrid-xml.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS XML Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-xml.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
98
packages/fcl-web/examples/webdata/demo/extgrid-xml.js
Normal file
98
packages/fcl-web/examples/webdata/demo/extgrid-xml.js
Normal file
@ -0,0 +1,98 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/Read/name/?format=xml",
|
||||
update: "extgrid.cgi/Provider/Update/name/?format=xml",
|
||||
create: "extgrid.cgi/Provider/Insert/name/?format=xml",
|
||||
destroy: "extgrid.cgi/Provider/Delete/name/?format=xml",
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.XmlReader ({
|
||||
totalProperty: "total",
|
||||
record: "row",
|
||||
idProperty: "ID",
|
||||
successProperty: "success",
|
||||
messageProperty: "message",
|
||||
fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.XmlWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID",
|
||||
root: "records"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
73
packages/fcl-web/examples/webdata/demo/extgrid.lpi
Normal file
73
packages/fcl-web/examples/webdata/demo/extgrid.lpi
Normal file
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="7"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<SaveClosedFiles Value="False"/>
|
||||
<SaveOnlyProjectUnits Value="True"/>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<Runnable Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<TargetFileExt Value=""/>
|
||||
<Icon Value="0"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<ProjectVersion Value=""/>
|
||||
</VersionInfo>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="3">
|
||||
<Item1>
|
||||
<PackageName Value="DBFLaz"/>
|
||||
<MinVersion Minor="1" Release="1" Valid="True"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="WebLaz"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="FCL"/>
|
||||
</Item3>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="extgrid.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="extgrid"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="FPWebModule1"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="wmusers"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="8"/>
|
||||
<Target>
|
||||
<Filename Value="extgrid.cgi"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)/"/>
|
||||
<OtherUnitFiles Value="/home/michael/public_html/extjs/"/>
|
||||
</SearchPaths>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
</CONFIG>
|
14
packages/fcl-web/examples/webdata/demo/extgrid.lpr
Normal file
14
packages/fcl-web/examples/webdata/demo/extgrid.lpr
Normal file
@ -0,0 +1,14 @@
|
||||
program extgrid;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
fpCGI, wmusers;
|
||||
|
||||
{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.Run;
|
||||
end.
|
||||
|
22
packages/fcl-web/examples/webdata/demo/lazwebdata.pas
Normal file
22
packages/fcl-web/examples/webdata/demo/lazwebdata.pas
Normal file
@ -0,0 +1,22 @@
|
||||
{ This file was automatically created by Lazarus. do not edit!
|
||||
This source is only used to compile and install the package.
|
||||
}
|
||||
|
||||
unit lazwebdata;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
reglazwebdata, extjsjson, extjsxml, fpextjs, fpwebdata, sqldbwebdata,
|
||||
LazarusPackageIntf;
|
||||
|
||||
implementation
|
||||
|
||||
procedure Register;
|
||||
begin
|
||||
RegisterUnit('reglazwebdata', @reglazwebdata.Register);
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterPackage('lazwebdata', @Register);
|
||||
end.
|
78
packages/fcl-web/examples/webdata/demo/reglazwebdata.pp
Normal file
78
packages/fcl-web/examples/webdata/demo/reglazwebdata.pp
Normal file
@ -0,0 +1,78 @@
|
||||
unit reglazwebdata;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, fpwebdata, sqldbwebdata, LazIDEIntf, ProjectIntf, fpextjs, extjsjson, extjsxml;
|
||||
|
||||
Type
|
||||
|
||||
{ TFileDescWebProviderDataModule }
|
||||
|
||||
TFileDescWebProviderDataModule = class(TFileDescPascalUnitWithResource)
|
||||
public
|
||||
constructor Create; override;
|
||||
function GetInterfaceUsesSection: string; override;
|
||||
function GetLocalizedName: string; override;
|
||||
function GetLocalizedDescription: string; override;
|
||||
function GetImplementationSource(const Filename, SourceName, ResourceName: string): string;override;
|
||||
end;
|
||||
|
||||
Procedure Register;
|
||||
|
||||
Var
|
||||
FileDescriptorWebProviderDataModule: TFileDescWebProviderDataModule;
|
||||
|
||||
implementation
|
||||
|
||||
uses FormEditingIntf;
|
||||
|
||||
constructor TFileDescWebProviderDataModule.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
Name:='Web DataProvider Module';
|
||||
ResourceClass:=TFPWebProviderDataModule;
|
||||
UseCreateFormStatements:=False;
|
||||
end;
|
||||
|
||||
function TFileDescWebProviderDataModule.GetInterfaceUsesSection: string;
|
||||
begin
|
||||
Result:=inherited GetInterfaceUsesSection;
|
||||
Result:=Result+', HTTPDefs, websession, fpHTTP, fpWeb, fpwebdata';
|
||||
end;
|
||||
|
||||
function TFileDescWebProviderDataModule.GetLocalizedName: string;
|
||||
begin
|
||||
Result:='Web DataProvider Module';
|
||||
end;
|
||||
|
||||
function TFileDescWebProviderDataModule.GetLocalizedDescription: string;
|
||||
begin
|
||||
Result:='WEB DataProvider Module'#13
|
||||
+'A datamodule to handle data requests for WEB (HTTP) applications using WebDataProvider components.';
|
||||
end;
|
||||
|
||||
function TFileDescWebProviderDataModule.GetImplementationSource(const Filename,
|
||||
SourceName, ResourceName: string): string;
|
||||
begin
|
||||
Result:=Inherited GetImplementationSource(FileName,SourceName,ResourceName);
|
||||
Result:=Result+' RegisterHTTPModule(''T'+ResourceName+''',T'+ResourceName+');'+LineEnding;
|
||||
end;
|
||||
|
||||
|
||||
Procedure Register;
|
||||
|
||||
begin
|
||||
RegisterComponents('fpWeb',[TWebdataInputAdaptor,TFPWebDataProvider, TSQLDBWebDataProvider,
|
||||
TExtJSJSonWebdataInputAdaptor,TExtJSJSONDataFormatter,
|
||||
TExtJSXMLWebdataInputAdaptor,TExtJSXMLDataFormatter]);
|
||||
FileDescriptorWebProviderDataModule:=TFileDescWebProviderDataModule.Create;
|
||||
RegisterProjectFileDescriptor(FileDescriptorWebProviderDataModule);
|
||||
FormEditingHook.RegisterDesignerBaseClass(TFPCustomWebProviderDataModule);
|
||||
FormEditingHook.RegisterDesignerBaseClass(TFPWebProviderDataModule);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
36
packages/fcl-web/examples/webdata/demo/wmusers.lfm
Normal file
36
packages/fcl-web/examples/webdata/demo/wmusers.lfm
Normal file
@ -0,0 +1,36 @@
|
||||
object FPWebModule1: TFPWebModule1
|
||||
OldCreateOrder = False
|
||||
Actions = <
|
||||
item
|
||||
Name = 'Read'
|
||||
Default = False
|
||||
OnRequest = TFPWebActions0Request
|
||||
end
|
||||
item
|
||||
Name = 'Insert'
|
||||
Default = False
|
||||
OnRequest = TFPWebActions1Request
|
||||
end
|
||||
item
|
||||
Name = 'Update'
|
||||
Default = False
|
||||
OnRequest = TFPWebActions2Request
|
||||
end
|
||||
item
|
||||
Name = 'Delete'
|
||||
Default = False
|
||||
OnRequest = TFPWebActions3Request
|
||||
end>
|
||||
CreateSession = False
|
||||
Height = 300
|
||||
HorizontalOffset = 696
|
||||
VerticalOffset = 366
|
||||
Width = 400
|
||||
object Dbf1: TDbf
|
||||
IndexDefs = <>
|
||||
TableLevel = 4
|
||||
FilterOptions = []
|
||||
left = 23
|
||||
top = 53
|
||||
end
|
||||
end
|
12
packages/fcl-web/examples/webdata/demo/wmusers.lrs
Normal file
12
packages/fcl-web/examples/webdata/demo/wmusers.lrs
Normal file
@ -0,0 +1,12 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFPWebModule1','FORMDATA',[
|
||||
'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#14'OldCreateOrder'#8#7'Actions'#14#1
|
||||
+#4'Name'#6#4'Read'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions0Request'#0#1
|
||||
+#4'Name'#6#6'Insert'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions1Request'#0
|
||||
+#1#4'Name'#6#6'Update'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions2Request'
|
||||
+#0#1#4'Name'#6#6'Delete'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions3Reques'
|
||||
+'t'#0#0#13'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3#184#2#14
|
||||
+'VerticalOffset'#3'n'#1#5'Width'#3#144#1#0#4'TDbf'#4'Dbf1'#9'IndexDefs'#14#0
|
||||
+#10'TableLevel'#2#4#13'FilterOptions'#11#0#4'left'#2#23#3'top'#2'5'#0#0#0
|
||||
]);
|
337
packages/fcl-web/examples/webdata/demo/wmusers.pp
Normal file
337
packages/fcl-web/examples/webdata/demo/wmusers.pp
Normal file
@ -0,0 +1,337 @@
|
||||
unit wmusers;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
|
||||
db, dbf, fpwebdata, fpextjs,extjsjson,extjsxml;
|
||||
|
||||
type
|
||||
|
||||
{ TFPWebModule1 }
|
||||
|
||||
TFPWebModule1 = class(TFPWebModule)
|
||||
Dbf1: TDbf;
|
||||
procedure TFPWebActions0Request(Sender: TObject; ARequest: TRequest;
|
||||
AResponse: TResponse; var Handled: Boolean);
|
||||
procedure TFPWebActions1Request(Sender: TObject; ARequest: TRequest;
|
||||
AResponse: TResponse; var Handled: Boolean);
|
||||
procedure TFPWebActions2Request(Sender: TObject; ARequest: TRequest;
|
||||
AResponse: TResponse; var Handled: Boolean);
|
||||
procedure TFPWebActions3Request(Sender: TObject; ARequest: TRequest;
|
||||
AResponse: TResponse; var Handled: Boolean);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
FPWebModule1: TFPWebModule1;
|
||||
|
||||
implementation
|
||||
{$define wmdebug}
|
||||
|
||||
{$ifdef wmdebug}
|
||||
uses dbugintf;
|
||||
{$endif}
|
||||
|
||||
{ TFPWebModule1 }
|
||||
|
||||
procedure TFPWebModule1.TFPWebActions0Request(Sender: TObject;
|
||||
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
|
||||
|
||||
Var
|
||||
PN : String;
|
||||
P : TFPWebDataProvider;
|
||||
F : TExtJSDataFormatter;
|
||||
DS : TDatasource;
|
||||
M : TMemoryStream;
|
||||
L : Text;
|
||||
|
||||
begin
|
||||
// Providername;
|
||||
PN:=ARequest.GetNextPathInfo;
|
||||
// P:=GetWebDataProvider(PN);
|
||||
P:=TFPWebDataProvider.Create(Self);
|
||||
try
|
||||
P.Adaptor:=TWebDataInputAdaptor.Create(Self);
|
||||
P.Adaptor.Request:=ARequest;
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
begin
|
||||
F:=TExtJSXMLDataFormatter.Create(Self);
|
||||
TExtJSXMLDataFormatter(F).TotalProperty:='total';
|
||||
AResponse.ContentType:='text/xml';
|
||||
end
|
||||
else
|
||||
F:=TExtJSJSONDataFormatter.Create(Self);
|
||||
{$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
|
||||
try
|
||||
DS:=TDatasource.Create(Self);
|
||||
try
|
||||
DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
|
||||
DS.Dataset:=DBf1;
|
||||
DBF1.Open;
|
||||
try
|
||||
F.ADaptor:=P.Adaptor;
|
||||
P.Datasource:=DS;
|
||||
P.Adaptor.Action:=wdaRead;
|
||||
P.ApplyParams;
|
||||
F.Provider:=P;
|
||||
M:=TMemoryStream.Create;
|
||||
try
|
||||
F.GetContent(ARequest,M,Handled);
|
||||
M.Position:=0;
|
||||
Response.ContentStream:=M;
|
||||
Response.SendResponse;
|
||||
Response.ContentStream:=Nil;
|
||||
With TFileStream.Create('/tmp/data.xml',fmCreate) do
|
||||
try
|
||||
CopyFrom(M,0);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
finally
|
||||
M.Free;
|
||||
end;
|
||||
finally
|
||||
DBF1.Close;
|
||||
end;
|
||||
finally
|
||||
DS.Free;
|
||||
end;
|
||||
finally
|
||||
F.Free;
|
||||
end;
|
||||
finally
|
||||
P.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFPWebModule1.TFPWebActions1Request(Sender: TObject;
|
||||
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
|
||||
Var
|
||||
PN : String;
|
||||
P : TFPWebDataProvider;
|
||||
F : TExtJSDataFormatter;
|
||||
DS : TDatasource;
|
||||
M : TMemoryStream;
|
||||
L : Text;
|
||||
|
||||
begin
|
||||
// Providername;
|
||||
PN:=ARequest.GetNextPathInfo;
|
||||
// P:=GetWebDataProvider(PN);
|
||||
P:=TFPWebDataProvider.Create(Self);
|
||||
try
|
||||
P.IDFieldName:='ID';
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
begin
|
||||
F:=TExtJSXMLDataFormatter.Create(Self);
|
||||
AResponse.ContentType:='text/xml';
|
||||
P.Adaptor:=TWebDataInputAdaptor.Create(Self);
|
||||
end
|
||||
else
|
||||
begin
|
||||
F:=TExtJSJSONDataFormatter.Create(Self);
|
||||
P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
|
||||
end;
|
||||
P.Adaptor.Request:=ARequest;
|
||||
{$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
|
||||
try
|
||||
DS:=TDatasource.Create(Self);
|
||||
try
|
||||
DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
|
||||
DS.Dataset:=DBf1;
|
||||
DBF1.Open;
|
||||
try
|
||||
F.ADaptor:=P.Adaptor;
|
||||
P.Datasource:=DS;
|
||||
P.Adaptor.Action:=wdaInsert;
|
||||
P.ApplyParams;
|
||||
F.Provider:=P;
|
||||
M:=TMemoryStream.Create;
|
||||
try
|
||||
F.GetContent(ARequest,M,Handled);
|
||||
M.Position:=0;
|
||||
Response.ContentStream:=M;
|
||||
Response.SendResponse;
|
||||
Response.ContentStream:=Nil;
|
||||
With TFileStream.Create('/tmp/data.xml',fmCreate) do
|
||||
try
|
||||
CopyFrom(M,0);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
finally
|
||||
M.Free;
|
||||
end;
|
||||
finally
|
||||
DBF1.Close;
|
||||
end;
|
||||
finally
|
||||
DS.Free;
|
||||
end;
|
||||
finally
|
||||
F.Free;
|
||||
end;
|
||||
finally
|
||||
P.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFPWebModule1.TFPWebActions2Request(Sender: TObject;
|
||||
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
|
||||
Var
|
||||
PN : String;
|
||||
P : TFPWebDataProvider;
|
||||
F : TExtJSDataFormatter;
|
||||
DS : TDatasource;
|
||||
M : TMemoryStream;
|
||||
L : Text;
|
||||
|
||||
begin
|
||||
// Providername;
|
||||
{$ifdef wmdebug} SendDebug('Update request received');{$endif}
|
||||
PN:=ARequest.GetNextPathInfo;
|
||||
// P:=GetWebDataProvider(PN);
|
||||
P:=TFPWebDataProvider.Create(Self);
|
||||
try
|
||||
P.IDFieldName:='ID';
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
begin
|
||||
{$ifdef wmdebug} SendDebug('Update request received in XML');{$endif}
|
||||
F:=TExtJSXMLDataFormatter.Create(Self);
|
||||
AResponse.ContentType:='text/xml';
|
||||
P.Adaptor:=TWebDataInputAdaptor.Create(Self);
|
||||
end
|
||||
else
|
||||
begin
|
||||
F:=TExtJSJSONDataFormatter.Create(Self);
|
||||
P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
|
||||
end;
|
||||
P.Adaptor.Request:=ARequest;
|
||||
{$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
|
||||
try
|
||||
DS:=TDatasource.Create(Self);
|
||||
try
|
||||
DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
|
||||
DS.Dataset:=DBf1;
|
||||
DBF1.Open;
|
||||
try
|
||||
F.ADaptor:=P.Adaptor;
|
||||
P.Datasource:=DS;
|
||||
P.Adaptor.Action:=wdaUpdate;
|
||||
P.ApplyParams;
|
||||
F.Provider:=P;
|
||||
M:=TMemoryStream.Create;
|
||||
try
|
||||
F.GetContent(ARequest,M,Handled);
|
||||
M.Position:=0;
|
||||
Response.ContentStream:=M;
|
||||
Response.SendResponse;
|
||||
Response.ContentStream:=Nil;
|
||||
With TFileStream.Create('/tmp/data.xml',fmCreate) do
|
||||
try
|
||||
CopyFrom(M,0);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
finally
|
||||
M.Free;
|
||||
end;
|
||||
finally
|
||||
DBF1.Close;
|
||||
end;
|
||||
finally
|
||||
DS.Free;
|
||||
end;
|
||||
finally
|
||||
F.Free;
|
||||
end;
|
||||
finally
|
||||
P.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFPWebModule1.TFPWebActions3Request(Sender: TObject;
|
||||
ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
|
||||
|
||||
Var
|
||||
PN : String;
|
||||
P : TFPWebDataProvider;
|
||||
F : TExtJSDataFormatter;
|
||||
DS : TDatasource;
|
||||
M : TMemoryStream;
|
||||
L : Text;
|
||||
|
||||
begin
|
||||
// Providername;
|
||||
PN:=ARequest.GetNextPathInfo;
|
||||
// P:=GetWebDataProvider(PN);
|
||||
P:=TFPWebDataProvider.Create(Self);
|
||||
try
|
||||
P.IDFieldName:='ID';
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
begin
|
||||
F:=TExtJSXMLDataFormatter.Create(Self);
|
||||
AResponse.ContentType:='text/xml';
|
||||
P.Adaptor:=TWebDataInputAdaptor.Create(Self);
|
||||
end
|
||||
else
|
||||
begin
|
||||
F:=TExtJSJSONDataFormatter.Create(Self);
|
||||
P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
|
||||
end;
|
||||
P.Adaptor.Request:=ARequest;
|
||||
{$ifdef wmdebug} SendDebug('className '+F.ClassName);{$endif}
|
||||
try
|
||||
DS:=TDatasource.Create(Self);
|
||||
try
|
||||
DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
|
||||
DS.Dataset:=DBf1;
|
||||
DBF1.Open;
|
||||
try
|
||||
F.ADaptor:=P.Adaptor;
|
||||
P.Datasource:=DS;
|
||||
P.Adaptor.Action:=wdaDelete;
|
||||
P.ApplyParams;
|
||||
F.Provider:=P;
|
||||
M:=TMemoryStream.Create;
|
||||
try
|
||||
F.GetContent(ARequest,M,Handled);
|
||||
M.Position:=0;
|
||||
Response.ContentStream:=M;
|
||||
Response.SendResponse;
|
||||
Response.ContentStream:=Nil;
|
||||
With TFileStream.Create('/tmp/data.xml',fmCreate) do
|
||||
try
|
||||
CopyFrom(M,0);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
finally
|
||||
M.Free;
|
||||
end;
|
||||
finally
|
||||
DBF1.Close;
|
||||
end;
|
||||
finally
|
||||
DS.Free;
|
||||
end;
|
||||
finally
|
||||
F.Free;
|
||||
end;
|
||||
finally
|
||||
P.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I wmusers.lrs}
|
||||
|
||||
RegisterHTTPModule('Provider', TFPWebModule1);
|
||||
end.
|
||||
|
11
packages/fcl-web/examples/webdata/demo2/extgrid-json.html
Normal file
11
packages/fcl-web/examples/webdata/demo2/extgrid-json.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS JSON Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-json.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
97
packages/fcl-web/examples/webdata/demo2/extgrid-json.js
Normal file
97
packages/fcl-web/examples/webdata/demo2/extgrid-json.js
Normal file
@ -0,0 +1,97 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/Name/Read/",
|
||||
update: "extgrid.cgi/Provider/Name/Update/",
|
||||
create: "extgrid.cgi/Provider/Name/Insert/",
|
||||
destroy: "extgrid.cgi/Provider/Name/Delete/"
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.JsonReader ({
|
||||
root: "rows",
|
||||
idProperty: "ID",
|
||||
messageProperty: 'message', // Must be specified here
|
||||
fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.JsonWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
11
packages/fcl-web/examples/webdata/demo2/extgrid-xml.html
Normal file
11
packages/fcl-web/examples/webdata/demo2/extgrid-xml.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS XML Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-xml.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
100
packages/fcl-web/examples/webdata/demo2/extgrid-xml.js
Normal file
100
packages/fcl-web/examples/webdata/demo2/extgrid-xml.js
Normal file
@ -0,0 +1,100 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/Name/Read/?format=xml",
|
||||
update: "extgrid.cgi/Provider/Name/Update/?format=xml",
|
||||
create: "extgrid.cgi/Provider/Name/Insert/?format=xml",
|
||||
destroy: "extgrid.cgi/Provider/Name/Delete/?format=xml",
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.XmlReader ({
|
||||
totalProperty: "total",
|
||||
record: "row",
|
||||
idProperty: "ID",
|
||||
successProperty: "success",
|
||||
messageProperty: "message",
|
||||
fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.XmlWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID",
|
||||
root: "records"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
84
packages/fcl-web/examples/webdata/demo2/extgrid.lpi
Normal file
84
packages/fcl-web/examples/webdata/demo2/extgrid.lpi
Normal file
@ -0,0 +1,84 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="7"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<SaveOnlyProjectUnits Value="True"/>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<Runnable Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<TargetFileExt Value=""/>
|
||||
<Title Value="ExtJS Grid demo for fpwebdata"/>
|
||||
<Icon Value="0"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<ProjectVersion Value=""/>
|
||||
</VersionInfo>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="5">
|
||||
<Item1>
|
||||
<PackageName Value="lazwebdata"/>
|
||||
<MinVersion Valid="True"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="DBFLaz"/>
|
||||
<MinVersion Minor="1" Release="1" Valid="True"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="WebLaz"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<PackageName Value="FCL"/>
|
||||
</Item5>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="extgrid.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="extgrid"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="FPWebModule1"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="wmusers"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="8"/>
|
||||
<Target>
|
||||
<Filename Value="extgrid.cgi"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)/"/>
|
||||
</SearchPaths>
|
||||
<CodeGeneration>
|
||||
<Optimizations>
|
||||
<OptimizationLevel Value="0"/>
|
||||
</Optimizations>
|
||||
</CodeGeneration>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
</CONFIG>
|
16
packages/fcl-web/examples/webdata/demo2/extgrid.lpr
Normal file
16
packages/fcl-web/examples/webdata/demo2/extgrid.lpr
Normal file
@ -0,0 +1,16 @@
|
||||
program extgrid;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$ifdef unix}cwstring,xmliconv,{$endif}
|
||||
fpCGI, wmusers;
|
||||
|
||||
{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
|
||||
|
||||
begin
|
||||
Application.Title:='ExtJS Grid demo for fpwebdata';
|
||||
Application.Initialize;
|
||||
Application.Run;
|
||||
end.
|
||||
|
46
packages/fcl-web/examples/webdata/demo2/wmusers.lfm
Normal file
46
packages/fcl-web/examples/webdata/demo2/wmusers.lfm
Normal file
@ -0,0 +1,46 @@
|
||||
object FPWebModule1: TFPWebModule1
|
||||
OnCreate = DataModuleCreate
|
||||
OldCreateOrder = False
|
||||
Actions = <>
|
||||
OnRequest = DataModuleRequest
|
||||
CreateSession = False
|
||||
Height = 300
|
||||
HorizontalOffset = 477
|
||||
VerticalOffset = 302
|
||||
Width = 400
|
||||
object Dbf1: TDbf
|
||||
FilePath = '/home/michael/public_html/extjs/demo2/'
|
||||
IndexDefs = <>
|
||||
TableName = 'users.dbf'
|
||||
TableLevel = 4
|
||||
FilterOptions = []
|
||||
left = 51
|
||||
top = 64
|
||||
end
|
||||
object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
|
||||
left = 146
|
||||
top = 63
|
||||
end
|
||||
object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
|
||||
left = 207
|
||||
top = 61
|
||||
end
|
||||
object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
|
||||
left = 151
|
||||
top = 101
|
||||
end
|
||||
object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
|
||||
left = 211
|
||||
top = 100
|
||||
end
|
||||
object FPWebDataProvider1: TFPWebDataProvider
|
||||
DataSource = Datasource1
|
||||
left = 105
|
||||
top = 89
|
||||
end
|
||||
object Datasource1: TDatasource
|
||||
DataSet = Dbf1
|
||||
left = 48
|
||||
top = 104
|
||||
end
|
||||
end
|
18
packages/fcl-web/examples/webdata/demo2/wmusers.lrs
Normal file
18
packages/fcl-web/examples/webdata/demo2/wmusers.lrs
Normal file
@ -0,0 +1,18 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFPWebModule1','FORMDATA',[
|
||||
'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#8'OnCreate'#7#16'DataModuleCreate'
|
||||
+#14'OldCreateOrder'#8#7'Actions'#14#0#9'OnRequest'#7#17'DataModuleRequest'#13
|
||||
+'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3#221#1#14'VerticalO'
|
||||
+'ffset'#3'.'#1#5'Width'#3#144#1#0#4'TDbf'#4'Dbf1'#8'FilePath'#6'&/home/micha'
|
||||
+'el/public_html/extjs/demo2/'#9'IndexDefs'#14#0#9'TableName'#6#9'users.dbf'
|
||||
+#10'TableLevel'#2#4#13'FilterOptions'#11#0#4'left'#2'3'#3'top'#2'@'#0#0#29'T'
|
||||
+'ExtJSJSonWebdataInputAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3
|
||||
+#146#0#3'top'#2'?'#0#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter'
|
||||
+'1'#4'left'#3#207#0#3'top'#2'='#0#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJ'
|
||||
+'SXMLWebdataInputAdaptor1'#4'left'#3#151#0#3'top'#2'e'#0#0#22'TExtJSXMLDataF'
|
||||
+'ormatter'#22'ExtJSXMLDataFormatter1'#4'left'#3#211#0#3'top'#2'd'#0#0#18'TFP'
|
||||
+'WebDataProvider'#18'FPWebDataProvider1'#10'DataSource'#7#11'Datasource1'#4
|
||||
+'left'#2'i'#3'top'#2'Y'#0#0#11'TDatasource'#11'Datasource1'#7'DataSet'#7#4'D'
|
||||
+'bf1'#4'left'#2'0'#3'top'#2'h'#0#0#0
|
||||
]);
|
86
packages/fcl-web/examples/webdata/demo2/wmusers.pp
Normal file
86
packages/fcl-web/examples/webdata/demo2/wmusers.pp
Normal file
@ -0,0 +1,86 @@
|
||||
unit wmusers;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, fpwebdata, extjsjson, extjsxml,
|
||||
HTTPDefs, websession, fpHTTP, fpWeb, dbf, db;
|
||||
|
||||
type
|
||||
|
||||
{ TFPWebModule1 }
|
||||
|
||||
TFPWebModule1 = class(TFPWebModule)
|
||||
Datasource1: TDatasource;
|
||||
Dbf1: TDbf;
|
||||
ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
|
||||
ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
|
||||
ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
|
||||
ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
|
||||
FPWebDataProvider1: TFPWebDataProvider;
|
||||
procedure DataModuleCreate(Sender: TObject);
|
||||
procedure DataModuleRequest(Sender: TObject; ARequest: TRequest;
|
||||
AResponse: TResponse; var Handled: Boolean);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
FPWebModule1: TFPWebModule1;
|
||||
|
||||
implementation
|
||||
|
||||
uses dbugintf;
|
||||
|
||||
{ TFPWebModule1 }
|
||||
|
||||
procedure TFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest;
|
||||
AResponse: TResponse; var Handled: Boolean);
|
||||
|
||||
Var
|
||||
CP : TCustomHTTPDataContentProducer;
|
||||
M : TMemoryStream;
|
||||
A : TCustomWebDataInputAdaptor;
|
||||
PN : String;
|
||||
|
||||
begin
|
||||
PN:=ARequest.GetNextPathInfo;
|
||||
If ARequest.QueryFields.values['format']='xml' then
|
||||
begin
|
||||
A:=ExtJSXMLWebdataInputAdaptor1;
|
||||
CP:=ExtJSXMLDataFormatter1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
A:=ExtJSJSONWebdataInputAdaptor1;
|
||||
cp:=ExtJSJSONDataFormatter1;
|
||||
end;
|
||||
FPWebDataProvider1.Adaptor:=A;
|
||||
CP.Adaptor:=A;
|
||||
CP.Adaptor.Request:=ARequest;
|
||||
CP.Provider:=FPWebDataProvider1;
|
||||
M:=TmemoryStream.Create;
|
||||
AResponse.ContentStream:=M;
|
||||
AResponse.ContentType:=CP.DataContentType;
|
||||
CP.GetContent(ARequest,M,Handled);
|
||||
M.Position:=0;
|
||||
AResponse.SendContent;
|
||||
end;
|
||||
|
||||
procedure TFPWebModule1.DataModuleCreate(Sender: TObject);
|
||||
begin
|
||||
DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
|
||||
DBF1.Open;
|
||||
With DBF1.FieldByname('ID') do
|
||||
ProviderFlags:=ProviderFlags+[pfInKey];
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I wmusers.lrs}
|
||||
RegisterHTTPModule('Provider', TFPWebModule1);
|
||||
end.
|
||||
|
11
packages/fcl-web/examples/webdata/demo3/extgrid-json.html
Normal file
11
packages/fcl-web/examples/webdata/demo3/extgrid-json.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS JSON Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-json.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
97
packages/fcl-web/examples/webdata/demo3/extgrid-json.js
Normal file
97
packages/fcl-web/examples/webdata/demo3/extgrid-json.js
Normal file
@ -0,0 +1,97 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/AName/Read/",
|
||||
update: "extgrid.cgi/Provider/AName/Update/",
|
||||
create: "extgrid.cgi/Provider/AName/Insert/",
|
||||
destroy: "extgrid.cgi/Provider/AName/Delete/"
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.JsonReader ({
|
||||
root: "rows",
|
||||
idProperty: "ID",
|
||||
messageProperty: 'message', // Must be specified here
|
||||
fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.JsonWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
11
packages/fcl-web/examples/webdata/demo3/extgrid-xml.html
Normal file
11
packages/fcl-web/examples/webdata/demo3/extgrid-xml.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS XML Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-xml.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
100
packages/fcl-web/examples/webdata/demo3/extgrid-xml.js
Normal file
100
packages/fcl-web/examples/webdata/demo3/extgrid-xml.js
Normal file
@ -0,0 +1,100 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/AName/Read/?format=xml",
|
||||
update: "extgrid.cgi/Provider/AName/Update/?format=xml",
|
||||
create: "extgrid.cgi/Provider/AName/Insert/?format=xml",
|
||||
destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml",
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.XmlReader ({
|
||||
totalProperty: "total",
|
||||
record: "row",
|
||||
idProperty: "ID",
|
||||
successProperty: "success",
|
||||
messageProperty: "message",
|
||||
fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.XmlWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID",
|
||||
root: "records"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
334
packages/fcl-web/examples/webdata/demo3/extgrid.lpi
Normal file
334
packages/fcl-web/examples/webdata/demo3/extgrid.lpi
Normal file
@ -0,0 +1,334 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="7"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<Runnable Value="False"/>
|
||||
</Flags>
|
||||
<MainUnit Value="0"/>
|
||||
<TargetFileExt Value=""/>
|
||||
<Icon Value="0"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<ActiveEditorIndexAtStart Value="3"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<ProjectVersion Value=""/>
|
||||
</VersionInfo>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="5">
|
||||
<Item1>
|
||||
<PackageName Value="DBFLaz"/>
|
||||
<MinVersion Minor="1" Release="1" Valid="True"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="lazwebdata"/>
|
||||
<MinVersion Valid="True"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="WebLaz"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<PackageName Value="FCL"/>
|
||||
</Item5>
|
||||
</RequiredPackages>
|
||||
<Units Count="16">
|
||||
<Unit0>
|
||||
<Filename Value="extgrid.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="extgrid"/>
|
||||
<CursorPos X="24" Y="6"/>
|
||||
<TopLine Value="1"/>
|
||||
<EditorIndex Value="3"/>
|
||||
<UsageCount Value="21"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="FPWebProviderDataModule1"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="wmusers"/>
|
||||
<CursorPos X="33" Y="60"/>
|
||||
<TopLine Value="27"/>
|
||||
<EditorIndex Value="2"/>
|
||||
<UsageCount Value="21"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="../demo2/wmusers.pp"/>
|
||||
<ComponentName Value="FPWebModule1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="wmusers"/>
|
||||
<CursorPos X="1" Y="80"/>
|
||||
<TopLine Value="45"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit2>
|
||||
<Unit3>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<ComponentName Value="FPWebProviderDataModule"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="fpwebdata"/>
|
||||
<CursorPos X="26" Y="1530"/>
|
||||
<TopLine Value="1526"/>
|
||||
<EditorIndex Value="4"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit3>
|
||||
<Unit4>
|
||||
<Filename Value="wmusers.lfm"/>
|
||||
<UsageCount Value="10"/>
|
||||
<SyntaxHighlighter Value="LFM"/>
|
||||
</Unit4>
|
||||
<Unit5>
|
||||
<Filename Value="../demo/reglazwebdata.pp"/>
|
||||
<UnitName Value="reglazwebdata"/>
|
||||
<CursorPos X="53" Y="50"/>
|
||||
<TopLine Value="34"/>
|
||||
<EditorIndex Value="0"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit5>
|
||||
<Unit6>
|
||||
<Filename Value="../../../fpc/rtl/objpas/classes/classesh.inc"/>
|
||||
<CursorPos X="17" Y="1833"/>
|
||||
<TopLine Value="1812"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit6>
|
||||
<Unit7>
|
||||
<Filename Value="../../../fpc/rtl/objpas/classes/dm.inc"/>
|
||||
<CursorPos X="3" Y="18"/>
|
||||
<TopLine Value="16"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit7>
|
||||
<Unit8>
|
||||
<Filename Value="../../../fpc/packages/fcl-web/src/fphttp.pp"/>
|
||||
<UnitName Value="fphttp"/>
|
||||
<CursorPos X="3" Y="105"/>
|
||||
<TopLine Value="108"/>
|
||||
<EditorIndex Value="5"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit8>
|
||||
<Unit9>
|
||||
<Filename Value="../../../fpc/packages/fcl-web/src/fpweb.pp"/>
|
||||
<UnitName Value="fpWeb"/>
|
||||
<CursorPos X="3" Y="421"/>
|
||||
<TopLine Value="419"/>
|
||||
<EditorIndex Value="6"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit9>
|
||||
<Unit10>
|
||||
<Filename Value="../../../fpc/lazarus/components/fpweb/weblazideintf.pp"/>
|
||||
<UnitName Value="WebLazIDEIntf"/>
|
||||
<CursorPos X="52" Y="173"/>
|
||||
<TopLine Value="145"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit10>
|
||||
<Unit11>
|
||||
<Filename Value="../../../fpc/lazarus/components/fpweb/lazweb.pp"/>
|
||||
<UnitName Value="lazweb"/>
|
||||
<CursorPos X="12" Y="7"/>
|
||||
<TopLine Value="1"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit11>
|
||||
<Unit12>
|
||||
<Filename Value="tralala.pp"/>
|
||||
<ComponentName Value="FPWebModule1"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="tralala"/>
|
||||
<CursorPos X="7" Y="11"/>
|
||||
<TopLine Value="1"/>
|
||||
<UsageCount Value="20"/>
|
||||
</Unit12>
|
||||
<Unit13>
|
||||
<Filename Value="../fpwebdata.lfm"/>
|
||||
<CursorPos X="1" Y="1"/>
|
||||
<TopLine Value="1"/>
|
||||
<UsageCount Value="10"/>
|
||||
<SyntaxHighlighter Value="LFM"/>
|
||||
</Unit13>
|
||||
<Unit14>
|
||||
<Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
|
||||
<UnitName Value="websession"/>
|
||||
<CursorPos X="20" Y="40"/>
|
||||
<TopLine Value="20"/>
|
||||
<EditorIndex Value="1"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit14>
|
||||
<Unit15>
|
||||
<Filename Value="../../../fpc/packages/fcl-xml/src/xmliconv.pas"/>
|
||||
<UnitName Value="xmliconv"/>
|
||||
<CursorPos X="1" Y="64"/>
|
||||
<TopLine Value="37"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit15>
|
||||
</Units>
|
||||
<JumpHistory Count="30" HistoryIndex="29">
|
||||
<Position1>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="385" Column="53" TopLine="364"/>
|
||||
</Position1>
|
||||
<Position2>
|
||||
<Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
|
||||
<Caret Line="381" Column="25" TopLine="345"/>
|
||||
</Position2>
|
||||
<Position3>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="385" Column="51" TopLine="364"/>
|
||||
</Position3>
|
||||
<Position4>
|
||||
<Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
|
||||
<Caret Line="27" Column="39" TopLine="20"/>
|
||||
</Position4>
|
||||
<Position5>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<Caret Line="34" Column="29" TopLine="3"/>
|
||||
</Position5>
|
||||
<Position6>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<Caret Line="48" Column="45" TopLine="15"/>
|
||||
</Position6>
|
||||
<Position7>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<Caret Line="49" Column="45" TopLine="14"/>
|
||||
</Position7>
|
||||
<Position8>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<Caret Line="50" Column="45" TopLine="14"/>
|
||||
</Position8>
|
||||
<Position9>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<Caret Line="17" Column="18" TopLine="14"/>
|
||||
</Position9>
|
||||
<Position10>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="395" Column="32" TopLine="387"/>
|
||||
</Position10>
|
||||
<Position11>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1066" Column="1" TopLine="1039"/>
|
||||
</Position11>
|
||||
<Position12>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1624" Column="20" TopLine="1606"/>
|
||||
</Position12>
|
||||
<Position13>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="955" Column="46" TopLine="933"/>
|
||||
</Position13>
|
||||
<Position14>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="956" Column="19" TopLine="933"/>
|
||||
</Position14>
|
||||
<Position15>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="957" Column="16" TopLine="933"/>
|
||||
</Position15>
|
||||
<Position16>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="971" Column="38" TopLine="933"/>
|
||||
</Position16>
|
||||
<Position17>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="975" Column="77" TopLine="954"/>
|
||||
</Position17>
|
||||
<Position18>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="985" Column="43" TopLine="954"/>
|
||||
</Position18>
|
||||
<Position19>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1013" Column="66" TopLine="992"/>
|
||||
</Position19>
|
||||
<Position20>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1017" Column="77" TopLine="992"/>
|
||||
</Position20>
|
||||
<Position21>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1042" Column="62" TopLine="1013"/>
|
||||
</Position21>
|
||||
<Position22>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1066" Column="35" TopLine="1055"/>
|
||||
</Position22>
|
||||
<Position23>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1646" Column="22" TopLine="1630"/>
|
||||
</Position23>
|
||||
<Position24>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<Caret Line="15" Column="41" TopLine="1"/>
|
||||
</Position24>
|
||||
<Position25>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1655" Column="28" TopLine="1632"/>
|
||||
</Position25>
|
||||
<Position26>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1587" Column="17" TopLine="1565"/>
|
||||
</Position26>
|
||||
<Position27>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="414" Column="15" TopLine="393"/>
|
||||
</Position27>
|
||||
<Position28>
|
||||
<Filename Value="extgrid.lpr"/>
|
||||
<Caret Line="6" Column="36" TopLine="1"/>
|
||||
</Position28>
|
||||
<Position29>
|
||||
<Filename Value="extgrid.lpr"/>
|
||||
<Caret Line="11" Column="17" TopLine="1"/>
|
||||
</Position29>
|
||||
<Position30>
|
||||
<Filename Value="extgrid.lpr"/>
|
||||
<Caret Line="6" Column="33" TopLine="1"/>
|
||||
</Position30>
|
||||
</JumpHistory>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="8"/>
|
||||
<Target>
|
||||
<Filename Value="extgrid.cgi"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)/"/>
|
||||
</SearchPaths>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
16
packages/fcl-web/examples/webdata/demo3/extgrid.lpr
Normal file
16
packages/fcl-web/examples/webdata/demo3/extgrid.lpr
Normal file
@ -0,0 +1,16 @@
|
||||
program extgrid;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$ifdef unix}cwstring, xmliconv,{$endif}
|
||||
fpCGI,
|
||||
wmusers;
|
||||
|
||||
{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.Run;
|
||||
end.
|
||||
|
9
packages/fcl-web/examples/webdata/demo3/tralala.lfm
Normal file
9
packages/fcl-web/examples/webdata/demo3/tralala.lfm
Normal file
@ -0,0 +1,9 @@
|
||||
object FPWebModule1: TFPWebModule1
|
||||
OldCreateOrder = False
|
||||
Actions = <>
|
||||
CreateSession = False
|
||||
Height = 300
|
||||
HorizontalOffset = 585
|
||||
VerticalOffset = 230
|
||||
Width = 400
|
||||
end
|
7
packages/fcl-web/examples/webdata/demo3/tralala.lrs
Normal file
7
packages/fcl-web/examples/webdata/demo3/tralala.lrs
Normal file
@ -0,0 +1,7 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFPWebModule1','FORMDATA',[
|
||||
'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#14'OldCreateOrder'#8#7'Actions'#14#0
|
||||
+#13'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3'I'#2#14'Vertica'
|
||||
+'lOffset'#3#230#0#5'Width'#3#144#1#0#0
|
||||
]);
|
28
packages/fcl-web/examples/webdata/demo3/tralala.pp
Normal file
28
packages/fcl-web/examples/webdata/demo3/tralala.pp
Normal file
@ -0,0 +1,28 @@
|
||||
unit tralala;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb;
|
||||
|
||||
type
|
||||
TFPWebModule1 = class(TFPWebModule)
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
FPWebModule1: TFPWebModule1;
|
||||
|
||||
implementation
|
||||
|
||||
initialization
|
||||
{$I tralala.lrs}
|
||||
|
||||
RegisterHTTPModule('TFPWebModule1', TFPWebModule1);
|
||||
end.
|
||||
|
49
packages/fcl-web/examples/webdata/demo3/wmusers.lfm
Normal file
49
packages/fcl-web/examples/webdata/demo3/wmusers.lfm
Normal file
@ -0,0 +1,49 @@
|
||||
object FPWebProviderDataModule1: TFPWebProviderDataModule1
|
||||
OnCreate = DataModuleCreate
|
||||
OldCreateOrder = False
|
||||
InputAdaptor = ExtJSJSonWebdataInputAdaptor1
|
||||
ContentProducer = ExtJSJSONDataFormatter1
|
||||
OnGetContentProducer = DataModuleGetContentProducer
|
||||
OnGetInputAdaptor = DataModuleGetInputAdaptor
|
||||
Height = 300
|
||||
HorizontalOffset = 539
|
||||
VerticalOffset = 447
|
||||
Width = 400
|
||||
object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
|
||||
left = 176
|
||||
top = 96
|
||||
end
|
||||
object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
|
||||
AllowPageSize = False
|
||||
left = 176
|
||||
top = 136
|
||||
end
|
||||
object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
|
||||
left = 216
|
||||
top = 96
|
||||
end
|
||||
object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
|
||||
AllowPageSize = False
|
||||
left = 216
|
||||
top = 136
|
||||
end
|
||||
object Dbf1: TDbf
|
||||
FilePath = '/home/michael/public_html/extjs/demo2/'
|
||||
IndexDefs = <>
|
||||
TableName = 'users.dbf'
|
||||
TableLevel = 7
|
||||
FilterOptions = []
|
||||
left = 79
|
||||
top = 92
|
||||
end
|
||||
object Datasource1: TDatasource
|
||||
DataSet = Dbf1
|
||||
left = 76
|
||||
top = 132
|
||||
end
|
||||
object AName: TFPWebDataProvider
|
||||
DataSource = Datasource1
|
||||
left = 133
|
||||
top = 117
|
||||
end
|
||||
end
|
21
packages/fcl-web/examples/webdata/demo3/wmusers.lrs
Normal file
21
packages/fcl-web/examples/webdata/demo3/wmusers.lrs
Normal file
@ -0,0 +1,21 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[
|
||||
'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#8'OnCreate'
|
||||
+#7#16'DataModuleCreate'#14'OldCreateOrder'#8#12'InputAdaptor'#7#29'ExtJSJSon'
|
||||
+'WebdataInputAdaptor1'#15'ContentProducer'#7#23'ExtJSJSONDataFormatter1'#20
|
||||
+'OnGetContentProducer'#7#28'DataModuleGetContentProducer'#17'OnGetInputAdapt'
|
||||
+'or'#7#25'DataModuleGetInputAdaptor'#6'Height'#3','#1#16'HorizontalOffset'#3
|
||||
+#27#2#14'VerticalOffset'#3#191#1#5'Width'#3#144#1#0#29'TExtJSJSonWebdataInpu'
|
||||
+'tAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#176#0#3'top'#2'`'#0#0
|
||||
+#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'#8
|
||||
+#4'left'#3#176#0#3'top'#3#136#0#0#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJ'
|
||||
+'SXMLWebdataInputAdaptor1'#4'left'#3#216#0#3'top'#2'`'#0#0#22'TExtJSXMLDataF'
|
||||
+'ormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'left'#3#216#0#3
|
||||
+'top'#3#136#0#0#0#4'TDbf'#4'Dbf1'#8'FilePath'#6'&/home/michael/public_html/e'
|
||||
+'xtjs/demo2/'#9'IndexDefs'#14#0#9'TableName'#6#9'users.dbf'#10'TableLevel'#2
|
||||
+#7#13'FilterOptions'#11#0#4'left'#2'O'#3'top'#2'\'#0#0#11'TDatasource'#11'Da'
|
||||
+'tasource1'#7'DataSet'#7#4'Dbf1'#4'left'#2'L'#3'top'#3#132#0#0#0#18'TFPWebDa'
|
||||
+'taProvider'#5'AName'#10'DataSource'#7#11'Datasource1'#4'left'#3#133#0#3'top'
|
||||
+#2'u'#0#0#0
|
||||
]);
|
68
packages/fcl-web/examples/webdata/demo3/wmusers.pp
Normal file
68
packages/fcl-web/examples/webdata/demo3/wmusers.pp
Normal file
@ -0,0 +1,68 @@
|
||||
unit wmusers;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
|
||||
dbf, db, fpwebdata, extjsjson, extjsxml;
|
||||
|
||||
type
|
||||
|
||||
{ TFPWebProviderDataModule1 }
|
||||
|
||||
TFPWebProviderDataModule1 = class(TFPWebProviderDataModule)
|
||||
Datasource1: TDatasource;
|
||||
Dbf1: TDbf;
|
||||
ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
|
||||
ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
|
||||
ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
|
||||
ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
|
||||
AName: TFPWebDataProvider;
|
||||
procedure DataModuleCreate(Sender: TObject);
|
||||
procedure DataModuleGetContentProducer(Sender: TObject;
|
||||
var AContentProducer: TCustomHTTPDataContentProducer);
|
||||
procedure DataModuleGetInputAdaptor(Sender: TObject;
|
||||
var AInputAdaptor: TCustomWebdataInputAdaptor);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
FPWebProviderDataModule1: TFPWebProviderDataModule1;
|
||||
|
||||
implementation
|
||||
|
||||
{ TFPWebProviderDataModule1 }
|
||||
|
||||
procedure TFPWebProviderDataModule1.DataModuleGetInputAdaptor(Sender: TObject;
|
||||
var AInputAdaptor: TCustomWebdataInputAdaptor);
|
||||
begin
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1;
|
||||
end;
|
||||
|
||||
procedure TFPWebProviderDataModule1.DataModuleGetContentProducer(
|
||||
Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
|
||||
begin
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
AContentProducer:=ExtJSXMLDataFormatter1;
|
||||
end;
|
||||
|
||||
procedure TFPWebProviderDataModule1.DataModuleCreate(Sender: TObject);
|
||||
begin
|
||||
DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
|
||||
DBF1.Open;
|
||||
With DBF1.FieldByname('ID') do
|
||||
ProviderFlags:=ProviderFlags+[pfInKey];
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I wmusers.lrs}
|
||||
|
||||
RegisterHTTPModule('Provider', TFPWebProviderDataModule1);
|
||||
end.
|
||||
|
27
packages/fcl-web/examples/webdata/demo4/dmusers.lfm
Normal file
27
packages/fcl-web/examples/webdata/demo4/dmusers.lfm
Normal file
@ -0,0 +1,27 @@
|
||||
object DataModule1: TDataModule1
|
||||
OnCreate = DataModuleCreate
|
||||
OldCreateOrder = False
|
||||
Height = 300
|
||||
HorizontalOffset = 356
|
||||
VerticalOffset = 360
|
||||
Width = 400
|
||||
object AName: TFPWebDataProvider
|
||||
DataSource = Datasource1
|
||||
left = 161
|
||||
top = 145
|
||||
end
|
||||
object Datasource1: TDatasource
|
||||
DataSet = Dbf1
|
||||
left = 104
|
||||
top = 160
|
||||
end
|
||||
object Dbf1: TDbf
|
||||
FilePath = '/home/michael/public_html/extjs/demo2/'
|
||||
IndexDefs = <>
|
||||
TableName = 'users.dbf'
|
||||
TableLevel = 7
|
||||
FilterOptions = []
|
||||
left = 107
|
||||
top = 120
|
||||
end
|
||||
end
|
12
packages/fcl-web/examples/webdata/demo4/dmusers.lrs
Normal file
12
packages/fcl-web/examples/webdata/demo4/dmusers.lrs
Normal file
@ -0,0 +1,12 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TDataModule1','FORMDATA',[
|
||||
'TPF0'#12'TDataModule1'#11'DataModule1'#8'OnCreate'#7#16'DataModuleCreate'#14
|
||||
+'OldCreateOrder'#8#6'Height'#3','#1#16'HorizontalOffset'#3'd'#1#14'VerticalO'
|
||||
+'ffset'#3'h'#1#5'Width'#3#144#1#0#18'TFPWebDataProvider'#5'AName'#10'DataSou'
|
||||
+'rce'#7#11'Datasource1'#4'left'#3#161#0#3'top'#3#145#0#0#0#11'TDatasource'#11
|
||||
+'Datasource1'#7'DataSet'#7#4'Dbf1'#4'left'#2'h'#3'top'#3#160#0#0#0#4'TDbf'#4
|
||||
+'Dbf1'#8'FilePath'#6'&/home/michael/public_html/extjs/demo2/'#9'IndexDefs'#14
|
||||
+#0#9'TableName'#6#9'users.dbf'#10'TableLevel'#2#7#13'FilterOptions'#11#0#4'l'
|
||||
+'eft'#2'k'#3'top'#2'x'#0#0#0
|
||||
]);
|
52
packages/fcl-web/examples/webdata/demo4/dmusers.pp
Normal file
52
packages/fcl-web/examples/webdata/demo4/dmusers.pp
Normal file
@ -0,0 +1,52 @@
|
||||
unit dmusers;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, db, dbf,
|
||||
fpwebdata;
|
||||
|
||||
type
|
||||
|
||||
{ TDataModule1 }
|
||||
|
||||
TDataModule1 = class(TDataModule)
|
||||
AName: TFPWebDataProvider;
|
||||
Datasource1: TDatasource;
|
||||
Dbf1: TDbf;
|
||||
procedure DataModuleCreate(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
DataModule1: TDataModule1;
|
||||
|
||||
implementation
|
||||
|
||||
uses dbugintf;
|
||||
{ TDataModule1 }
|
||||
|
||||
procedure TDataModule1.DataModuleCreate(Sender: TObject);
|
||||
begin
|
||||
senddebug('Creating datamodule 1 '+InTToStr(Ord(WebDataProviderManager.Registering)));
|
||||
If not WebDataProviderManager.Registering then
|
||||
begin
|
||||
DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
|
||||
DBF1.Open;
|
||||
With DBF1.FieldByname('ID') do
|
||||
ProviderFlags:=ProviderFlags+[pfInKey];
|
||||
DBF1.First;
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I dmusers.lrs}
|
||||
WebDataProviderManager.RegisterDatamodule(TDataModule1)
|
||||
|
||||
end.
|
||||
|
11
packages/fcl-web/examples/webdata/demo4/extgrid-json.html
Normal file
11
packages/fcl-web/examples/webdata/demo4/extgrid-json.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS JSON Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-json.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
97
packages/fcl-web/examples/webdata/demo4/extgrid-json.js
Normal file
97
packages/fcl-web/examples/webdata/demo4/extgrid-json.js
Normal file
@ -0,0 +1,97 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/JSONProvider/AName/Read/",
|
||||
update: "extgrid.cgi/JSONProvider/AName/Update/",
|
||||
create: "extgrid.cgi/JSONProvider/AName/Insert/",
|
||||
destroy: "extgrid.cgi/JSONProvider/AName/Delete/"
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.JsonReader ({
|
||||
root: "rows",
|
||||
idProperty: "ID",
|
||||
messageProperty: 'message', // Must be specified here
|
||||
fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.JsonWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
11
packages/fcl-web/examples/webdata/demo4/extgrid-xml.html
Normal file
11
packages/fcl-web/examples/webdata/demo4/extgrid-xml.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS XML Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-xml.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
100
packages/fcl-web/examples/webdata/demo4/extgrid-xml.js
Normal file
100
packages/fcl-web/examples/webdata/demo4/extgrid-xml.js
Normal file
@ -0,0 +1,100 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/XMLProvider/AName/Read/",
|
||||
update: "extgrid.cgi/XMLProvider/AName/Update/",
|
||||
create: "extgrid.cgi/XMLProvider/AName/Insert/",
|
||||
destroy: "extgrid.cgi/XMLProvider/AName/Delete/",
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.XmlReader ({
|
||||
totalProperty: "total",
|
||||
record: "row",
|
||||
idProperty: "ID",
|
||||
successProperty: "success",
|
||||
messageProperty: "message",
|
||||
fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.XmlWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID",
|
||||
root: "records"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
93
packages/fcl-web/examples/webdata/demo4/extgrid.lpi
Normal file
93
packages/fcl-web/examples/webdata/demo4/extgrid.lpi
Normal file
@ -0,0 +1,93 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="7"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<SaveClosedFiles Value="False"/>
|
||||
<SaveOnlyProjectUnits Value="True"/>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<Runnable Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<TargetFileExt Value=""/>
|
||||
<Icon Value="0"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<ProjectVersion Value=""/>
|
||||
</VersionInfo>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="5">
|
||||
<Item1>
|
||||
<PackageName Value="DBFLaz"/>
|
||||
<MinVersion Minor="1" Release="1" Valid="True"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="lazwebdata"/>
|
||||
<MinVersion Valid="True"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="WebLaz"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<PackageName Value="FCL"/>
|
||||
</Item5>
|
||||
</RequiredPackages>
|
||||
<Units Count="4">
|
||||
<Unit0>
|
||||
<Filename Value="extgrid.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="extgrid"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="wmjsonusers.pp"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="FPWebProviderDataModule1"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="wmjsonusers"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="wmxmlusers.pp"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="FPWebProviderDataModule2"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="wmxmlusers"/>
|
||||
</Unit2>
|
||||
<Unit3>
|
||||
<Filename Value="dmusers.pp"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="DataModule1"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="dmusers"/>
|
||||
</Unit3>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="8"/>
|
||||
<Target>
|
||||
<Filename Value="extgrid.cgi"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)/"/>
|
||||
</SearchPaths>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
</CONFIG>
|
15
packages/fcl-web/examples/webdata/demo4/extgrid.lpr
Normal file
15
packages/fcl-web/examples/webdata/demo4/extgrid.lpr
Normal file
@ -0,0 +1,15 @@
|
||||
program extgrid;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$ifdef unix}cwstring,xmliconv,{$endif}
|
||||
fpCGI, wmjsonusers, wmxmlusers, dmusers;
|
||||
|
||||
{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.Run;
|
||||
end.
|
||||
|
18
packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm
Normal file
18
packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm
Normal file
@ -0,0 +1,18 @@
|
||||
object FPWebProviderDataModule1: TFPWebProviderDataModule1
|
||||
OldCreateOrder = False
|
||||
InputAdaptor = ExtJSJSonWebdataInputAdaptor1
|
||||
ContentProducer = ExtJSJSONDataFormatter1
|
||||
Height = 300
|
||||
HorizontalOffset = 635
|
||||
VerticalOffset = 230
|
||||
Width = 400
|
||||
object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
|
||||
left = 204
|
||||
top = 124
|
||||
end
|
||||
object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
|
||||
AllowPageSize = False
|
||||
left = 204
|
||||
top = 164
|
||||
end
|
||||
end
|
11
packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs
Normal file
11
packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs
Normal file
@ -0,0 +1,11 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[
|
||||
'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#14'OldCreat'
|
||||
+'eOrder'#8#12'InputAdaptor'#7#29'ExtJSJSonWebdataInputAdaptor1'#15'ContentPr'
|
||||
+'oducer'#7#23'ExtJSJSONDataFormatter1'#6'Height'#3','#1#16'HorizontalOffset'
|
||||
+#3'{'#2#14'VerticalOffset'#3#230#0#5'Width'#3#144#1#0#29'TExtJSJSonWebdataIn'
|
||||
+'putAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#204#0#3'top'#2'|'#0
|
||||
+#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'
|
||||
+#8#4'left'#3#204#0#3'top'#3#164#0#0#0#0
|
||||
]);
|
34
packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp
Normal file
34
packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp
Normal file
@ -0,0 +1,34 @@
|
||||
unit wmjsonusers;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
|
||||
fpwebdata, extjsjson;
|
||||
|
||||
type
|
||||
|
||||
{ TFPWebProviderDataModule1 }
|
||||
|
||||
TFPWebProviderDataModule1 = class(TFPWebProviderDataModule)
|
||||
ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
|
||||
ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
FPWebProviderDataModule1: TFPWebProviderDataModule1;
|
||||
|
||||
implementation
|
||||
|
||||
initialization
|
||||
{$I wmjsonusers.lrs}
|
||||
|
||||
RegisterHTTPModule('JSONProvider', TFPWebProviderDataModule1);
|
||||
end.
|
||||
|
18
packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm
Normal file
18
packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm
Normal file
@ -0,0 +1,18 @@
|
||||
object FPWebProviderDataModule2: TFPWebProviderDataModule2
|
||||
OldCreateOrder = False
|
||||
InputAdaptor = ExtJSXMLWebdataInputAdaptor1
|
||||
ContentProducer = ExtJSXMLDataFormatter1
|
||||
Height = 300
|
||||
HorizontalOffset = 545
|
||||
VerticalOffset = 399
|
||||
Width = 400
|
||||
object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
|
||||
left = 244
|
||||
top = 124
|
||||
end
|
||||
object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
|
||||
AllowPageSize = False
|
||||
left = 244
|
||||
top = 164
|
||||
end
|
||||
end
|
11
packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs
Normal file
11
packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs
Normal file
@ -0,0 +1,11 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFPWebProviderDataModule2','FORMDATA',[
|
||||
'TPF0'#25'TFPWebProviderDataModule2'#24'FPWebProviderDataModule2'#14'OldCreat'
|
||||
+'eOrder'#8#12'InputAdaptor'#7#28'ExtJSXMLWebdataInputAdaptor1'#15'ContentPro'
|
||||
+'ducer'#7#22'ExtJSXMLDataFormatter1'#6'Height'#3','#1#16'HorizontalOffset'#3
|
||||
+'!'#2#14'VerticalOffset'#3#143#1#5'Width'#3#144#1#0#28'TExtJSXMLWebdataInput'
|
||||
+'Adaptor'#28'ExtJSXMLWebdataInputAdaptor1'#4'left'#3#244#0#3'top'#2'|'#0#0#22
|
||||
+'TExtJSXMLDataFormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'le'
|
||||
+'ft'#3#244#0#3'top'#3#164#0#0#0#0
|
||||
]);
|
34
packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp
Normal file
34
packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp
Normal file
@ -0,0 +1,34 @@
|
||||
unit wmxmlusers;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
|
||||
fpwebdata, extjsxml;
|
||||
|
||||
type
|
||||
|
||||
{ TFPWebProviderDataModule2 }
|
||||
|
||||
TFPWebProviderDataModule2 = class(TFPWebProviderDataModule)
|
||||
ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
|
||||
ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
FPWebProviderDataModule2: TFPWebProviderDataModule2;
|
||||
|
||||
implementation
|
||||
|
||||
initialization
|
||||
{$I wmxmlusers.lrs}
|
||||
|
||||
RegisterHTTPModule('XMLProvider', TFPWebProviderDataModule2);
|
||||
end.
|
||||
|
11
packages/fcl-web/examples/webdata/demo5/extgrid-json.html
Normal file
11
packages/fcl-web/examples/webdata/demo5/extgrid-json.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS JSON Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-json.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
97
packages/fcl-web/examples/webdata/demo5/extgrid-json.js
Normal file
97
packages/fcl-web/examples/webdata/demo5/extgrid-json.js
Normal file
@ -0,0 +1,97 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/AName/Read/",
|
||||
update: "extgrid.cgi/Provider/AName/Update/",
|
||||
create: "extgrid.cgi/Provider/AName/Insert/",
|
||||
destroy: "extgrid.cgi/Provider/AName/Delete/"
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.JsonReader ({
|
||||
root: "rows",
|
||||
idProperty: "ID",
|
||||
messageProperty: 'message', // Must be specified here
|
||||
fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.JsonWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
11
packages/fcl-web/examples/webdata/demo5/extgrid-xml.html
Normal file
11
packages/fcl-web/examples/webdata/demo5/extgrid-xml.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS XML Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-xml.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
100
packages/fcl-web/examples/webdata/demo5/extgrid-xml.js
Normal file
100
packages/fcl-web/examples/webdata/demo5/extgrid-xml.js
Normal file
@ -0,0 +1,100 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/AName/Read/?format=xml",
|
||||
update: "extgrid.cgi/Provider/AName/Update/?format=xml",
|
||||
create: "extgrid.cgi/Provider/AName/Insert/?format=xml",
|
||||
destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml",
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.XmlReader ({
|
||||
totalProperty: "total",
|
||||
record: "row",
|
||||
idProperty: "ID",
|
||||
successProperty: "success",
|
||||
messageProperty: "message",
|
||||
fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.XmlWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID",
|
||||
root: "records"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
75
packages/fcl-web/examples/webdata/demo5/extgrid.lpi
Normal file
75
packages/fcl-web/examples/webdata/demo5/extgrid.lpi
Normal file
@ -0,0 +1,75 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="7"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<SaveClosedFiles Value="False"/>
|
||||
<SaveOnlyProjectUnits Value="True"/>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<Runnable Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<TargetFileExt Value=""/>
|
||||
<Icon Value="0"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<ProjectVersion Value=""/>
|
||||
</VersionInfo>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="4">
|
||||
<Item1>
|
||||
<PackageName Value="lazwebdata"/>
|
||||
<MinVersion Valid="True"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="WebLaz"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<PackageName Value="FCL"/>
|
||||
</Item4>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="extgrid.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="extgrid"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="FPWebProviderDataModule2"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="wmusers"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="8"/>
|
||||
<Target>
|
||||
<Filename Value="extgrid.cgi"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)/"/>
|
||||
</SearchPaths>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
</CONFIG>
|
15
packages/fcl-web/examples/webdata/demo5/extgrid.lpr
Normal file
15
packages/fcl-web/examples/webdata/demo5/extgrid.lpr
Normal file
@ -0,0 +1,15 @@
|
||||
program extgrid;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$ifdef unix}cwstring, xmliconv,{$endif}
|
||||
fpCGI, wmusers;
|
||||
|
||||
{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
Application.Run;
|
||||
end.
|
||||
|
29
packages/fcl-web/examples/webdata/demo5/wmusers.lfm
Normal file
29
packages/fcl-web/examples/webdata/demo5/wmusers.lfm
Normal file
@ -0,0 +1,29 @@
|
||||
object FPWebProviderDataModule2: TFPWebProviderDataModule2
|
||||
OldCreateOrder = False
|
||||
InputAdaptor = ExtJSJSonWebdataInputAdaptor1
|
||||
ContentProducer = ExtJSJSONDataFormatter1
|
||||
OnGetContentProducer = DataModuleGetContentProducer
|
||||
OnGetInputAdaptor = DataModuleGetInputAdaptor
|
||||
Height = 300
|
||||
HorizontalOffset = 538
|
||||
VerticalOffset = 460
|
||||
Width = 400
|
||||
object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
|
||||
left = 204
|
||||
top = 124
|
||||
end
|
||||
object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
|
||||
left = 244
|
||||
top = 124
|
||||
end
|
||||
object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
|
||||
AllowPageSize = False
|
||||
left = 244
|
||||
top = 164
|
||||
end
|
||||
object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
|
||||
AllowPageSize = False
|
||||
left = 204
|
||||
top = 164
|
||||
end
|
||||
end
|
15
packages/fcl-web/examples/webdata/demo5/wmusers.lrs
Normal file
15
packages/fcl-web/examples/webdata/demo5/wmusers.lrs
Normal file
@ -0,0 +1,15 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFPWebProviderDataModule2','FORMDATA',[
|
||||
'TPF0'#25'TFPWebProviderDataModule2'#24'FPWebProviderDataModule2'#14'OldCreat'
|
||||
+'eOrder'#8#12'InputAdaptor'#7#29'ExtJSJSonWebdataInputAdaptor1'#15'ContentPr'
|
||||
+'oducer'#7#23'ExtJSJSONDataFormatter1'#20'OnGetContentProducer'#7#28'DataMod'
|
||||
+'uleGetContentProducer'#17'OnGetInputAdaptor'#7#25'DataModuleGetInputAdaptor'
|
||||
+#6'Height'#3','#1#16'HorizontalOffset'#3#26#2#14'VerticalOffset'#3#204#1#5'W'
|
||||
+'idth'#3#144#1#0#29'TExtJSJSonWebdataInputAdaptor'#29'ExtJSJSonWebdataInputA'
|
||||
+'daptor1'#4'left'#3#204#0#3'top'#2'|'#0#0#28'TExtJSXMLWebdataInputAdaptor'#28
|
||||
+'ExtJSXMLWebdataInputAdaptor1'#4'left'#3#244#0#3'top'#2'|'#0#0#22'TExtJSXMLD'
|
||||
+'ataFormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'left'#3#244#0
|
||||
+#3'top'#3#164#0#0#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'
|
||||
+#13'AllowPageSize'#8#4'left'#3#204#0#3'top'#3#164#0#0#0#0
|
||||
]);
|
85
packages/fcl-web/examples/webdata/demo5/wmusers.pp
Normal file
85
packages/fcl-web/examples/webdata/demo5/wmusers.pp
Normal file
@ -0,0 +1,85 @@
|
||||
unit wmusers;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
|
||||
db, dbf, fpwebdata, extjsjson, extjsxml;
|
||||
|
||||
type
|
||||
|
||||
{ TFPWebProviderDataModule2 }
|
||||
|
||||
TFPWebProviderDataModule2 = class(TFPWebProviderDataModule)
|
||||
ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
|
||||
ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
|
||||
ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
|
||||
ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
|
||||
procedure DataModuleGetContentProducer(Sender: TObject;
|
||||
var AContentProducer: TCustomHTTPDataContentProducer);
|
||||
procedure DataModuleGetInputAdaptor(Sender: TObject;
|
||||
var AInputAdaptor: TCustomWebdataInputAdaptor);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
FPWebProviderDataModule2: TFPWebProviderDataModule2;
|
||||
|
||||
implementation
|
||||
|
||||
Type
|
||||
|
||||
{ TDBFWebDataProvider }
|
||||
|
||||
TDBFWebDataProvider = Class(TFPCustomWebDataProvider)
|
||||
FDBF : TDBF;
|
||||
Public
|
||||
Constructor Create(AOwner : TComponent); override;
|
||||
Function GetDataset : TDataset; override;
|
||||
end;
|
||||
|
||||
{ TDBFWebDataProvider }
|
||||
|
||||
constructor TDBFWebDataProvider.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FDBF:=TDBF.Create(Self);
|
||||
FDBF.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
|
||||
FDBF.Open;
|
||||
With FDBF.FieldByname('ID') do
|
||||
ProviderFlags:=ProviderFlags+[pfInKey];
|
||||
end;
|
||||
|
||||
function TDBFWebDataProvider.GetDataset: TDataset;
|
||||
begin
|
||||
Result:=FDBF;
|
||||
end;
|
||||
|
||||
{ TFPWebProviderDataModule2 }
|
||||
|
||||
procedure TFPWebProviderDataModule2.DataModuleGetInputAdaptor(Sender: TObject;
|
||||
var AInputAdaptor: TCustomWebdataInputAdaptor);
|
||||
begin
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1;
|
||||
end;
|
||||
|
||||
procedure TFPWebProviderDataModule2.DataModuleGetContentProducer(
|
||||
Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
|
||||
begin
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
AContentProducer:=ExtJSXMLDataFormatter1;
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I wmusers.lrs}
|
||||
|
||||
RegisterHTTPModule('Provider', TFPWebProviderDataModule2);
|
||||
WebDataProviderManager.RegisterProvider('AName',TDBFWebDataProvider);
|
||||
end.
|
||||
|
11
packages/fcl-web/examples/webdata/demo6/extgrid-json.html
Normal file
11
packages/fcl-web/examples/webdata/demo6/extgrid-json.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS JSON Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-json.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
97
packages/fcl-web/examples/webdata/demo6/extgrid-json.js
Normal file
97
packages/fcl-web/examples/webdata/demo6/extgrid-json.js
Normal file
@ -0,0 +1,97 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/AName/Read/",
|
||||
update: "extgrid.cgi/Provider/AName/Update/",
|
||||
create: "extgrid.cgi/Provider/AName/Insert/",
|
||||
destroy: "extgrid.cgi/Provider/AName/Delete/"
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.JsonReader ({
|
||||
root: "rows",
|
||||
idProperty: "ID",
|
||||
messageProperty: 'message', // Must be specified here
|
||||
fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.JsonWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
11
packages/fcl-web/examples/webdata/demo6/extgrid-xml.html
Normal file
11
packages/fcl-web/examples/webdata/demo6/extgrid-xml.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>ExtJS XML Data demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
|
||||
<script src="/ext/adapter/ext/ext-base.js"></script>
|
||||
<script src="/ext/ext-all-debug.js"></script>
|
||||
<script src="extgrid-xml.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
100
packages/fcl-web/examples/webdata/demo6/extgrid-xml.js
Normal file
100
packages/fcl-web/examples/webdata/demo6/extgrid-xml.js
Normal file
@ -0,0 +1,100 @@
|
||||
Ext.ns('FPC');
|
||||
|
||||
FPC.ShowPage = function () {
|
||||
var myproxy = new Ext.data.HttpProxy ( {
|
||||
api : {
|
||||
read: "extgrid.cgi/Provider/AName/Read/?format=xml",
|
||||
update: "extgrid.cgi/Provider/AName/Update/?format=xml",
|
||||
create: "extgrid.cgi/Provider/AName/Insert/?format=xml",
|
||||
destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml",
|
||||
}
|
||||
});
|
||||
var myreader = new Ext.data.XmlReader ({
|
||||
totalProperty: "total",
|
||||
record: "row",
|
||||
idProperty: "ID",
|
||||
successProperty: "success",
|
||||
messageProperty: "message",
|
||||
fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
|
||||
});
|
||||
var mywriter = new Ext.data.XmlWriter({
|
||||
encode: true,
|
||||
writeAllFields: true,
|
||||
idProperty: "ID",
|
||||
root: "records"
|
||||
});
|
||||
var data = new Ext.data.Store({
|
||||
proxy: myproxy,
|
||||
reader: myreader,
|
||||
writer: mywriter,
|
||||
autoSave: false,
|
||||
idProperty: "ID",
|
||||
});
|
||||
// Listen to errors.
|
||||
data.addListener('exception', function(proxy, type, action, options, res) {
|
||||
if (type === 'remote') {
|
||||
Ext.Msg.show({
|
||||
title: 'REMOTE EXCEPTION',
|
||||
msg: res.message,
|
||||
icon: Ext.MessageBox.ERROR,
|
||||
buttons: Ext.Msg.OK
|
||||
});
|
||||
}
|
||||
});
|
||||
data.load({ params:{start: 0, limit: 30}});
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
renderTo: Ext.getBody(),
|
||||
frame: true,
|
||||
title: "Known users",
|
||||
height: 600,
|
||||
width: 800,
|
||||
store: data,
|
||||
columns: [
|
||||
{header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
|
||||
{header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
|
||||
{header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
|
||||
],
|
||||
bbar: new Ext.PagingToolbar({
|
||||
pageSize: 30,
|
||||
store: data,
|
||||
displayInfo: true
|
||||
}),
|
||||
tbar : [{
|
||||
text: 'Add',
|
||||
iconCls: 'icon-add',
|
||||
handler: function(btn, ev) {
|
||||
var u = new grid.store.recordType();
|
||||
grid.stopEditing();
|
||||
grid.store.insert(0, u);
|
||||
grid.startEditing(0, 1);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Delete',
|
||||
iconCls: 'icon-delete',
|
||||
handler: function(btn, ev) {
|
||||
var index = grid.getSelectionModel().getSelectedCell();
|
||||
if (!index) {
|
||||
return false;
|
||||
}
|
||||
var rec = grid.store.getAt(index[0]);
|
||||
grid.store.remove(rec);
|
||||
},
|
||||
scope: grid
|
||||
}, '-', {
|
||||
text: 'Save',
|
||||
iconCls: 'icon-save',
|
||||
handler: function(btn, ev) {
|
||||
grid.store.save();
|
||||
},
|
||||
scope: grid
|
||||
}
|
||||
]
|
||||
// F.ContentToStream(M);
|
||||
|
||||
});
|
||||
grid.show();
|
||||
}
|
||||
Ext.onReady(FPC.ShowPage);
|
4
packages/fcl-web/examples/webdata/demo6/extgrid.ini
Normal file
4
packages/fcl-web/examples/webdata/demo6/extgrid.ini
Normal file
@ -0,0 +1,4 @@
|
||||
[Database]
|
||||
Path=/wisa/firebird/fpcusers.fb
|
||||
UserName=WISASOFT
|
||||
Password=SysteemD
|
362
packages/fcl-web/examples/webdata/demo6/extgrid.lpi
Normal file
362
packages/fcl-web/examples/webdata/demo6/extgrid.lpi
Normal file
@ -0,0 +1,362 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="7"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<Runnable Value="False"/>
|
||||
</Flags>
|
||||
<MainUnit Value="0"/>
|
||||
<TargetFileExt Value=""/>
|
||||
<Title Value="SQLDBWebDataProvider demo using ExtJS"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<Icon Value="0"/>
|
||||
<ActiveWindowIndexAtStart Value="0"/>
|
||||
</General>
|
||||
<VersionInfo>
|
||||
<StringTable Comments="" CompanyName="" FileDescription="" FileVersion="0.0.0.0" InternalName="" LegalCopyright="" LegalTrademarks="" OriginalFilename="" ProductName="" ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
|
||||
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="5">
|
||||
<Item1>
|
||||
<PackageName Value="SQLDBLaz"/>
|
||||
<MinVersion Major="1" Release="1" Valid="True"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="lazwebdata"/>
|
||||
<MinVersion Valid="True"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="WebLaz"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<PackageName Value="FCL"/>
|
||||
</Item5>
|
||||
</RequiredPackages>
|
||||
<Units Count="16">
|
||||
<Unit0>
|
||||
<Filename Value="extgrid.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="extgrid"/>
|
||||
<EditorIndex Value="12"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="33" Y="8"/>
|
||||
<UsageCount Value="20"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="wmusers.pp"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="FPWebProviderDataModule1"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="wmusers"/>
|
||||
<EditorIndex Value="0"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="78"/>
|
||||
<CursorPos X="29" Y="86"/>
|
||||
<UsageCount Value="20"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
<Filename Value="../demo5/wmusers.pp"/>
|
||||
<ComponentName Value="FPWebProviderDataModule2"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="wmusers"/>
|
||||
<TopLine Value="44"/>
|
||||
<CursorPos X="1" Y="70"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit2>
|
||||
<Unit3>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<ComponentName Value="FPWebProviderDataModule"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="fpwebdata"/>
|
||||
<IsVisibleTab Value="True"/>
|
||||
<EditorIndex Value="1"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1584"/>
|
||||
<CursorPos X="8" Y="1600"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit3>
|
||||
<Unit4>
|
||||
<Filename Value="../sqldbwebdata.pp"/>
|
||||
<UnitName Value="sqldbwebdata"/>
|
||||
<EditorIndex Value="3"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="49"/>
|
||||
<CursorPos X="2" Y="70"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit4>
|
||||
<Unit5>
|
||||
<Filename Value="../extjsjson.pp"/>
|
||||
<UnitName Value="extjsjson"/>
|
||||
<EditorIndex Value="11"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="25"/>
|
||||
<CursorPos X="3" Y="45"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit5>
|
||||
<Unit6>
|
||||
<Filename Value="../extjsxml.pp"/>
|
||||
<UnitName Value="extjsxml"/>
|
||||
<EditorIndex Value="4"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="49"/>
|
||||
<CursorPos X="13" Y="54"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit6>
|
||||
<Unit7>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<UnitName Value="wstmodule"/>
|
||||
<EditorIndex Value="5"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="25"/>
|
||||
<CursorPos X="48" Y="22"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit7>
|
||||
<Unit8>
|
||||
<Filename Value="../../../fpc/packages/fcl-web/src/fphttp.pp"/>
|
||||
<UnitName Value="fphttp"/>
|
||||
<EditorIndex Value="8"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="109"/>
|
||||
<CursorPos X="92" Y="100"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit8>
|
||||
<Unit9>
|
||||
<Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
|
||||
<UnitName Value="websession"/>
|
||||
<EditorIndex Value="10"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="3" Y="27"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit9>
|
||||
<Unit10>
|
||||
<Filename Value="../../../fpc/packages/fcl-web/src/httpdefs.pp"/>
|
||||
<UnitName Value="HTTPDefs"/>
|
||||
<EditorIndex Value="7"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="264"/>
|
||||
<CursorPos X="18" Y="285"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit10>
|
||||
<Unit11>
|
||||
<Filename Value="../../../source/wst/tests/apache_module/wst_apache_binding.pas"/>
|
||||
<UnitName Value="wst_apache_binding"/>
|
||||
<TopLine Value="142"/>
|
||||
<CursorPos X="1" Y="178"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit11>
|
||||
<Unit12>
|
||||
<Filename Value="../../../fpc/packages/fcl-web/src/fpweb.pp"/>
|
||||
<UnitName Value="fpWeb"/>
|
||||
<EditorIndex Value="2"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="412"/>
|
||||
<CursorPos X="18" Y="452"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit12>
|
||||
<Unit13>
|
||||
<Filename Value="../../../Documents/source/wst/wst_global.inc"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="30" Y="19"/>
|
||||
<UsageCount Value="10"/>
|
||||
</Unit13>
|
||||
<Unit14>
|
||||
<Filename Value="../../wst/regwstmodule.pp"/>
|
||||
<UnitName Value="regwstmodule"/>
|
||||
<EditorIndex Value="6"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="1"/>
|
||||
<CursorPos X="2" Y="1"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit14>
|
||||
<Unit15>
|
||||
<Filename Value="../demo/reglazwebdata.pp"/>
|
||||
<UnitName Value="reglazwebdata"/>
|
||||
<EditorIndex Value="9"/>
|
||||
<WindowIndex Value="0"/>
|
||||
<TopLine Value="37"/>
|
||||
<CursorPos X="1" Y="73"/>
|
||||
<UsageCount Value="10"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit15>
|
||||
</Units>
|
||||
<JumpHistory Count="30" HistoryIndex="29">
|
||||
<Position1>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="135" Column="3" TopLine="115"/>
|
||||
</Position1>
|
||||
<Position2>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="130" Column="16" TopLine="109"/>
|
||||
</Position2>
|
||||
<Position3>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="148" Column="1" TopLine="127"/>
|
||||
</Position3>
|
||||
<Position4>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="122" Column="92" TopLine="121"/>
|
||||
</Position4>
|
||||
<Position5>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="137" Column="1" TopLine="122"/>
|
||||
</Position5>
|
||||
<Position6>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="169" Column="26" TopLine="135"/>
|
||||
</Position6>
|
||||
<Position7>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="34" Column="1" TopLine="1"/>
|
||||
</Position7>
|
||||
<Position8>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="123" Column="17" TopLine="92"/>
|
||||
</Position8>
|
||||
<Position9>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="128" Column="36" TopLine="104"/>
|
||||
</Position9>
|
||||
<Position10>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="46" Column="48" TopLine="25"/>
|
||||
</Position10>
|
||||
<Position11>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="147" Column="1" TopLine="126"/>
|
||||
</Position11>
|
||||
<Position12>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="138" Column="6" TopLine="115"/>
|
||||
</Position12>
|
||||
<Position13>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="150" Column="1" TopLine="137"/>
|
||||
</Position13>
|
||||
<Position14>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="151" Column="3" TopLine="130"/>
|
||||
</Position14>
|
||||
<Position15>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="15" Column="1" TopLine="1"/>
|
||||
</Position15>
|
||||
<Position16>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="177" Column="37" TopLine="145"/>
|
||||
</Position16>
|
||||
<Position17>
|
||||
<Filename Value="../../wst/wstmodule.pas"/>
|
||||
<Caret Line="58" Column="1" TopLine="22"/>
|
||||
</Position17>
|
||||
<Position18>
|
||||
<Filename Value="../demo/reglazwebdata.pp"/>
|
||||
<Caret Line="17" Column="15" TopLine="1"/>
|
||||
</Position18>
|
||||
<Position19>
|
||||
<Filename Value="../../wst/regwstmodule.pp"/>
|
||||
<Caret Line="55" Column="79" TopLine="16"/>
|
||||
</Position19>
|
||||
<Position20>
|
||||
<Filename Value="../../wst/regwstmodule.pp"/>
|
||||
<Caret Line="26" Column="3" TopLine="1"/>
|
||||
</Position20>
|
||||
<Position21>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="446" Column="14" TopLine="433"/>
|
||||
</Position21>
|
||||
<Position22>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="969" Column="79" TopLine="954"/>
|
||||
</Position22>
|
||||
<Position23>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1171" Column="41" TopLine="1154"/>
|
||||
</Position23>
|
||||
<Position24>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1281" Column="32" TopLine="1280"/>
|
||||
</Position24>
|
||||
<Position25>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1296" Column="30" TopLine="1282"/>
|
||||
</Position25>
|
||||
<Position26>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="327" Column="14" TopLine="324"/>
|
||||
</Position26>
|
||||
<Position27>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1296" Column="51" TopLine="1280"/>
|
||||
</Position27>
|
||||
<Position28>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1594" Column="19" TopLine="1579"/>
|
||||
</Position28>
|
||||
<Position29>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1606" Column="58" TopLine="1591"/>
|
||||
</Position29>
|
||||
<Position30>
|
||||
<Filename Value="../fpwebdata.pp"/>
|
||||
<Caret Line="1607" Column="1" TopLine="1592"/>
|
||||
</Position30>
|
||||
</JumpHistory>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="8"/>
|
||||
<Target>
|
||||
<Filename Value="extgrid.cgi"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)/"/>
|
||||
</SearchPaths>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
16
packages/fcl-web/examples/webdata/demo6/extgrid.lpr
Normal file
16
packages/fcl-web/examples/webdata/demo6/extgrid.lpr
Normal file
@ -0,0 +1,16 @@
|
||||
program extgrid;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$ifdef unix}cwstring,xmliconv,{$endif}
|
||||
fpCGI, wmusers;
|
||||
|
||||
{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
|
||||
|
||||
begin
|
||||
Application.Title:='SQLDBWebDataProvider demo using ExtJS';
|
||||
Application.Initialize;
|
||||
Application.Run;
|
||||
end.
|
||||
|
131
packages/fcl-web/examples/webdata/demo6/wmusers.lfm
Normal file
131
packages/fcl-web/examples/webdata/demo6/wmusers.lfm
Normal file
@ -0,0 +1,131 @@
|
||||
object FPWebProviderDataModule1: TFPWebProviderDataModule1
|
||||
OnCreate = DataModuleCreate
|
||||
OldCreateOrder = False
|
||||
InputAdaptor = ExtJSJSonWebdataInputAdaptor1
|
||||
ContentProducer = ExtJSJSONDataFormatter1
|
||||
OnGetContentProducer = DataModuleGetContentProducer
|
||||
OnGetInputAdaptor = DataModuleGetInputAdaptor
|
||||
Height = 300
|
||||
HorizontalOffset = 635
|
||||
VerticalOffset = 230
|
||||
Width = 400
|
||||
object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
|
||||
left = 232
|
||||
top = 152
|
||||
end
|
||||
object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
|
||||
left = 272
|
||||
top = 152
|
||||
end
|
||||
object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
|
||||
AllowPageSize = False
|
||||
left = 272
|
||||
top = 192
|
||||
end
|
||||
object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
|
||||
AllowPageSize = False
|
||||
left = 232
|
||||
top = 192
|
||||
end
|
||||
object ANAME: TSQLDBWebDataProvider
|
||||
SelectSQL.Strings = (
|
||||
'SELECT * FROM FPCUSERS'
|
||||
)
|
||||
UpdateSQL.Strings = (
|
||||
'UPDATE FPCUSERS SET'
|
||||
' NAME=:NAME,'
|
||||
' LOGIN=:LOGIN,'
|
||||
' EMAIL=:EMAIL,'
|
||||
' LASTLOGIN=:LASTLOGIN'
|
||||
'WHERE'
|
||||
' (ID=:ID)'
|
||||
)
|
||||
DeleteSQL.Strings = (
|
||||
'DELETE FROM FPCUSERS WHERE (ID=:ID)'
|
||||
)
|
||||
InsertSQL.Strings = (
|
||||
'INSERT INTO FPCUSERS '
|
||||
'(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'
|
||||
'VALUES'
|
||||
'(:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'
|
||||
)
|
||||
Connection = IBConnection1
|
||||
IDFieldName = 'ID'
|
||||
OnGetNewID = ANAMEGetNewID
|
||||
left = 113
|
||||
top = 120
|
||||
end
|
||||
object IBConnection1: TIBConnection
|
||||
Connected = False
|
||||
LoginPrompt = False
|
||||
DatabaseName = '/wisa/firebird/fpcusers.fb'
|
||||
KeepConnection = False
|
||||
Password = 'SysteemD'
|
||||
Transaction = SQLTransaction1
|
||||
UserName = 'WISASOFT'
|
||||
left = 72
|
||||
top = 120
|
||||
end
|
||||
object QGetID: TSQLQuery
|
||||
IndexName = 'DEFAULT_ORDER'
|
||||
AutoCalcFields = False
|
||||
Database = IBConnection1
|
||||
Transaction = SQLTransaction1
|
||||
ReadOnly = False
|
||||
SQL.Strings = (
|
||||
'SELECT GEN_ID(GEN_FPCUSERS,1) AS THEID FROM RDB$DATABASE'
|
||||
)
|
||||
Params = <>
|
||||
left = 155
|
||||
top = 63
|
||||
end
|
||||
object SQLTransaction1: TSQLTransaction
|
||||
Active = False
|
||||
Action = caNone
|
||||
Database = IBConnection1
|
||||
left = 74
|
||||
top = 64
|
||||
end
|
||||
object SQLQuery1: TSQLQuery
|
||||
IndexName = 'DEFAULT_ORDER'
|
||||
AutoCalcFields = False
|
||||
Database = IBConnection1
|
||||
Transaction = SQLTransaction1
|
||||
ReadOnly = False
|
||||
SQL.Strings = (
|
||||
'INSERT INTO FPCUSERS'
|
||||
'(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'
|
||||
'VALUES'
|
||||
'(:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'
|
||||
''
|
||||
)
|
||||
Params = <
|
||||
item
|
||||
DataType = ftUnknown
|
||||
Name = 'ID'
|
||||
ParamType = ptUnknown
|
||||
end
|
||||
item
|
||||
DataType = ftUnknown
|
||||
Name = 'LOGIN'
|
||||
ParamType = ptUnknown
|
||||
end
|
||||
item
|
||||
DataType = ftUnknown
|
||||
Name = 'NAME'
|
||||
ParamType = ptUnknown
|
||||
end
|
||||
item
|
||||
DataType = ftUnknown
|
||||
Name = 'EMAIL'
|
||||
ParamType = ptUnknown
|
||||
end
|
||||
item
|
||||
DataType = ftUnknown
|
||||
Name = 'LASTLOGIN'
|
||||
ParamType = ptUnknown
|
||||
end>
|
||||
left = 174
|
||||
top = 111
|
||||
end
|
||||
end
|
43
packages/fcl-web/examples/webdata/demo6/wmusers.lrs
Normal file
43
packages/fcl-web/examples/webdata/demo6/wmusers.lrs
Normal file
@ -0,0 +1,43 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[
|
||||
'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#8'OnCreate'
|
||||
+#7#16'DataModuleCreate'#14'OldCreateOrder'#8#12'InputAdaptor'#7#29'ExtJSJSon'
|
||||
+'WebdataInputAdaptor1'#15'ContentProducer'#7#23'ExtJSJSONDataFormatter1'#20
|
||||
+'OnGetContentProducer'#7#28'DataModuleGetContentProducer'#17'OnGetInputAdapt'
|
||||
+'or'#7#25'DataModuleGetInputAdaptor'#6'Height'#3','#1#16'HorizontalOffset'#3
|
||||
+'{'#2#14'VerticalOffset'#3#230#0#5'Width'#3#144#1#0#29'TExtJSJSonWebdataInpu'
|
||||
+'tAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#232#0#3'top'#3#152#0#0
|
||||
+#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJSXMLWebdataInputAdaptor1'#4'left'
|
||||
+#3#16#1#3'top'#3#152#0#0#0#22'TExtJSXMLDataFormatter'#22'ExtJSXMLDataFormatt'
|
||||
+'er1'#13'AllowPageSize'#8#4'left'#3#16#1#3'top'#3#192#0#0#0#23'TExtJSJSONDat'
|
||||
+'aFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'#8#4'left'#3#232#0
|
||||
+#3'top'#3#192#0#0#0#21'TSQLDBWebDataProvider'#5'ANAME'#17'SelectSQL.Strings'
|
||||
+#1#6#22'SELECT * FROM FPCUSERS'#0#17'UpdateSQL.Strings'#1#6#19'UPDATE FPCUSE'
|
||||
+'RS SET'#6#13' NAME=:NAME,'#6#15' LOGIN=:LOGIN,'#6#15' EMAIL=:EMAIL,'#6#22
|
||||
+' LASTLOGIN=:LASTLOGIN'#6#5'WHERE'#6#10' (ID=:ID)'#0#17'DeleteSQL.Strings'
|
||||
+#1#6'#DELETE FROM FPCUSERS WHERE (ID=:ID)'#0#17'InsertSQL.Strings'#1#6#21'IN'
|
||||
+'SERT INTO FPCUSERS '#6'#(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'#6#6'VALUES'#6
|
||||
+'((:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'#0#10'Connection'#7#13'IBConnecti'
|
||||
+'on1'#11'IDFieldName'#6#2'ID'#10'OnGetNewID'#7#13'ANAMEGetNewID'#4'left'#2'q'
|
||||
+#3'top'#2'x'#0#0#13'TIBConnection'#13'IBConnection1'#9'Connected'#8#11'Login'
|
||||
+'Prompt'#8#12'DatabaseName'#6#26'/wisa/firebird/fpcusers.fb'#14'KeepConnecti'
|
||||
+'on'#8#8'Password'#6#8'SysteemD'#11'Transaction'#7#15'SQLTransaction1'#8'Use'
|
||||
+'rName'#6#8'WISASOFT'#4'left'#2'H'#3'top'#2'x'#0#0#9'TSQLQuery'#6'QGetID'#9
|
||||
+'IndexName'#6#13'DEFAULT_ORDER'#14'AutoCalcFields'#8#8'Database'#7#13'IBConn'
|
||||
+'ection1'#11'Transaction'#7#15'SQLTransaction1'#8'ReadOnly'#8#11'SQL.Strings'
|
||||
+#1#6'9SELECT GEN_ID(GEN_FPCUSERS,1) AS THEID FROM RDB$DATABASE'#0#6'Params'
|
||||
+#14#0#4'left'#3#155#0#3'top'#2'?'#0#0#15'TSQLTransaction'#15'SQLTransaction1'
|
||||
+#6'Active'#8#6'Action'#7#6'caNone'#8'Database'#7#13'IBConnection1'#4'left'#2
|
||||
+'J'#3'top'#2'@'#0#0#9'TSQLQuery'#9'SQLQuery1'#9'IndexName'#6#13'DEFAULT_ORDE'
|
||||
+'R'#14'AutoCalcFields'#8#8'Database'#7#13'IBConnection1'#11'Transaction'#7#15
|
||||
+'SQLTransaction1'#8'ReadOnly'#8#11'SQL.Strings'#1#6#20'INSERT INTO FPCUSERS'
|
||||
+#6'#(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'#6#6'VALUES'#6'((:ID, :LOGIN, :NAME,'
|
||||
+' :EMAIL, :LASTLOGIN)'#6#0#0#6'Params'#14#1#8'DataType'#7#9'ftUnknown'#4'Nam'
|
||||
+'e'#6#2'ID'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4'Nam'
|
||||
+'e'#6#5'LOGIN'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4
|
||||
+'Name'#6#4'NAME'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4
|
||||
+'Name'#6#5'EMAIL'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'
|
||||
+#4'Name'#6#9'LASTLOGIN'#9'ParamType'#7#9'ptUnknown'#0#0#4'left'#3#174#0#3'to'
|
||||
+'p'#2'o'#0#0#0
|
||||
]);
|
107
packages/fcl-web/examples/webdata/demo6/wmusers.pp
Normal file
107
packages/fcl-web/examples/webdata/demo6/wmusers.pp
Normal file
@ -0,0 +1,107 @@
|
||||
unit wmusers;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
|
||||
IBConnection, sqldb, fpwebdata, extjsjson, extjsxml, sqldbwebdata;
|
||||
|
||||
type
|
||||
|
||||
{ TFPWebProviderDataModule1 }
|
||||
|
||||
TFPWebProviderDataModule1 = class(TFPWebProviderDataModule)
|
||||
ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
|
||||
ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
|
||||
ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
|
||||
ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
|
||||
IBConnection1: TIBConnection;
|
||||
ANAME: TSQLDBWebDataProvider;
|
||||
QGetID: TSQLQuery;
|
||||
SQLQuery1: TSQLQuery;
|
||||
SQLTransaction1: TSQLTransaction;
|
||||
procedure ANAMEGetNewID(Sender: TObject; out AID: String);
|
||||
procedure DataModuleCreate(Sender: TObject);
|
||||
procedure DataModuleGetContentProducer(Sender: TObject;
|
||||
var AContentProducer: TCustomHTTPDataContentProducer);
|
||||
procedure DataModuleGetInputAdaptor(Sender: TObject;
|
||||
var AInputAdaptor: TCustomWebdataInputAdaptor);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
FPWebProviderDataModule1: TFPWebProviderDataModule1;
|
||||
|
||||
implementation
|
||||
|
||||
uses inifiles;
|
||||
|
||||
{ TFPWebProviderDataModule1 }
|
||||
|
||||
procedure TFPWebProviderDataModule1.DataModuleGetContentProducer(
|
||||
Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
|
||||
begin
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
AContentProducer:=ExtJSXMLDataFormatter1;
|
||||
end;
|
||||
|
||||
procedure TFPWebProviderDataModule1.DataModuleCreate(Sender: TObject);
|
||||
|
||||
Var
|
||||
FN : String;
|
||||
Ini : TMemIniFile;
|
||||
|
||||
begin
|
||||
FN:=ChangeFileExt(Paramstr(0),'.ini');
|
||||
If FileExists(FN) then
|
||||
begin
|
||||
Ini:=TMemIniFile.Create(FN);
|
||||
try
|
||||
With IBConnection1 do
|
||||
begin
|
||||
DatabaseName:=Ini.ReadString('Database','Path',DatabaseName);
|
||||
UserName:=Ini.ReadString('Database','UserName',UserName);
|
||||
Password:=Ini.ReadString('Database','Password',Password);
|
||||
end;
|
||||
finally
|
||||
Ini.Free;
|
||||
end;
|
||||
end;
|
||||
IBConnection1.Connected:=True;
|
||||
end;
|
||||
|
||||
procedure TFPWebProviderDataModule1.ANAMEGetNewID(Sender: TObject; out
|
||||
AID: String);
|
||||
begin
|
||||
With QGetID Do
|
||||
begin
|
||||
Close;
|
||||
Open;
|
||||
try
|
||||
if (EOF and BOF) then
|
||||
Raise Exception.Create('No ID generated');
|
||||
AID:=Fields[0].AsString;
|
||||
finally
|
||||
Close;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFPWebProviderDataModule1.DataModuleGetInputAdaptor(Sender: TObject;
|
||||
var AInputAdaptor: TCustomWebdataInputAdaptor);
|
||||
begin
|
||||
If Request.QueryFields.values['format']='xml' then
|
||||
AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1;
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I wmusers.lrs}
|
||||
|
||||
RegisterHTTPModule('Provider', TFPWebProviderDataModule1);
|
||||
end.
|
||||
|
40
packages/fcl-web/examples/webdata/demos.txt
Normal file
40
packages/fcl-web/examples/webdata/demos.txt
Normal file
@ -0,0 +1,40 @@
|
||||
|
||||
The demo directories demonstrate the use of the TFPWebDataProvider
|
||||
components, using ExtJS. It demonstrates the use of JSON and XML
|
||||
communitation between a ExtJS Datastore and the webdataprovider.
|
||||
|
||||
ExtJS must be installed, it can be downloaded for free from
|
||||
http://www.extjs.com/
|
||||
|
||||
The examples assume that it is reachable through /ext/
|
||||
|
||||
Demo1 shows how to use the component with a plain webdatamodule,
|
||||
using actions, and creating all components on the fly.
|
||||
|
||||
Demo2 shows how to use the components by dropping them on a plain
|
||||
webdatamodule, and handling all in the OnRequest handler of the
|
||||
webdatamodule.
|
||||
|
||||
Demo3 shows how to use the components in combination with a
|
||||
WebProviderDatamodule.
|
||||
|
||||
Demo4 shows how webdataprovider components can be dropped
|
||||
on plain datamodules, and how these modules can be made
|
||||
available to the webdatamodule.
|
||||
|
||||
Demo5 shows how to register your own TWebdataProvider instances, which
|
||||
are created on the fly to perform their action.
|
||||
|
||||
Demo6 demonstrates the use of the TSQLDBWebDataProvider component.
|
||||
|
||||
All demos except Demo6 use CGI and a TDBF component to feed data to
|
||||
the webpage, which means they are not very suitable for real life
|
||||
situations due to file locking etc.
|
||||
|
||||
|
||||
To try a demo, compile one of the appropriate CGI apps, and open
|
||||
the extgrid-json.html or extgrid-xml.html page in your browser
|
||||
through the webserver, something like:
|
||||
|
||||
http://localhost/~myuser/extjs/demo2/extgrid-json.html
|
||||
|
BIN
packages/fcl-web/examples/webdata/users.dbf
Normal file
BIN
packages/fcl-web/examples/webdata/users.dbf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user