//Untuk melakukan filter dan menunjukkan issue tabel yang masih open
dan di assign kepada saya.
OR(
AND((TIMENOW() >= "9:00 AM"), (TIMENOW() < "5:00 PM")),
IN(WEEKDAY(TODAY()), {"Saturday", "Sunday"}),
IN(
USEREMAIL(),
SELECT(Users[Email], [Special Access?], TRUE)
)
)
//Memberikan jumlah hari kerja dalam satu bulan kecuali hari sabtu dan
minggu.
[Date Completed]>=TODAY()-2
//memberikan tanggal penyelesaian yang lebih besar dari 2 hari dari hari
ini.
Untuk semua expression disini, kita juga bisa dengan mudah mencarinya
di https://www.appsheet.com/Support.
Contoh berikut adalah apabila kita mencari kata TODAY, maka akan
diberikan artikel dan juga contoh aplikasi yang terkait dengan expression
TODAY itu. Contoh aplikasi bisa kita copy dan di pelajari untuk di
terapkan fungsinya kedalam aplikasi yang kita buat.
Search artikel dan Contoh Aplikasi
Penerapan TODAY() akan banyak di temui untuk beragam aplikasi yang
dibuat dengan appsheet. Bisa juga kita batasi data dengan menggunakan
security filter dimana dibatasi data yang terdownload ke user device
hanyalah data yang hari ini saja untuk mempercepat proses sync,
mempercepat aplikasi dalam mengolah data dan memberikan fokus
kepada apa yang harus dilakukan dalam waktu dekat saja.
.NOW()
Expression NOW() akan memberikan tanggal dan waktu (jam, menit,
detik) saat ini (sekarang) untuk DATETIME column yang sesuai dengan
device yang di gunakan oleh pengguna aplikasi. Kadang kita
menginginkan waktu yang tepat selain dari pada tanggal, maka kita bisa
memilih DATETIME column dan gunakan NOW() sebagai intial value
timestamp nya. Tergantung dimana kita akan gunakan expression NOW()
tersebut, tapi beberapa contoh adalah sebagai berikut:
AND(MONTH([DATE])=MONTH(NOW()), YEAR([DATE])=YEAR(NOW()))
Tergantung bagaimana kita mempunyai cara kerja dan logika aplikasi apa
yang akan kita terapkan, dan sering kali ISNOTBLANK() digunakan untuk
melakukan filter awal agar jumlah data yang di analisa menjadi lebih
sedikit sehingga aplikasi menjadi lebih cepat di running, seperti:
ISNOTBLANK( FILTER( "Tool List", ([Quantity At Storage) > 0) ) )
akan mengurangi beban pencarian data karena kita sudah limit pencarian
di tabel tersebut dengan ISNOTBLANK().
(AND()
Beberapa contoh expression diatas sudah memberikan expression AND() ini, yang kita gunakan apabila kita
menginginkan agar SELURUH item memberikan hasil TRUE. Baiknya kita gunakan bahasa yang sederhana untuk
memahami expression yang akan kita buat, misalnya kita ingin agar Appsheet memberikan daftar dari semua item di
suatu tabel dimana column special instruction itu ada value nya DAN tanggal selesai lebih besar dari pada tanggal
mulai yang kita mau DAN JUGA tanggal selesai lebih kecil dari pada tanggal selesai yang kita specify. Ini adalah cara
membaca expression diatas. Beberapa contoh penggunaan AND():
AND(FALSE, FALSE)
// FALSE
AND(FALSE, TRUE)
// FALSE
AND(TRUE, FALSE)
// FALSE
AND(TRUE, TRUE)
// TRUE
AND(
ISNOTBLANK([Grade]),
([Grade] = "A")
)
// TRUE apabila grade column memiliki value "A" dan tidak kosong.
AND(
([Name] = "Acme"),
([Rating] > 3),
[Preferred?]
)
// TRUE kalau rating>3 dan namanya adalah Acme dan column preferred itu yes.
AND(
(LEN([_THIS]) > 3),
CONTAINS([_THIS], "@")
)
// TRUE kalau column memiliki 3 huruf atau lebih, dan mengandung simbil @
AND(
IN(
[Sales Contact],
LIST(USEREMAIL(), "")
),//2
NOT(
[DO NOT CALL]
),//4
([Last Contact] < (TODAY() - 30))//3
)//1
//Validasi row tidak overalap:
AND(
([End] > [Start]),
(COUNT(
FILTER(
"MyTable",
OR(
AND(
([Start] >= [_THISROW].[Start]),
([Start] <= [_THISROW].[End])
),
AND(
([End] >= [_THISROW].[Start]),
([End] <= [_THISROW].[End])
)
AND(
([Start] < [_THISROW].[Start]),
([End] > [_THISROW].[End])
)
)
)
) = 0)
)
AND([Color]="Green",[CompleteDate]>TODAY())
// Mencari warna hijau dengan completion date yang belum terlampaui.
IFS(
AND(
[_THISROW_BEFORE].[status_code]<>"Completed",
[status_code]="Completed"
), NOW(),
AND(
[_THISROW_BEFORE].[status_code]="Completed",
[status_code]<>"Completed"
), "",
AND(
[_THISROW_BEFORE].[status_code]="Completed",
[status_code]="Completed" ),
[_THISROW_BEFORE].[act_end_date])
//Contoh penggunaan AND() untuk memberikan value blank("") ataupun
NOW()
OR()
OR() apabila digunakan untuk menjawab BENAR atau SALAH (TRUE /
FALSE ) dalam suatu expression, akan memberikan hasil apabila ada salah
satu pilihan yang memberikan nilai TRUE. Bisa dengan bahasa sehari-hari
kita bayangkan suatu kalimat pilihan seperti apakah ada pilihan berikut ini
yang benar? Kalau ada, maka tampilkan pilihan tersebut. Beberapa
penggunaan seperti:
OR(FALSE, FALSE)
// FALSE
OR(FALSE, TRUE)
// TRUE
OR(TRUE, FALSE)
// TRUE
OR(TRUE, TRUE)
// TRUE
OR(([_THIS] < -2), ([_THIS] > 2))
// TRUE apabila column value berada di luar range -2 ke 2.
OR(([Color] = "Red"), ([Color] = "Yellow"), ([Color] = "Green"))
// TRUE kalau column value itu ada yang berwarna salah satu dari Red,
Yellow, or Green.
OR() seperti diatas sama saja dengan:
IN([Color], {"Red" "Yellow", "Green"})
//Untuk memberikan access (misalnya di Show-if):
OR(
AND((TIMENOW() >= "9:00 AM"), (TIMENOW() < "5:00 PM")),
IN(WEEKDAY(TODAY()), {"Saturday", "Sunday"}),
IN(
USEREMAIL(),
SELECT(Users[Email], [Special Access?], TRUE)
)
)
Atau memberikan pilhan berdasarkan column:
OR(CONTAINS([Fruit],"Oranges"),CONTAINS([Fruit],"Apples"),CONTAINS([Fruit],"Ban
anas"))
NOT()
Kadang kita ingin agar analisa data itu berdasarkan suatu yang TIDAK
atau BUKAN kebernaran. Seperti misalnya BUKAN hari sabtu, atau BUKAN
hari libur ataupun BELUM selesai.
Maka bisa digunakan NOT() expression seperti beberapa contoh berikut
ini:
NOT(TRUE)
// FALSE
NOT(FALSE)
// TRUE
NOT(ISBLANK([Detail]))
// Yes!
IF(FALSE, "Yes!", "No!") // No!
IF((1 > 0), "Yes!", "No!") // Yes!
IF((1 < 0), "Yes!", "No!") // No!
IF(
ISBLANK(""),"Yes!",
"No!"
)
// Yes!
IF(
NOT(ISBLANK("")),"Yes!",
"No!"
)
// No!
// Equivalent to
IF(
ISNOTBLANK(""),"Yes!",
"No!"
)
IF(
([Count] < 0), 0,
[Count]
)
// Returns 0 kalau value count lebih kecil dari 0 dan kalau tidak value itu sendiri yang akan di berikan.
// Equivalent to:
MIN(
LIST(0, [Count])
)
IF(
([Date] = TODAY()), TRUE,
FALSE
)
// Returns TRUE kalau DATE value adalah hari ini, selain itu FALSE.
// Equivalent to:
([Date] = TODAY())
IF(([Status] = "Open"), "Green",
IF(([Status] = "Closed"), "Red",
IF(([Status] = "Not Started"), "Blue",
"Purple")
)
)
//Returns "Green" kalau status OPEN, RED kalau status closed, atau blue
kalau status belum dimulai, selain itu Purple.
//USERSETTINGS IF:
IF(
USERSETTINGS("Names in uppercase?"), UPPER([Name]),
[Name]
)
// Returns NAME column sebagai Huruf besar kalau user setting true.
IF(
ISNOTBLANK([Phone Number]), [Phone Number],
"(no phone)"
)
IF(
ISNOTBLANK([Customer].[Discount Rate]),
([Price] * [Customer].[Discount Rate]),
[Price]
)
//Leap Year?
IF(
(MONTH(
DATE(
"2/28/"
& YEAR(
TODAY()
)
)
+ 1
)
= 2
),
"leap year",
"not leap year"
)
// Weekday or Weekend?
IF(
IN(
WEEKDAY(TODAY()),
LIST(1, 7)
),
"It's the weekend!",
"It's a weekday."
)
IFS()
IFS() merupakan salah satu logic expression yang hampir selalu ada
apabila Hart Exinity membuat aplikasi. IFS() akan mengecek kondisi yang
diberikan secara urutan dari atas kebawah dan akan berhenti mengecek
apabila ditemui kondisi yang menghasilkan TRUE. Jadi, kita harus
mengurutkan kondisi-kondisi sedemikian rupa sehingga kondisi yang
paling tidak bawah adalah kondisi yang terakhir. Contoh untuk
menentukan kondisi SUBMITTED, REVIEWED, atau APPROVED.
Beberapa contoh penulisan IFS() adalah:
IFS(TRUE, "Yes!") // Yes!
IFS(FALSE, "Yes!") // blank (no value)
IFS(FALSE, "Yes!", TRUE, "No!") // No! (equivalent to
IF(FALSE, "Yes!", "No!")
//Contoh penulisan untuk pemilihan nomor telphone:
IFS(
ISNOTBLANK([Mobile Phone]), [Mobile Phone],
ISNOTBLANK([Work Phone]), [Work Phone],
ISNOTBLANK([Home Phone]), [Home Phone]
)
//Equivalent to:
ANY(
LIST(
[Mobile Phone]
[Work Phone],
[Home Phone]
)
- LIST("")
)
//Summarize Delivery
IFS(
ISBLANK([Due Date]),
"Unscheduled",
(TODAY() > [Due Date]),
"Overdue!",
(TODAY() = [Due Date]),
"Due today",
(TODAY() = ([Due Date] - 1)),
"Due tomorrow",
TRUE,
(([Due Date] - TODAY()) & " days remain")
)
//Convert a weekday number to a name.
IFS(
(WEEKDAY(TODAY()) = 1), "Sunday",
(WEEKDAY(TODAY()) = 2), "Monday",
(WEEKDAY(TODAY()) = 3), "Tuesday",
(WEEKDAY(TODAY()) = 4), "Wednesday",
(WEEKDAY(TODAY()) = 5), "Thursday",
(WEEKDAY(TODAY()) = 6), "Friday",
TRUE, "Saturday",
)
//Functionally equivalent to but less efficient than:
SWITCH(
WEEKDAY(TODAY()),
1, "Sunday",
2, "Monday",
3, "Tuesday",
4, "Wednesday",
5, "Thursday",
6, "Friday",
"Saturday",
)
***************
Contoh secara logika kita menginginkan:
If Speed > 70 then = Speed - 30
If Speed is lower than 70 but higher than 30 then = Speed -15
If Speed lower than 30 then = Speed, maka penulisannya menjadi:
IF(
[Speed] > 70 , [Speed] - 30,
IF(
[Speed] < 30 , [Speed] ,
[Speed] - 15
)
)
//OR:
IFS(
([Speed] > 70),
([Speed] - 30),
([Speed] > 30),
([Speed] - 15),
TRUE,
[Speed]
)
SWITCH()
SWICH() merupakan bentuk lain dari logika expression dengan
menganalisa semua kemungkinan dan memberikan default value kalau
tidak ada yang memberikan nilai TRUE. Contoh penulisan expression
seperti:
SWITCH(
WEEKDAY(TODAY()),
1, "Sunday",
2, "Monday",
3, "Tuesday",
4, "Wednesday",
5, "Thursday",
6, "Friday",
"Saturday",
)
//Sample:
DISTANCE(HERE(), LATLONG(13.993581, -40.555116))
LINKTOFORM()
LINKTOFORM() akan membawa user kapada form yang di inginkan dan
mengisikan dengan beberapa data yang kita specify.
LINKTOFORM("Table2 Form", "Name2", [Name1], "Color2", [Color1])
LINKTOFILTEREDVIEW()
Apabila kita ingin membawa user kepada suatu view berdasarkan kepada
suatu filter criteria, maka gunakan LINKTOFILTEREDVIEW():
LINKTOFILTEREDVIEW("Some Table View", [Date Column] = TODAY())
LINKTOFILTEREDVIEW(“Order View”, [Order Status] = Open)
LINKTOFILTEREDVIEW(
"Table A",
(
COUNT([meso] - LIST())
<> COUNT([meso] - [_THISROW].[meso])
)
)
/*
LINKTOFILTEREDVIEW(“AllProperties_Results”,
IN([Neighborhood_name], [_THISROW].[Neighborhood_name]))
LINKTOFILTEREDVIEW("Inventory",
IN([Product Code], LIST(“100001”,“100002”, "100003")))
CONCATENATE(
LINKTOFILTEREDVIEW(
"Inventory",
IN([Product Code], LIST(“100001”,“100002”))
),
"&quickedit=true"
)
ANY()
ANY() merupakan pasangan dari SELECT() yang akan memberikan salah satu dari item yang berada di daftar:
ANY(Students[Name])
ANY(SELECT(Students[Name], TRUE))
ANY(LIST(1, 2, 3)) //returns Number: 1
ANY({"Red", "Yellow", "Green"}) //returns Text: Red
ANY(SELECT(Products[Price], ([Color] = "Orange")))
//Equivalent to:
LOOKUP("Orange", "Products", "Color", "Price")
ANY(TOP(SORT(Products[Price], TRUE), 1))
//Equivalent to
MAX(Products[Price])
Preferred Value
ANY(
TOP(
(
LIST([Mobile Phone], [Office Phone], [Home Phone])
- LIST("")
),
1
)
)
//Equivalent to:
INDEX(
(
LIST([Mobile Phone], [Office Phone], [Home Phone])
- LIST("")
),
1
)
SUM()
SUM(Classes[Seat Count])
SUM(SELECT(Classes[Seat Count], TRUE))
SUM([Discounts]) // The sum of the items in the Discounts column value, where Discounts is of type List.
SUM(LIST(1, 2, 3)) //returns Number: 6
Sum Values from Select Rows
SUM(
SELECT(
Deliveries[DeliveryCharge],
AND(
([DateDone] >= [_THISROW].[BeginDate]),
([DateDone] < [_THISROW].[EndDate])
)
)
)
LOOKUP()
LOOKUP("Bob's Burgers", "Restaurants", "Name", "Phone")
//Equivalent to
ANY(SELECT(Restaurants[Phone], ([Name] = "Bob's Burgers")))
LOOKUP([_THISROW], "Managers", "Location", "Name")
//Equivalent to
ANY(SELECT(Managers[Name], ([Location] = [_THISROW])))
LOOKUP([_THISROW].[Order ID], "Orders", "Order ID", "Order Date"))
//Equivalent to
ANY(SELECT(Orders[Order Date], ([Order ID] = [_THISROW].[Order ID])))
//or
[Order ID].[Order Date].
LOOKUP([_THISROW].[Order ID], "Orders", "Order ID", "Order Date")
The equivalent SELECT() expression:
ANY(SELECT(Orders[Order Date], ([_THISROW].[Order ID] = [Order ID])))
COUNT()
Berhitung dan membuat chart
COUNT() sudah cukup jelas dengan adanya SELECT().
FILTER()
Filtering Data
FILTER() merupakan special case SELECT() dimana yang diberikan adalah key
value. FILTER() dengan IN() akan memberikan hasil yang efficient dan lebih
cepat.
FILTER("Customers", ([Provinsi] = "Bali"))
FILTER(Customers, ([Kecamatan] = "Cakung"))
IN()
IN() sudah cukup jelas dan tinggal di mantapkan saja.
EOMONTH()
EOMONTH() biasanya digunakan untuk membatasi bulan ke bulan yang
lainnya dalam kalender. Contoh ada di bagian bawah dari tulisan ini.
REF_ROWS()
References
Ini adalah expression yang singkat dan biasanya dibuat secara otomatis
apabila kita menyatakan suatu column adalah type REF. Akan tetapi,
penggunaan harus juga di perhatikan karena dapat memperlambat sytem
sync time.
LOGIKA APLIKASI
Logika Aplikasi
Dalam membuat aplikasi, kita akan di hadapkan pada logika yang merupakan keinginan bagaimana aplikasi akan
berfungsi. Mengerti terntang 11 terminologi penting di Appsheet merupakan langkah yang penting untuk di lakukan.
App Formulas
Initial Values
Virtual Columns
Dereference
Editable_If
Valid_If
Suggested Values
Show_If
Enum dan EnumList
Key
IsAPartOf
Appsheet memberikan guidance yang sangat jelas untuk setiap terminologi yang di gunakan, yang kita lakukan disini
adalah berusaha memahami dari sudut pandang kreator aplikasi dan gunakan fungsi yang tepat untuk menghasilkan
aplikasi yang berkualitas.
Beberapa lokasi Expression ditandai dengan "FLASK"
App Formulas
Apabila kita menginginkan column value langsung terupdate setelah melakukan edit atau update dari suatu row,
maka bisa gunakan App Formula. App Formula dapat dapat di gabungkan dengan logika operator seperti IF(), IFS(),
ISBLANK(), ISNOTBLANK(), SWITCH().
Beberapa contoh penggunaan app formula seperti:
IFS(
AND(
ISNOTBLANK([Jam Keluar]),
ISNOTBLANK([Jam Masuk])
),
[Jam Keluar]-[Jam Masuk],
TRUE,
""
)
Formula diatas memliki arti sebagai berikut: "Apabila column Jam-Keluar dan column Jam masuk tidak
kosong, maka isikan formula dengan mengurangi nilai di column Jam keluar dikurangi jam masuk.
Sedangkan apabila kondisi tersebut tidak terpenuhi, maka isi dengan blank ("") saja."
Sering juga kita akan bertemu dengan logika aplikasi dimana kita ingin intial value di gabungkan dengan kondisi lain,
maka kita bisa gunakan IF() atau IFS() atau logika expression lainnya yang sesuai.
Virtual Columns
Salah satu fungsi dari virtual column adalah untuk dapat langsung melihat hasil perhitungan setelah sync di lakukan.
Virtual column akan selalu terhitung ulang setiap kali melakukan sync, walaupun tidak ada data yang berubah.
Spreadsheet column - ada baiknya kita panggil sebagai column bukan virtual, adalah column yang terlihat di
spreadsheet atau di database. Virtual column tidak terlihat. Untuk dapat lebih memahami antara virtual column dan
bukan virtual column, maka kita bisa melakukan penge
pengetesan
tesan dengan memberikan app formula seperti TODAY()+1
untuk kedua type column test tersebut (yang memiliki nama berbeda). Apabila keesokan hari kita buka aplikasi dan
melakukan sync, maka virtual column akan menunjukkan tanggal esok hari, sementara yang bu bukan virtual column
akan menunjukkan tanggal hari ini. Awalnya akan agak membingungkan, apalagi dengan adanya formula TODAY(),
akan tetapi, sebenarnya kedua type column tersebut memiliki fungsi yang berbeda dan terserah kita sebagai App
Creator untuk menggunakan fungsinya.
Virtual columns akan memberatkan system dan menambah durasi waktu sync apabila app formula nya
tidak efisien.
Apalagi apabila banyak sekali virtual column dan harus melihat data yang semakin hari semakin bertambah banyak,
tinggal menunggu waktu saja sebelum akhirnya aplikasi menjadi terlalu berat untuk di gunakan.
Virtual column dapat juga membuat aplikasi terasa cepat dan bisa menunjukkan hasil sebelum sync di lakukan.
Contoh aplikasi keranjang belanja yang kami shared bisa menjadi contoh acuan untuk ini.
Kadang juga, kita butuh untuk menggabungkan beberapa column menjadi satu column agar dapat di track informasi
detailnya, seperti menggabungkan nama depan dengan nama belakang, atau menggabungkan nama dengan nama
kota, atau nama orang dengan nama pelajaran, dan lainnya. Untuk ini, gunakan virtual column sebagai column
bantuan.
Dereference
Istilah reference, dereference dan reverse reference akan lebih mudah di mengerti apabila kita membayangkan
bahwa antara satu tabel dengan tabel lain ada jendela penghubung (REF). Biasanya kita memberikan REF column
untuk membuat relation antara tabel tersebut. Dengan adanya column REF, maka kita bisa gunakan dereference,
yang berupa [REF].[ColumnLain]. Seolah-olah, REF column adalah jendela yang bisa melihat nilai dari column-column
di tabel yang lain.
Ini akan bermanfaat untuk intial value, app formula atau expression lainnya termasuk di virtual column.
Untuk reverse reference, boleh di bilang merupakan kebalikan dari dereference dan secara syntac hanya dibedakan
dengan adanya TITIK atau tidak pakai TITIK.
Selain REF, kita bisa juga menggunakan ENUM dan ENUMLIST dengan based type REF, yang akan memberikan hasil
yang sama seperti REF. Yang membedakan, penggunaan ENUM dan ENUMLIST based type REF ini tidak akan
membuat virtual column secara otomatis - ini bisa membuat sync time menjadi lebih cepat.
Kadang, kita ingin mendapatkan value dari tabel lain yang terhubung dengan REF, tergantung bagaimana skenario
tabelnya, tapi kita bisa membuat dereference dengan methode seperti contoh order tabel dan email address:
[Order Id].[Customer Name].[Email]
IsAPartOf
Istilah IsAPartOf dapat di artikan bahwa tabel ini merupakan bagian dari tabel utama, tanpa adanya tabel utama,
maka tabel ini tidak akan berarti. Tabel dengan IsAPartOf dari tabel lain akan bisa di tambahkan contentnya dari
tabel lain tersebut, sehingga menghapus data utama juga akan menghapus semua record di tabel pendukungnya.
Appsheet membatasi IsAPartOf hanya bisa dilakukan satu kali, tapi ada cara dimana IsAPartOf bisa di lakukan
sebanyak yang kita mau, ini kadang bermanfaat dan bisa di gunakan untuk kasus-kasus tertentu. Salah satu contoh
aplikasi kamu adalah terkait dengan 1 tabel photo yang dihubungkan dengan beberapa tabel lain dengan isaAPartOf
semua, silahkan di copy dan di pelajari langkahnya di contoh Aplikasi kami: Ambil Banyak photo.
Enumlist LatLong
Key
Awalnya akan butuh sedikit waktu untuk memahami tentang key di appsheet. Key merupakan identitas dari row
yang kita buat sebagai bagian dari aplikasi yang memudahkan kita dalam penyusunan data. Key column tidak boleh
ada yang duplicate, karena itu appsheet memiliki key generator yaitu berupa UNIQUEID() ataupun
UNIQUEID("UUID"). Key tidak selama nya berupa UNIQUEID(), kadang bisa berbentuk text, number ataupun tanggal
beserta waktu ataupun nama negara misalnya. Selama kita yakin (dengan pengetahuan yang cukup) bahwa tidak
akan mungkin data bisa duplicate apabila satu atau lebih orang memasukkan data di waktu yang sama. Contoh key
yang kurang bagus adalah nama orang, kadang nama orang bisa sama. Tapi apabila kita gunakan email address
sebagai key, maka tidak akan duplicate.
Suggested Values
Suggested value merupakan nilai yang di sarankan, jadi sebagai app creator, kita berusaha memberikan suatu nilai
yang di sarankan berdasarkan kondisi tertentu dan diusahakan nilai itulah yang akan di pilih. User akan tetap bisa
merubah sendiri nilai yang di sarankan tersebut. Nilai ini bisa berupa daftar sederhana, reference ke tabel lain,
ataupun sesuatu yang lebih complex dari itu.
(WorkersTbl[ID] - SPLIT(SELECT(JobsTbl[Workers], TRUE), " , "))
Untuk contoh diatas, suggested value akan melihat tabel worker dan menghilangkan semua worker yang telah di
assign job nya di job tabel. jadi yang muncul hanya worker yang belum mempunyai assignment.
Editable_If
Editable_If merupakan suatu pertanyaan yang harus dijawab sendiri oleh App Creator, kapan data boleh di edit oleh
user? apakah data boleh di edit oleh user? dengan kondisi apa data boleh di edit oleh user. Biasanya dengan
membuat pernyataan FALSE, maka data tidak dapat diedit oleh user setelah initial value di berikan. Atau dengan
memberikan ISNOTBLANK([_THIS]), maka data tidak bisa di edit apabila ada cell value yang telah terisi.
Sering juga kita membuat row editable apabila user adalah orang yang melakukan input. Atau editable apabila user
adalah admin atau lainnya.
Valid_If
Valid_if biasanya digunakan bersamaan dengan REF, tapi kadang juga bisa berdiri sendiri. Misalnya kita ingin data
agar di input di jam tertentu.
Show_If
Sering kita ingin agar data itu ada, tapi tidak perlu di munculkan. Maka kita gunakan show_if. Kadang, kita ingin agar
data hanya muncul di form saja, atau jangan muncul di form dan hanya muncul di view tabel saja. Semua tergantung
kepada kreasi dari App Creator.
LATIHAN 1
Data
Dalam menyusun data, sebaiknya dilakukan dengan pemikiran sederhana dan kita bisa ajukan beberapa pertanyaan
yang akan di jelaskan dibawah dengan contoh kasus adalah sebagai berikut.
Ada keinginan untuk membuat aplikasi untuk mencatat nilai ujian murid sekolah di beberapa kelas di
suatu sekolah. Di dalam tiap kelas tersebut ada sekitar 40 orang murid dan ada sekitar 10 mata
pelajaran. Setiap mata pelajaran melakukan 3 kali ulangan dalam satu semester (6 bulan). Bagaimana
cara penyusunan tabel data agar bisa di buatkan aplikasi appsheet nya?
Apabila di perhatikan kasus diatas, maka ada beberapa entity yang ada didalamnya, digambarkan secara sederhana
sebagai berikut:
Setelah itu aplikasi biasa di share kepada orang lain untuk mendapatkan masukan dan kita bisa langsung perbaiki apabila ada kesalahan.
Penerapan database dan prinsip hubungan antara tabel telah di berikan
contoh di Latihan-1 belajar Appsheet ini. Mudah-mudahan membantu dan di
persilahkan untuk mengikuti forum appsheet dan juga bertanya langsung
kepada Hart Exinity dalam bahasa Indonesia, kami akan jawab segera semua
pertanyaannya. Belajar Appsheet bisa dilakukan untuk kasus yang lain, dan
kali ini di berikan kasus mengenai murid dan nilai ujiannya karena pasti kita
pernah mengalami hal tersebut dan semoga bisa di pahami sebagai bagian
dari pengembangan Citizen developer Indonesia terutama untuk
penggunaan Appsheet Indonesia supaya lebih banyak yang bisa
memanfaatkannya.