現在、情報伝達のための掲示板を作成しています。といっても、情報は一方通行で、アプリ内では閲覧さえできればよいです。(情報の更新はスプレッドシート上で行えるため。もちろん、アプリ上で行えるに越したことはないのですが。)
なので、Form機能による情報の追加、編集、削除等をユーザーが行えない状態が好ましいです。
ここまでなら、管理者(特定のメールアドレスでログインしている人)を除き、テーブルへのアクセス権限を"READ_ONLY"にすればよいのですが、表題の通り、できればユーザーが各投稿にいいね!をつけられるようにしたいと考えています。
Behavior機能でテーブル内のいいね数を記録するカラムを更新する(1回押すごとに1加算される)ボタンを、投稿詳細画面(UXはdetail)上に配置したいのです。
しかし、"READ_ONLY"ではもちろんボタンは表示されず、"UPDATE_ONLY"では削除や新規投稿ボタンは消えましたが、編集ボタンが残ってしまいます。(カラムの画面から各項目のEDITABLEをOFFにする方法も考えましたが、投稿編集ボタン自体をなくしたいのでその方法は断念しました。)
いいね!数を記録するテーブルを別途作成してそのテーブルのみ"UPDATE_ONLY"にする方法もためしましたが、それではデータソースが異なるため、いいね!ボタンを投稿詳細画面に配置することができませんでした。
新規投稿作成ボタン@投稿一覧(UXはdeckまたはtable)、投稿編集ボタン@投稿詳細画面、投稿削除ボタンを表示させずに、いいね!ボタンだけを表示させる方法はないでしょうか?
お知恵をお貸しいただけると幸いです。
現状、APPSHEET内にHTMLのコードを張り付け外部のサイト・サービスを「組み込む」ことはできません。AppsheetのアプリのURLを外部のサービスに組み込むこと(逆)はできますが。Google SITEのファイルの最初の一、乃至2ページ程度のスクリーンショットのイメージをPREVIEW的にアップシート上に表示。外部差ビスで実現できるはずです。
グーグル検索しただけで、無数のサービスが検索結果として表示されますが、こちらは私が過去に利用したことのあるサービスの一つです。
https://miniature.io/
ShoKさんの例ではGOOGLE Slideの画面をアップシート上にimageとして表示。
miniature.ioのテスト方法はこちら。
http://ior.ad/6XC0
結論から申し上げるとminiature.ioに限らず、同種の外部サービスでスクリーンショットを生成してくれるツールで生成されるURLをアップシート上でIMAGEとして表示することであたまもPREVIEWを表示しているかのように見せるTRICKです。
「いいね」機能の実装ですね。
手法、やり方は無数存在すると思いますが、私が考えるベストの手法をここではご紹介します。まずは、サンプルアプリをご参照下さい。
https://www.appsheet.com/samples/Sample-App?appGuidString=a96866d4-af6f-48bc-b3d7-8d4cd0030a27
まずいいねボタンを実装させる対象のテーブルについては、すくなくともUPDATE可能となるような設定としておいてください。
そして、名称はなんでも構いませんが、PHYSICAL COLUMNを一つ追加します。
ここでは「LikeIt」という名称とします。データのタイプはENUMです。
このカラムはアプリ上では非表示とするため、SHOWはOffとして設定。
全体像は以下のスナップショットの通りです。
次に以下の通り2つのVirtual Columnを追加します。
一つ目は、LikeItBoolTest。データタイプはYes/No。このカラムも隠すためにSHOWをOFFに設定。
このVCの計算式は、IN(useremail(),[LikeIt]) です。この計算式の根拠等は以下で別途ご説明します。
二つ目のVC。タイプはNumber。SHOWはOnに設定。計算式はcount([LikeIt])
です。
次のステップです。アクションを作成します。
必要なアクションは2つです。いいね、を加えるアクションと削除するアクションです。
まずいいねを加えるアクションから。
Data , set the values of some columns in this rowのアクションで、ステップ1で設置したPHYSICAL COLUMN 、LikeitのValueを変更するアクションです。
計算式は上記スナップしょっとの通りです。
[LikeIt]+{text(useremail())}
という計算式です。まず、[LikeIt]に既にある値(Nullの場合も有り)を取得。このカラムはENUMとしているので実際に入っている値はカンマで区切られた文字列です。Nullにしろ、VALUEがあるにしろ、その値にログインしているユーザーのメールアドレスもテキストとして加える、という計算です。
LikeItBoolTestというVCを作成しました。
計算は以下でした。
IN(useremail(),[LikeIt])
LikeItのカラムは、メールアドレスのリストが値となります。例えば
ABC@GMAIL.COM, BCD@GMAIL.COM, CDE@GMAIL.COM
という風に配列的な状態でメールアドレスが値として格納されているわけです。
このカラムにアプリにログインしているユーザーのメルアドが含まれているかいなか?これをinという関数をつかい、計算させ、結果をyes・noのBOOLIANで返せと指示しているわけです。
いいねを加える、つまり加えるボタンを表示させたい場合ですが、当然に、このBOOLEANの計算結果がFALSE、つまりログインユーザーのメルアドの値がリストに含まれていない場合ですので、[LikeItBoolTest]=falseで見せる、見せないを動的にコントロールします。
二つ目のアクションは、LIKEITのフラグを削除するものとなりますが、いま、↑で作成したアクションの真逆の動作をするアクションを設定すればいいわけです。
[LikeIt]-{text(useremail())}
リストの値から自分のメルアドを削除しろ、という計算。
当然にこのアクションは、[LikeItBoolTest]=true の条件で表示させます。
仕上がりはこんな感じです。
後は、お化粧の部分になりますがFORMATのルールで、良いねのカウント数(LIKEITのリストの長さ)の数字にアイコンを表示させることで美観、UIの向上の策を施したりと。
今回のTIPSは若干高度なトリックですが、理解できてしまうとそのロジックの簡単・単純さに驚かれると思います。
このトリックの中でもアクションのボタンを条件により隠したり、表示させたりする手法をご紹介しましたが、この方法を用いて、DEFAULTでアップシートが自動作成してくれるSYSTEM ACTIONといわれるボタン、たとえば、編集のアイコン、ROW追加の+アイコン、削除のアイコン。これらも動的に表示したり隠したりすることで、TABLEの権限設定を変えることなく同等の効果を実装させることもできます。
アイデア次第、それがアップシートです。