例: 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} } } |