Mutual authentication(two-way authentication) Callin

Callout 時の Mutual authentication については、サーバ編クライアント編 を参照。

Callin(外部から Salesforce への API 接続)時には、Salesforce のサーバ認証とは別に、クライアント認証も行えるようになっている(Salesforce.com Winter ’14 リリースノート/相互認証)。注意点としては、Callout 時のサーバ認証時と同様に Salesforce で信頼される認証局での署名である必要がある。対応している証明書は Outbound Messaging SSL CA Certificates にリストされている。

クライアント証明書のアップロードと、接続ユーザの SSL/TLS 相互認証を適用 が有効になれば設定は完了となる。テストとしては、cURL で以下の通り実行し疎通できれば良い。

$ curl -k https://ap.salesforce.com:8443/services/Soap/u/33.0 -H "Content-Type: text/xml; charset=UTF-8" -H "SOAPAction: login" -d @login.xml --cert mycrient.crt --key mycrient.key
<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Body>
    <n1:login xmlns:n1="urn:partner.soap.sforce.com">
      <n1:username>my username</n1:username>
      <n1:password>my password</n1:password>
    </n1:login>
  </env:Body>
</env:Envelope>

レコードのオブジェクト型を確認する

getsObjectType() でそのインスタンス(レコード)の属するオブジェクトが確認できる。

Account acct = new Account(Name = 'sample');
System.assertEquals(Account.sObjectType, acct.getsObjectType());


例えば、添付(Attachment) の ParentId で比較すれば、特定のオブジェクトの添付ファイルのみ Apex トリガで処理させることもできる。

trigger AttachmentTrigger on Attachment (before insert) {
  for (Attachment att : trigger.new) {
    if (att.ParentId.getsObjectType() == Account.sObjectType) {
      // do something ...
    } 
  }
}