技術メモ(主に自分向け)

短期記憶の自分向けの技術メモです。

テキストボックス内でEnterキーを押した場合にエラー画面に遷移する

html内にあるテキストボックスに何かしら値を入力した後、
Enterキーを押すとエラーが画面に遷移してしまう。
Enterキーを押すと確定ボタンを押した時と同様の動きにしたい。


(例)
テキストボックスに7桁数字を入力して確定ボタンを押す。
入力した際に確定ボタンではなくEnterキーを押すことも可能。


コンポーネント

<form action="" id="test1">
 <input id="test2" class="xxx" name="test2name" type="text" value="" placeholder="未入力の際にグレーで表示される内容" maxlength="最大入力値" pattern="^[0-9]{7}$"/>
 <button id="test3" class="xxx" type="submit" onclick="{!c.onClicked}">確定</button>
</form>


javascript

onClicked:function(component, event, helper){
 var inputVal = document.getElementById('test2').value;
 var pattern = "^[0-9]{7}$";
 // 入力値チェック
 if (inputVal.match(pattern)) {
  // 処理
 }
 else {
  // 処理
 }

 // Enterキーを押した時に画面リロードを行わない
 const testEvent = document,querySelector(#test1);
 testEvent.addEventListener('submit', (event) => {
  event.stpoPropagation();
  event.preventDefault();
 });
}

designで設定したattributeが削除できない

Auraコンポーネントにあるdeginにて、
attributeを設定したが不要になったので削除したい。


しかし、ソースの該当箇所を削除すると以下のエラーが出てきて削除ができない。
コンポーネントがLightningページインターフェースを実装している場合、設計属性「***」を削除することはできません。」


方法は、
ソースをもう一度作り直す。です。
他にいい方法があったら教えてください、、、

htmlのテキストを抽出する

Auraコンポーネント(html)内のテキストをjavascripで抽出する。


(例)
・html側

<div class="test_tree1">
 <p class="test_tree1_content">テスト1</p>
</div>
<p class="test_tree2">テスト2</p>

javascript

$("test_tree1_content").on("click", function() {
 let idText = $(this).parent().next().text();
});

⇒テスト2が取れる。

this:test_tree1_content
parent:test_tree1
next:test_tree2
text:テスト2

spinnerの設定方法

Auraコンポーネントにて、spinnerの設定方法を記載。
spinnerは簡単に言えば処理が終わるまで表示されるローディング(ぐるぐる)画面です。

注意:spinnerとjQueryの相性があまり良くないため、jQueryの中にspinner処理は入れないようにしてください。


コンポーネント

<lightning:spinner aura:id="spinner" class="slds-hide" variant="brand" size="large"/>

・variant属性は、spinnerの外観についての記載です。
 「brand」を設定した場合、spinnerはLightning Design Systemブランドの色と同じになります。
 「inverse」を設定した場合、白いspinnerが表示されます。(デフォルトはダークブルー)


コンポーネントのHelper.js

showSpinner:function(component){
 const spinner = component.find('spinner');
 $A.util.removeClass(spinner, 'slds-hide');
}

hideSpinner:function(component){
 const spinner = component.find('spinner');
 $A.util.addClass(spinner, 'slds-hide');
}


コンポーネントのController.js
spinnerを入れたい処理の始めに

helper.showSpinner(component);

を入れて、終わりに

helper.hideSpinner(component);

を入れる。

Apexテストクラスの書き方メモ

Apexのテストクラスを書く時の備忘録
テストのカバレッジは75%以上をキープする

・テストクラスの作成方法
普段のApexクラス作成と同じ
開発者コンソール>File>New>Apex Class
作成したクラスの一番上に「@isTest」をつける。


・テストレコード作成
テストクラスのメソッドには「@isTest」をつける。
テスト開始:Test.startTest();
テスト終了:Test.stopTest();
ユーザを指定してApexを実行:System.tunAs(ユーザ){}
以下のような使い方をする。

@isTest
static void testMethod() {
 User usr = [SELECT Id, Name FROM User WHERE Username = 'xxx']; 
 Test.startTest();
 System.runAs(usr) {…}
 Test.stopTest();
}


テストレコードを作りたいときは以下の方法がある。

【方法1】
アノテーション@TestSetup
本クラス内すべてのテストメソッドで使用できるテストレコードの作成
(例)

@TestSetup
static void setup() {
 Account acc = new Account(Name = 'xxx');
 insert acc;
 
 Contact con = new Contact(
   LastName = 'x1', 
   FirstName = 'x2', 
   Email = 'x3@xxx.com', 
   HomePhone = '0000000000', 
   Phone = '0000000000', 
   Birthdate = Date.newInstance(2000, 1, 1), 
   AccountId = acc.Id);
 insert con;
 
 User usr = new User(
   Username = 'y1', 
   Email = 'x1@xxx.com', 
   LastName = 'x1', 
   FirstName = 'x2', 
   Alias = 'y2', 
   TimeZoneSidKey = 'Asia/Tokyo', 
   LocalSidKey = 'ja_JP', 
   ProfileId = [SELECT Id FROM profile WHERE Name = 'zzz'].id, 
   CommunityNickname = 'y3', 
   Phone = '0000000000', 
   LanguageLocaleKey = 'ja', 
   EmailEncodingKey = 'ISO-2022-JP', 
   contactId = con.Id);
 insert usr;
}

各メソッドでテストレコードをgetしたい場合、以下のようにプライベートメソッドを作っておくと
使いまわせて便利。

private static User getContact(String conId) {
 return [SELECT Id FROM Contact WHERE Id = conId ];
}
@isTest
static void testMethod() {
 Contact con = getContact('xxxxxxxx');
}


【方法2】
テストメソッドに直接書く
※テストレコードを書く場所に注意。
SFDC環境によってテスト開始(runAs()やstartTest())後に書くとうまくいかないことがある
→権限によって処理できない可能性があるため。
 テスト開始前にテストレコードを取得する。

@isTest
static void testMethod() {
 Account acc = new Account(Name = 'xxx');
 insert acc;
 User usr = [SELECT Id, Name FROM User WHERE Username = 'xxx'];
 
 Test.startTest();
 System.runAs(usr) {…}
 Test.stopTest();
}