SmallBuilder Help
AppExchangeContact Us
🇰🇷 한국어
🇰🇷 한국어
  • SmallBuilder 헬프
  • 시작하기 전에
    • 라이선스 및 권한 할당
    • 조직 통화 설정
    • 번역 활성화
    • 연결된 앱 설정
  • 📦SmallBuilder line items
    • 릴리즈 노트
      • '25 업데이트
        • v 1.40
        • v 1.39
        • v 1.38
        • v 1.37
    • 제품 소개
    • 시작하기 전에
      • 라이선스 및 권한 할당
      • 조직 통화 설정
      • 번역 활성화
      • 연결된 앱 설정
    • 빌더
      • 빌더 시작하기
      • 기본 설정 (Default Setting)
        • 장치에 맞게 반응형 화면 설정하기
        • 편집기 화면 비율 조절하기
        • 편집기 레이블 변경하기
        • 조회 선택기 설정
          • 로드 시 전체 검색
          • 필터 기본 펼치기
          • 레코드 중복 선택 허용
          • 성능 향상을 위한 캐싱
          • 페이지별 레코드 수 설정하기
        • 라인 아이템 편집기 설정
          • 요약 표시하기
          • 첫 번째 열 고정하기
      • 빌더 셋업 절차
        • 개체 연결 (Relate Objects)
          • 부모 개체 (Parent Object)
          • 라인 아이템 개체 (Line Item Object)
            • 설정 방법
            • 저장된 라인 아이템의 필터 및 정렬 순서 설정하기
            • 조건에 따라 라인 아이템 삭제 제어하기
            • 자동 번호 설정하기
          • 조회 개체 (Lookup Object)
            • 설정 방법
            • 키워드 검색 설정하기
            • 조회 선택기 차단하기
            • 조회 레코드의 필터 및 정렬 순서 설정하기
        • 조회 선택기 설정 (Setup Lookup Selector)
          • 열 추가하기
          • 열 순서 변경하기
          • 레이블 변경하기
          • 열 너비 설정하기
          • 텍스트 정렬 변경하기
          • 이미지 URL을 이미지로 보여주기
          • 데이터소스를 위한 가상 열 추가하기
        • 라인 아이템 편집기 설정 (Setup Line Item Editor)
          • 열 추가하기
          • 가상 열 추가하기
          • 열 순서 변경하기
          • 레이블 변경하기
          • 기본값 설정하기
          • 소스 필드: 부모 또는 조회의 특정 필드 값을 기본값으로 할당하기
          • 열 너비 설정하기
          • 텍스트 정렬 변경하기
          • 읽기 전용으로 표시하기
          • 필수 입력으로 지정하기
          • 합계 요약하기
          • 이미지 URL을 이미지로 보여주기
          • 값을 숨김 처리하여 내부적으로 계산 및 로직에 사용하기
          • 일부 필드 값 저장 시 제외하기
        • 미리보기
        • 활성화
        • 버튼 생성 및 페이지 레이아웃에 추가하기
      • 비즈니스 규칙 (Business Rule)
        • 관련 개체 데이터 가져오기
        • Apex 클래스를 활용해 다양한 방식으로 데이터 가져오기
      • 빌더 복제
      • 빌더 초기화
      • 쿼리 마법사(Query Wizard)를 사용하여 필터 삽입하기
      • 필터 설정 도구
      • 레이블에 커스텀 라벨 삽입하기
    • 라인 아이템 편집기
      • 초기 값 및 계산 적용 순서
    • 제품 옵션 (Product Option)
      • 제품 옵션 셋업 절차
        • 제품 옵션 활성화
        • 제품 옵션 설정하기
          • 기본 설정
          • 라인 아이템 설정
        • 제품 옵션 데이터 구성하기
      • 라인 아이템 옵션 값의 표시 및 저장 방식
    • 활용 사례
      • 편집기의 Aura Component 활용하기
    • 기초 사용 예제
    • 고급 사용 예제
    • FAQ
    • 패키지 설치
  • 📦SmallBuilder Documents
    • 릴리즈 노트
      • '25 업데이트
        • v 1.9202
      • '24 업데이트
        • v 1.50 ~
    • 제품 소개
    • 시작하기 전에
      • 라이선스 및 권한 할당
      • 조직 통화 설정
      • 번역 활성화
      • 연결된 앱 설정
    • 신규 생성 및 빌더 실행
    • Components
    • Data Merge
      • Data Merge - Text
      • Data Merge - Related List
    • Document Job
    • 기초 사용 예제
      • 페이지 상단에 로고 이미지를 고정하는 방법
      • 컴포넌트 사이에 공백 넣는 방법
      • 컴포넌트 사이에 구분선 넣는 방법
    • 고급 사용 예제
      • 청구서 템플릿 생성 예제
      • Trigger를 사용한 청구서 자동 이메일 전송
    • FAQ
  • 📦SmallBuilder Lists
    • Release Note
      • 25 업데이트
        • v 2.3
    • 소개
    • 시작하기 전에
      • 라이선스 및 권한 할당
      • 조직 통화 설정
      • 번역 활성화
      • 연결된 앱 설정
    • SmallBuilder Lists 시작하기
    • 셋업 절차
      • 기본 설정
        • 타이틀
        • 범례
        • 데이터 내보내기
        • 데이터 가져오기
        • 아이콘 표시
      • 데이터 테이블 설정
        • QUERY
        • 다중 선택 허용
        • 요약 표시
        • 열 추가 및 편집
          • 유형별 편집 내용
        • 가상 열 추가
        • 행 작업 추가
      • 데이터 가져오기 설정
      • 작업 설정
        • 작업 추가
      • 필터 설정
        • 필터 추가 및 설정
          • 유형별 편집 내용
      • 축소형 구성기 설정
        • 열 추가 및 설정
          • 유형별 편집 내용
      • 모바일 설정
      • 데이터 소스 설정
        • 기본
          • 작업 추가 및 설정
        • 고급
          • Apex Class 작성
      • 적용 및 관리
        • 리스트 구성기를 직접 생성하기
    • 목록 보기 (List View)
    • 행 편집 테이블 (Line editor table)
    • 기초 사용 예제
    • 고급 사용 예제
    • 마이그레이션
      • JSON 내보내기
      • JSON 가져오기
    • FAQ
    • Page
  • ❓SmallBuilder Troubleshooting
    • SmallBuilder Troubleshooting Help
      • Button 추가 경고 (페이지에 버튼이 추가되지 않는 경우)
      • Tab 추가 경고 ( Tab이 생성되고 App에 추가되었지만 보이지 않는 경우)
Powered by GitBook
On this page

Was this helpful?

Export as PDF
  1. SmallBuilder Documents
  2. 고급 사용 예제

Trigger를 사용한 청구서 자동 이메일 전송

Trigger를 사용하여 Salesforce의 Quote 개체의 Status 값이 Accepted가 되었을 때 Document Builder로 생성한 문서[청구서]를 email로 전송하는 예제

  • Quote 개체 Status 값이 Accepted가 되었을 때 함수를 호출하는 예제

trigger Quote on Quote (after update) {
    
    public List<Quote>      newObjList  {get; set;}
    public Map<Id, Quote>   oldObj      {get; set;}

    newObjList = (List<Quote>)Trigger.new;
    oldObj = (Map<Id, Quote>)Trigger.oldMap;
    if (trigger.isAfter && trigger.isUpdate){   
        for(Quote qu : trigger.new){   
            if (qu.Status == 'Accepted' && qu.Status != oldObj.get(qu.id).Status){
                // template Id와 recordId를 parameter 값으로 넘겨준다.
                String templateId = DocumentCustomController.getTemplateId();
                DocumentCustomController.triggeredSavePdf(qu.Id, templateId);
            }
        }        
    }
    
}

  • Document Builder Template 이름 기준으로 template Id를 가져오는 함수 예제

public static String getTemplateId() {
    String templateId = [SELECT Id 
                            FROM SBLD__DocumentBuilder__c
                            WHERE name = 'BillingStatement' 
                            WITH SECURITY_ENFORCED
                            ORDER BY CreatedDate DESC
                            LIMIT 1][0].Id;
    return templateId;
}

  • 사용자에게 이메일을 보내는 함수 예제

public static void sendEmailToUser( List<String> listAttachement) {
    // 이메일 기본정보 추가
    Messaging.SingleEmailMessage clsSingleEmailMessage = new Messaging.SingleEmailMessage();
    clsSingleEmailMessage.setToAddresses(new List<String>{'abc@example.com'});
    clsSingleEmailMessage.setSubject('Email Subject');
    clsSingleEmailMessage.setPlainTextBody('Email Body');
    
    // attachement 추가
    ContentVersion clsContentVersion = [SELECT VersionData, PathOnClient FROM ContentVersion WHERE ContentDocumentId = :listAttachement.get(0) WITH SECURITY_ENFORCED][0];
    Messaging.EmailFileAttachment clsEmailFileAttachment = new Messaging.EmailFileAttachment();
    clsEmailFileAttachment.setFileName(clsContentVersion.pathOnClient); 
    clsEmailFileAttachment.setBody(clsContentVersion.versionData);
    clsSingleEmailMessage.setFileAttachments(new Messaging.EmailFileAttachment[] {clsEmailFileAttachment});
    
    // 이메일 전송
    Messaging.sendEmail(new Messaging.SingleEmailMessage[]{clsSingleEmailMessage});     
        
}

  • Document Template을 PDF로 저장하는 예제

// Document Template PDF 저장
@future(callout = true)
public static void triggeredSavePdf(String recordId, String templateId) {

    // PDF 생성
    PageReference pdfPage = new PageReference('/apex/SBLD__DocumentBuilderTemplate?recordId=' + templateId + '&targetId=' + recordId);
    Blob pdfContent;

    if(Test.isRunningTest()) { 
        pdfContent = blob.valueOf('Unit.Test'); 
    }else {
        pdfContent = pdfPage.getContentAsPDF();
    }
        
    String title = 'BillingStatement.pdf';

    // ContentVersion 추가    
    ContentVersion cv           = new ContentVersion();
    cv.VersionData              = pdfContent;
    cv.Title                    = title;
    cv.PathOnClient             = title;
    cv.OwnerId                  = UserInfo.getUserId();
    cv.ContentLocation          = 'S';

    insert cv;
    
    // ContentDocumentLink 추가
    Id conDocId = [SELECT ContentDocumentId FROM ContentVersion WHERE Id =:cv.Id WITH SECURITY_ENFORCED ].ContentDocumentId;
    ContentDocumentLink cdl = new ContentDocumentLink();
    cdl.ContentDocumentId = conDocId;
    cdl.LinkedEntityId = recordId;
    cdl.ShareType = 'V';
    cdl.Visibility = 'AllUsers';
		
    if (Schema.sObjectType.ContentDocumentLink.fields.ContentDocumentId.isCreateable()) {
            Database.insert(cdl);
    }
    
    // Attachement가 추가된 email 전송 메서드 호출
    listAttachement = new List<String>{conDocId};
    sendEmailToUser(listAttachement);
}

Previous청구서 템플릿 생성 예제NextFAQ

Last updated 1 month ago

Was this helpful?

📦