티스토리 뷰

1.     Future Apex ( 퓨처 에이펙스 )

-       Future Apex는 나중에 시스템 리소스를 사용할 수 있을 때, 별도의 스레드에서 프로세스를 실행하는데 사용된다.

-       @future 주석을 사용하여 비동기적으로 실행되는 메소드를 식별한다.

 

 

2.     Future Method 문법

-       Future Method는 정적 메서드이어야 하며, void 형식만 반환할 수 있다.

-       매개변수는 기본 데이터 유형, 배열 또는 컬렉션이어야 한다.

-       Future Method의 경우 Standard 또는 Custom Object를 매개변수로 사용할 수 없다.

-       Future Method는 호출된 순서대로 실행된다는 보장이 없다는 점의 주의해야 한다.

-       2개의 Future Method가 동시에 실행될 수 있기에, 동일한 레코드를 두 Future Method가 업데이트하는 경우 오류가 발생할 수도 있다.

-       Apex 호출 당 Future Method 호출은 50회로 제한되며, 24시간 동안의 호출 수에는 추가 제한이 있다.

-       Future Method에서는 Future Method를 호출할 수 없다.

-       Future Method를 실행하는 동안에는 Future Method를 호출하는 Trigger도 호출할 수 없다.

 

 

3.     Batch Apex

-       Batch Apex는 일반적인 처리 한도를 초과하는 대규모 작업을 실행하는데 사용된다.

-       Batch Apex를 사용하면 기록을 비동기적으로 배치하여 플랫폼 한도 내에서 유지할 수 있다.

-       데이터 정리 또는 보관과 같이 처리할 레코드가 많은 경우 Batch Apex가 적절하다.

-       Batch Apex는 기본적으로 상태 비저장하지만, Database.Stateful 클래스에 지정하면 모든 트랜잭션에서 상태를 유지할 수 있다.

-       상태 유지는 처리되는 레코드를 계산하거나 요약하는데 유용하다.

 

 

4.     Batch Apex의 내부 작동 방식

-       Batch Class의 실행 로직은 처리 중인 레코드의 각 Batch에 대해서 한번씩 호출한다.

-       Batch Class가 호출할 때마다 Apex 대기열에 작업이 배치되고, 개별 트랜잭션으로 실행된다.

-       이러한 작동방식은 모든 거래가 새로운 권한 한도 세트로 시작하였기에 권한 실행 한도 내에서 유지되도록 하는 것이 쉽다는 점과 배치 하나가 성공적으로 처리되지 않아도 성공한 다른 모든 배치 트랙잭션이 롤백되지 않는다는 장점이 있다.

 

 

5.     Batch Apex 구문

-       Batch Apex Class를 작성하기 위해서는 Class 내에서 Database.Batchable 인터페이스를 구현한 후 다음 3가지의 메서드를 포함해야 한다.

 

-       1) start

-        : 처리를 위해 메소드 실행에 전달할 레코드나 Object를 수집하는데 사용된다.

-        : 이 메서드는 Batch Apex 작업 시작 시 한번 호출되며, 작업에 전달된 레코드나 Object를 포함하는 Database.QueryLocator Object 또는 Iterable를 반환한다.

-        : QueryLoacator Object를 사용하면 SOQL 쿼리로 검색되는 총 레코드 수에 대한 권한 제한이 무시되고 최대 5천만 개의 레코드를 쿼리할 수 있다.

-        : Iterable를 사용하면 SOQL 쿼리에서 검색한 총 레코드 수에 대한 권한 제한이 계속 적용된다.

 

-       2) execute

-        : 메소드에 전달된 데이터의 각 덩어리(청크) 또는 배치에 대해 실제 처리를 수행

-        : 기본 배치 크기는 200개 레코드이다.

-        : 레코드의 배치는 start 메소드에서 수신된 순서대로 실행된다는 보장이 없다.

 

-       3) finish

-        : 이메일 보내기와 같은 사후 처리 작업을 실행하는데 사용된다.

-        : 모든 배치가 처리된 후 한번만 호출된다.

 

 

6.     Queueable Apex의 장점

 

-       1) 기본이 아닌 유형

-        : Queueable ClasssObject 또는 Custom Apex 유형과 같이 기본이 아닌 데이터 유형의 멤버 변수를 포함할 수 있다.

-        : 이러한 개체는 작업이 실행될 때 액세스할 수 있다.

 

-       2) 모니터링

-        : 메소드를 호출하여 작업을 제출하면 System.enqueueJob() 메서드가 AsyncApexJob 레코드의 ID를 반환한다.

-        : ID를 사용하여 작업을 식별하고 Apex 작업 페이지의 Salesforce 사용자 인터페이스를 통하거나 AsyncApexJob에서 레코드를 쿼리하여 프로그래밍 방식으로 진행 상황을 모니터링할 수 있다.

 

-       3) 작업 연결

-        : 실행 중인 작업에서 2번째 작업을 시작해 한 작업을 다른 작업에 연결할 수 있다.

-        : 일련의 작업을 순차적으로 처리해야 하는 경우 작업 연결이 유용하다.

 

 

7.     Queueable VS Future

-       Queueable 메소드는 Future 메소드와 기능적으로 동일하다.

-       Queueable는 때로는 동기식으로, 때로는 비동기식으로 실행해야 될 때 사용한다.

 

 

8.     Queueable Apex 구문

-       Queueable Apex를 사용하려면 Queueable 인터페이스를 implements해야 한다.

-       public class SomeClass implements Queueable {

-           public void execute(QueueableContext context) {

-           } // execute

-       } // end class

 

 

9.     Queueable Apex – 연결작업

-       Queueable Apex의 가장 좋은 기능 중 하나는 작업을 연결하는 기능이다.

-       작업을 순차적으로 실행해야 하는 경우 Queueable Apex를 사용하면 쉬워진다.

-       작업을 다른 작업에 연결하려면 Queueable Classexecute() 메소드에서 두번째 작업을 호출하면 된다.

-       실행중인 작업에서 하나의 작업만 추가할 수 있다.

-       , 각 상위 작업에 대해 하나의 하위 작업만이 존재할 수 있다.

 

 

10.  Scheduled Apex

-       Apex Scheduler를 사용하면 지정된 시간에 Apex Class를 실행할 수 있도록 실행을 지연할 수 있다.

-       Scheduler를 사용하면 특정 일정에 따라서 실행되도록 예약할 수 있다.

 

 

11.  Scheduled Apex 구문

-       Apex Class를 호출하여 특정 시간에 실행하기 위해서는 Schedulable 인터페이스를 implements해야 한다.

-       그런 다음 System.schedule() 메소드를 통해 특정 시간에 실행되도록 클래스의 인스턴스를 예약할 수 있다.

-       public class SomeClass implements Schedulable {

-           public void execute(SchedulableContext ctx) {

-               // awesome code here

-           } // execute

-       } // end class

-       Schedule ApexSetup -> Apex Classes -> Schedule Apex에서도 설정이 가능하다.

 

 

12.  비동기 작업 모니터링

-       비동기 작업은 백그라운드에서 조용히 작동하기에 이를 모니터링할 방법이 있다.

-       Setup -> Apex Jobs에서 각 작업(Job) 실행에 대한 정보와 함께 모든 비동기 Apex 작업이 표시된다.

-       More info 버튼을 클릭하여 해당 클래스에 대해 실행된 작업에 대한 세부정보를 확인할 수 있다.

-       Future 작업의 경우에는 MethodName으로 작업을 검색해야 한다.

-       SOQL로도 Future 작업 검색이 가능하다.

-       Ex. AsyncApexJob jobInfo = [SELECT Status, NumberOfErrors FROM AsyncApexJob WHERE Id = :jobID];

 

 

13.  Outer Lightning Experience Container

-       Lightning Experience Container/lightning URL에서 액세스할 수 있는 ‘single-page-application’ 또는 SPA.

-       Visualforce 페이지가 아닌 Lightning Experience 또는 /lightning이 요청을 담당한다.

-       페이지는 Lightning Experience가 부과하는 제약 조건 내에서 작동해야 한다.

-       Lightning Experience가 상위 컨텍스트이고, Visualforce는 하위 컨텍스트에 해당한다.

-       Visualforce 페이지가 표시되는 프레임 크기와 같은 제약 중 일부는 Lightning Experience에서 직접 부과한다.

-       다른 제약 조건은 Lightning Experience가 아닌 그것을 실행하는 브라우저에 의해서 적용된다.

 

 

14.  Visualforce iframe

-       Visualforce 페이지가 Lightning Experience에서 실행되면 HTML iframe 내에 표시된다.

-       Iframe은 기본 Lightning Experience 검색 컨텍스트와 사실상 별도의 브라우저 창이 포함된 검색 컨텍스트를 만든다.

-       IframeVisualforce 페이지와 상위인 Lightning Experience 응용 프로그램 사이에 경계를 만든다.

-       Iframe 내에서 Visualforce 페이지를 실행하면 최상위 검색 컨텍스트에 액세스하거나 변경할 필요가 없는 페이지의 경우 Salesforce Classic에서 페이지를 실행하는 것과 거의 동일하게 보인다는 장점이 있다.

 

 

15.  Impact of the New Container

-       New Visualforce Container의 효과는 보안과 범위라는 2가지의 범주로 구분할 수 있다.

 

-       1) 보안부분의 영향

-        : 영향을 받을 수 있는 보안 요소는 다음과 같다.

-        : 세션 유지 및 갱신, 입증, 교차 도메인 요청, 임베딩 제한

-        : 세션은 브라우저가 요청할 때마다 재사용하는 일종의 토큰이다.

-        : 세션은 주로 전역변수 $Api.Session_ID를 사용하여 현재 세션에 액세스해야 하는 경우가 많으며, $Api.Session_ID는 요청 도메인에 따라 다른 값을 반환한다.

 

-       2) 범위 영향

-        : 범위 영향에는 다음과 같은 종류가 있다.

-        : DOM 액세스 및 수정, JavaScript 범위/가시성 및 액세스, window.location과 같은 JavaScript 전역변수

 

 

16.  Classic/Lightning Experience Page 공유 – User Experience Context in Visualforce Mark up

-       $User.UITheme $User.UIThemeDisplayed 전역변수를 사용하여 현재 사용자 환경 컨텍스트를 결정할 수 있다.

-       Visualforce 표현식에서 이러한 변수를 사용하여 페이지를 Lightning Experience, Salesforce Classic Salesforce App에 맞게 조정할 수 있다.

-       이러한 전역 변수는 현재 사용자 인터페이스 컨텍스트를 고유하게 식별하는 문자열을 반환한다.

-       두 변수의 차이점으로는 $User.UITheme는 사용자에게 표시되어야 하는 모양과 느낌을 반환하는 반면, $User.UIThemeDisplayed는 사용자가 실제로 보는 모양과 느낌을 반환한다는 차이점이 있다.

-       보통 $User.UIThemeDisplayed를 더 많이 사용한다고 한다.

-       이러한 테마 전역 변수를 사용하는 가장 간단한 방법은 {! $User.UIThemeDisplayed == “Theme5” }이다.

 

 

17.  JavaScript에서 User Experience Context 감지 및 응답

-       UITheme.getUITheme() 전역변수를 통해서 현재 사용자 인터페이스 테마를 식별하는 값을 반환할 수 있다.

-       JavaScript에서 Visualforce 탐색을 구축하기 위해서는 window.location을 직접 설정해서는 안된다.

-       Ex. return UITheme.getUITheme === "Theme4d";

 

 

18.  Apex에서 User Experience Context 결정

-       UserInfo.getUiTheme() UserInfo.getUiThemeDisplayed() 시스템 메소드를 사용하여 Apex 코드에서 현재 User Experience Context를 결정할 수 있다.

-       컨트롤러 작업 메소드나 속성이 다른 컨텍스트에서 다르게 동작해야 할 때 사용한다.

-       EX. public with sharing class ForceUIExtension {

-        

-           public ForceUIExtension(ApexPages.StandardController controller) {

-           } // ForceUIExtension

-           

-           public String getContextUserUiTheme() {

-               return UserInfo.getUiTheme();

-           } // getContextUserUiTheme

-        

-           public String getContextUserUiThemeDisplayed() {

-               return UserInfo.getUiThemeDisplayed();

-           } // getContextUserUiThemeDisplayed

-        

-       } // end class

 

 

19.  Classic Visualforce 탐색

-       Classic Visualforce 탐색은 작업 메소드 끝에서 발생하는 것으로 요약할 수 있다.

-       작업 메소드는 사용자가 탐색되는 위치에 대한 세부 정보와 함께 PageReference 개체를 반환한 다음 Visualforce 프레임워크가 올바른 응답을 사용자의 브라우저로 다시 보내는 세부 정보 처리를 한다.

 

 

20.  Sforce.one

-       Sforce.one objectSalesforce Classic에서 사용할 수 없다는 점을 주의해야 한다.

-       Sforce.one object가 제공하는 function은 다음과 같다.

 

-       1) back( [refresh] )

-        : sforce.one 기록에 저장된 이전 상태로 이동한다.

-        : 브라우저의 뒤로 가기 버튼을 클릭하는 것과 같다.

 

-       2) navigateToSObject( recordId [, view] )

-        : recordId로 지정된 sObject 레코드로 이동한다.

 

-       3) navigateToURL( url [, isredirect] )

-        : 지정된 URL로 이동한다.

 

-       4) navigateToFeed( subjectId, type )

-        : subjectId로 범위가 지정된 type의 피드로 이동한다.

 

-       5) navigateToFeedItemDetail( feedItemId )

-        : 특정 피드 항목, feedItemId 및 관련 설명으로 이동한다.

 

-       6) navigateToRelatedList( relatedListId, parentRecordId )

-        : parentRecordId에 대한 related list로 이동한다.

 

-       7) navigateToList( listViewId, listViewName, scope )

-        : 표시할 목록 보기의 ID listViewId로 지정된 목록 보기로 이동한다.

 

-       8) createRecord( entityName [, recordTypeId ] )

-        : 페이지를 열어 지정된 entityName에 대한 새 레코드를 만든다.

 

-       9) editRecord( recordId )

-        : recordId로 지정된 레코드를 편집할 수 있는 페이지를 연다.

 

 

21.  Lightning Experience에서 권장하지 않는 Visualforce 구성

-       1) Lightning Experience 헤더 및 탐색 메뉴는 숨기거나 변경이 불가능하다.

-       2) Salesforce Classic 머리글 및 사이드바는 Lightning Experience에서 억제된다.

-       3) Lightning ExperienceVisualforce 페이지에서 <apex:iframe>은 사용이 가능하지만 권장하지는 않는다.

-       4) window.loacation을 직접 설정하지 않는 것이 좋다.

 

 

22.  Visualforce란?

-       VisualforceLightning Platform에서 호스팅할 수 있는 모바일 및 데스크탑 앱을 위해 정교한 사용자 정의 사용자 인터페이스를 구축할 수 있게 해주는 웹 개발 프레임워크이다.

-       Visualforce를 통해 개발자는 Salesforce의 기본 제공 기능을 확장하고 새로운 기능으로 교체하여 완전히 새로운 App을 구축할 수 있다.

 

 

23.  Visualforce 페이지 생성 및 편집

-       Develop Console -> File -> New -> Visualforce Page

-       예시코드 :

-       실제 화면 :

 

 

24.  Visualforce 표현식

-       Visualforce 페이지는 데이터베이스 또는 웹 서비스에서 검색된 데이터나 누가 로그인하고 페이지에 따라 변경되는 데이터 등을 표시할 수 있다.

-       이 동적 데이터는 페이지 컨트롤러에서 사용할 수 있는 전역 변수, 계산 및 속성을 사용하여 마크업에서 액세스된다.

-       이들은 일반적으로 Visualforce 표현식으로 설명된다.

-       이들은 동적 출력에 표현식을 사용하거나 속성에 값을 할당하여 구성요소에 값을 전달한다.

-       Visualforce 표현식은 단일값으로 확인할 수 있는 모든 리터럴 값, 변수, 하위 표현식이나 연산자의 세트이다.

-       표현식에서는 메소드 호출이 허용되지 않는다.

-       Visualforce 표현식 구문은 {! Expression }이다.

-       { !  } 중괄호 내에 있는 항목은 모두 동적이며 표현식 언어로 작성되어, 해당 값은 누군가가 페이지를 볼 경우 런타임시 계산되고 대체된다.

-       Visualforce 표현식은 대소문자를 구분하지 않는다.

-       예시코드 :

-       조건문 예시코드 :

 

 

25.  Visualforce 표준 컨트롤러

-       Visualforce는 기존의 MVC 패턴을 사용하고 표준 작업 및 액세스를 처리하는 정교한 내장 컨트롤러를 포함하여 Lightning Platform 데이터베이스와 간단하고 긴밀하게 통합한다.

-       예시코드 : ( 코드작성 후 레코드ID를 찾아, URL뒤에 &id=recordId를 작성해야 한다. )

-       결과화면 :

-       Account owner : {! Account.Owner.Name }로 관련 레코드 또한 표시할 수 있다.

 

 

26.  레코드 Detail 페이지 보여주기

-       예시코드 :

-       예시화면 :

   

 

27.  개별 필드 표시

-       예시 코드 :

-       예시화면 :

 

 

28.  데이터 테이블 표시

-       예시코드 :

-       예시화면 :

 

 

 

728x90
댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항