Curl Global Community
同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: 同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 (/showthread.php?tid=1452)



同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 - Yudai-s - 05-08-2017

  同一のRecordSetを、current-indexをずらして複数のRecordFormで参照し、
  UIで変更した後に各RecordFormの変更内容を一括でRecordSetに反映したいです。
  
  単一項目の変更であれば全てのレコードの変更内容が反映されるのですが、
  複数項目を変更してupdateすると、
  2つ目以降のRecordFormのcurrent-indexが0に変わり適切にupdateできません。
  何か良い回避策はありますでしょうか。
  
  ※各RecordFormはナビゲーションパネルを非表示にしてindexをずらすため、
   変更内容は行単位で競合しない作りを想定しております。

Code:
{curl 8.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}

{def test-data =
    {RecordSet
        {RecordFields
            {RecordField "tf1",  domain = String},
            {RecordField "tf2",  domain = String}
        },
        {RecordData tf1 = "TextField11", tf2 = "TextField12"},
        {RecordData tf1 = "TextField21", tf2 = "TextField22"}
    }
}
{def rf1 =
    {RecordForm
        record-source = test-data,
        display-navigation-panel? = true,
        {HBox
            {TextField {bind value to "tf1"}},
            {TextField {bind value to "tf2"}}
        }
    }
}
{set rf1.current-index = 0}

{def rf2 =
    {RecordForm
        record-source = test-data,
        display-navigation-panel? = true,
        {HBox
            {TextField {bind value to "tf1"}},
            {TextField {bind value to "tf2"}}
        }
    }
}
{set rf2.current-index = 1}


{View
    {VBox
        {CommandButton
            label = "update",
            width = 300px,
            {on Action do
                {rf1.update}
                {rf2.update}
            }
        },
        rf1,
        rf2
    },
    visibility = "normal",
    {on WindowClose do
        {exit}
    }
}



RE: 同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 - tdeng - 05-08-2017

各RecordFormでそれぞれ異なるRecordViewを利用し、各RecordViewのrecord-sourceを同じRecordSetを指定して、対応してみたらいかがでしょうか?



RE: 同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 - tdeng - 05-08-2017

失礼しました。 上記の対応のみでは処理が足りないようですね。RecordFormの仕様か、バグの可能性があります。。。

次のサンプルの様に対応して頂くことが可能でしょうか?

Code:
{curl 8.0 applet}
{curl-file-attributes character-encoding = "shift-jis"}

{def test-data =
    {RecordSet
        {RecordFields
            {RecordField "tf1",  domain = String},
            {RecordField "tf2",  domain = String}
        },
        {RecordData tf1 = "TextField11", tf2 = "TextField12"},
        {RecordData tf1 = "TextField21", tf2 = "TextField22"}
    }
}

{def rv1 = {RecordView
               test-data
           }}
{def rv2 = {RecordView test-data}}

{def rf1 =
    {RecordForm
        record-source = rv1,||test-data,
        display-navigation-panel? = true,
        {HBox
            {TextField {bind value to "tf1"}},
            {TextField {bind value to "tf2"}}
        }
    }
}
{set rf1.current-index = 0}

{def rf2 =
    {RecordForm
        record-source = rv2,||test-data,
        display-navigation-panel? = true,
        {HBox
            {TextField {bind value to "tf1"}},
            {TextField {bind value to "tf2"}}
        }
    }
}
{set rf2.current-index = 1}
{let d1 = {Dynamic rf1.current-index}}
{let d2 = {Dynamic rf2.current-index}}

{def keep-cidx-update = {proc {rf:RecordForm}:void
                            def rf-idx = rf.current-index
                            {with rf.current-index = rf-idx do
                                {rf.update}
                            }
                        }
}
{{View
    {VBox
        {CommandButton
            label = "update",
            width = 300px,
            {on Action do
                {keep-cidx-update rf1}
                set d1.value = "rf1.current-index:[" & rf1.current-index & "]"
                {keep-cidx-update rf2}
                set d2.value = "rf2.current-index:" & rf2.current-index & "]"
            }
        },
        rf1,
        rf2,
        {VBox
            d1,
            d2
        }
    },
    visibility = "normal",
    {on WindowClose do
        {exit}
    }
}.show
}





RE: 同一のRecordSetを、複数のRecordFormで参照してupdateした際の挙動 - Yudai-s - 05-09-2017

>tdengさん
期待通りの動作になりました。ありがとうございます。