分類:FileMaker小技巧 (109 篇)
-
[FileMaker] Get Functions 的學習
FileMaker 有一組很重要的 Get Function 函數 利用 Get Functions,我們可以得到很多系統當前狀態的資訊,比如: Get (AccountName) 可以得到目前系統的使用者帳號名稱 Get (CurrentDate) 可以得到今天的日期 Get (Device) 可以得到使用的裝置為何 Get (FoundCount) 可以得到找到的數量 ……等等許多的資料 但我們不管是用 Data Viewer 或是新建一個 Calculation Field,只能一次看一個函數,有沒有什麼方法可以一次顯示「所有」Get 函數所抓取的資料,來幫助我們觀察與學習呢? 答案當然是有的。 搭配一些外部程式跟設定,我們可以達成這個目標:一次顯示多個 Get Functions 的資料 {{AccountName}} = Get (AccountName) 在往下進行設定之前,我們還需要先建立一個觀念,也就是 {{AccountName}} = Get (AccountName) 兩個東西基本是一樣的,唯一的差別在於,Get (AccountName) 需要用 Field 來顯示,而 {{AccountName}} 則只需要放置到一般文字框即可顯現。 進入 Layout Mode,Insert > Other Symbol… […]
-
[FileMaker] Custom Function 導入與應用,以 NumToCText 函數為例
範例檔案下載 FileMaker 除了內建自有的 Function 函數(以下都用 Function 稱呼)之外,還可以導入外部 Function(比如別人設計好的 Function),或是甚至你可以自己把常用的步驟製作成 Function,這些預設以外的 Function,就是所謂的 Custom Function 自訂函數。 Custom Function 何處尋? 假設我們今天想要達成一個功能:把「阿拉伯數字」轉換成「中文大寫數字」,我們就可以使用 Custom Function 來達到這樣的目標。一開始我們還不熟悉怎麼去寫這樣的一個 Function。 有句話說得很好:「不需要重複打造輪子!」尤其身為一個資料庫或程式開發者,應該要懂的借力使力。 那我們應該去哪裡尋找這個「輪子」- Custom Function 呢? 一般會去幾個地方尋找 Custom Function 的資源: briandunning.com fmfunctions.com Matt Petrowsky 的 Github 第一、第二個網站是由眾人貢獻的 Custom Function,加起來應該有上千個,第三個 Github 是由 FileMaker 資深開發者 Matt 所獨自貢獻的 Custom Function 資源。以上全部都是免費的資源,感謝這些開發者無償的付出! 我們要找的數字轉換 Custom Function 位於 briandunning.com,Function 名稱叫做 NumToCText,如同 Function 功能敘述:把羅馬數字轉換成中文。 將 […]
-
[FileMaker] Debug 的一個過程記錄
FileMaker 不像其他的程式語言,其他的程式語言在出現錯誤的時候基本都會主動伴隨著「錯誤提示」,寫程式的人可以根據這些錯誤提示作為線索,進而找出問題並將錯誤更正過來,錯誤提示可以說是開發程式最重要的一個環節。 FileMaker 不知道爲什麼,很少情況會主動出現「錯誤提示」,在沒有錯誤提示的情況下,開發者不容易直接去把問題給找出來,想要修正某個錯誤,就必須根據自己的經驗,東試一下西試一下,可能需要花費好一段時間才能把問題找出來。 最近遇到的一個例子 以我自己正在維護的一個牧場系統為例,用 Portal 搭配 ExecuteSQL 函數把需要的工作列出來,以提醒牧場工作人員近期工作事項。 下方圖中共有兩個 Portal,分別代表不同的區域,上方的 Portal 可以正常顯示工作,而下方的 Portal 是空白的,表示下方的 Portal 可能有兩個情況: 所有工作已全數完成,沒有工作需要被顯示出來。 出現問題,導致這部分的工作列表沒有被顯示。(簡單說就是有 Bug) 我去看了一下資料,比對之下發現第二個 Portal 的確是有工作需要被顯示出來的,所以應該是第 二個情況:出現問題,導致這部分的工作列表沒有被顯示。 這個時候就要真的需要開始 Debug,檢查看看 FileMaker 哪邊有問題。 檢查的項目 Relashionship 關係圖是否有問題?關係連線兩方的 Field 是否有弄錯? Relashionship 關係的選項是否有不需要的設定,或是設定錯誤? 是某沒有選到正確的 Portal? Portal 裡面的 Field 欄位、Merge Field 欄位是否有對應到同樣的 Portal 名稱? Portal 的選項是否有不需要的設定,或是設定錯誤? Field 欄位的設定或寫法是否有錯誤? 檢查複雜的欄位寫法 由於這個欄位是 Calculation Field 計算欄位,中間又用上較為特殊的函示跟表示方法,計算過程的確有比較複雜,發生錯誤的機率也比較高,確定前面幾個大的檢查方向沒有問題之後,就開始專心處理 Calculation […]
-
[FileMaker] Data Viewer 介紹+取代方案(當你還沒有買 FileMaker Advanced 的時候)
FileMaker Advanced 有一些進階功能,是一般版的 FileMaker 所沒有的,其中一個功能就是 Data Viewer 萬用的餐巾紙 曾看到有人用一句話來形容 Data Viewer -「那張用來寫計算式的餐巾紙。」我看到的說法是用英文呈現的,目前我無法還原英文原句,但我想應該跟這個意思相去不遠。 我覺得以「那張用來寫計算式的餐巾紙」來形容 Data Viewer 真的是再精妙不過了,當我們跟朋友或是自己在咖啡廳的時候,常常有那麼一瞬間,靈感忽然產生,這時候通常沒時間再去拿筆記本或打開電腦,「只好」順手攤開桌上那張餐巾紙,開始構思想法、或是計算廠商給的報價加總、甚至寫下舞台劇劇本初稿…等等。 Data Viewer 類似的場景,在 FileMaker 開發的時候,也可能遇到,有時候開發到一半,可能會想說:「這個函數,配合某個算式,是不是能達成自己想要的目標呢?」 這時候就是打開 Data Viewer 的好時機,在 Expression 的地方輸入計算式,Data Viewer 會自動幫我們算出「結果」,或是如果有寫的不對的地方,還可以在電腦上「塗塗改改」,等到這些半成品算式真的 OK 之後,再將整個計算式成品複製,貼到需要的 Field 或 Script 等等地方,完成當初所設定的目標。 在 Watch 的底下綠色「+」按一下,就能開始編輯計算式。假設我們想要得到今天的日期,可以在 Expression 輸入: Get(CurrentDate) 下方的 Result 會自動出現結果:2017/12/25,就是今天的日期。這樣的好處是我們不用為了某個測試而另外新增一個 Field 欄位去做這個計算。 在開發的任何時候,只要有需要,都可以到 Data Viewer 簡單做計算,把要的算式暫時保留,不要的算式刪去即可,非常方便,非常輕鬆無負擔,是不是就很像「萬用的餐巾紙」帶給我們的好處,不要小看小小的一張餐巾紙,偉大的靈感可能因此而誕生喔! 沒有 FileMaker Advanced 怎麼辦? 最好的情況下,開發 […]
-
[FileMaker] 如何自動去掉惱人的文字格式?(利用 TextFormatRemove 函數)
範例檔案下載 複製貼上文字的困擾 不知道你是否也有這個經驗,在瀏覽器或其他應用程式複製一段文字,貼到 FileMaker 的同時,也把這段文字的字型、字樣、字體大小、顏色,都一起貼過來了,FileMaker 會主動儲存這些資訊,這時候如果使用的人不知道如何調整更改的時候,就會讓資料庫顯得雜亂,看起來不淸爽。 範例 我們可以看到下圖右邊是特斯拉的網站,我們複製這段文字:「最佳續航力。主動安全防護。」貼到左邊的文字欄位,可以明顯地看到網站上的字型、字體大小、顏色都被保留下來了。 註1:如果沒有相對應的字體,FileMaker 會自動抓取做顯示 註2:因為網站字體顏色為白色,把左邊文字欄位改為預設灰底,方便觀看 我們想要的其實是一般的字型就好,不然會顯得突兀。 TextFormatRemove 函數的應用 這時候,利用 函數可以解決這個問題。 快速鍵:Command + Shift + D 進入 Manage Database,點兩下 text 進入欄位選項 Auto-Enter 部分,點選 Calculated value 選項後方的 Specify…,進入計算區 在計算區輸入函數: TextFormatRemove ( Self ) 點選 OK,回到 Auto-Enter 部分 最後記得將 “Do not replace existing value of field (if any)” 取消打勾 (強迫每一次更改都重新計算) 快速鍵:Command + B 回到 […]
-
[FileMaker] Primary key 主鍵的幾種型式
Primary key、Serial Number、ID 以上這些稱呼,可能都指的是同一個東西,也就每個資料表 Table 中不可或缺的「主鍵」。 主鍵具有「不重複性」,提供每一筆記錄的唯一參考値,做爲與其他資料表 Table 建立關係時候的一個依據。這樣說可能還是有點複雜,我們可以把主鍵想像成一筆記錄的「身分證字號」,不可能重複,而資料庫可以運用這個字串的特性來做各種連結,就不會出現重複所產生錯誤。 這邊用的稱呼是「字串」而非「數字」,原因是主鍵通常是文字+數字的複合體呈現。當然也可以全是數字,會因爲每個開發者所習慣的方式不同,而有不同的作法。 我自己接觸過的 Primary key (id) 有三種,分別介紹如下: Primary key (id) 第一型: 傳統的作法,就是採用 Serial Number 固定加 1 的方式,比如第一筆記錄就是 1,第二筆記錄是 2,第三筆記錄是 3,……,第 100 筆記錄是 100,依此類推:1, 2, 3, ……, 100 Primary key (id) 第二型: 承襲第一種作法,但稍微有點變動,把 Invoice Table 裡面的 id 加上前綴 INV,後面在接上 Serial Number,第一筆記錄變成 INV000001,第二筆記錄是 INV000002,第三筆記錄是 INV000003,……,第 100 筆記錄是 INV000100,依此類推:INV000001, INV000002, INV000003, …… , […]
-
[FileMaker] 如何隱藏物件 Hide Object
範例檔案 下載 「隱藏物件」Hide Object 是一個相當好用的功能,試著用一個簡單的例子來看看怎麼達成。 請看下方圖片,假設兩個帳號(admin 和 user)都可以登入這個 檔案,我想要在帳號是 admin (也就是權限 Full Access)的時候,顯示記錄的序號 ID,方便開發設計;而當其他 user 登入這個檔案的時候,不需要看到序號 ID 這樣做的好處有兩個,能讓使用者介面更加清爽、以及開發者方便開發。 首先進入 Layout Mode,然後將要隱藏的項目選取起來。 這裡有兩個要隱藏的物件 Objects:ID 標籤、ID 欄位。 選取後,叫出 Inspector(快速鍵:Command+I) 點選至 Inspector 最上方第四個小圖示 Data 資料的部分,往下看到 Behavior,第一行就是 Hide object when,這就是我們要用到的功能。 Hide object when 後方有個鉛筆的小圖示,點選這個鉛筆小圖示,呼叫出 FileMaker 的「計算功能」,這邊能幫我們判斷什麼時候要藏藏圖示,我們想要在登入帳號「不是」admin 的時候,隱藏物件,於是我們這樣寫: Get ( AccountName ) ≠ “admin” 確定,完成設定。 接著重新用 user 登入做測試,ID 標籤、ID 欄位都成功被隱藏起來。 […]
-
[FileMaker] 上一筆資料 / 下一筆資料,按鈕製作
範例檔案下載 有朋友問到要如何在同一個 Layout 中製作切換前後筆資料的按鍵。 這是蠻重要的功能,實際上要做到也不難,在 FileMaker 內建的功能中已經有這樣的功能存在,功能表列的左上角(參考下圖),左邊兩個按鍵分別代表的功能: 「<」代表「前往上一筆資料」 「>」代表「前往下一筆資料」 接著兩個數字 「2」代表「目前位於第 2 筆資料」 「10」代表「總共有 10 筆資料」 猜想這位朋友是想要製作出「<」「>」這兩顆按鈕,以達成切換「前往上一筆資料」及「前往下一筆資料」的功能。 步驟: 新增一顆「<」按鈕,Action 選 Single Step,Go to Record/Request/Page [Previous] 同樣「>」按鈕複製以上步驟,最後將 [Previous] 改成 [Next] 即完成兩顆按鈕製作。 我同步也把「目前位於第 n 筆資料」及「總共有 m 筆資料」的功能也加進來。 同樣是運用內建好的 {{RecordNumber}} 跟 {{TotalRecordCount}} 功能。 在 Layout Mode 中可以自動加入{{RecordNumber}} 與 {{TotalRecordCount}} 這樣就簡單完成了。 範例檔案下載
-
[FileMaker] On Object Modify
這個影片雖然是 FileMaker 10 的舊影片,但對於理解該如何使用 Script Trigger (On Object Modify) 的功能有些幫助,這邊留下來做個記錄。
-
[FileMaker] 函數 Position
Position 目的 Returns the starting position of the specified occurrence of searchString in text. 格式 Position(text;searchString;start;occurrence) 參數 text – any text expression or text field searchString – any text expression or text field representing the set of characters you want to find. start – any numeric expression, or field containing a number, representing the number […]