特殊时期,大家一定要保重身体。增强自身免疫力,一切都会过去,一起加油!!!

Auraでアクションボタン作成して画面のチェックボックス項目一括処理

Salesforce zchao 3371℃ 0评论

要求
標準画面ボタンをクリックして、一括で管理画面のチェックボックス項目をオンまたはオフにします。
一度クリックしてチェックボックス項目をオンにして、もう一度クリックしてオフにします

実現
2つの状況に分けられます:
1は、ユーザーがチェックボックス項目の編集権限を持っていないことです(つまり、デフォルトではすべてがオフになっており、ボタンをクリックするとすべてがオンされます)
2は、ユーザーがチェックボックス項目の編集権限を持っていることです(つまり、デフォルトではすべてのチェックボックスがオフになっています。ボタンをクリックすると、すべてのチェックボックスがオンされますが、一部のチェックボックスをオンまたはオフすると、
すべてのチェックボックス項目のステータス(オン/オフ)に一貫性がない場合は、ボタンをもう一度クリックすると、オンした項目がオフされ、オフされた項目がオンされます)

LightningとClassicの対応
LEX:アクションボタン
Classic:JSボタン

 

LEX:
オブジェクトにいくつかのチェックボックスプロジェクトを作成する
たとえば、Test__cで、Checkbox1__c、Checkbox2__c、Checkbox3__cを作成します。
次に、Pagelayoutに配置します

ステップ1:Lightningコンポーネントを作成する
ステップ2:APEXを作成する
ステップ3:アクションボタン

手順1:新しいLightningコンポーネントを作成する
Checkbox.cmp


<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId" controller = "CheckboxAPEX" >
<aura:attribute name="objects" type="Test__c"/>
<aura:attribute name="objectsError" type="String"/>
<force:recordData aura:id="recordLoader"
recordId="{!v.recordId}"
fields="Name,Checkbox1__c,Checkbox2__c,Checkbox3__c"
targetFields="{!v.objects}"
targetError="{!v.objectsError}"
/>
<div class="slds-is-relative">
<aura:if isTrue="{!and(v.objects.Checkbox1__c,v.objects.Checkbox2__c,v.objects.Checkbox3__c)}">
<div class="modal-body scrollable slds-modal__content slds-p-around--medium">
<h2>画面上のすべてのチェックボックス項目{!and(v.objects.Checkbox1__c,v.objects.Checkbox2__c,v.objects.Checkbox3__c)}の場合</h2>
<h2>画面上のすべてのチェックボックス項目を一括でオフにしてもよろしいでしょうか</h2>
</div>
<aura:set attribute="else">
<div class="modal-body scrollable slds-modal__content slds-p-around--medium">
<h2>画面上のすべてのチェックボックス項目{!and(v.objects.Checkbox1__c,v.objects.Checkbox2__c,v.objects.Checkbox3__c)}あるの場合{!and(v.objects.Checkbox1__c,v.objects.Checkbox2__c,v.objects.Checkbox3__c)}</h2>
<h2>画面上のすべてのチェックボックス項目をオンの場合、一括でオフにして、オフの場合、一括でオンにしてもよろしいでしょうか</h2>
</div>
</aura:set>
</aura:if>
<aura:if isTrue="{!not(empty(v.objectsError))}">
<ui:message title="Error" severity="error" closable="true">
{!v.objectsError}
</ui:message>
</aura:if>
<div class="modal-footer slds-modal__footer" style="height:70px">
<button class="slds-button slds-button--brand cuf-publisherShareButton undefined uiButton" style="right:150px" onclick="{!c.doCheck}" >YES</button>
<button class="slds-button slds-button--neutral cuf-publisherCancelButton uiButton" style="right:140px" onclick="{!c.doCancel}" >NO</button>
</div>
</div>
</aura:component>

CheckboxController.js


({
doCheck: function(component) {
let checkApex = component.get("c.checkApex");
selectApex.setParams({
Checkbox1: component.get("v.objects.Checkbox1__c"),
Checkbox2__c: component.get("v.objects.Checkbox2__c"),
Checkbox3__c: component.get("v.objects.Checkbox3__c"),
objectId: component.get("v.recordId")
});
selectApex.setCallback(this, function(response) {
let state = response.getState();
if (state === "SUCCESS") {
console.log("YES!");
$A.get("e.force:closeQuickAction").fire();
$A.get("e.force:refreshView").fire();
} else {
console.log("NO: " + state);
}
});
$A.enqueueAction(selectApex);
},
doCancel: function(component, event, helper) {
$A.get("e.force:closeQuickAction").fire();
}
});

ステップ2:APEXを作成する
CheckboxAPEX.apxc


public class CheckboxAPEX {
@AuraEnabled
public Static boolean selectApex(Boolean Checkbox1, Boolean Checkbox2, Boolean Checkbox3,Id objectId) {
system.debug('Checkbox1 = ' + Checkbox1);
system.debug('Checkbox2 = ' + Checkbox2);
system.debug('Checkbox3 = ' + Checkbox3);
system.debug('objectId = ' + objectId);
Test__c test= new Test_c (Id = objectId,Checkbox1__c = !Checkbox1,Checkbox2__c = !Checkbox2,Checkbox3__c = !Checkbox3);
if(test !== null){
update test;
return true;
}
}

ステップ3:アクションボタン

Buttons, Links, and Actions
New Action

Lightning Component: c:Checkbox
Action Type:Lightning Component
Height:200px
Label:Checkbox
Name:Checkbox

 

問題やエラーに注意
1  Lightningコンポーネント:自分で作成したc:Checkboxを選択できません
チェック:implements=”force:lightningQuickActionWithoutHeader,force:hasRecordId”が存在するかどうか
<aura:component implements=”force:lightningQuickActionWithoutHeader,force:hasRecordId” controller = “CheckboxAPEX” >
2 動作中に以下の問題が発生します
salesforce Error while creating component for lightning component quick action [Octal literals are not allowed in strict mode.
[Octal literals are not allowed in strict mode.]]

auraをチェックするときに文法エラーまたは間違った単語があります
Checkbox1: component.get(“v.objects.Checkbox1__c”),
エラー:v.objects.Checkbox1_c
正解:v.objects.Checkbox1__c
コードは文字列であるため、保存時にエラーは発生しませんが、実際の処理が見つからず、
System.NullPointerException: Attempt to de-reference a null object など
オブジェクト項目の値を取得する操作では、直接操作でnullが問題になります

3 auraの場合:タグの場合、&&、AND、||、ORなどの演算子は使用できず、isTrue属性で複数の条件が使用されます。
ただし、or()やand()などのaura:ifタグで論理関数を使用できます。
エラー:<aura:if isTrue=”{!(v.objects.Checkbox1__c && v.objects.Checkbox2__c && v.objects.Checkbox3__c)}”>
正解:<aura:if isTrue=”{!and(v.objects.Checkbox1__c,v.objects.Checkbox2__c,v.objects.Checkbox3__c)}”>
エラー:<aura:if isTrue=”{!(v.objects.Checkbox1__c || v.objects.Checkbox2__c || v.objects.Checkbox3__c)}”>
正解:<aura:if isTrue=”{!or(v.objects.Checkbox1__c,v.objects.Checkbox2__c,v.objects.Checkbox3__c)}”>
エラー:<aura:if isTrue=”{!((v.objects.Checkbox1__c && v.objects.Checkbox2__c) || v.objects.Checkbox3__c)}”>
正解:<aura:if isTrue=”{!or(and(v.objects.Checkbox1__c,v.objects.Checkbox2__c ),v.objects.Checkbox3__c ) }”>

 

Classic:JSボタン
APEXを利用しないで、最初の場合のみ、すべてをオンしてすべてオフ
編集できない場合にもっと適しています。編集可能な場合、チェックボックス項目のステータスが異なり、すべての項目のチェックが外されます。
Custom Button or Link Edit
Label:Checkbox
Name:Checkbox
Display Type:Detail Page Button
Behavior:Execute JavaScript
Content Source:OnClick JavaScript

{!REQUIRESCRIPT("/soap/ajax/41.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/41.0/apex.js" )}

if({!Test__c.Checkbox1__c} == false && {!Test__c.Checkbox2__c} == false && {!Test__c.Checkbox3__c} == false)
{
var c = new sforce.SObject("Test__c");
c.id = "{!Test__c.Id}";
c.Checkbox1__c = true;
c.Checkbox3__c = true;
c.Checkbox3__c = true;
result = sforce.connection.update([c]);
if ( result[0].getBoolean( "success" ) )
{
window.location.reload();
}
else
{
alert( result[0].errors.message);
}
}
else
{
var c = new sforce.SObject("Test__c");
c.id = "{!Test__c.Id}";
c.Checkbox1__c = false;
c.Checkbox3__c = false;
c.Checkbox3__c = false;
result = sforce.connection.update([c]);
if ( result[0].getBoolean( "success" ) )
{
window.location.reload();
}
else
{
alert( result[0].errors.message);
}
}

また
1JSボタンでのSOQLクエリ操作

var a = sforce.connection.query(“select id,Checkbox1__c,Checkbox2__c,Checkbox3__c,format(LastModifiedDate),LastModifiedBy.Name,LastModifiedById from Test__c where id ='{!Test__c.Id}’ limit 1”);
records = a.getArray(“records”);
var myObj = records[0];
myObj.Checkbox1_ = true;
……
results = sforce.connection.update([myObj]);

1項目は大文字と小文字を区別します
エラー:LastModifiedby
正解:LastModifiedBy
理由は文字列です。APEXでは大文字と小文字は区別されません。

2 format前
LastModifiedDate
2021-02-14T22:54:14.000+0000
format後
format(LastModifiedDate) YYYY/MM/DD HH:mm
2021/02/14 22:54

 

我ある故に我思い、我思う故に我在り。

转载请注明:zchao博客之家 » Auraでアクションボタン作成して画面のチェックボックス項目一括処理

喜欢 (8)or分享 (0)

您必须 登录 才能发表评论!