Hello!
I have a situation, where I open a new form and append a new master, fill some data and append several detail rows, where I also apply some data.
Short code explanation - of what should do :
Insert a new row in wdsOdvoz
Insert rows into wdsOdvozPodrobno according to the result of wdsPosode - there also insert data from wdsPosode.Posoda to wdsOdvozPodrobno field "Posoda".
After clicking OK it should save the new records (master and detail).
I tried to also check the web/master-detail demo, but it's not present in my installation (latest, I reinstalled it to be sure), below is the content of the demo/web folder.
Here's the code:
unit Odvoz;
type
TfrmOdvoz = class(TWebForm)
wdsLokacijaPosode: TXDataWebDataSet;
wdsOdvozPodrobno: TXDataWebDataSet;
wdsOdvoz: TXDataWebDataSet;
connServer: TXDataWebConnection;
end;
implementation
{$R *.dfm}
procedure TfrmOdvoz.FormCreate(Sender: TObject);
begin
PripraviOdvoz(0); //0 = new
end;
procedure TfrmOdvoz.Log(Txt: string);
begin
Console.log(Txt);
end;
procedure TfrmOdvoz.PripraviOdvoz(OdvozId: integer);
begin
wdsOdvoz.Close;
wdsOdvoz.QueryString := '$filter=Id eq '+OdvozId.ToString+'&$orderby=Id desc&$expand=Podrobno,Podrobno/Posoda,Lokacija,Lokacija/Stranka';
wdsOdvoz.QueryString := '$orderby=Id desc&$top=1&$expand=Podrobno,Podrobno/Posoda,Lokacija,Lokacija/Stranka';
wdsOdvoz.Load;
end;
procedure TfrmOdvoz.wdsOdvozAfterOpen(DataSet: TDataSet);
begin
// Odvoz pripravljen, vpiši podrobnosti in naloži odvozpodrobno za dodajanje vrstic
wdsOdvoz.Insert;
end;
procedure TfrmOdvoz.wdsOdvozNewRecord(DataSet: TDataSet);
begin
wdsOdvoz.FieldByName('CasOdvoza').AsDateTime := Now;
wdsOdvoz.FieldByName('Vozilo').Value := modMain.Vozilo; // See note 1
wdsOdvoz.Post;
wdsOdvozPodrobno.Close;
wdsOdvozPodrobno.SetJsonData(wdsOdvoz.FieldByName('Podrobno').Value);
wdsOdvozPodrobno.Load;
end;
procedure TfrmOdvoz.wdsOdvozPodrobnoAfterOpen(DataSet: TDataSet);
begin
wdsLokacijaPosode.Close;
wdsLokacijaPosode.QueryString := 'expand=posoda&$filter=posoda/tip eq '+modMain.FrakcijaId.ToString+' and lokacija/stranka/id eq '+modMain.StrankaId.ToString;
wdsLokacijaPosode.Load;
end;
procedure TfrmOdvoz.wdsOdvozPostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
begin
Console.log(E.Message);
end;
procedure TfrmOdvoz.wdsLokacijaPosodeAfterOpen(DataSet: TDataSet);
begin
// Fill OdvozPodrobno with data. Add as many rows as there are in wdsLokacijaPosode and fill the field wdsOdvozPodrobno.Posoda with the field wdsLokacijaPosode.Posoda.
Also add a reference to wdsOdvoz (master)
wdsLokacijaPosode.First;
Log(wdsLokacijaPosode.RecordCount.ToString);
while not wdsLokacijaPosode.Eof do begin
wdsOdvozPodrobno.Insert;
wdsOdvozPodrobno.FieldByName('Odvoz').Value := TObject(TXDataWebDataSet(wdsOdvoz).CurrentData); // Add reference to master (wdsOdvoz)
wdsOdvozPodrobno.FieldByName('Posoda').Value := TObject(wdsLokacijaPosode.FieldByName('Posoda').Value); // See note 2 below
wdsOdvozPodrobno.FieldByName('Volumen').AsInteger := 0;
wdsOdvozPodrobno.FieldByName('Teza').AsInteger := 0;
wdsOdvozPodrobno.FieldByName('Kolicina').AsInteger := 0;
wdsLokacijaPosode.Next;
end;
wdsOdvozPodrobno.First;
end;
procedure TfrmOdvoz.ApplyNote(Sender: TObject);
begin
if Sender = btnOpomba1 then
memoNotes.Text := Settings.Note1;
if Sender = btnOpomba2 then
memoNotes.Text := Settings.Note2;
if Sender = btnOpomba3 then
memoNotes.Text := Settings.Note3;
end;
procedure TfrmOdvoz.btnSaveClick(Sender: TObject);
begin
if wdsOdvoz.State in dsEditModes then
wdsOdvoz.Post;
if wdsOdvozPodrobno.State in dsEditModes then
wdsOdvozPodrobno.Post;
wdsOdvoz.Edit;
wdsOdvoz.FieldByName('Podrobno').Value := TJSArray.new(TJSJSON.parseObject(TJSJSON.stringify(TJSObject(wdsOdvozPodrobno.CurrentData))));
wdsOdvoz.Post;
wdsOdvoz.ApplyUpdates;
end;
procedure TfrmOdvoz.wdsOdvozAfterApplyUpdates(Sender: TDataSet; Info: TResolveResults);
begin
frmMain.ShowStranke;
end;
end.
The code has several problems:
- The field "Posode" doesn't get filled
- Clicking on Save button doesn't do anything - nothing is posted to the server
Probably the code is a mess, because I'm not sure what to do I would really need some help here, because it's my first master-detail with inserting and i'm quite lost.
Kind regards,
m@rko