# DataEditor Task - Param Design

April 13, 1998 - Jack Harich

## Nutshell Vision

> Specify a task with a minimum of parameters, and have those expanded into the full param the DataEditor needs to perform the task. The task must be a standard task recognized by the DataEditor.

## Features

- Different standard tasks, such as EditFields, BrowseEditFields.
- Single or multiple windows per task.
- Single or multiple data sources per task.
- Nested "worker" orginization with:
  - Param type and other meta parameters.
  - Workers can be Controls or Modules.
  - A Control has a Component. Examples Label, TextField, Link
  - A Module is a container.
  - Nesting of components and modules to any depth.
- Handles tabs via nesting under TabControl
- Handles Parent/Child via:
  - ParentChildControl with data sources, PC IDs
  - RowFieldPanels that are a Parent or Child, each has a PC ID
- Handles borders via BorderControl which contains other workers
- Can use meta param (uses schema to expand), full param or meta with custom overrides

##

## EditFields Meta Param

>     StartMessageName is: EditUserSysMetaParam
>     ParamType is: Config
>     TaskType is: EditFields (expects DataRequest param)
>     //
>     DataRequest has:
>         Database is: atsdr
>         Entities is: UserSys
>         SortBy is: LastName, FirstName
>         FilterLine is: LastName LIKE H*
>         End: DataRequest
>     // "TaskType is: BrowseEditFields" would add this param:
>     // *** Modify to be BrowseEditFields if Browse present ***
>     Browse has:
>         Height is: 250
>         Columns hasLines:
>             UserSys.LastName, Last Name, 15
>             UserSys.FirstName, First Name, 12
>             UserSys.UserID, UserID, 10
>             UserSys.AdminCode, AdminCode, 11
>             UserSys.LastLogon, Last Logon, 10
>             End: Columns
>         End: Browser

## ParentChild Meta Param

>     TaskType is: ParentChild (if Browse present then browse)
>     DataRequest has:
>         (same as DataRequest)
>         Name is: Award
>         End: ParentDataRequest
>     ChildDataRequests hasElements:
>         Element has:
>             (same as DataRequest)
>             Name is: Detail1
>             Parent is: Award
>             LinkColumn is: AwardMID
>             End: Element
>         Element has:
>             (same as DataRequest)
>             Name is: Detail2
>             Parent is: Award
>             LinkColumn is: AwardMID
>             End: Element
>         End: ChildDataRequests
>     Browse has:
>         Height is: 250
>         Columns hasLines:
>             Award.Name, Name, 15 (etc)
>             End: Columns
>         End: Browser

> However this has no obvious default layout, so we expect layout will need to be expressed, fields positioned but schema defaults used. Try:

>     StartMessageName is: EditAwards
>     ParamType is: Specific (some config???)
>     TaskType is: ParentChild
>     //
>     ViewNames is: AwardView
>     DataSourceIDs is: AwardSource, AwardStage, AwardRecipient
>     ParentChild has: (Used to init ParentChildTask)
>         ParentDataSourceID is: AwardSource
>     	Children hasElements:
>             Element has:
>                 DataSourceID is: AwardStage
>                 LinkParentColumn is: AwardMID
>                 End: Element
>             Element has:
>                 DataSourceID is: AwardRecipient
>                 LinkParentColumn is: AwardMID
>                 End: Element
>             End: Children
>         End: ParentChild
>     //----- DataSources - Same as usual
>     AwardSource has....
>     AwardStageSource has....
>     AwardRecipientSource has....
>     //----- View
>     AwardsView has:
>        IsPrimeView is: true
>        Title is: Edit Awards
>        Workers has:
>            TabPanel has:
>                IsModule is: true
>                Type is: TabPanel
>                Style is: Default
>                AddType is: EndRow
>                Tabs hasLines: (module param name, tab text)
>                    AwardsRowFieldPanel, Awards
>                    RecipientsRowFieldPanel, Recipients
>                    StagesRowFieldPanel, Stages
>                    End: Tabs
>                AwardsRowFieldPanel has: (same as usual but no layout)
>                    IsModule is: true
>                    Type is: RowFieldPanel
>                    DataSourceID is: AwardSource
>                    NestedContainer has:
>                        IsConfig is: true (Generate from schema)
>                        End: NestedContainer
>                    End: AwardsRowFieldPanel
>                RecipientsRowFieldPanel has....
>                StagesRowFieldPanel has....
>                End: TabPanel
>            End: Workers
>         End: AwardsView

##

Custom Overrides

> Here we want to replace schema or default data with custom data. This requires predictable param names. To declare custom label Text for EditFields Meta Param:

>     Custom has:
>         UserSysView has:
>             Workers has:
>                 RowFieldPanel has:
>                     NestedContainer has:
>                         UserIDLabel has:
>                             Text is: ID
>                             End: UserIDLabel
>                         End: NestedContainer
>                     End: RowFieldPanel
>                  End: Workers
>             End: UserSysView
>         End: Custom

> Or more intelligently, since it is a unique occurance:

> >     Custom has:
> >         UserIDLabel has:
> >             Text is: ID
> >             End: UserIDLabel
> >         End: Custom

> To declare custom label Text for ParentChild Meta Param:

> >     Custom has:
> >         ElementDetail1 has:
> >             UserIDLabel has:
> >                 Text is: ID
> >                 End: UserIDLabel
> >             End: ElementDetail1
> >         End: Custom