レコードの削除
Lightning データサービスを使用してレコードを削除するには、force:recordData コンポーネントの deleteRecord をコールして、削除操作の完了後に呼び出されるコールバック関数を渡します。フォームベースのコンポーネント (例: lightning:recordForm) は、現時点ではレコードの削除をサポートしていません。
Lightning データサービスの削除操作は単純明快です。force:recordData タグに最小限の詳細を含めることができます。レコードデータが不要になる場合は、fields 属性を単に Id に設定します。削除が唯一の操作であることがわかっている場合は、任意の mode を使用できます。
削除操作を実行するには、適切なコントローラアクションハンドラから、force:recordData コンポーネントの deleteRecord をコールします。deleteRecord は、操作の完了時に呼び出されるコールバック関数という 1 つの引数を取ります。このコールバック関数は、その唯一のパラメータとして SaveRecordResult オブジェクトを受け取ります。SaveRecordResult には、操作の成否や、結果の処理に使用できるその他の詳細を示す state 属性が含まれます。
レコードの削除
次の例は、Lightning データサービスを使用したレコードの削除の要点を示しています。このコンポーネントは、[レコードを削除] ボタンをレコードページに追加して、表示されているレコードを削除できるようにします。レコード ID は、force:hasRecordId インターフェースによって追加される暗黙的な recordId 属性によって指定されます。
ldsDelete.cmp
force:recordData タグには、recordId と、最小限絶対必要なものだけを記載したほぼ空の fields リストのみが含まれます。たとえば、確認メッセージの一部として、ユーザインターフェースにレコード値を表示したい場合は、この最小限の削除例ではなく、読み込み操作の場合と同様に、force:recordData タグを定義します。
1<aura:component implements="flexipage:availableForRecordHome,force:hasRecordId">
2
3 <aura:attribute name="recordError" type="String" access="private"/>
4
5 <force:recordData aura:id="recordHandler"
6 recordId="{!v.recordId}"
7 fields="Id"
8 targetError="{!v.recordError}"
9 recordUpdated="{!c.handleRecordUpdated}" />
10
11 <!-- Display the delete record form -->
12 <div class="Delete Record">
13 <lightning:card iconName="action:delete" title="Delete Record">
14 <div class="slds-p-horizontal--small">
15 <lightning:button label="Delete Record" variant="destructive" onclick="{!c.handleDeleteRecord}"/>
16 </div>
17 </lightning:card>
18 </div>
19
20 <!-- Display Lightning Data Service errors, if any -->
21 <aura:if isTrue="{!not(empty(v.recordError))}">
22 <div class="recordError">
23 {!v.recordError}</div>
24 </aura:if>
25</aura:component>
ldsDeleteController.js
レコードが削除された時点で、別のページに移動します。移動しないと、コンポーネントが更新されたときに「レコードが見つかりません」というエラーが表示されます。ここでは、コールバック関数に提供された SaveRecordResult の objectApiName プロパティをコントローラが使用して、オブジェクトのホームページに移動します。
1({
2 handleDeleteRecord: function(component, event, helper) {
3 component.find("recordHandler").deleteRecord($A.getCallback(function(deleteResult) {
4 // NOTE: If you want a specific behavior(an action or UI behavior) when this action is successful
5 // then handle that in a callback (generic logic when record is changed should be handled in recordUpdated event handler)
6 if (deleteResult.state === "SUCCESS" || deleteResult.state === "DRAFT") {
7 // record is deleted
8 console.log("Record is deleted.");
9 } else if (deleteResult.state === "INCOMPLETE") {
10 console.log("User is offline, device doesn't support drafts.");
11 } else if (deleteResult.state === "ERROR") {
12 console.log('Problem deleting record, error: ' + JSON.stringify(deleteResult.error));
13 } else {
14 console.log('Unknown problem, state: ' + deleteResult.state + ', error: ' + JSON.stringify(deleteResult.error));
15 }
16 }));
17 },
18
19 /**
20 * Control the component behavior here when record is changed (via any component)
21 */
22 handleRecordUpdated: function(component, event, helper) {
23 var eventParams = event.getParams();
24 if(eventParams.changeType === "CHANGED") {
25 // record is changed
26 } else if(eventParams.changeType === "LOADED") {
27 // record is loaded in the cache
28 } else if(eventParams.changeType === "REMOVED") {
29 // record is deleted, show a toast UI message
30 var resultsToast = $A.get("e.force:showToast");
31 resultsToast.setParams({
32 "title": "Deleted",
33 "message": "The record was deleted."
34 });
35 resultsToast.fire();
36
37 } else if(eventParams.changeType === "ERROR") {
38 // there’s an error while loading, saving, or deleting the record
39 }
40 }
41})