Development with Code Generation: Difference between revisions

From OpenPetra Wiki
Jump to navigation Jump to search
Line 28: Line 28:
** ''crud'': CRUD screens (Create, Read, Update, Delete)
** ''crud'': CRUD screens (Create, Read, Update, Delete)
** ''find'', ''browse'': find screens
** ''find'', ''browse'': find screens
* '''MainEditTable''': if this is set, you will need to write less DataField attributes for the controls. The name of the controls will be matched to a field in the given table; if such a table field exists, it will be linked to the control.
* '''MasterTable''': if this is set, you will need to write less DataField attributes for the controls. The name of the controls will be matched to a field in the given table; if such a table field exists, it will be linked to the control.
* '''DetailTable''': similar to MasterTable, but this is for the detail table; controls must have the word ''Detail'' after the prefix, eg. txtDetailAmount
* '''Events''': here you can link form events to methods in your code
* '''Events''': here you can link form events to methods in your code
** eg. <code>Activated: {class=System.EventHandler,method=FTheObject.TFrmPetra_Activated}</code>
** eg. <code>Activated: {class=System.EventHandler,method=FTheObject.TFrmPetra_Activated}</code>

Revision as of 08:55, 17 July 2009

Tools

  • In csharp/ICT/PetraTools
  • uses CSParser to parse existing C# files
  • write code:
    • can comment generated code
    • can insert regions with name ManualCode (need endregion ManualCode as well)
  • TODO: write into Templates
  • Plugin writers for different output (Winforms, GTK, ASP.net)

YML

  • general definition: YML is shorter and easier to write and read than XML, but you can get the same structure than XML. This is achieved for example by not having opening and closing tags, but by using identation to define the hierarchy of elements.
  • specification: http://yaml.org/spec/1.2/
  • see a parser for YAML: http://yaml-net-parser.sourceforge.net/default.html
  • we have our own converter from yaml to xml: project Ict.Tools.CodeGeneration, Yml2Xml.cs, Ict.Tools.CodeGeneration.Yml2Xml
    • advantage: we can write short yaml code, but can use the comfort of the XML parser in .net to walk through the hierarchy
    • yml2xml maps the YAML into XML

XAML

  • TODO: XAML idea

Documentation YML for OpenPetra Forms

  • generally the yml files inherit from each other (BaseYaml)
    • this allows us to only define the default menu items once, in PetraForm.yaml, and they will be included in all derived forms
  • FormType:
    • abstract: if this is just used as a base form for other real forms
    • navigation: the main window, the module windows
    • edit: edit screens
    • crud: CRUD screens (Create, Read, Update, Delete)
    • find, browse: find screens
  • MasterTable: if this is set, you will need to write less DataField attributes for the controls. The name of the controls will be matched to a field in the given table; if such a table field exists, it will be linked to the control.
  • DetailTable: similar to MasterTable, but this is for the detail table; controls must have the word Detail after the prefix, eg. txtDetailAmount
  • Events: here you can link form events to methods in your code
    • eg. Activated: {class=System.EventHandler,method=FTheObject.TFrmPetra_Activated}
  • Actions: actions can be used by menuitems, toolbarbuttons, and other controls; this is useful to be able to enable/disable an action on the whole screen, and to only define a certain action once, and refer to it from all controls that trigger the same action
    • eg. actClose: {Label=&Close, ActionId=eClose, Tooltip=Closes this window, Image=Close.ico}
    • eg. actMainMenu: {Label=Petra &Main Menu, ActionClick=FTheObject.OpenMainScreen}
    • Enabled: Actions can depend on other actions or conditions; they will be disabled if the condition is false; eg Enabled: cndSelectedSupplier; this can be set in a grid, with SelectedRowActivates; eg grdSupplierResult: {Dock=Fill, ActionDoubleClick=actSupplierTransactions, SelectedRowActivates=cndSelectedSupplier}
  • Controls: see Screen scaffolding: controls
  • Menu: TODO
  • Toolbar: TODO
  • Layout: TODO