| 要約: |
|
| 例: RecordSet コンストラクタにデータを含める | |
![]() | |
{define-proc {show-recordset rs:RecordSet}:Table
let t:Table = {Table columns=rs.fields.size}
{for f in rs.fields do
{t.add {header-cell {value f.name}}}
}
{for r in rs do
{for f in rs.fields do
{t.add r[f.name]}
}
}
{return t}
}
{let people:RecordSet =
{RecordSet
{RecordFields
{RecordField
"First", caption = "First Name", domain = String
},
{RecordField
"Last", caption = "Last Name", domain = String
},
{RecordField
"Age", domain = int
}
},
{RecordData First = "John", Last = "Smith", Age = 25},
{RecordData First = "Jane", Last = "Smith", Age = 29},
{RecordData First = "Jane", Last = "Jones", Age = 28}
}
}
{show-recordset people}
|
{people.append {RecordData}}
{people.append {RecordData First = "F", Last = "L", Age = 0}}
| 例: ユーザーによるデータ追加 | |
![]() | |
{let people:RecordSet =
{RecordSet
{RecordFields
{RecordField
"First", domain = String, default-value = "FIRST"
},
{RecordField
"Last", domain = String, default-value = "LAST"
},
{RecordField
"Age", domain = int, default-value = 99
}
},
{RecordData First = "John", Last = "Smith", Age = 25},
{RecordData First = "Jane", Last = "Smith", Age = 29},
{RecordData First = "Jane", Last = "Jones", Age = 28}
}
}
{let rg:RecordGrid =
{RecordGrid
height = 3cm, width = 10cm, record-source = people
}
}
{value
{VBox
rg,
{HBox
{CommandButton
width = {make-elastic}, label = "append record",
{on Action do
{people.append {RecordData}}
}
},
{CommandButton
width = {make-elastic}, label = "commit records",
{on Action do {people.commit}}
},
{CommandButton
width = {make-elastic}, label = "revert records",
{on Action do {people.revert}}
}
}
}
}
|
| 例: Sorting Records | |
![]() | |
{let staff:RecordSet =
{evaluate
{url "../../default/support/data.scurl"}
}
}
{let rv:RecordView =
{RecordView staff}
}
{let rg:RecordGrid =
{RecordGrid
record-source = rv, height = 10cm, width = 14cm
}
}
{value
{VBox
rg,
{HBox
{CommandButton
width = {make-elastic},
tooltip = {Tooltip "Sort by State, City, Last, First"},
label = "Sort Ascending",
{on Action do
set rv.sort = "State, City, Last, First"
}
},
{CommandButton
width = {make-elastic},
tooltip = {Tooltip "Sort by State, City, Last, First"},
label = "Sort Descending",
{on Action do
set rv.sort = "State DESC, City DESC, Last DESC, First DESC"
}
}
}
}
}
|
| 例: レコードのフィルタリング | |
![]() | |
{let staff:RecordSet =
{evaluate
{url "../../default/support/data.scurl"}
}
}
{let rv:RecordView =
{RecordView staff}
}
{let rg:RecordGrid =
{RecordGrid
record-source = rv, height = 5cm, width = 14cm
}
}
{VBox
rg,
{HBox
{CommandButton
width = {make-elastic}, label = "Show Abrams",
{on Action do
set rv.filter = {RecordData Last = "Abrams"}
}
},
{CommandButton
width = {make-elastic}, label = "Show Frankel",
{on Action do
set rv.filter = {RecordData Last = "Frankel"}
}
}
}
}
|
| 例: レコード状態の変化 | |
![]() | |
{let people:RecordSet =
{RecordSet
{RecordFields
{RecordField "ID", domain = int},
{RecordField "Name", domain = String},
{RecordField "Age", domain = int}
},
{RecordData ID = 1, Name = "John Smith", Age = 25},
{RecordData ID = 2, Name = "Jane Smith", Age = 29},
{RecordData ID = 3, Name = "Jane Jones", Age = 28}
}
}
{define-class public StateDisplayCell {inherits StandardStringCell}
{method public open {get-formatted-data}:(String, bool)
{if-non-null rec = self.record then
{return rec.state.name, true}
else
{return "", false}
}
}
}
{people.append
{RecordData ID = 4, Name = "John Jones", Age = 26}
}
{let rg:RecordGrid =
{RecordGrid
record-source = people,
sort = "ID",
width = 9cm,
height = 4cm,
{RecordGridColumn width = 1cm, "ID"},
{RecordGridColumn width = 1cm, "Age"},
{RecordGridColumn width = 3cm, "Name"},
{RecordGridColumn width = 3cm, "RecordState",
cell-spec = StateDisplayCell}
}
}
{value
set rg.records.include-deleted-records? = true
{VBox
rg,
{HBox width = 9cm,
{CommandButton
width = {make-elastic}, label = "Delete Current",
{on Action do
{if-non-null rec = rg.current-record then
{rec.delete}
}
}
},
{CommandButton
width = {make-elastic}, label = "Commit Current",
{on Action do
{if-non-null rec = rg.current-record then
{rec.commit}
}
}
},
{CommandButton
width = {make-elastic}, label = "Revert Current",
{on Action do
{if-non-null rec = rg.current-record then
{rec.revert}
}
}
}
}
}
}
|
| 例: レコード状態のフィルタリング | |
![]() | |
{let staff:RecordSet =
{RecordSet
{RecordFields
{RecordField
"id", caption = "User ID", domain = int,
index-type = RecordFieldIndexType.unique
},
{RecordField
"First", domain = String
},
{RecordField
"Last", domain = String
}
},
{RecordData id = 1, First = "Gene", Last = "Smith"},
{RecordData id = 2, First = "Fred", Last = "Smith"},
{RecordData id = 3, First = "Mike", Last = "Smith"},
{RecordData id = 4, First = "Ben", Last = "Smith"}
}
}
{staff.append
{RecordData id = 5, First = "Ben", Last = "Abrams"}}
{staff.append
{RecordData id = 6, First = "Sam", Last = "Jones"}}
{staff.append
{RecordData id = 7, First = "Nigel", Last = "Stevens"}}
{staff.append
{RecordData id = 8, First = "Bert", Last = "Stevens"}}
{let rv:RecordView = {RecordView staff}}
{let rg:RecordGrid =
{RecordGrid record-source = rv, width = 9cm, height = 5cm}
}
{VBox
rg,
{HBox
{CommandButton
width = {make-elastic}, label = "Original State",
{on Action do
set rv.filter = RecordState.original
}
},
{CommandButton
width = {make-elastic}, label = "Appended State",
{on Action do
set rv.filter = RecordState.appended
}
},
{CommandButton
width = {make-elastic}, label = "Modified State",
{on Action do
set rv.filter = RecordState.modified
}
}
}
}
|
| 例: Domain を使用したデータの検証 | |
![]() | |
{let limit-age:StandardIntDomain =
{StandardIntDomain
default-value = 25,
max-allowable = 30,
min-allowable = 20
}
}
{let people:RecordSet =
{RecordSet
{RecordFields
{RecordField
"First", caption = "First Name", domain = String
},
{RecordField
"Last", caption = "Last Name", domain = String
},
{RecordField
"Age", domain = limit-age
}
},
{RecordData First = "John", Last = "Smith", Age = 25},
{RecordData First = "Jane", Last = "Smith", Age = 29},
{RecordData First = "Jane", Last = "Jones", Age = 28}
}
}
{let rg:RecordGrid =
{RecordGrid
height = 3cm,
record-source = people
}
}
{VBox
rg,
{HBox
{CommandButton
width = {make-elastic}, label = "append invalid record",
{on Action do
{try
{people.append
{RecordData First = "George", Last = "Jones", Age = 55}
}
catch e:ValidationException do
{popup-message e.message}
}
}
},
{CommandButton
width = {make-elastic}, label = "append blank record",
{on Action do
{try
{people.append
{RecordData}
}
catch e:ValidationException do
{popup-message e.message}
}
}
}
}
}
|
| 例: RecordSet からレコードを選択 | |
![]() | |
{let maritime-signal-flags:RecordSet =
{evaluate {url "../../default/support/flag-data.scurl"}}
}
{define-proc public {find-letter-flag l:char}:(word:String, flag:Frame)
let selected:{Array-of Record} =
{maritime-signal-flags.select filter =
{RecordData letter = l}
}
let r:Record = selected[0]
let word:String = r["phonetic"]
let flag:Frame =
{Frame
height = 42px,
width = 53px,
background = {Background.from-url {url r["flag"]}}
}
{return word, flag}
}
{let (word-c:String, letter-c:Frame) = {find-letter-flag 'C'}}
{let (word-u:String, letter-u:Frame) = {find-letter-flag 'U'}}
{let (word-r:String, letter-r:Frame) = {find-letter-flag 'R'}}
{let (word-l:String, letter-l:Frame) = {find-letter-flag 'L'}}
{HBox
font-size = 12pt,
spacing = 5px,
{VBox halign = "center", 'C', word-c, letter-c},
{VBox halign = "center", 'U', word-u, letter-u},
{VBox halign = "center", 'R', word-r, letter-r},
{VBox halign = "center", 'L', word-l, letter-l}
}
|
| 例: RecordModified イベントの使用 | |
![]() | |
{let public plan:RecordSet =
{RecordSet
{RecordFields
{RecordField "task",
domain = String
},
{RecordField "phase",
domain = String
},
{RecordField "weeks",
domain = int
}
},
{RecordData task = "step 1", phase = "I", weeks = 2},
{RecordData task = "step 2", phase = "I", weeks = 1},
{RecordData task = "step 3", phase = "I", weeks = 3},
{RecordData task = "step 1", phase = "II", weeks = 2},
{RecordData task = "step 2", phase = "II", weeks = 4},
{RecordData task = "step 1", phase = "III", weeks = 2},
{RecordData task = "step 2", phase = "III", weeks = 3},
{RecordData task = "step 3", phase = "III", weeks = 4},
{RecordData task = "step 4", phase = "III", weeks = 6}
}
}
{define-class public SummaryTable
let constant summary-fields:RecordFields =
{RecordFields
{RecordField "phase", domain = String},
{RecordField "weeks", domain = int}
}
field public _source:RecordSet
field public _summarized:RecordSet
field public tasks:StringArray = {StringArray}
{constructor public {default
source:RecordSet
}
set self._source = source
set self._summarized =
{RecordSet SummaryTable.summary-fields}
}
{method public {recalc}:void
{self.accumulate-by-phase "I"}
{self.accumulate-by-phase "II"}
{self.accumulate-by-phase "III"}
}
{method private {accumulate-by-phase phase:String}:void
let week-sum:int = 0
let rv:RecordView =
{RecordView
self._source,
filter = {RecordData phase = phase}
}
{for r:Record in rv do
set week-sum = week-sum + r["weeks"]
}
let rec:#Record =
{self._summarized.select-one filter = {RecordData phase = phase}}
{if rec == null then
{self._summarized.append {RecordData phase = phase, weeks = week-sum}}
else
set rec["weeks"] = week-sum
}
}
}
{let summary:SummaryTable = {SummaryTable plan}}
{summary.recalc}
{plan.add-event-handler
{on RecordModified at rs:RecordSet do
{summary.recalc}
}
}
{HBox
{RecordGrid
background = "white",
width = 6cm,
height = 6cm,
record-source = summary._source,
{RecordGridColumn "task", width = 2cm},
{RecordGridColumn "phase", width = 1.5cm},
{RecordGridColumn "weeks", width = 1.5cm}
},
{RecordGrid
background = "white",
width = 4cm,
height = 6cm,
record-source = summary._summarized,
{RecordGridColumn "phase", width = 1.5cm},
{RecordGridColumn "weeks", width = 1.5cm}
}
}
|