4장. Parameter 기반 개발
다보리 파라메터의 개념
다보리 파라메터란?
다보리 파라메터는 쿼리를 호출하여 내가 필요한 데이터를 불러오긴 위한 여러 요소들이 압축되어 있는 json 파일입니다.
이 파라메터를 다양한 구조로 구성하여 쿼리를 호출할 수 있습니다. 또한 view 페이지의 css적인 요소나 boolean 요소 등등 다양한 것들을 지정할 수 있습니다.
다보리 컴포저블에서는 모든 데이터에 대한 접근을 이 파라메터를 통해 이루어지고 있으며 통상적으로 사용하는 표준 para가 있고 theme에서 사용되는 para가 있습니다.
para의 경로는 프로젝트 '/' 경로를 기준으로 다음과 같습니다.
표준 pra : /dabory/para/ko_KR/{$type}/{$filePath}.json
테마 para : /dabory/themes/$theme/$theme_type/para/ko_KR/{$type}/{$filePath}.json
파라메터의 구조
각각의 요소에 대한 설명
PAP api
ListType1 파라메터의 이해와 사용법
다보리 파라메터 중 가장 많이 사용하는 ListType1 파라메터의 예시
다음은 새로운 LT1을 추가하는 방법입니다.
먼저 erp 페이지의 슈퍼유저메뉴 - 바둑판 불러오기 메뉴를 통해 파라메터 명을 확인합니다.
페이지의 소스에서 list-type1 디렉토리 내 para_name에 해당하는 경로의 json 파일을 똑같이 복사하여 붙여넣습니다.
예를들어 para_name이 /list/list-type1/dowonload/menu/sort-menu 라면 /list/list-type1/dowonload/menu/ 경로로 이동하여
weberp-queries에서도 동일한 경로로 이동하여
해당 페이지 메뉴에서 보여주고 싶은 데이터, 엑셀 다운로드 데이터를 C1~C20까지 순서대로 넣습니다.
쿼리 작성이 끝났다면 방금 만들어줬던 쿼리와 동일하게 새로 만들어준 json 파일의 파라메터도 수정해줍니다.
마지막으로 쿼리를 실행하기 위래 QueryName을 입력해줍니다.
이제 다시 웹으로 가서 바둑판 메뉴 불러오기를 하면 새로 추가한 list를 확인할 수 있습니다.
파라메터를 통해 쿼리 확인하는 방법
api test tool을 이용하여 파라메터로 요청을 보내고 서버에 호출된 쿼리를 확인할 수 있습니다.
예제에서는 vscode의 Thunder Client를 사용했습니다.
kbgolf theme의 커스터마이징 쿼리를 QueryName으로 넣고 테스트해보겠습니다.
요청을 보내기 위해서는 해당 db에 접근할 GateToken이 필요합니다.
프로젝트 루트 경로에 .env.dabory 파일에서 MAIN_API_URL, MAIN_API_CLIENT_ID, MAIN_API_BEFORE_BASE64를 복사해둡니다.
kbgolf는 dbr02 서버에 설치되어 있기 때문에 http://13.124.2.254:18080 로 요청하겠습니다.
참고사항
위 참고사항을 체크하고 게이트토큰을 획득합니다.
이제 이 게이트토큰을 이용하여 dbr02 서버에 쿼리를 요청할겁니다.
http://13.124.2.254:18080/list-type1-page
headers에 획득한 GateToken을 추가해줍니다.
Body 부분입니다.
필요한 부분만 작성한뒤 post로 요청을 보냅니다.
위와 같이 요청한 쿼리를 반환하고 있습니다.
파라메터를 이용한 head/body 복사
head 복사 구현하기
파라메터를 이용하여 sorder의 head와 body를 복사하는 방법을 명시합니다.
예제에서는 sorder(수주)로 테스트를 진행하겠습니다.
필요한 사항
1. 파라메터에 대한 전반적인 이해도
2. JavaScript에 대한 기초적인 이해도
3. API에 대한 이해도
1. 수주리스트의 파라메터인 sorder.json을 살펴보겠습니다.
{
"General": {
"Title": "수주등록",
"PickApi": "slip-form-book",
"ActApi": "sorder-act"
},
"QueryVars": {
"QueryName": "sales/sorder"
},
"HeadSelectOptions": [
{
"Value": "new",
"Caption": "추가",
"Parameter": ""
},
{
"Value": "save-and-new",
"Caption": "저장 후 추가",
"Parameter": ""
},
{
"Value": "copy-to-another",
"Caption": "수주에서 수주로 복사(-)",
"Parameter": "sales/sorder-sorder"
},
{
"Value": "copy-to-another",
"Caption": "매입 가격표에서 수주로 복사(-)",
"Parameter": "purch/pquote-sorder"
},
{
"Value": "copy-to-another",
"Caption": "견적에서 수주로 복사",
"Parameter": "sales/squote-sorder"
},
{
"Value": "delete",
"Caption": "삭제",
"Parameter": ""
}
],
"StatusOptions": [
{
"Value": "확정",
"Caption": "확정"
},
{
"Value": "취소",
"Caption": "취소"
}
],
"BodySelectOptions": [
{
"Value": "body-copy",
"Caption": "수주에서 수주로 품목 복사(-)",
"Parameter": "sales/sorder-sorder"
},
{
"Value": "body-copy",
"Caption": "견적에서 수주로 품목 복사(-)",
"Parameter": "sales/squote-sorder"
},
{
"Value": "multi-delete",
"Caption": "품목 일괄 삭제",
"Parameter": ""
},
{
"Value": "multi-update",
"Caption": "품목 일괄 수정",
"Parameter": ""
}
],
"//FormVars": "ListVars[0]-Caption",
"FormVars": [
{
"SaveButton": "저장",
"AddNewBdButton": "품목 추가",
"AutoSlipNo": "수주번호(자동채번)*",
"Date": "수주일자*",
"Buyer": "매출업체*",
"BuyerContact": "업체담당자",
"DealType": "거래구분*",
"VatType": "부가세*",
"VatTypeRate": "부가세율",
"Status": "상황",
"Delivery": "납품기한",
"PayTerms": "지불조건",
"Destination": "납품장소",
"IsClosed": "종결",
"SgroupName": "영업부서*",
"UserName": "입력사용자*",
"Remarks": "비고"
},
{
"SaveButton": "left",
"AddNewBdButton": "left",
"AutoSlipNo": "left",
"Date": "left",
"Buyer": "left",
"BuyerContact": "left",
"DealType": "left",
"VatType": "left",
"VatTypeRate": "left",
"Status": "left",
"Delivery": "left",
"PayTerms": "left",
"Destination": "left",
"IsClosed": "left",
"SgroupName": "left",
"UserName": "left",
"Remarks": "left"
},
{
"SaveButton": "0",
"AddNewBdButton": "20",
"AutoSlipNo": "20",
"Date": "20",
"Buyer": "20",
"BuyerContact": "20",
"DealType": "20",
"VatType": "20",
"VatTypeRate": "20",
"Status": "20",
"Delivery": "20",
"PayTerms": "20",
"Destination": "20",
"IsClosed": "0",
"SgroupName": "20",
"UserName": "20",
"Remarks": "0"
},
{
"SaveButton": "",
"AddNewBdButton": "",
"AutoSlipNo": "required",
"Date": "required",
"Buyer": "required",
"BuyerContact": "",
"DealType": "required",
"VatType": "required",
"VatTypeRate": "",
"Status": "",
"Delivery": "",
"PayTerms": "",
"Destination": "",
"IsClosed": "",
"SgroupName": "required",
"UserName": "required",
"Remarks": ""
}
],
"// ListVars": "ListVars[0]-Caption, ListVars[1]-Size(%), ListVars[2]-align",
"ListVars": [
{
"$Radio": "",
"$Check": "$Check",
"ItemCode": "품목코드*",
"ItemName": "품명*",
"SubName": "서브명#",
"CountUnit": "단위#",
"SorderQty": "수주수량*",
"SorderPrc": "수주단가*",
"SupplyAmt": "공급가액*",
"VatAmt": "세액*",
"SumAmt": "합계금액*",
"CurrSalesPrc": "매출가#",
"ConfirmDate": "요청납기일",
"DeliDate": "확정납기일*",
"Ref1": "참고1",
"Ref2": "참고2",
"SorderMemo": "품목설명(M)"
},
{
"$Radio": "",
"$Check": "3",
"ItemCode": "10",
"ItemName": "30",
"SubName": "10",
"CountUnit": "5",
"SorderQty": "10",
"SorderPrc": "10",
"SupplyAmt": "10",
"VatAmt": "10",
"SumAmt": "10",
"CurrSalesPrc": "10",
"DeliDate": "12",
"ConfirmDate": "12",
"Ref1": "15",
"Ref2": "15",
"SorderMemo": "10"
},
{
"$Radio": "",
"$Check": "center",
"ItemCode": "left",
"ItemName": "left",
"SubName": "left",
"CountUnit": "center",
"SorderQty": "decimal('sales_qty')",
"SorderPrc": "decimal('sales_prc')",
"SupplyAmt": "decimal('sales_amt')",
"VatAmt": "decimal('sales_amt')",
"SumAmt": "decimal('sales_amt')",
"CurrSalesPrc": "decimal('sales_prc')",
"DeliDate": "right",
"ConfirmDate": "right",
"Ref1": "right",
"Ref2": "right",
"SorderMemo": "right"
}
],
"FooterVars": [
{
"StorageName": "창고",
"BranchName": "점포명",
"QtyTotal": "수량 합계",
"SupplyTotal": "공급가액 소계",
"VatTotal": "부가세액 소계",
"SumTotal": "합계액 소계"
}
]
}