본문 바로가기

Salesforce/미니과제

미니과제 두 번째. 중간기록

미니과제로 Salesforce KPI 대시보드 구현을 진행중에 있다.

미니과제 두 번째(화면과 같이 출력되도록 필요한 모든 것을 직접 작업한다)

Recently...

  • 지난 주 금요일 : 스테이지의  한 단계만 테스트로 트리거로 해당 시점이 출력되도록 테스트를 완료했다.
  • 어제 오전 : 2번째, 3번째 단계도 해당 시점이 출력되도록 테스트를 완료했으며, developer console 뿐 아니라 화면 출력을 어떻게 해야 하나 고민했다. 질문을 통해 컨트롤러 필요 없이 가능하다는 것을 알게 되었다.
  • 어제 오후 : calculation을 하고자 했다. 이를 하고자 하니 새로운 필드가 더 필요한 것 같았고, 다시 헤메기 시작했다. fomula 함수에서 DATEDIFF 와 같이 날짜를 계산하는 함수는 없는지 찾아보기도 했다. 그러다 도달한 결론은 모델링을 뒤집어야 한다는 것.....

데이터 모델링이란?
주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업. 논리적인 데이터 모델 구성을 위해서는 데이터베이스의 골격을 이해하고 그 이해를 바탕으로 모델의 기능과 성능적인 측면에서 효율적인 작성이 필요하다. 이는 물리적인 데이터베이스 모델로 환원하여 고객의 요구에 따라 특정 정보 시스템의 데이터베이스에 반영하는 작업을 포함한다

 

현재 내가 진행하고 있는 미니과제는 혼자서 하고 있는 것이고 데이터도 만들어가면서 진행하고 있기 때문에 정합성 등을 고려하기는 어렵다. 그러나 화면에서 출력되기 위한 논리적인 데이터 모델을 구성하는 작업이 포함된다. 어제 알게 된 것은 내가 어느 정도는 생각할 줄 안다고 생각했던 것이 큰 오산이었다는 것! 여기서 좀 벙쪘다. 결과적으로는 내가 모든 시나리오를 짜고 있고 데이터베이스도 그려보고 테이블 구성이 어떠할지 엑셀로 그려가며 진행하고 있는 지금의 나에게 피부에 와닿는 좋은 충격이었다고 생각한다. 

💡진행하고자 하는 방향은 하나의 레코드에 해당 레코드의 스테이지 변경 정보를 모두 담는 형태이다.

 

예시

upsert로 코드를 수정 및 추가하여 테스트 해본 결과

 

SELECT OpportunityId__c, Name, StageName__c, ChangedDate_Oppty__c, Changed_Date_Proposal__c, Period_Stage_AVG__c FROM PeriodbyStage__c


upsert

이렇게 구성하기 위해서는 Id가 새롭게 만들어지지 않도록 insert -> upsert 방식으로 코드를 수정 및 추가하였다.

추가한 코드

스위치 절 위에 추가한 코드이다. 나는 for문을 사용하여 loof 돌려서 진행하는 것만 생각을 했다. 그런데 현재 내가 구현하려고 하는 방향은 레코드 한 건씩 처리하는 것이기 때문에 루프를 돌리지 않고서도 위와 같이 구현이 가능하다.

스위치 문 내에서는Database.insert(pbs);=> Database.upsert(pbs); 이렇게 변경하였다.

 


 

이번에 트리거를 제대로 사용해보는 것도 처음이거니와 insert도 이번에 처음 해보고 upsert도 처음 해보게 되었다. 세일즈포스 개발에 대해 정말 아무것도 모르다가 미니과제를 통해 배치부터 트리거를 직접 만들어 구현해보고 있어서 배우는 게 많다.