kintoneでサブテーブルが空であるかを判定する

kintoneでサブテーブルが空であるかを判定するスクリプトの例です。列数が0なら空じゃないの?となりがちですが、そう簡単にいきません。
レコード追加画面において、何もしないくてもサブテーブルには1行追加されてしまっているため、そのままレコードを保存すると、何も入力したつもりがなくともサブテーブルに1行ある状態になります。
よって、この1行について、利用者が意図して入力したものなのか否かについて、判定する必要があります。

こちらのサンプルでは、サブテーブル内の行のフィールドがおおよそ空っぽだったら、まあそのテーブルは未入力であるとみなしましょうというアプローチを取っています。この辺のポリシーについては、各々の事情によりプログラムを修正して対応いただければよろしいかと思います。


function isUndef(o){
  return (typeof(o) === "undefined");
}
function isUndefOrEmpty(o){
  return (isUndef(o) || o === "");
}
function isUndefOrEmptyOrNull(o){
  return (isUndefOrEmpty(o) || o === null);
}
function isSubTableEmpty(subTable){
  if (subTable.length === 0) {return true;}
  if (subTable.length > 1) {return false;}
  var record = subTable[0].value;
  for(var fieldName in record) {
    var field=record[fieldName];
    if (field.type === 'SINGLE_LINE_TEXT'&& !isUndefOrEmptyOrNull(field.value))  { return false; }
    if (field.type === 'MULTI_LINE_TEXT' && !isUndefOrEmptyOrNull(field.value))  { return false; }
    if (field.type === 'DATE'            && field.value !== null)          { return false; }
    if (field.type === 'NUMBER'          && !isUndefOrEmptyOrNull(field.value))  { return false; }
    if (field.type === 'GROUP_SELECT'    && field.value.lentgh > 0)        { return false; }
    if (field.type === 'CHECK_BOX'       && field.value.lentgh > 0)        { return false; }
    if (field.type === 'DROP_DOWN'       && !isUndefOrEmptyOrNull(field.value))  { return false; }
    if (field.type === 'USER_SELECT'     && field.value.lentgh > 0)        { return false; }
    if (field.type === 'LINK'            && !isUndefOrEmptyOrNull(field.value))  { return false; }
    if (field.type === 'FILE'            && field.value.lentgh > 0)        { return false; }
    if (field.type === 'ORGANIZATION_SELECT' && field.value.lentgh > 0)    { return false; }
  }
  return true;
}