Salesforce/Apex Class 11

[Platform API] Salesforce를 대상으로 REST, SOAP 기반 통신 다뤄보기

실무 환경에서, I/F(Interface)는 중계 서버, 혹은 레거시 시스템의 데이터를 다루는 작업을 뜻합니다. 쉽게 설명하면, 어떤 회사의 업무 프로세스를 Salesforce 화 하고 싶다면 우선 그 회사의 데이터가 필요합니다. 데이터는 Postgre DB 기반의 데이터 일 수도 있고, MDM이나 ERP같은 기업 운영 프로그램의 데이터 일 수도 있습니다. 이러한 데이터를 Salesforce에 맞게 적용하려면 API를 이용해 외부 서버의 데이터를 Salesforce에 끌어와야 하는 작업이 필요합니다. 이러한 작업을 위해 필요한 기술이 I/F이고, 용도에 따라 이를 REST API 기반 혹은 SOAP API 기반으로 나눕니다. 대체적으로 실시간으로 CRUD 작업이 필요한 경우에는 REST API를 주로 사..

[Salesforce] SOQL Join 간단 정리

// Left: Job_Application__c // Right: Position__c // 부모가 자식을 참조할 때에는 필드에 관계지시자를 사용 (Position__r.Name) // 자식이 부모를 참조할 때에는 필드에 서브쿼리 형태로 직접 참조 // 부모가 자식에 대한 조인 조건을 설정할 때에는 자식 개체 Id로 조회 (Position__c != null) // 자식이 부모에 대한 조인 조건을 설정할 때에는 자식 개체의 Id를 부모 개체에 대한 조건으로 설정 (Id In (부모개체 조회 서브쿼리)) Select Name, Position__r.Name From Job_Application__c Select Name, (Select Name, Status__c From Job_Application__..

[Apex class] Error: Attempt to de-reference a null object 해결

미니 프로젝트를 개발하던 도중, 로그인 페이지에 접근할 때 '이메일 저장' 을 사용자가 이전에 체크했는 지 안했는 지 여부를 검사하는 과정에서 쿠키를 가져오는 부분이 문제가 생겼다. 쿠키는 생성되지 않은 값인 경우 가져올 수가 없다. 기존 접속자는 쿠키가 생성되어 있겠지만, 신규 접속자는 쿠키가 생성조차 되지 않아서 오류를 일으킨다. ASP에서는 별도의 함수를 만들어 대처했지만, Apex Class에서는 삼항 연산을 사용해 처리한다. 물음표 키워드를 부착하면, 해당 구간의 반환값이 없을 때 자동으로 Null을 반환한다고 한다. 이를 통해 우선 초기화가 가능하고, 추후 조건문을 통해 설정한 구간도 작동시킬 수 있다. 번외: 브라우저에서 발생한 오류를 IDE에서 확인하는 방법 세일즈포스 설정 > 디버그 로그..

[Salesforce] 배포에 대하여

개요 Production Org는 Apex 코드의 런타임 환경으로, Apex 코드가 컴파일되어 Org에 유지되면 라이브 상태가 되어 사용자가 즉시 실행할 수 있는 상태가 된다. (웹 서비스 개시라는 뜻) 코드를 테스트하고, 성공적으로 테스트가 완료 된 Apex 코드는 프로덕션 시스템으로 컴파일되어 사용자에게 게시되는 과정을 배포 프로세스라고 칭한다. 배포된 소스코드는 릴리스 관리를 통해 버전 별로 관리될 수 있다. 배포 프로세스 개발자는 Org가 설정 된 개발 환경에서 코드를 개발하고, 개발한 내용을 토대로 단위 테스트, 통합 테스트를 진행한다. 통합 테스트는 개별적으로 만들어진 소프트웨어 모듈을 그룹으로 결합하고, 테스트 하는 과정을 포함한다. 통합 테스트를 마친 개별 환경은 다른 개발 환경과 통합되어..

[Salesforce] Debug에 관해

Exception (예외) 어떤 오류가 났는 지, 어떤 오류 유형인 지, 오류가 발생한 시기의 스크립트 또는 프로그램의 상태에 대한 정보를 기록하는 클래스로, 메서드 내에서 오류 발생 시 Apex Engine으로 이동하는 Exception을 생성하고 발송한다. try { update positions; } catch (Ssystem.DmlException e) { System.debug('DML exception: ' + e.getDmlMessage(0)); } finally { posisitions.clear(); } throw, try, catch, finally 키워드를 통해 오류를 제어할 수 있다. try는 Exception이 발생할 수 있는 구간을 묶는 용도로, 오류가 발생할 수 있는 코드 블록..

[Salesforce] ERROR running force:org:create: The requested resource does not exist 문제 해결

본 글은 Trailhead의 Develop the Map Component 유닛 | Salesforce Trailhead 과정을 토대로 작성하였습니다. 메타데이터를 스크래치 조직에 업로드 하려고 하는 순간 발생한 오류 해당 과정을 시작하기 전에 Dev Hub 활성화를 진행했으므로, 접근하는 과정에 대해서 오류가 발생하더라도 이 쪽 문제는 아닐거라 생각했는데 다시 확인해보니 다른계정의 Dev Hub를 활성화 한 것.. 현재 계정의 Dev Hub를 활성화 해주면 해결된다. 활성화 이후, 다시 실행해보면 정상적으로 처리 되었음을 알 수 있다.

[Salesforce] Apex Trigger (트리거)

참고 (트리거의 단점) [Database]TRIGGER (tistory.com) [Database]TRIGGER 데이터베이스 트리거(DATABASE TRIGGER) 1. TRIGGER란? 특정테이블에서 INSERT,DELETE, UPDATE와 같은 DML문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램 2. TRIGGER의 장점 데이터 winkitee.tistory.com 트리거는 장점보다 단점이 큰 기능이다. 트리거의 사용은 데이터베이스 자동화 관리를 위한 방법 중 하나이지만, 과도한 남용은 몇 가지 큰 문제를 불러일으킨다. 대표적으로 데이터베이스 처리 능력 저해, 유지보수의 어려움을 꼽는데, 빠른 처리를 위해 사용하는 검색문이나 삽입문, 수정문 등에서 트리거가 작동하게 되면 트..

[Salesforce] SOQL DML 이해

SOQL 호출 방법 DML 독립형 방식의 문장은 실행 도중 예외가 발생하면 트랜잭션에 Commit 동작을 일으키지 않는다. 데이터베이스 메서드 방식은 DML 독립형 방식에 더해 추가적인 작업을 수행할 수 있도록 추가 키워드를 제공한다. sObject sobject = new sobject(Field = 'sample text'); Database.insert(sobject, false); 기본 매개변수는 true이며, 매개변수를 false로 설정할 경우, 처리 도중 레코드에 예외가 발생하더라도 후속 레코드에 대해 처리를 계속한다. 데이터베이스 메서드 방식은 실행 결과 정보를 담은 SaveResult 개체를 반환한다. Database.SaveResult 메서드 sObject sobject1 = new sO..

[Salesforce] SOSL에 관하여

Salesforce Object Search Language의 약어로, 개체 조직의 특정 데이터 검색에 사용한다. 한 번에 여러 개체를 가져올 수 있으며, 텍스트 검색을 수행하는데 사용한다고 한다. SOSL 구문 List sobjects = [Find 'RecordText(*/?)' In sObject_Fields, ... Returning sObject1, sObject2, ...] Find 키워드 검색하고자 하는 문자열을 지정하는 절로, * 또는 ? 와일드카드를 통해 추가적인 조건을 요청할 수 있다. List customers = [Find 'john*' ...] 다음과 같이 * 와일드카드를 사용한 경우, john으로 시작된 모든 레코드가 검색된다. ex) john smith, walter john ..

[Salesforce Toy Project] 세공 프로그램 개발

회사에서 하도 일을 안줘서.. 스스로 만들어 하는 입장이 되었습니다. 마침 오늘로 3주가 다 되어 가는지라, 아무것도 안하고 멍하니 동영상 학습만 하다가 졸기를 반복해서 손에 익는대로 소스코드부터 짜야겠다 싶어서 토이 프로젝트 하나를 개설했습니다. 로스트아크의 자랑(?), 어빌리티 스톤 세공 프로그램 입니다. 아우라 컴포넌트 없이 visualforce로 뷰를 구성했으며, 비동기 방식으로 데이터를 전송해 확률 계산과 이벤트 동작을 처리했습니다. 아쉽게도 ajax 기반이 아니라 visualforce에서 제공하는 태그인 rerender만 사용해서 진행했습니다. 본래는 세공이 완료되면 해당 결과를 저장하고 저장한 결과를 리스트화 해서 조회할 수 있는 페이지까지 계획이 있었는데.. 이 이상 진행하게 되면 더 봐야..