wait(10000);//Wait
//Wait
public static void wait(Integer millisec) {
if(millisec == null || millisec < 0) {
millisec = 0;
}
Long startTime = DateTime.now().getTime();
Long finishTime = DateTime.now().getTime();
while ((finishTime - startTime) < millisec) {
//sleep for parameter x millisecs
finishTime = DateTime.now().getTime();
}
// System.debug(‘>>> Done from ‘ + startTime + ‘ to ‘ + finishTime);
}
[Salesforce]@RemoteAction
Salesforce의 @RemoteAction에 대해 공유합니다.
특징
· JavaScript에서 Apex 클래스의 처리를 실행할 수 있습니다.
· actionFunction과 같은 기능이지만, 이것은 JavaScript 내에서 처리의 반환 값을 사용할 수 있습니다.
예를 들어, 거래처 취득 처리를 실행해 취득한 거래처 리스트를 사용한 처리를 실시할 수 있습니다.
샘플 코드
· Apex 클래스
global with sharing class SampleRemoteController {
@RemoteAction
global static String setString(String str) {
return '----- ' + str + ' -----';
}
@RemoteAction
global static List<sObject> exequery(String str){
return Database.query(str);
}
}
· Visualforce 페이지
<apex:page controller="SampleRemoteController">
<apex:form >
<!-- @RemoteActionSample:StringSet -->
<apex:commandButton value=" String " onClick="return setString('Yaho');" />
<!-- @RemoteActionSample:SOQLGet -->
<apex:commandButton value=" GetAcc " onClick="return getAcc();" />
<hr/>
<div id="output">Output</div>
</apex:form>
<script type="text/javascript">
/*
* @RemoteActionSample
* StringSet
*/
function setString(str) {
{!$RemoteAction.SampleRemoteController.setString}(str, function(result, event){
if(event.status) {
document.getElementById("output").innerHTML = result;
}
});
return false;
}
/*
* @RemoteActionSample
* SOQLAccountGet
*/
function getAcc() {
var query = 'select Id,Name from Account limit 10';
{!$RemoteAction.SampleRemoteController.exequery}(query, function(result, event){
if(event.status) {
var names = '';
for (var i = 0; i < result.length; i++) {
names = names + result[i].Name + ' | ';
}
document.getElementById("output").innerHTML = names;
}
});
return false;
}
</script>
</apex:page>
[Salesforce]@RemoteAction
I will share about Salesforce’s @RemoteAction.
Features
- You can execute Apex class processes from JavaScript.
- It has the same functionality as actionFunction, but you can use the return value of the process in JavaScript.
For example, you can execute a process to get accounts and use the list of accounts retrieved.
Sample code
- Apex class
global with sharing class SampleRemoteController {
@RemoteAction
global static String setString(String str) {
return '----- ' + str + ' -----';
}
@RemoteAction
global static List<sObject> exequery(String str){
return Database.query(str);
}
}
Visualforce pages
<apex:page controller="SampleRemoteController">
<apex:form >
<!-- @RemoteActionSample:StringSet -->
<apex:commandButton value=" String " onClick="return setString('Yaho');" />
<!-- @RemoteActionSample:SOQLGet -->
<apex:commandButton value=" GetAcc " onClick="return getAcc();" />
<hr/>
<div id="output">Output</div>
</apex:form>
<script type="text/javascript">
/*
* @RemoteActionSample
* StringSet
*/
function setString(str) {
{!$RemoteAction.SampleRemoteController.setString}(str, function(result, event){
if(event.status) {
document.getElementById("output").innerHTML = result;
}
});
return false;
}
/*
* @RemoteActionSample
* SOQLAccountGet
*/
function getAcc() {
var query = 'select Id,Name from Account limit 10';
{!$RemoteAction.SampleRemoteController.exequery}(query, function(result, event){
if(event.status) {
var names = '';
for (var i = 0; i < result.length; i++) {
names = names + result[i].Name + ' | ';
}
document.getElementById("output").innerHTML = names;
}
});
return false;
}
</script>
</apex:page>
[Salesforce]TestMethod로 정의된 메서드는 웹 서비스 콜아웃을 지원하지 않습니다.
TestMethod로 정의된 메서드는 웹 서비스 콜아웃을 지원하지 않습니다.
오류가 발생한 예
@isTest
private class PostTest {
@isTest
static void test() {
Test.startTest();
Service.execute();
Test.stopTest();
}
}
public with sharing class Service {
@future(callout=true)
public static void execute() {
ServiceC sc = new ServiceC();
sc.post();
}
}
public with sharing class ServiceC {
private HttpResponse post() {
HttpRequest request = new HttpRequest();
(생략)
HttpResponse response = new Http().send(request);
return response;
}
}
오류 해결 예
@isTest
private class PostTest {
@isTest
static void test() {
Test.startTest();
Test.setMock(HttpCalloutMock.class, new ServiceHttpCalloutMock());
Service.execute();
Test.stopTest();
}
}
@isTest
public class ServiceHttpCalloutMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
res.setBody('test');
return res;
}
}
[Salesforce] Methods defined as TestMethod do not support Web service callouts.
Methods defined as TestMethod do not support Web service callouts.
Example of an error that occurred
@isTest
private class PostTest {
@isTest
static void test() {
Test.startTest();
Service.execute();
Test.stopTest();
}
}
public with sharing class Service {
@future(callout=true)
public static void execute() {
ServiceC sc = new ServiceC();
sc.post();
}
}
public with sharing class ServiceC {
private HttpResponse post() {
HttpRequest request = new HttpRequest();
(omission)
HttpResponse response = new Http().send(request);
return response;
}
}
Example of resolving errors
@isTest
private class PostTest {
@isTest
static void test() {
Test.startTest();
Test.setMock(HttpCalloutMock.class, new ServiceHttpCalloutMock());
Service.execute();
Test.stopTest();
}
}
@isTest
public class ServiceHttpCalloutMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse res = new HttpResponse();
res.setStatusCode(200);
res.setBody('test');
return res;
}
}
[Salesforce]Apex ジョブのスケジュール
Apex ジョブのスケジュール
同時に使用できる有効なジョブまたはスケジュール済みジョブの数は 100 件です。
- [設定] から、[クイック検索] ボックスに「Apex クラス」と入力し、[Apex クラス] を選択して、[Apex をスケジュール] をクリックします。
- スケジュールを設定するクラスの名前を指定します。
- [Schedule Builder] または [Cron Expression] を選択して Apex ジョブをスケジュールします。
- スケジュールビルダーを選択した場合:
- Apex クラスを実行する頻度を指定します。
- [毎週] の場合、ジョブを実行する曜日を 1 つ以上指定します ([月曜] と [水曜] など)。
- [毎月] の場合、ジョブを実行する日付または曜日 (毎月第 2 土曜など) を指定します。Apex のスケジュール済みクラスの開始日と終了日を指定します。日付を 1 つ指定した場合は、ジョブは 1 回のみ実行されます。
- 希望開始時刻を指定します。ジョブが開始する正確な時刻は、サービスの可用性によって異なります。
- Apex クラスを実行する頻度を指定します。
- [Cron Expression] を選択した場合は、cron 式を使用して時間を指定し、設定した時間にクラスを実行するようにスケジュールします。
- [保存] をクリックします。
[Technical terms]リアクティブプロパティ
リアクティブプロパティとは、値が変更されたときに、変更を検知して自動的にUIを更新するような、プロパティのことです。具体的には、変更を監視し、変更があった場合に、自動的に関連するUIを更新するための仕組みを指します。
例:
- Vue.jsでは、データが変更されると、自動的にHTMLに反映されます。これは、Vue.jsのリアクティブシステムによるものです。
[SalesforceDeveloperCertification]認定 Platform デベロッパー資格の更新 (Winter ’25)


public class MyIterable implements Iterable<String> {
private List<String> strings {get; set;}
public MyIterable(List<String> strings) {
this.strings = strings;
}
public Iterator<String> iterator() {
return this.strings.iterator();
}
}
@IsTest
private class MyIterableTest {
@IsTest static void testIterableForLoop() {
List<String> strings = new List<String>{'Hello','World'};
MyIterable mi = new MyIterable(strings);
Test.startTest();
for (String str : mi) {
System.debug(str);
}
Test.stopTest();
}
}

[SalesforcePlatformAppBuilderCertification]Winter ’25 で認定 Platform アプリケーションビルダー資格を更新する



[SalesforceAdministratorCertification]Spring ’25 で認定アドミニストレーター資格を更新する

