Aipoの入力フォームについて(終了)

いままで入力フォームに入力されたデータをデータベースに正しく格納出来ていなかった理由が判明した。

新規登録用のメソッド(InsertFormData)を呼び出すはずの所を更新用のメソッド(UpdateFormDate)を呼び出していたという理由だった。

更新用のメソッドは、データベースに既に格納されているデータを一旦取り出して、上書きした上で再び格納するという処理を行うため、まだ何もデータベースに格納されていない状態で呼び出すと、処理が止まってしまう。

これがデータベースにデータが格納されなかった理由であった。

このような分岐になっていた部分を修正しところ、正しくデータが格納されるようになった。

この処理を担当する部分は、JSONScreenファイルだった。

例として以下に、ToDoポートレットのJSONScreenファイル内のgetJSONStringメソッドを張る。

  protected String getJSONString(RunData rundata, Context context)
      throws Exception {
    String result = new JSONArray().toString();
    String mode = this.getMode();
    try {

      if (ALEipConstants.MODE_INSERT.equals(mode)) {
        //
        ToDoFormData formData = new ToDoFormData();
        formData.initField();
        formData.loadCategoryList(rundata);
        if (formData.doInsert(this, rundata, context)) {
        } else {
          JSONArray json =
            JSONArray
              .fromObject(context.get(ALEipConstants.ERROR_MESSAGE_LIST));
          result = json.toString();
        }

      } else if (ALEipConstants.MODE_UPDATE.equals(mode)) {

        ToDoFormData formData = new ToDoFormData();
        formData.initField();
        formData.loadCategoryList(rundata);
        if (formData.doUpdate(this, rundata, context)) {
        } else {
          JSONArray json =
            JSONArray
              .fromObject(context.get(ALEipConstants.ERROR_MESSAGE_LIST));
          result = json.toString();
        }
      } else if (ALEipConstants.MODE_DELETE.equals(mode)) {

        ToDoFormData formData = new ToDoFormData();
        formData.initField();
        formData.loadCategoryList(rundata);
        if (formData.doDelete(this, rundata, context)) {
        } else {
          JSONArray json =
            JSONArray
              .fromObject(context.get(ALEipConstants.ERROR_MESSAGE_LIST));
          result = json.toString();
        }
      } else if ("multi_delete".equals(mode)) {

        ToDoMultiDelete delete = new ToDoMultiDelete();
        if (delete.doMultiAction(this, rundata, context)) {
        } else {
          JSONArray json =
            JSONArray
              .fromObject(context.get(ALEipConstants.ERROR_MESSAGE_LIST));
          result = json.toString();
        }
      } else if ("multi_complete".equals(mode)) {

        ToDoMultiStateUpdate delete = new ToDoMultiStateUpdate();
        if (delete.doMultiAction(this, rundata, context)) {
        } else {
          JSONArray json =
            JSONArray
              .fromObject(context.get(ALEipConstants.ERROR_MESSAGE_LIST));
          result = json.toString();
        }
      }
    } catch (Exception e) {
      logger.error("[ToDoFormJSONScreen]", e);
    }

    return result;
  }

modeがupdateとして扱われていたため、doUpdate()が行われ、正しくデータが格納されないようになってしまっていた。

データベース内に新しいテーブルを作成した場合をは、これらのことに気をつけたほうが良い。

これに気づくきっかけになったのは、dockerのall.logsファイルだったので、行き詰まってしまった方は、dockerのログを参照してみると良い。