此系列文章通過虛構場景介紹Ntaub表格開發流程。示例假設某公司人力部門要制定招聘計划,要求各部門按月提交招聘需求,招聘需求需經人力總監和公司總經理審批。
軟件可以從http://www.ntaub.com/download下載。
最終會完成的表格樣式如下圖。
1. 在目錄中新建名為“招聘計划”的子目錄,之后新建項放在此目錄中。
2. 新建名為“招聘計划表”的表格,在新建后系統會自動打開表格編輯器,或是在目錄中表格右鍵菜單里選編輯打開編輯器。在表格編輯器中,可看到表格默認含有一主鍵字段、一篩選器和一數據源。
3. 選中數據源,在右側屬性界面中,為表格指定一數據源。再將數據表改為recruit_plan,表格數據將保存到此名稱的MongoDB集合(Collection)中。
4. 選中主鍵字段,將字段標題改為申請ID。
5. 選中字段節點,使用右鍵菜單或工具欄的新建按鍵,逐個創建下列字段,此步驟暫只設置字段名稱、標題和值類型,其他屬性保留默認。字段可以通過右鍵菜單或工具欄按鍵刪除、復制,拖動字段可調整順序。
名稱 | 標題 | 值類型 |
applier_id | 申請人賬號 | 文本 |
applier_name | 申請人 | 文本 |
recruit_year | 招聘年份 | 數字 |
recruit_month | 招聘月份 | 數字 |
reason | 申請理由 | 文本 |
detail | 明細 | 數組 |
total_head_count | 招聘人數 | 數字 |
submit_time | 提交時間 | 日期 |
submit_status | 提交狀態 | 文本 |
create_time | 創建時間 | 日期 |
6. 創建字段后可點擊工具欄的保存按鍵保存,點擊測試按鍵可在標簽欄中打開表格測試環境,可以嘗試新建、修改、刪除記錄。在開發過程中可隨時打開測試環境查看效果,測試環境使用測試數據庫,不會對最終發布版本的生產數據庫造成影響。
7. 回到表格編輯界面,將數據源的創建時間設為字段create_time,創建人ID設為字段applier_id,創建人姓名設為字段applier_name。
系統在保存新記錄時會自動對這3個字段賦值,比使用字段的計算腳本更方便。
修改字段create_time屬性,勾選含時間選項框,將格式改為yyyy-MM-dd HH:mm:ss,創建時間字段將顯示時分秒信息。並將默認寬度設為150。
另外,因只需給用戶看到申請人姓名,需要隱藏申請人賬號,將applier_id的生成列屬性設為否。
8. 假設要求招聘年月輸入改為下拉列表模式,且限制用戶只能選擇未來的6個月。先把recruit_year字段控件改為列表,在列表值中添加2018、2019、2020三個年份。
2018年的列表值條件中輸入下面腳本以限制顯示6個月內的年份。類似輸入其他年份條件,替換腳本中黃色標示值即可。
var now = new Date(); var ym = now.getFullYear() * 100 + now.getMonth(); // js月份從0至11 return ym > 201705 && ym < 201811; |
再把recruit_month字段控件設為列表,加入12個月列表值。
一月份列表值條件中輸入下面腳本以限制顯示6個月內的月份。類似輸入其他月份條件,替換腳本中黃色標示值即可。
if($row().getField("recruit_year").isNull()) { return false; } else { var now = new Date(); var y = now.getFullYear(); var m = now.getMonth(); // js月份從0至11 var tmp = m - 5; var lM = (tmp == 6 ? (y + 1) * 100 : y * 100 + m + 1); var hM = (tmp > 0 ? (y + 1) * 100 + tmp - 1 : y * 100 + m + 6); var am = $row().getField("recruit_year").getValue() * 100 + 0; // 1月: 0; 2月: 1; ... return am >= lM && am <= hM; } |
為了在新建記錄時自動填入默認值,在recruit_year字段初始值屬性中輸入下面腳本。
var now = new Date(); var m = now.getMonth(); // js月份從0至11 if(m == 11) { return now.getFullYear() + 1; } else { return now.getFullYear(); } |
在recruit_month字段初始值屬性中加入下面腳本。
var now = new Date(); var m = now.getMonth(); // js月份從0至11 if(m == 11) { return 1; } else { return m + 2; } |
9. 將reason字段的控件類型改為多行文本框。因此字段輸入長文本,出於性能考慮,禁止此字段的排序和篩選操作,將排序和篩選屬性設為否。
To be continue...