동기
프로젝트의 목표 중 하나는사용자가 메뉴담고 주문을 하였을 때 사장(가게주인)님이 주문을 확인할 수 있도록 하는것 이었습니다.
해당 기능을 구현하기 위해 먼저 사용자가 선택한 데이터들을 DataBase의 Enttity에 저장하도록 해보겠습니다.
처음생각한 방식
처음에는 아래의 결제 화면에서 결제버튼(카드결제 or 현금결제)를 클릭하였을때의 액션에서 과정들이 이루어졌습니다.
payBlock의 Order에 현재 담긴 메뉴들의 정보가 LIst형태로 담겨있습니다.
그리고 해당 데이터탭에서 Order의 Entity를 보면 자동으로 생성된 액션중 CreatOrUpdateOrder를 이용하여 선택한 메뉴의 정보를 업데이트 해주려고했습니다.
그리고 Server Action에서 Actino을 하나 만들어 주고
로직에서 Run Server Action도 하나 만들어주었습니다.
그리고 방금 생성한 Run Server Actoin에는
Action으로는 CreateOrUpdateOrder, Source에는 Order List타입의 변수를 하나 만들어 할당해주었는데 문제가 발생합니다.
문제는 CreateOrUpdate액션의 기본 Source는 Record 타입인데 저희는 List타입으로 메뉴들을 담아 업데이트와 전달이 불가능 한것이었습니다.
위의 문제는 for Each문으로 리스트의 값들을 하나하나씩 전달해주었습니다.
order를 돌면서 order에 있는 속성들을 전달해주었습니다.
여기서 하나의 엔터티를 새로 추가해주었습니다.
이유는 Order는 한테이블에서 주문목록이 있는 엔터티 이기때문입니다.
Order는 각테이블마다 다르기 때문에 사장님 입장에서 데이터를 확인하기 위해 장바구니라는 엔터티를 만들어주었습니다.(Order는 한번 주문을하고 초기화 되어야하기 때문에)
그리고 서버액션의 속성으로 다음과 같이 해주었습니다.
속성에는 현재 For Each문에서 검색한 메뉴의 속성들이 들어가게됩니다.
다시 Server Action으로가서 해당 Run Server Action의 Action과 Source를 변경해줍니다.
액션은 장바구니 CreateOrUpdate로 , Source는 Order Record 타입의 변수를 할당해주었습니다.
이유는 Source에는 전달할 엔터티의 값들이 들어가야하기 때문입니다.
그리고 아래의 속성에는 전달할 데이터들을 맵핑해줍니다.
왼쪽은 장바구니 속성(전달받을 곳)
오른쪽은 Order 속성(전달하는 곳)
결과
결과하면입니다.
현재 장바구니 엔터티에는 아무런 값들이 존재하지 않습니다.
어플을 실행하여 메뉴를 담아보겠습니다.
먼저 메인화면에서 메뉴를 담고 결제 버튼을 클릭해보겠습니다.
결제 버튼 클릭 후 화면입니다.
현금결제버튼을 클릭하면 현재 메뉴들의 정보들이 장바구니에 담겨야합니다.
값들이 잘 담긴것을 확인할 수 있습니다.
'로우코드(Lowcode) > OutSystems프로젝트' 카테고리의 다른 글
outsystems - kiosk(로우코드의 기반의 애플리케이션 구축 및 개선) (2) | 2023.07.01 |
---|---|
outsystems - 9.Dependency , GetuserId() (0) | 2023.06.14 |
outsystmes - 7. 필수옵션수정, 개수 (2) | 2023.06.01 |
outsystems - 6. 메인화면 장바구니세부옵션표시 (0) | 2023.05.31 |
outsystems - 5.5 필수옵션 (1) | 2023.05.27 |