私もこのフォーラムを参照しながらやってみたら、「参照先のテーブルにあるフィールドのデータをひっぱってきて表示」することはできました。ただ、参照先(左の表)の[リース開始]や[リース終了]の値の修正をおこなった場合、参照元(右の表)の[リース開始]や[リース終了]は修正後の値が反映されていないのですが、自動的に反映する方法はありますでしょうか?お忙しい所恐れ入りますが、よろしくお願い致します。
👍 🎉😄
わざわざご回答いただき恐縮です。
教えて頂いた通りにやりましたら出来ました!
懇切丁寧にご教授いただきありがとうございました。
select(在庫テーブル[ID],[ID]=[_thisrow].[在庫テーブル]
ですが、まず「親」のテーブル名は在庫テーブルで間違いありませんね?
そのテーブルでKEYとして設定されているFIELDの名称もIDですね?
select(在庫テーブル[ID],[ID]=[_thisrow].[子テーブルで親テーブルを参照REFするとして設定されたフィールド名称]
私の計算サンプルが誤っていました。上記の通り、実際の子テーブルのフィールド名称に置き換えて試されて下さい。
追加のご回答ありがとうございます。
要望通りの動きになりました!
ただ、SELECT 関数の所で、
select(在庫テーブル[ID],[ID]=[_thisrow].[在庫テーブル])
上記のように入力すると、エラーが出てしまうので、試しに下記のような入力にした所、問題なく動いている状態です。
select(在庫テーブル[ID],TRUE)
これからSELECT 関数などのマニュアルを見て、どこがいけないのか修正していこうと思います。
懇切丁寧にご教授頂きありがとうございました。
こちらの説明が要領を得ず申し訳ありません。
●SELECT 関数の所でエラーが出てしまいつまずいてまして・・・
ParentTableNameは、ご説明の冒頭で定義したAPPFORMULAを設定したTABLEの名前を記載すればよろしいでしょうか?
また、IDはどのカラム名を記載したらよろしいでしょうか?
=>ご認識の通り、。ParentTableNameを実際のTableの名称に置き換えてください。また、親のTableでKeyに設定したField名と[ID]を入れ替えてください。
●親のテーブルに設置するアクションですが、下の写真の設定で大丈夫だと思うのですがどうでしょうか?
知識不足ですみません。ご教授下さい。よろしくお願い致します。
=>「在庫テーブル」が親ですね。SCREENSHOTにある設定でOKです。
丁寧なご説明ありがとうございます。
実際にやっているのですが、
●SELECT 関数の所でエラーが出てしまいつまずいてまして・・・
ParentTableNameは、ご説明の冒頭で定義したAPPFORMULAを設定したTABLEの名前を記載すればよろしいでしょうか?
また、IDはどのカラム名を記載したらよろしいでしょうか?
●親のテーブルに設置するアクションですが、下の写真の設定で大丈夫だと思うのですがどうでしょうか?
知識不足ですみません。ご教授下さい。よろしくお願い致します。
AppsheetのManual, Documentに記載はありませんが、「裏技」的な設定を施すことで実現は可能です。但し、若干複雑な設定となります。
まず、スタート地点ですが、他のテーブルからデータをREFERするために既にApp FORMULAには関数が指定されており、そちらは目的通り動作している前提です。そのROWの編集モードに入り、Saveすると計算が走り、最新の計算結果をDATABASEに保存。但し、問題は、参照先のテーブルを更新しても、このROWを再度編集モードに入り保存するACTIONを取らないとデータが更新されない。
これは、Appsheetに限らず、データベースとしては基本DEFAULTの動作ですので自然な結果です。
では、参照先のデータが更新される毎に、そのデータが参照されている「先」のデータを自動更新するには?
方法はひとつではありませんが、私が考える一番簡単なアレンジ、実装方法を紹介します。
まず、APPFORMULAを設定したTABLEを親、参照先のテーブルを子と定義します。
この親テーブルに名称は適当で構いませんが、一つあらたにFIELDを追加します。ここでは、CHANGECOUNTERとします。DATA TYPEはNumber。INITIAL VALUEは0しましょう。1でも100でも構いませんが。このFIELDはアプリ上で見せる必要はなく、アプリの動作をコントロールするものなので、SHOWIFはFALSEとし、VIEW上では非表示となります。
次にアクションを作成。当該行の指定のFIELDの値を任意に更新するアクションです。このアクションは親のテーブルに設定。
上記で新設したCHANGECOUNTERのFIELDSの数字がアクションが起動するたびに一つ数字が増えるようなアクションです。
[CHANGECOUNTER]+1
とデータ更新を関数に指定します。
このアクションもアプリのユーザーに提示する必要はないので非表示設定。
次に子のテーブルにアクションを設置。
Data Excute action on a set of rowsを選択し、子供から見た親テーブルのROWを選択・フィルターするための関数として、以下のようなSELECT 関数を指定。
select(ParentTableName[ID],[ID]=[_thisrow].[ParentTableName])
REFERENCE TABLEは親を指定し、上記で親に設定したアクションをREFERNCE ACTIONにて選択。
アクションの設定はこれにて終了。次にWORKFLOWを新設。
Target Dataは子のテーブル。
Update EventはALL CHANGES
ReactionとしてCHANGE DATA、加えてData Change Actionは上記にて設定した2番目のアクションを選択します。
ー
これらの設定は果たして何をいわんとするものか?
子供のデータが更新されますと、IDで関係づけられた親子間の関係をたどり、親のテーブルにある子からみて直接の親にあたる行のCHANGECOUNTERの値を毎回+1していきます。
実際にFORM VIEWは開いていないのですが、アップシートの挙動として、行内にあるデータがFORMによる更新ではなくACTIONによる更新であってもそのEVENT
をAPPSHEETは感知し、その行内のいずれのFIELDかにAPP FORMULAが設定されていれば、それを再計算してくれるのです。
従い、子供の更新すると、そのデータが仮に親のテーブル内でAPPFORMULAを通じ参照されていればその親の行も上記のアレンジを施すことで自動的に更新してくれる、わけです。
若干、高度・INTERMEDIATE内容となってしまいますが、このようにして、子供を起点とする親へのデータの伝播・自動更新といった機能が実装できます。
ご回答頂きありがとうございます。
おっしゃる通り、SPREADSHEETの値も常に最新の状態を反映させたいのですができますでしょうか?ご教授下さい。よろしくお願い致します。
Virtual Columnを作成し、APP FORMULAの項目に同じ関数を入力すると全てのROWに対し自動計算してくれます。
ご要望は、計算結果をSPREADSHEETにデータとして自動計算させ、常に最新の結果としてておきたい、といったものでしょうか?