OutSystems - 7 영화 관리 프로그램(Block & Event)

졍잉·2025년 1월 27일
post-thumbnail

오늘은 평점(Rating)에 대해 포스팅해보려 한다.

그 전에 Block이란??

재사용이 가능한 인터페이스 구성요소

Block을 사용하는 이유는 다음과 같다.

  • 재사용성 향상
    - 한번 개발하여 다른 블록이나 화면에서 여러번 사용 가능
  • 유지관리 개선
    - 변경 내용이 다른 블록이나 화면에 바로 개선이 된다.



나타내고자하는 화면은 다음과 같다.

먼저 화면에 별을 뿌리기 전에, 나는 Forge로 Star을 만드는 Action을 가지고 왔으나 연습을 위해 직접 만들어보는 것을 추천한다(난 그냥 있는거 썼음)


Forge로 가서 Star Rating 이라는 검색어를 입력하면 다음과 같은 Module이 생기는데 나는 이 모듈을 열어서 Publish 한 후 기존 Core에서 데이터나 로직을 가지고 오는 방법과 같이 dependencies를 통해 가지고 왔다.

정상적으로 이루어지면 이렇게 Logic에 내가 가지고온 Star Rating의 Action이 생기는 것을 볼 수 있음

Block 안에서 만들 수 있는 요소 일반 Screen에서 만들 수 있는 요소

블록은 일반 스크린 안에 불러와서 사용할 수 있는데, 일반 스크린과 다른 점은 Event를 사용할 수 있다는 것이다.

이벤트는 블록 내에 생성되며, 이벤트를 통해 상위 항목에 데이터를 전송(입력 매개변수가 존재)할 수 있다

가운데에 있는 StarDisplay는 내가 만든 별점 정보 업데이트 Block이다.

먼저 InputParameter로 In_BlockRating을 만들어주기로 한다. 이 안에 SelectStarRating을 만들고 이벤트를 통해 Send된 Rating의 정보를 전달해주도록 하였다.


먼저 사용자가 Rating을 입력하면
입력한 Rating의 값을 Message로 보이도록 한 후,
MovieDetails에서 받아오는 MovieId와 UserId를 Rating 값과 함께 저장하도록 하였다.

Core에서 작성한 CreateOrUpdateRating 로직

데이터베이스를 관리하는 core에서 CreateOrUpdateRating 로직을 dependency를 활용하여 가져오고 이를 활용하여 저장한 Rating의 값은 Refresh를 활용하여 랜더링 과정 없이 바로 update된 값을 뿌리도록 하였다.

MovieDetails 화면에서는 두가지 정보가 필요하기 때문에 두개의 Aggregates를 만들어주었는데,
하나는 User가 저장한 Rating 정보에 대한 데이터, 하나는 특정 Movie에 대한 Average에 대한 데이터를 가진 것으로 생성하였다.

또한 StarDisplay를 출력하는 Client Action을 생성하여 User의 MovieRating을 작성하였을 때 이를 event로 전달하는 Handler로 사용하였다.




위의 과정은 Rating의 정보를 나타내기 위한 과정이었고, 이를 screen에 나타내기 위한 로직은 다음과 같다.

StarDisplay는 Gallary를 사용하여 만들어주었는데, 이후에는 뭔가 정리가 안된 느낌이라....(?) Containter안에 List를 사용하여 정리해주었다.
이 블록은 MovieDetails Screen에서 사용하였는데, 로직의 순서는 다음과 같다.

또한 If 분기 안에 또 If를 넣어서 작성하였는데
첫번째 If는 이 영화의 Rating 정보가 있는지에 대한 조건문을 넣어
정보가 있으면 꽉찬 별을, 정보가 없으면 비어있는 별이 보이도록 하였다.

두번째 If는 Rating의 정보에서 isYourRating인지를 판별하는 조건문을 넣었는데
AverageRate에서도 평점에 따른 꽉찬 별을 표현해야하기 때문에 내 rate라면 수정할 수 있도록, 그렇지 않으면 수정이 불가능하도록 나누기위한 조건문을 생성하였다.

Insight🍀

⭐ 여러개의 파라미터를 사용하는 것이 익숙치 않아 복잡했음
⭐ 블록으로 들어오는 event에 대한 처리를 상위 항목에서 데이터 전송을 통해 해결해야하는데 그 값 없이 진행하여 값이 들어가지 않았음
⭐ 여러개의 조건문으로 StarDisplay라는 하나의 블록으로 다양한 별점표시를 해야했는데 단순하게 하나만 보여주려다보니 내가 원하는 출력값이 나오지 않았음

다음에 block을 사용할 때에는 placeholder와 Aggregates를 활용해서 보다 효율적으로 Block을 사용해봐야겠다!

profile
군계일학으로 살아남기

0개의 댓글