Apexのガバナ制限について

developer.salesforce.com

 

ガバナ制限

Apexはマルチテナント環境(マンションのようなもの)で実行するため、共有のリソースを独り占めしないように制限事項がある。

もし、Apexで書いたコードが制限を超えた場合、例外を出す。

 

次の5つがある。

トランザクション単位のApexの制限

トランザクション単位の認定管理パッケージの制限

・Force.comプラットフォームのApex制限

・静的Apexの制限

・転送通知の制限

 

今回はトランザクション単位のApexの制限を見る。

トランザクション単位のApexの制限とは、トランザクション単位でカウントされるものである。

バッチなどの一括処理の場合、制限はexecuteメソッドでレコードのバッチの実行ごとにリセットされる。

同期Apex、非同期Apex(非同期Apexは一括処理と、futureメソッドが該当する)で、制限が異なる場合がある。(以下抜粋)

 

【異なる場合】

・発行されるSOQLクエリの合計数

同期:100

非同期:200

・ヒープの合計サイズ

同期:6MB

非同期:12MB

Salesforce サーバの最大 CPU 時間

同期:10,000ミリ秒

非同期:60,000ミリ秒

 

【同じもの】

・SOQL クエリによって取得されるレコードの合計数: 50,000

・発行される DML ステートメントの合計数:150

DML ステートメントの結果として処理されるレコードの合計数、Approval.process、または database.emptyRecycleBin:10,000

・insert、update、または delete ステートメントによって繰り返しトリガする Apex 呼び出しのスタックの深さの合計数 :16

・Apex トランザクションごとの最大実行時間:10 分

・Apex トランザクションごとに許容される転送通知メソッドコールの最大数:10

DMLについて

DML

 

DMLステートメント

・オブジェクトへのレコードの登録、更新、削除、復元を行う。

・挿入

 ・insert

 ・基本的な形

Account newIns = new Account (Name = 'name1');

insert newIns;

  ・複数のときの形

List<Account> newInss = new List<Account>();

newInss.add(new Account(Name = 'name2'));

insert newInss;

 

・更新

 ・update

 ・updateを行う対象をsalesforce idで決める。

  ・idはDMLで取得できる。

  ・更新する項目も取得する。

List<Account> newUpds = [SELECT id, Name FROM Account WHERE Name = 'name1'];

newUds[0].Name = 'changedName1';

update newUpds;

 

・挿入と更新

 ・upsert

  ・キーが一致しない:挿入

  ・キーが一致する:更新

 ・キーは外部キーでもおk

 

・削除

 ・delete

 ・削除対象をsalesforce id で決める。

 ・deleteは論理削除

  ・一定時間経つと物理削除

 

・復元

 ・undelete

 ・復元対象をsalesforce idで決める。

 ・ゴミ箱のレコードは通常のクエリでは撮れない。

  ・いくつか取得方法がある。

  ・詳しくはぐぐって。

 

 

Database DMLメソッド

・Database DMLメソッド

 ・今までのはDMLステートメント

 ・DatabaseクラスはDMLメソッドを持つ

 ・例外について

  ・DMLステートメント:例外を出す

  ・DMLメソッド:例外を出さない

   ・どうするか?

   ・DatabaseのsaveResult型をつかう

    ・戻り値で「成功」と「エラー」がわかる

     ・SaveResultのメソッド

      ・getError()メソッド

       ・エラーが発生するとエラーコードと説明文の配列を返す。

       ・それ以外はからのセットを返す。

      ・isSuccess()メソッド

       ・boolean

       ・DMLが成功:true

       ・それ以外:false

 

動的SOQLについて

詳しくはリンク先

developer.salesforce.com

 

概要:

動的SOQLはAPEXコードで実行時にSOQL文字列を作る。

使いどころ:

・エンドユーザの入力で検索

・いくつかの項目名のレコードの更新

使い方:

・Database.query()を使う

・sObject型で受ける

・sObject s = Database.query(Str_limit_1)

 ・複数のときはList<sObject>

考慮事項

・バインド変数を使用できる

String myTestString = 'TestName';

List<sObject> sObjList = Database.query('SELECT Id FROM MyCustomObject__c WHERE Name = : myTestString');

 ・バインド変数項目はクエリ文字列に使えない。

  ・つまり、これはダメ

MyCustomObject__c myVariable = new MyCustomObject__c(field__c = 'TestField');

 ・なので次のように書く

String resolveField1 = myVariable.field1__c;

SOQLインジェクション

・escapeStringQuotesのメソッドを使ってインジェクションを防ぐ

 ・このメソッドで、ユーザが渡す文字列の単一引用符*1エスケープ文字(\)を追加する。

 ・これにより、単一引用符をデータベースコマンドではなく、囲まれた文字列として処理する。

 

 

 

Salesforce Developer Experience(DX)について軽くまとめた

Salesforce Developer Experience(DX)

https://developer.salesforce.com/docs/atlas.ja-jp.212.0.sfdx_dev.meta/sfdx_dev/sfdx_dev_intro.htm

・Lightning Platformのアプリケーションの管理、開発が可能。

 ・Lightning Platform:CRMの基盤。

・myLightningツール:アプリの独自化、スマホでの使用感を向上できる。

  ・Lightning App Builderを使ったアプリのカスタマイズと構築

   ・ドラッグアンドドロップでアプリを作成できる。

   ・Process BuilderとLightning Flowで業務を行いやすく生産的に

   ・複雑なプロセスを簡単にアプリに変換できる。

  ・Lightning Design Systemでリッチなアプリを作れる

   ・設計パターン、コンポーネント、UXを活用して短時間で開発できる。

  ・Lightning コンポーネントでアプリを素早く作れる

   ・HTML, CSS, JSなどを使うビルディングブロック

Salesforce DXの特徴

 ・自分に合ったツールで開発可能。

 ・ソースコードメタデータは組織の外部に存在する。バージョン管理システムにソースを置ける。

 ・コマンドラインインターフェースが組織を使う複雑性をなくす。

 ・スクラッチ組織を開発と自動化環境を目的に作成できる。

 ・コマンドラインインターフェースと外部ソースには、任意のIDEテキストエディタを使える。

 

こちらは実際に使用した例:http://tyoshikawa1106.hatenablog.com/entry/2018/01/06/191052

機械学習と統計検定のリンク集

機械学習と統計検定について、良さそうなPDFや記事をまとめた。

 

統計的機械学習入門

https://www.nii.ac.jp/userdata/karuizawa/h23/111104_3rdlecueda.pdf

統計的機械学習入門

http://www.r.dl.itc.u-tokyo.ac.jp/~nakagawa/SML1/index-SML.html

機械学習を知識ゼロから学ぶpdf

https://matome.naver.jp/odai/2137978900585239401

機械学習】入門者向け資料(pdf・サイト)まとめ

https://algorithm.joho.info/machine-learning/nyumon-siryou-pdf-site/

深層学習(Deep Learning)への入門 講義ノート

http://kabuto.phys.sci.osaka-u.ac.jp/~koji/workshop/slides/deep/TakiLecture.pdf

機械学習Python との出会い

http://www.kamishima.net/archive/mlmpyja.pdf

 

統計検定メモ

過去問

http://www.toukei-kentei.jp/past/

統計検定 1 級に合格する方法

https://qiita.com/drken/items/089b8443305df047b44e

統計学の時間

https://bellcurve.jp/statistics/course/

合格者の声

http://www.toukei-kentei.jp/koecat/kgrade1/

バリアンの「計量経済学のための新しい方法」をアブストラクトだけ適当に訳してみた

BigData: New Tricks for Econometrics

http://people.ischool.berkeley.edu/~hal/Papers/2013/ml.pdf

 

アブストラクト

今日、コンピュータは最も経済的なトランザクションを仲介している。「このコンピュータに仲介されたトランザクション」はたくさんのデータを作り、新しいツールがこのデータを操作したり、分析したりすることに使われている。このエッセーではいくつかのツールや方法をまとめて紹介するものだ。

 

コンピュータはたくさんの経済のトランザクションを含み、トランザクションと関連したデータをとらえることができる。そのとき操作や分析が行われる。これまでの回帰分析のような統計や経済の技術は上手くいっていることが多かったけど、ユニークな異なるツールが求められることになるビッグデータのデータセットには問題が出てくる。

 

第一に、データの大きなサイズが含まれるとき、よりパワフルなデータを操作するツールが必要になる。第二に、予測に適切な変数の選択のようなものをする必要があるけれど、そんなものより潜在的な予測因子を得られる。第三に、巨大なデータは簡単な線形モデルより柔軟な関係を許す。決定木分析や、SVMSupport Vector Machine)、ニューラルネットなどの機械学習のテクニックは複雑な関係に対して、より効果的な方法を持つモデルを許可する。

 

このエッセーで、ビッグデータを操作したり、分析するツールを着ていこうと思う。このモデルはたくさんのものを提供するし、広範囲に知られているし、計量経済学にも使われている。事実、今日の大学院生へ普通にアドバイスするときは、「コンピュータ科学を学ぶ学部へ行け、そして機械学習の授業を取れ」と言っている。先の10年でのコンピュータ科学と統計学の実りあるコラボレーションであり、僕は将来的にコンピュータ科学と計量経済学もまた生産的なコラボレーションになることを期待している。

(以上)