0105開発ログ


今日やったこと

  • svn統合パッケージ構造変更および不要なサンプルファイル削除
  • UserVO->名前変更EmployeeVO
  • ユーザー名をクリックすると、関連者テーブルに行(html)を追加し、関連者配列
  • にデータを追加します.
  • 関係者名をクリックすると、関係者テーブルの行と関係者配列データを削除
  • 「追加」ボタンをクリックすると、既存の登録ページ入力に更新された完全な相関配列json
  • に転送されることを確認します.
  • 出張表:traveler_idapprover_idreceiver_id出張VOを削除して修正する->出張者名など、
  • を表示する方法を検討中

    svn


    昨日から、各職員はsvnを通じてそれぞれ地元のプロジェクトを合併しました.最初はsvnが何なのか分からなかったので検索してみるとGitのようなジオメトリ管理ツールの一つでした.

    svnの起動


    このクリップの下部にあるsvn repositoryタブ-new-repository location-url、ユーザー名、pw入力->svnタブ右クリック->checkout urlをインポートするプロジェクト->ローカルtomcatサーバも新しく作成->インポートするプロジェクト新しいtomcatサーバを使用してドライバ検証

    このクリップでsvnを操作する


    右クリック項目(または単一ファイル)->Team->svnアクション
    eclipssvnコメント

    htmlテーブル行の動的変更(js)


    昨日、ユーザー検索画面のレイアウトを変更しました.ユーザーリスト、出張関係者リストの2つの表があります.今日では,ユーザリスト名をクリックして関係者に追加し,関係者名をクリックして関係者テーブルから削除する機能が実現した.
    出張関係者のディレクトリ照会は、出張関係者のVOリストを画面に転送して出力していた.ただし、既存のVOListのオブジェクトを画面上でクリックすると、VO自体が消去されないため、別の記憶方式が必要となる.そこで、コントローラは出張関係者リストをjsonとして作成してjspに渡し、jspはjsonをJavaScript配列にグループ化して格納し、データを操作するように変更します.

    JavaScriptにデータを保存

    const btId = `${BT_ID}`;
    const userType = ${USER_TYPE};
    const jsonRole = ${jsonRole}; // 전체 role 정보 json
    
    var selectedRoles = []; // userType에 맞는 role만 저장
    const allRoles = []; // userType 다른 나머지 role. 추후 selectedRoles와 합쳐서 리턴
    
    window.onload = function() {
    
      if(jsonRole!="" || jsonRole!=null) {
        jsonRole.forEach(function(role, key) {
    
          let userData = {
            "BT_ID":role.bt_ID, 
            "BT_ROLE_ID": role.bt_ROLE_ID ,
            "USER_ID": role.user_ID, 
            "USER_TYPE":role.user_TYPE,
            "USER_NAME": role.user_NAME,
            "USER_DEPT_NAME": role.user_DEPT_NAME,
            "USER_POS_NAME": role.user_POS_NAME
          };
    
          if(role.user_TYPE == userType){
            selectedRoles.push(userData);
            setRole(userData);
          } else {
            allRoles.push(userData);
          }
        })
      }
    }

    filter:オブジェクト配列から特定の条件に合致する値を抽出した配列のみが返されます。


    filter,findIndex,配列マージなどのjavascript機能に関する参考文書ではjavascript es 6(ex.矢印関数)を用いることが多い.しかし、現在使用されている電子政府バージョン(3.8)ではjs矢印関数が機能しないため、既存の方法で記述されている.
    フィルタリファレンス
    // 선택한 사용자 삭제 위해 선택하지 않은 사용자 배열을 원래 배열에 저장
    selectedRoles = selectedRoles.filter(function(role) {
      return role.USER_ID != userData.USER_ID
    });
    
    // 특정 id 가진 객체가 배열에 존제하는지 여부 T/F
    var hasUser = selectedRoles.filter(function(role) {
      return role.USER_ID == userData.USER_ID
    }).length > 0;

    findIndex:オブジェクト配列インデックスの検索

    if(col=="NUM") { // 객체 배열에서 특정 값의 인덱스 찾아 출력
      td.innerHTML = 1 +  selectedRoles.findIndex(function(role) {
        return role.USER_ID == userData.USER_ID;
      });
    }

    concat()オブジェクト配列のマージ


    コメントの整列
    var str = JSON.stringify(allRoles.concat(selectedRoles));

    DBテーブルとjava VOの変更


    出張関係者テーブルを使用しない場合、出張者、承認者、受信者の情報を格納するために、出張テーブルにtraveler_idapprover_idreceiver_id列を作成し、実際に文字列名値を使用します.現在,出張関係者表の人物情報が分離され,出張表も修正される必要がある.まずsqlまずxml、java VOを変更し、最後にDBの列を削除します.

    複数の名前を1つのstringにインポート


    まず、出張リスト画面に出張者の名前情報が必要で、そこから出張情報-出張関係者-従業員表に接続し、従業員表の従業員名を取得します.1回の出張で複数の出張者ができ、複数の名前を組み合わせてインポートしようとしたが、適切なsql関数が見つかった.
    SELECT GROUP_CONCAT(EMP.EMP_Name SEPARATOR ', ')
    FROM BUSINESSTRIP_ROLES AS BTR
    JOIN EMPLOYEE AS EMP ON EMP.EMP_NO = BTR.USER_ID
    WHERE BTR.BT_ID = BT.BT_ID;
    GROUP_CONCAT(컬럼명 SEPARATOR '구분자')を使用して、列の値を区切り文字を含む文字列にインポートします.

    WHEREとHAVING


    上記サブクエリを用いて得られた結果TRAVELER_NAMEに対して出張者名検索機能を作成しようとしたが,whereではTRAVELER_NAMEを条件としてクエリはカラム名を認識できなかった.前回のビデオの授業ではHAVINGを使うのを覚えていたので、やりやすいです.
    <select id="selectBtList" parameterType="searchVO" resultType="egovMap">
    
      SELECT ...
    	BT_ID,
    	LOCATION,
    	AUTHOR_ID,
    	TRIP_START_DATE,
    	TRIP_END_DATE,
    	CONCAT(DATEDIFF(TRIP_END_DATE, TRIP_START_DATE)+1, "일") AS TRIP_PERIOD,
      	(SELECT GROUP_CONCAT(EMP.EMP_Name SEPARATOR ', ')
      	FROM BUSINESSTRIP_ROLES AS BTR
      	JOIN EMPLOYEE AS EMP ON EMP.EMP_NO = BTR.USER_ID
      	WHERE BTR.BT_ID = BT.BT_ID
      	AND BTR.USER_TYPE = 0) AS TRAVELER_NAME
    
      FROM BUSINESSTRIP AS BT
      WHERE 1=1
      <if test="searchKeyword != null and searchKeyword != ''">
        <choose>
          <when test="searchCondition == 1">
            AND #{searchKeyword} BETWEEN TRIP_START_DATE AND TRIP_END_DATE
          </when>
          <when test="searchCondition == 0">
            HAVING TRAVELER_NAME LIKE CONCAT('%',  #{searchKeyword} ,'%')
          </when>
        </choose>
      </if>
      ORDER BY CREATED_AT DESC
      LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
    </select>