회고

[수습일지] - 10

Happy Programmer 2023. 4. 5. 23:20

1.Lightning App Builder를 사용할 경우 아래와 같은 앱/페이지를 구축할 수 있다.

  • 표준 페이지로 드릴다운하는 단일 페이지 앱
  • 해당 분기의 주요 영업 전망 또는 주요 잠재 고객을 추적하는 앱과 같은 대시보드 스타일 앱
  • 사용자가 비용을 입력하고 제출한 비용을 모니터링하는 비용 앱과 같이 특정 작업을 해결하기 위한 "포인트" 앱
  • 사용자의 요구 사항에 맞게 조정된 개체에 대한 사용자 정의 레코드 페이지
  • 사용자가 가장 많이 사용하는 구성 요소 및 기능이 포함된 사용자 지정 홈 페이지

내부 표시되는 내용들은 머리글, 도구 모음, 구성 요소 창, 페이지 캔버스, 속성 창이 존재한다.

 

 

2.Lightning App Builder에서 페이지를 만들 때는 type과 모델을 선택하고

내부 레이아웃에 들어갈 구성 요소들을 선택한 다음 아래와 같이 어떻게 할당할지를 선택해 처리할 수 있다.

  • 페이지를 개체의 조직 기본값으로 만듭니다.
  • 페이지를 특정 Lightning 앱의 기본 개체 레코드 페이지로 만듭니다.
  • Lightning 앱, 레코드 유형 및 프로필의 조합에 페이지를 할당합니다.
  • 데스크톱 또는 휴대폰과 같은 폼 팩터에 페이지를 할당합니다.

앱, 프로필에 할당하기를 선택할 경우 특정 앱의 구성 요소에 특정 프로필을 바로 할당하기 때문에

하나의 프로필에 맞춤으로 생산할 경우 편리하다.

 

 

3.홈 페이지와 달리 사용자 정의 레코드 페이지는 데스크톱의 Lightning Experience뿐만 아니라 Salesforce 모바일 앱에서도 지원되며 생성 도중 추가한 내용의 See How It Works를 통해 실제로 어떻게 동작되는지 예시를 볼 수도 있다.

페이지를 동적으로 만들기 위해 필터를 설정할 경우 조건을 충족하기 전에는 설정한 구성 요소를 숨기고 조건이 충족되는 순간 구성 요소가 나타나게 할 수 있다.

 

 

4.수식은 field로 취급되기 때문에 생성을 위해서는 수식이 필요한 객체를 선택한 다음

Fields & Relationships 내부에서 field type을 formula로 생성하면 된다.

 

수식 편집기 내부에서는 아래와 같은 버튼들이 존재한다.

  • Simple Formula - 단순한 버전의 수식 편집기로 Advanced보다 기능이 적다.
  • Advanced Formula - 더 복잡한 것이 아닌 기능의 차이기 때문에 Advanced 사용이 권장된다.
  • Insert Field - 수식에 사용할 수 있는 필드를 가져올 수 있다.
  • Insert operator - 사용 가능한 연산자 목록을 보여주지만 익숙해지면 직접 입력이 빠르다.
  • Functions - 수식 함수를 가져올 수 있으며 매개변수가 필요할 수 있다.
  • Check Syntax - 수식이 문제 없이 처리되는지를 확인할 수 있다. 여기서 문제란 출력 값을 따지는 것이 아니라 알 수 없는 변수명이 들어갔거나 매개변수가 필요한 함수에 매개변수를 넣지 않는 등을 말한다.

 

5.롤업 요약 필드는 단일 계정 내 필드만 사용하는 것이 아니라

관련 목록에 있는 집합 같은 관련 레코드에서도 값을 가져올 수 있다.

 

이런 특성을 사용하기 위해서는 Master-detail 관계여야 한다.

 

요약 필드 유형은 Count, Sum, Min, Max 등이 있는데 Count는 관련 레코드의 합계, Sum은 필드의 합계, Min은 해당 필드 최저값, Max는 최대값이다.

 

 

6.계정 및 연락처에서 소셜 계정, 연락처, 리드 등을 사용해 Twitter 게시물을 찾는 등의 News 기능 사용을 할 수 있으며

SNS 계정, 연락처 및 리드 기능을 사용하려면 먼저 관리자가 조직에 대해 이 기능을 활성화하고

사용자가 개인 설정을 구성해야만 한다.

 

 

7.계정 및 연락처는 아래와 같은 규칙을 가지고 관리해야 한다.

  • 계정에 대한 회사의 명명 규칙을 알기
  • 항상 연락처를 계정과 연결
  • 셔플에서 비활성 계정과 연락처가 손실되지 않도록 주의
  • 활성 소유권을 유지
  • 레코드를 최신 상태로 유지

 

8.lead 부분은 조회하는 방식에 대해 더 집중하고 있었기 때문에

주의사항이라고는 필터링 체크 등의 간단한 내용 뿐이었다.

 

아무래도 salesforce 공통 부분 학습이기 때문에 사용법이 들어있는 느낌이 강했다.

 

 

9.견적서 제작 전 일괄되게 가격 목록을 지정하고 싶을 경우(업체 또는 지역마다 다른 가격으로)

price book을 사용하면 편리하게 그룹별 가격 정책을 관리할 수 있다.

 

실제 사례에 적용할 때는 Opportunity 항목 내부의 Products에 각각의 항목을 추가할 수 있는데

그 기준을 price book에서 할 수 있으며 Custom price book 선택이 가능하고

수량, 할인률을 설정해 추가할 수 있다.

 

 

10.견적서를 만들기 위해서는 setup 메뉴에서 quote settings로 들어가 활성화를 시켜줘야 하며 견적서의 layout 또한 선택해야 한다.

Quotes 항목이 보일 경우 New Quote를 통해 견적서를 생성할 수 있으며 견적에 대한 구체적 사항들을 입력할 경우 products에 입력된 상품이 들어오는데 견적에 품목을 자체적으로 추가할 수 있다.

견적 또한 quote templates에 들어가 템플릿을 만들어 둘 수 있으며 최종적으로 생성된 견적 내부 메뉴에서 Create PDF를 통해 PDF 파일로 생성도 할 수 있다.

 

 

11.캠페인은 Salesforce 도구 상자에서 가장 사용되지 않는 도구 중 하나지만

고객을 그룹화 하거나 내용을 추적하는데 효과적이기 때문에

마케팅 활동 측면에서는 유용하게 사용될 수 있는 기능이다.

 

계층을 사용해 마케팅 활동을 그룹화하고 분석할 수 있으며

각 계층은 롤업 → 출시, 피드백 등의 이니셔티브 → 이메일, 시연회 같은 개별 마케팅 프로그램 등의

전략적 계층 구조나 기간적 계층 구조, 그리고 대규모 이벤트 하나를 세분화 해서 계층화 할 수도 있다.

 

 

12.캠페인을 계층화하기 위해서는 상위 캠페인으로 지정할 캠페인이 생성되어 있어야 하며

하위 캠페인의 Parent Campaign 필드에 상위 캠페인을 넣을 경우 계층화된다.

 

이런 계층화가 될 경우 상위 캠페인에서는 사용자 정의된 캠페인 레코드를 생성해 관리가 가능한데

위치, 시기, 장비, 인력 등 추적해야 하는 요소에 대한 사용자 정의 필드를 넣을 수 있고

직접 필요한 데이터를 하위 캠페인에서 formula를 사용해 가공할 수도 있다.

 

 

 

 

 

(1).백준 9610번 사분면은 축과 1~4 사분면에 위치한 점들이 주어질 때
각각의 축과 사분면에 몇개의 점이 있는지를 출력하는 문제였다.

다만 결과만 바로 출력하는 것이 아닌 1~4 사분면을 형식에 맞게 출력하고
추가로 축에 있는 값들을 출력하게 했기 때문에
각각 변수명 지정이 아닌 배열에 담은 다음
for문으로 1~4 사분면을 템플릿 리터럴 사용으로 처리했고
나머지 축 부분은 console을 사용해 출력했다.

const input = `5
0 0
0 1
1 1
3 -3
2 2`.split('\n')

const dots = new Array(5).fill(0)
for(let i = 1 ; i < input.length ; i++){
    const [x, y] = input[i].split(' ').map(Number)
    if(x === 0 || y === 0){
        dots[0]++
    }
    else if(x > 0 && y > 0){
        dots[1]++
    }
    else if(x < 0 && y > 0){
        dots[2]++
    }
    else if(x > 0 && y < 0){
        dots[4]++
    }
    else if(x < 0 && y < 0){
        dots[3]++
    }
    
}
for(let i = 1 ; i <= 4 ; i++){
    console.log(`Q${i}: ${dots[i]}`)
}
console.log(`AXIS: ${dots[0]}`)