この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Salesforce レコードの操作

Apex では、Salesforce レコードを簡単に操作できます。

sObject という用語は、Force.com に保存可能なオブジェクトを意味します。これは、標準オブジェクト (Account など) でも、ユーザが作成するカスタムオブジェクト (Merchandise オブジェクトなど) でもかまいません。

sObject 変数は、1 行のデータを表し、レコードとも呼ばれます。Apex でオブジェクトを操作するには、オブジェクトの SOAP API 名を使用して宣言します。次に例を示します。

1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Account a = new Account();
18MyCustomObject__c co = new MyCustomObject__c();

Apex でのレコードの操作についての詳細は、「Apex でのデータの操作」を参照してください。

次のコントローラ例では、更新された Account レコードを保持します。update メソッドには、サーバ側コントローラアクションとしてコールできるように @AuraEnabled アノテーションが付加されています。

1swfobject.registerObject("clippy.codeblock-1", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class AccountController {
18
19    @AuraEnabled
20    public static void updateAnnualRevenue(String accountId, Decimal annualRevenue) {
21        Account acct = [SELECT Id, Name, BillingCity FROM Account WHERE Id = :accountId];
22        acct.AnnualRevenue = annualRevenue;
23        update acct;
24    }
25}

JavaScript から Apex コードをコールする例については、クイックスタートを参照してください。

標準オブジェクトからのレコードデータの読み込み

サーバ側コントローラの標準オブジェクトからレコードを読み込みます。次のサーバ側コントローラには、商談レコードのリストと個々の商談レコードを返すメソッドがあります。
1swfobject.registerObject("clippy.codeblock-2", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class OpportunityController {
18
19    @AuraEnabled
20    public static List<Opportunity> getOpportunities() {
21        List<Opportunity> opportunities = 
22                [SELECT Id, Name, CloseDate FROM Opportunity];
23        return opportunities;
24    }
25
26    @AuraEnabled
27    public static Opportunity getOpportunity(Id id) {
28        Opportunity opportunity = [
29                SELECT Id, Account.Name, Name, CloseDate, 
30                       Owner.Name, Amount, Description, StageName
31            FROM Opportunity
32            WHERE Id = :id
33         ];
34        return opportunity;
35    }
36}
次のコンポーネント例では、ボタンを押したときに上記のサーバ側コントローラを使用して商談レコードのリストを表示します。
1<aura:component controller="OpportunityController">
2    <aura:attribute name="opportunities" type="Opportunity[]"/>
3    
4    <ui:button label="Get Opportunities" press="{!c.getOpps}"/>
5    <aura:iteration var="opportunity" items="{!v.opportunities}">
6    	<p>{!opportunity.Name} : {!opportunity.CloseDate}</p>
7    </aura:iteration>
8</aura:component>
ボタンを押すと、次のクライアント側コントローラで、サーバ側コントローラの getOpportunities() をコールして、コンポーネントの opportunities 属性を設定します。サーバ側コントローラメソッドのコール方法についての詳細は、「サーバ側のアクションのコール」 を参照してください。
1({
2    getOpps: function(cmp){
3        var action = cmp.get("c.getOpportunities");
4        action.setCallback(this, function(response){
5            var state = response.getState();
6            if (state === "SUCCESS") {
7                cmp.set("v.opportunities", response.getReturnValue());
8            }
9        });
10	 $A.enqueueAction(action);
11    }
12})

コンポーネントの初期化時にレコードデータを読み込むには、init ハンドラを使用します。

メモ

カスタムオブジェクトからのレコードデータの読み込み

Apex コントローラを使用し、コンポーネントの属性にデータを設定して、レコードデータを読み込みます。次のサーバ側コントローラは、カスタムオブジェクト myObj__c のレコードを返します。
1swfobject.registerObject("clippy.codeblock-5", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class MyObjController {
18    
19    @AuraEnabled
20    public static List<MyObj__c> getMyObjects() {
21        return [SELECT Id, Name, myField__c FROM MyObj__c];
22    }
23}

次のコンポーネント例では、上記のコントローラを使用して myObj__c カスタムオブジェクトからレコードのリストを返します。

1swfobject.registerObject("clippy.codeblock-6", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<aura:component controller="MyObjController"/>
18<aura:attribute name="myObjects" type="namespace.MyObj__c[]"/>
19<aura:iteration items="{!v.myObjects}" var="obj">
20    {!obj.Name}, {!obj.namespace__myField__c}
21</aura:iteration>
次のクライアント側コントローラでは、サーバ側コントローラの getMyObjects() メソッドをコールして、myObjects コンポーネントの属性をレコードデータで設定します。次の手順は、init ハンドラを使用したコンポーネントの初期化時に行うこともできます。
1swfobject.registerObject("clippy.codeblock-7", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17getMyObjects: function(cmp){
18    var action = cmp.get("c.getMyObjects");
19    action.setCallback(this, function(response){
20        var state = response.getState();
21        if (state === "SUCCESS") {
22            cmp.set("v.myObjects", a.getReturnValue());
23        }
24    });
25    $A.enqueueAction(action);
26}

コントローラを使用したレコードの読み込みと更新の例については、クイックスタートを参照してください。

レコードデータの保存

Salesforce1 に組み込まれたレコードの作成および編集ページを利用して、Lightning コンポーネントからレコードを作成または編集することができます。たとえば、次のコンポーネントには、クライアント側コントローラをコールしてレコードの編集ページを表示するボタンがあります。
1<aura:component>
2    <ui:button label="Edit Record" press="{!c.edit}"/>
3</aura:component>
クライアント側コントローラから、指定された取引先責任者 ID を持つレコードの編集ページを表示する force:recordEdit イベントが起動されます。このイベントを正しく処理するには、コンポーネントが Salesforce1 に含まれている必要があります。
1edit : function(component, event, helper) {
2    var editRecordEvent = $A.get("e.force:editRecord");
3    editRecordEvent.setParams({
4        "recordId": component.get("v.contact.Id")
5    });
6    editRecordEvent.fire();
7}

force:recordEdit イベントを使用して更新されたレコードは、デフォルトにより保持されます。

または、ユーザがレコードを追加できるカスタムフォームを提供する Lightning コンポーネントを指定することもできます。新しいレコードを保存するには、クライアント側コントローラを Apex コントローラに結び付けます。次のリストに、コンポーネントおよび Apex コントローラを使用してレコードを保持する方法を示します。

レコード更新を処理するカスタムフォームを作成する場合は、独自の項目検証を指定する必要があります。

メモ

  • upsert 操作で行う更新を保存する Apex コントローラを作成する。次の例に、レコードデータを更新/挿入する Apex コントローラを示します。
    1@AuraEnabled
    2public static Expense__c saveExpense(Expense__c expense) {
    3    upsert expense;
    4    return expense;
    5}
  • コンポーネントからクライアント側コントローラをコールする。たとえば、<ui:button label="Submit" press="{!c.createExpense}"/> と指定します。
  • クライアント側コントローラで、サーバ側コントローラのインスタンスを取得してコールバックを設定する。次の例では、カスタムオブジェクトでレコードを更新/挿入します。setParams() は、サーバ側コントローラの saveExpense() メソッドで expense 引数の値を設定します。
    1upsertExpense : function(component, expense, callback) {
    2      var action = component.get("c.saveExpense");
    3      action.setParams({ 
    4          "expense": expense
    5      });
    6      if (callback) {
    7          action.setCallback(this, callback);
    8      }
    9      $A.enqueueAction(action);
    10    }