Memos About Salesforce

Salesforceにハマってたこと!

Salesforce 開発 APEX VF Trigger新規作成のテンプレート

こんにちは、管理人の@Salesforce.Zです。

開発時に、新規ソースを作成する際に、構成があれば、もっと便利でしょう

Sublime Text3とMavensMateでやる時に自動的に出てくるが

最近、VS Codeでやっている、新規ソースを作成時にちょっとめんどくさい、テンプレートが自動生成しない

そこで、テンプレートをここでメモします。

使えそうと思ったら、使ってください。

目次

各種テンプレート

VFページ

<apex:page id="pgid" docType="html-5.0">
<head>
    <title>page title</title>
    <!-- CSS 静的リソース インストール-->
    <!-- NOT Zip リソースの例 -->
    <apex:stylesheet value="/resources/htdocs/css/basic.css"/>
    <!-- Zip リソースの例 -->
    <apex:stylesheet value="{!URLFOR($Resource.StyleZip, 'basic.css')}"/>
    <!-- js 静的リソース インストール-->
    <apex:includeScript value="{!$Resource.example_js}"/>
    <!-- CSS -->
    <style type="text/css">
    </style>
    <!--JavaScript-->
    <script type="text/javascript">
    </script>
</head>
<body>
    <apex:pageMessages id="msgId"/>
    <apex:form id="formid">
        
    </apex:form>
</body>
</apex:page>

APEXクラス

クラスで with sharing または without sharing キーワードを使用して、共有ルールを適用するかどうかを指定します。

Apex クラスで inherited sharing キーワードを使用して、そのコール元のクラスの共有モードでクラスを実行します。

With Sharingクラス

現在のユーザに適用されている共有ルールを強制実行するには、クラスの宣言時に with sharing キーワードを使用します。次に例を示します。

public with sharing class myOuterClass {
   // Additional myOuterClass code here
   class myInnerClass {
     // myInnerClass code here
   }
}

Without Sharingクラス

現在のユーザに適用されている共有ルールを強制実行されないようにするには、クラスの宣言時に without sharing キーワードを使用します。たとえば、クラスが with sharing を使用して宣言された別のクラスからコールされた場合、共有ルールの強制実行を明示的にオフにできます。

public without sharing class myOuterClass {
   // Additional myOuterClass code here
   class myInnerClass {
     // myInnerClass code here
   }
}

with sharing も without sharing も宣言しないクラス

with sharing も without sharing もクラスで宣言されていない場合、現在の共有ルールが有効となります。そのため、クラスが別のクラスから共有ルールを取得する場合を除き、共有ルールは強制実行されません。たとえば、共有が強制実行されている別のクラスからクラスがコールされた場合、コールされたクラスにも共有が強制実行されます。

public class myOuterClass {
   // Additional myOuterClass code here
   class myInnerClass {
     // myInnerClass code here
   }
}

テストクラス

Apexテストコード作成の落とし穴より Test.startTest();とTest.stopTest();のブロック内にテスト内容を記載するメリットを確認しましょう。

@isTest
private class HelloWorldTestClass {
    static testMethod void validateHelloWorld() {
        // テスト準備(データ用意、テストユーザ用意など)
        System.RunAs(testuser){
                Test.startTest();
                //テストしたい内容を記載
                Test.stopTest();
                //テスト期待値を検証
                System.assertEquals('期待値', '実の値');
        }
    }
}

Trigger

初心者 SFDCトリガ肥大化(汗) 柔軟性のトリガ 実装論

参考サイト

with sharing、without sharing、および inherited sharing キーワードの使用