20100930 disabled fields

Jetzt wo der Layout-Editor fertig ist, machen wir weiter mit der https://www.lino-framework.org/todo.html.

disabled fields

  • Wenn man in der Tabellenansicht versucht, ein disabled field zu bearbeiten, meldet er jetzt in der Konsole ein höfliches Field “street” is disabled for this record. Diese Meldung formatiere ich jetzt erstmals mit String.format(). Um sie zu internationalisieren, muss ich entweder die lino.js ebenfalls beim Serverstart generieren oder in der site.js eine systemweite Konstante dafür vorsehen.

  • ext_store.DisabledFieldsStoreField hängt jetzt für normale (nicht Phantom-) Records (d.h. deren pk nicht None) den primary key in die Liste der disabled fields. Also der primary key sollte in lino.reports.Report.disabled_fields() nicht angegeben werden.

  • disabled ComboBox fields (z.B. Person.city) waren in der Tabellenansicht dennoch editierbar, weil ext_store.DisabledFieldsStoreField als Feldnamen cityHidden und nicht city in disabled_fields eintrug. Konflikt: FormPanel wollte den Hidden-Namen des Feldes, GridPanel den eigentlichen Namen. Lösung: ext_store.DisabledFieldsStoreField trägt jetzt die eigentlichen Feldnamen (nicht mehr deren Hidden-Version) in in disabled_fields ein. Und Lino.FormPanel.load_master_record will jetzt auch den eigentlichen Namen (benutzt nicht mehr http://www.sencha.com/deploy/dev/docs/?class=Ext.form.BasicForm.findField(), sondern http://www.sencha.com/deploy/dev/docs/?class=Ext.form.FormPanel.find()).

Detail of slave reports

Ein Punkt weniger in der https://www.lino-framework.org/todo.html:

  • In slave reports (z.B. NotesByPerson) funktioniert das Detail nicht (ist immer leer). Das liegt daran, dass er zum Laden des Records ein GET /api/notes/NotesByPerson/16 fragt (also ohne mt und mk).

Das Problem kam u.A. daher, dass ich master record und current record an ein paar Stellen verwechselte. Jedenfalls einige Änderungen in ext_ui.ExtUi.a2btn(), ext_windows.MasterWrapper.js_render() und lino.js

Der master record eines slave reports ist es, der die Query-Parameter mt und mk definiert. Sowohl FormPanel als auch GridPanel können auf einem Slave Report sein und brauchen dann einen Master. Aber wo sitzt der Master? Na im WindowWrapper. Wie wird der Master gesetzt? Momentan lediglich durch die Parameter record_id oder data_record Also jedes panel auf einem slave report fragt seinen ww nach dem Master record. Das Formpanel tat das bisher nicht. FormPanel ist immer ein MainPanel: davon gibt es immer nur eines pro ww.

Deleting records

Und noch ein Punkt weniger in der https://www.lino-framework.org/todo.html:

  • Löschen auf Extrazeile sollte deaktiviert sein.

Dafür wohl ein neuer (nicht so dringender) Punkt:

  • Ich würde in der Rückfrage ja auch gerne die __unicode__ der zu löschenden Records anzeigen. FormPanel und GridPanel.get_selected() geben deshalb jetzt nicht mehr bloß eine Liste der IDs, sondern eine Liste der Records. Aber das nützt (noch) nichts, denn ich weiß nicht, wie ich den Grid-Store überredet bekomme, außer data auch eine Eigenschaft title aus jedem Record rauszulesen. Auf Serverseite wäre das kein Problem: ich bräuchte einfach nur title in elem2rec1 statt in elem2rec_detailed zu setzen. Aber das interessiert den Store der Grid nicht. Kann sein, dass ich ihn konfigurieren kann… Oder ich würde es wie mit disabled_fields machen. Also ein neues automatisches virtuelles Feld __unicode__.

22 Uhr. Okay, für heute bin ich zufrieden. Check-In.