2023년 9월 21일

출처:

<aside> 💡 현재 요구사항에 대한 파일 업로드 및 가져오기는 없는 상태로 파악됨 arms/reqAdd/getFilesByNode.do

</aside>

파일 가져오기

해당 제품에 대한 파일도 가져와야 함.(fileIdLink=제품아이디)

http://www.a-rms.net/auth-user/api/arms/fileRepository/getFilesByNode.do?fileIdLink=13
<table role="presentation" class="table table-striped" style="margin-bottom: 5px">
										<tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"><tr class="template-download fade in">
			    
			    <td class="preview"></td>
			    <td class="name">
			        <a href="/auth-user/api/arms/fileRepository/downloadFileByNode/4" title="" data-gallery="undefined" download=""></a>
			    </td>
			    <td class="size"><span>9.32 KB</span></td>
			    <td colspan="2"></td>
			    
			    <td>
			        <button class="btn btn-danger btn-sm delete" data-type="POST" data-url="/auth-user/api/arms/fileRepository/deleteFileByNode/4">
			        <i class="fa fa-trash"></i>
			        <span>Delete</span>
			        </button>
			    </td>
			</tr><tr class="template-download fade in">
			    
			    <td class="preview"></td>
			    <td class="name">
			        <a href="/auth-user/api/arms/fileRepository/downloadFileByNode/7" title="" data-gallery="undefined" download=""></a>
			    </td>
			    <td class="size"><span>99.72 KB</span></td>
			    <td colspan="2"></td>
			    
			    <td>
			        <button class="btn btn-danger btn-sm delete" data-type="POST" data-url="/auth-user/api/arms/fileRepository/deleteFileByNode/7">
			        <i class="fa fa-trash"></i>
			        <span>Delete</span>
			        </button>
			    </td>
			</tr></tbody>
									</table>
$("#fileIdlink").val(selectId);
pdServiceDataTableClick(selectId); // 제품, 서비스 가져오기
//파일 업로드 관련 레이어 보이기 처리
$(".body-middle").show();

//파일 리스트 초기화
$("table tbody.files").empty();
// Load existing files:
var $fileupload = $("#fileupload");
// Load existing files:
$.ajax({
	// Uncomment the following to send cross-domain cookies:
	//xhrFields: {withCredentials: true},
	url: "/auth-user/api/arms/fileRepository/getFilesByNode.do",
	data: { fileIdlink: selectId },
	dataType: "json",
	context: $fileupload[0]
}).done(function (result) {
	$(this).fileupload("option", "done").call(this, null, { result: result });
});

javascript에서 파일 불러오기 부분

{
  "files" : [ {
    "c_id" : 4,
    "c_parentid" : 2,
    "c_position" : 1,
    "c_left" : 5,
    "c_right" : 6,
    "c_level" : 2,
    "c_title" : "for PdService",
    "c_type" : "default",
    "ref" : 0,
    "copy" : 0,
    "multiCounter" : 0,
    "status" : 0,
    "searchStr" : null,
    "id" : 0,
    "attr" : {
      "rel" : "default",
      "id" : "node_4"
    },
    "fileName" : "스크린샷 2023-09-05 233935.png",
    "contentType" : "image/png",
    "serverSubPath" : "20230905",
    "physicalName" : "4B3337613A4B401AAF1A80AD1150DA67",
    "size" : 9320,
    "name" : "",
    "url" : "/auth-user/api/arms/fileRepository/downloadFileByNode/4",
    "thumbnailUrl" : "/auth-user/api/arms/fileRepository/thumbnailUrlFileToNode/4",
    "delete_url" : "/auth-user/api/arms/fileRepository/deleteFileByNode/4",
    "delete_type" : "POST",
    "state" : "opened",
    "data" : "for PdService",
    "copied" : false
  }, {
    "c_id" : 9,
    "c_parentid" : 2,
    "c_position" : 6,
    "c_left" : 15,
    "c_right" : 16,
    "c_level" : 2,
    "c_title" : "for PdService",
    "c_type" : "default",
    "ref" : 0,
    "copy" : 0,
    "multiCounter" : 0,
    "status" : 0,
    "searchStr" : null,
    "id" : 0,
    "attr" : {
      "rel" : "default",
      "id" : "node_9"
    },
    "fileName" : "Decompiler.txt",
    "contentType" : "text/plain",
    "serverSubPath" : "20230921",
    "physicalName" : "FEF5B02D414F439C9CF07ED637D2BB4B",
    "size" : 59,
    "name" : "",
    "url" : "/auth-user/api/arms/fileRepository/downloadFileByNode/9",
    "thumbnailUrl" : "/auth-user/api/arms/fileRepository/thumbnailUrlFileToNode/9",
    "delete_url" : "/auth-user/api/arms/fileRepository/deleteFileByNode/9",
    "delete_type" : "POST",
    "state" : "opened",
    "data" : "for PdService",
    "copied" : false
  }, {
    "c_id" : 7,
    "c_parentid" : 2,
    "c_position" : 4,
    "c_left" : 11,
    "c_right" : 12,
    "c_level" : 2,
    "c_title" : "for PdService",
    "c_type" : "default",
    "ref" : 0,
    "copy" : 0,
    "multiCounter" : 0,
    "status" : 0,
    "searchStr" : null,
    "id" : 0,
    "attr" : {
      "rel" : "default",
      "id" : "node_7"
    },
    "fileName" : "화면 캡처 2023-09-16 145232.png",
    "contentType" : "image/png",
    "serverSubPath" : "20230916",
    "physicalName" : "D41E4F58B0B443FC9E50DD0B40465E2E",
    "size" : 99715,
    "name" : "",
    "url" : "/auth-user/api/arms/fileRepository/downloadFileByNode/7",
    "thumbnailUrl" : "/auth-user/api/arms/fileRepository/thumbnailUrlFileToNode/7",
    "delete_url" : "/auth-user/api/arms/fileRepository/deleteFileByNode/7",
    "delete_type" : "POST",
    "state" : "opened",
    "data" : "for PdService",
    "copied" : false
  }, {
    "c_id" : 3,
    "c_parentid" : 2,
    "c_position" : 0,
    "c_left" : 3,
    "c_right" : 4,
    "c_level" : 2,
    "c_title" : "for PdService",
    "c_type" : "default",
    "ref" : 0,
    "copy" : 0,
    "multiCounter" : 0,
    "status" : 0,
    "searchStr" : null,
    "id" : 0,
    "attr" : {
      "rel" : "default",
      "id" : "node_3"
    },
    "fileName" : "스크린샷 2023-09-05 233935.png",
    "contentType" : "image/png",
    "serverSubPath" : "20230905",
    "physicalName" : "AEBFF542D1DE4ADAADFF26DC6DA0B888",
    "size" : 9320,
    "name" : "",
    "url" : "/auth-user/api/arms/fileRepository/downloadFileByNode/3",
    "thumbnailUrl" : "/auth-user/api/arms/fileRepository/thumbnailUrlFileToNode/3",
    "delete_url" : "/auth-user/api/arms/fileRepository/deleteFileByNode/3",
    "delete_type" : "POST",
    "state" : "opened",
    "data" : "for PdService",
    "copied" : false
  } ]
}

<aside> 💡 요구사항 상세 정보 javascript - detail.js, html - detail.html에 추가되어야할 내용 by reqAdd.js, reqAdd.html

</aside>

등록관리에서 가져온 트리형태를 만들기 위해 필요한 화면단

이곳에 출력되는 tree 형태의 데이터 출력 호출부, 정의부

// 탭 클릭 시 호출
build_ReqData_By_PdService();

// 함수 정의
function build_ReqData_By_PdService() {
	  // div id값
		var jQueryElementID = "#req_tree";
	  // api 호출
		var serviceNameForURL = "/auth-user/api/arms/reqAdd/T_ARMS_REQADD_" + $("#selected_pdService").val();
	
	  // common.js에 정의되어있는 함수
		jsTreeBuild(jQueryElementID, serviceNameForURL);
}

tree에 클릭 이벤트가 발생 시 실행되어 우측 디테일 페이지가 보이는 부분

function jsTreeClick(selectedNode) {
	console.log("[ reqAdd :: jsTreeClick ] :: selectedNode ");
	console.log(selectedNode);

	selectedJsTreeId = selectedNode.attr("id").replace("node_", "").replace("copy_", "");
	selectedJsTreeName = $("#req_tree").jstree("get_selected").text();
	if (selectedJsTreeId == 2) {
		$("#select_Req").text("루트 요구사항이 선택되었습니다.");
	} else {
		$("#select_Req").text($("#req_tree").jstree("get_selected").text());
	}
	var selectRel = selectedNode.attr("rel");

	//요구사항 타입에 따라서 탭의 설정을 변경 (삭제예정)
	if (selectRel == "folder" || selectRel == "drive") {
		$("#folder_tab").get(0).click();
		$(".newReqDiv").show();
		$(".widget-tabs").children("header").children("ul").children("li:nth-child(1)").show(); //상세보기
		$(".widget-tabs").children("header").children("ul").children("li:nth-child(3)").show(); //리스트보기
		$(".widget-tabs").children("header").children("ul").children("li:nth-child(4)").show(); //문서로보기

		// 리스트로 보기(DataTable) 설정 ( 폴더나 루트니까 )
		// 상세보기 탭 셋팅이 데이터테이블 렌더링 이후 시퀀스 호출 함.
    // 박현민 - 폴더 일 때 이부분 어떻게 바뀌는지 확인하고 어떻게 바꿀지 고민해야함
		dataTableLoad(selectedJsTreeId, selectRel);
	} else {
		$("#default_tab").get(0).click();
		$(".newReqDiv").hide();
		$(".widget-tabs").children("header").children("ul").children("li:nth-child(1)").show(); //상세보기
		$(".widget-tabs").children("header").children("ul").children("li:nth-child(2)").show(); //편집하기
		$(".widget-tabs").children("header").children("ul").children("li:nth-child(3)").hide(); //리스트보기
		$(".widget-tabs").children("header").children("ul").children("li:nth-child(4)").hide(); //문서로보기
		$(".widget-tabs").children("header").children("ul").children("li:nth-child(5)").show(); //JIRA연결설정

		//이전에 화면에 렌더링된 데이터 초기화
		// ------------------ 편집하기 ------------------ //
		// bindDataEditlTab(data);
		// // ------------------ 상세보기 ------------------ //
		// bindDataDetailTab(data);
		//상세보기 탭 셋팅
		setDetailAndEditViewTab();
		// defaultType_dataTableLoad(selectedJsTreeId);
	}

	//파일 데이터셋팅
	//get_FileList_By_Req();
}
function dataTableLoad(selectId, selectRel) {
	console.log("dataTableLoad - selectRel:::" + selectRel);
	console.log("dataTableLoad - selectId:::" + selectId);
	// 데이터 테이블 컬럼 및 열그룹 구성
	var tableName = "T_ARMS_REQADD_" + $("#selected_pdService").val();

	var c_type = $("#req_tree").jstree("get_selected").attr("rel");
	console.log("dataTableLoad - c_type:::" + c_type);

	var dataTableRef;
	if (selectId == 2) {
		// 데이터 테이블 컬럼 및 열그룹 구성
		var columnList = [
			{ data: "c_id", defaultContent: "-" },
			{ data: "c_left", defaultContent: "-" },
			{ data: "c_title", defaultContent: "-" }
		];
		var rowsGroupList = [];
		var columnDefList = [];
		var selectList = {};
		var orderList = [[1, "asc"]];
		var buttonList = [];

		var jquerySelector = "#req_table";
		var ajaxUrl = "/auth-user/api/arms/reqAdd/" + tableName + "/getMonitor.do";
		var jsonRoot = "";
		var isServerSide = false;

    // common.js 호출
		dataTableRef = dataTable_build(
			jquerySelector,
			ajaxUrl,
			jsonRoot,
			columnList,
			rowsGroupList,
			columnDefList,
			selectList,
			orderList,
			buttonList,
			isServerSide
		);
	} else if(selectRel !== "folder") {
		//select node 정보를 가져온다.
		console.log("tableName:: " + tableName);
		$.ajax({
			url: "/auth-user/api/arms/reqAdd/" + tableName + "/getNode.do?c_id=" + selectId,
			type: "GET",
			contentType: "application/json;charset=UTF-8",
			dataType: "json",
			progress: true,
			success: function (data) {
				// 데이터 테이블 컬럼 및 열그룹 구성
				var columnList = [
					{ data: "c_id", defaultContent: "-" },
					{ data: "c_left", defaultContent: "-" },
					{ data: "c_title", defaultContent: "-" }
				];
				var rowsGroupList = [];
				var columnDefList = [];
				var selectList = {};
				var orderList = [[1, "asc"]];
				var buttonList = [];

				var jquerySelector = "#req_table";
				var ajaxUrl = "/auth-user/api/arms/reqAdd/" + tableName + "/getChildNodeWithParent.do";
				var jsonRoot = "";
				var paramUrl = "?c_id=313&c_left=" + data.c_left + "&c_right=" + data.c_right;
				ajaxUrl = ajaxUrl + paramUrl;
				var isServerSide = false;

        // common.js 호출
				dataTableRef = dataTable_build(
					jquerySelector,
					ajaxUrl,
					jsonRoot,
					columnList,
					rowsGroupList,
					columnDefList,
					selectList,
					orderList,
					buttonList,
					isServerSide
				);
			}
		})
			.done(function (data) {})
			.fail(function (e) {})
			.always(function () {});
	} else {
		console.log("folder clicked");
		var columnList = [
			{ data: "c_id", defaultContent: "-" },
			{ data: "c_left", defaultContent: "-" },
			{ data: "c_title", defaultContent: "-" }
		];
		var rowsGroupList = [];
		var columnDefList = [];
		var selectList = {};
		var orderList = [];
		var buttonList = [];

		var jquerySelector = "#req_table";
		var ajaxUrl = "/auth-user/api/arms/reqAdd/" + tableName + "/getChildNodeWithParent.do?c_id="+selectId;
		var jsonRoot = "";
		var isServerSide = false;

    // common.js 호출
		dataTableRef = dataTable_build(
			jquerySelector,
			ajaxUrl,
			jsonRoot,
			columnList,
			rowsGroupList,
			columnDefList,
			selectList,
			orderList,
			buttonList,
			isServerSide
		);

	}
}

function setDetailAndEditViewTab() {
	console.log("Detail Tab ::::")
	var tableName = "T_ARMS_REQADD_" + $("#selected_pdService").val();
	$.ajax({
		url: "/auth-user/api/arms/reqAdd/" + tableName + "/getNode.do?c_id=" + selectedJsTreeId,
		type: "GET",
		contentType: "application/json;charset=UTF-8",
		dataType: "json",
		progress: true
	})
		.done(function (data) {
      // 박현민 - 여기를 수정해야
			// ------------------ 상세보기 ------------------ //
			bindDataDetailTab(data);
		})
		.fail(function (e) {})
		.always(function () {});
}
//  박현민 - ------------------ 상세보기 ------------------ //
function bindDataDetailTab(ajaxData) {
	console.log(ajaxData);

	//제품(서비스) 데이터 바인딩
	var selectedPdServiceText = $("#selected_pdService").select2("data")[0].text;
	if (isEmpty(selectedPdServiceText)) {
		$("#detailview_req_pdservice_name").val("");
	} else {
		$("#detailview_req_pdservice_name").val(selectedPdServiceText);
	}

	//Version 데이터 바인딩
	var selectedVersionText = $("#edit_multi_version").multipleSelect("getSelects", "text");
	if (isEmpty(selectedVersionText)) {
		$("#detailview_req_pdservice_version").val("요구사항에 등록된 버전이 없습니다.");
	} else {
		$("#detailview_req_pdservice_version").val(selectedVersionText);
	}
	$("#detailview_req_id").val(ajaxData.c_id);
	$("#detailview_req_name").val(ajaxData.c_title);

	//우선순위 셋팅
	$("#detailview_req_priority").children(".btn.active").removeClass("active");
	var select_Req_Priority_ID = "detailView-req-priority-option" + ajaxData.c_priority;
	$("#" + select_Req_Priority_ID)
		.parent()
		.addClass("active");

	$("#detailview_req_status").val(ajaxData.c_req_status);
	$("#detailview_req_writer").val(ajaxData.c_req_writer);
	$("#detailview_req_write_date").val(new Date(ajaxData.c_req_create_date).toLocaleString());

	if (ajaxData.c_req_reviewer01 == null || ajaxData.c_req_reviewer01 == "none") {
		$("#detailview_req_reviewer01").val("리뷰어(연대책임자)가 존재하지 않습니다.");
	} else {
		$("#detailview_req_reviewer01").val(ajaxData.c_req_reviewer01);
	}
	if (ajaxData.c_req_reviewer02 == null || ajaxData.c_req_reviewer02 == "none") {
		$("#detailview_req_reviewer02").val("2번째 리뷰어(연대책임자) 없음");
	} else {
		$("#detailview_req_reviewer02").val(ajaxData.c_req_reviewer02);
	}
	if (ajaxData.c_req_reviewer03 == null || ajaxData.c_req_reviewer03 == "none") {
		$("#detailview_req_reviewer03").val("3번째 리뷰어(연대책임자) 없음");
	} else {
		$("#detailview_req_reviewer03").val(ajaxData.c_req_reviewer03);
	}
	if (ajaxData.c_req_reviewer04 == null || ajaxData.c_req_reviewer04 == "none") {
		$("#detailview_req_reviewer04").val("4번째 리뷰어(연대책임자) 없음");
	} else {
		$("#detailview_req_reviewer04").val(ajaxData.c_req_reviewer04);
	}
	if (ajaxData.c_req_reviewer05 == null || ajaxData.c_req_reviewer05 == "none") {
		$("#detailview_req_reviewer05").val("5번째 리뷰어(연대책임자) 없음");
	} else {
		$("#detailview_req_reviewer05").val(ajaxData.c_req_reviewer05);
	}
	//$("#detailview_req_contents").html(ajaxData.c_req_contents);

	CKEDITOR.instances.detailview_req_contents.setData(ajaxData.c_req_contents);
}
number Method URL
1 GET http://www.a-rms.net/313devgrp/arms/template.html?page=reqAdd
2 GET ~~http://www.a-rms.net/313devgrp/arms/css/override.css
http://www.a-rms.net/dwr/engine.js
http://www.a-rms.net/dwr/util.js
http://www.a-rms.net/dwr/interface/Chat.js~~
3 GET http://www.a-rms.net/auth-user/me
4 GET ~~http://www.a-rms.net/313devgrp/arms/js/reqAdd.js?_=1694933084528
http://www.a-rms.net/313devgrp/arms/img/313_logo.png~~
5 POST ~~http://www.a-rms.net/dwr/call/plainpoll/ReverseAjax.dwr
http://www.a-rms.net/dwr/call/plaincall/Chat.login.dwr~~
6 GET http://www.a-rms.net/auth-user/api/arms/reqAdd/getFilesByNode.do
7 GET http://www.a-rms.net/auth-user/api/arms/pdService/getPdServiceMonitor.do
8 GET http://www.a-rms.net/auth-user/api/arms/pdService/getVersionList.do?c_id=13
9 GET http://www.a-rms.net/auth-user/api/arms/reqAdd/T_ARMS_REQADD_13/getChildNode.do?c_id=1&_=1694934803361
http://www.a-rms.net/auth-user/api/arms/reqAdd/T_ARMS_REQADD_13/getChildNode.do?c_id=2&_=1694934803362