2014/04/08 14:14 に Makoto Fukasu が投稿
REGEX(HalfWidth__c , "[^ -~。-゚]*")
|
2013/06/25 11:09 に Makoto Fukasu が投稿
/servlet/servlet.Integration?lid=<S-control id>&eid=<context entity record>
<S-control id> SコントロールID
<context entity record> レコードID |
2013/06/25 9:15 に Makoto Fukasu が投稿
[
2013/06/25 9:17 に更新しました
]
/servlet/servlet.FileDownload?file=<Document ID>
<Document ID> ドキュメントID
|
2013/05/15 6:34 に Makoto Fukasu が投稿
[
2013/05/15 6:41 に更新しました
]
IF(
ISBLANK(Date__c),
"",
CASE(
MOD( Date__c - DATE(1900, 1, 7), 7),
0, "日",
1, "月",
2, "火",
3, "水",
4, "木",
5, "金",
"土"
)
)
|
2013/05/15 6:19 に Makoto Fukasu が投稿
[
2013/05/17 20:59 に更新しました
]
ISBLANKはISNULLの機能にテキスト項目をサポートしたもの。 ※テキスト項目はNULLにならないので、ISNULLだと常にfalseとなることに注意!! |
2013/05/13 7:20 に Makoto Fukasu が投稿
[
2013/05/15 6:40 に更新しました
]
<Apex>
System.Label.CustomLabel
<Visualforce>
$Label.CustomLabel
<数式>
$Label.CustomLabel
|
2013/03/23 15:08 に Makoto Fukasu が投稿
[
2013/05/13 7:51 に更新しました
]
after undelete トリガイベントは、復元レコード (削除された後undelete DML ステートメントによってごみ箱から復元したレコード) に対してのみ機能します。これらのレコードは元に戻したレコードとも呼ばれます。
after undelete トリガイベントは、最上位のオブジェクトでのみ実行します。たとえば、取引先を削除すると、商談も削除されます。取引先をごみ箱から復元すると、商談も復元されます。取引先と商談の両方に関連付けられたafter undelete トリガイベントがある場合、取引先のafter undelete トリガイベントのみが実行されます。
after undelete トリガイベントは、次のオブジェクトでのみ実行されます。 - Account
- Asset
- Campaign
- Case
- Contact
- ContentDocument
- Contract
- カスタムオブジェクト
- Event
- Lead
- Opportunity
- Product
- Solution
- Task
|
2013/03/23 15:03 に Makoto Fukasu が投稿
[
2013/03/23 15:03 に更新しました
]
- 元のレコードがデータベースから読み込まれるか、upsert ステートメント用にレコードが初期設定されます。
- 要求から新しいレコード項目の値が読み込まれ、古い値を上書きします。要求が標準 UI 編集ページから行われた場合、Salesforce はシステム検証を実行して、レコードについて次の点を確認します。
- レイアウト固有のルールへの準拠
- レイアウトレベルおよび項目定義レベルで必要な値
- 有効な項目形式
- 最大項目サイズ
- Salesforce は、要求がApex アプリケーションやSOAP APIコールなどの他のソースから送信されている場合、このステップでシステム検証を実行しません。
- すべてのbefore トリガが実行されます。
- すべての必須項目にnull 以外の値が入力されていることの確認や、ユーザ定義の入力規則の実行など、システム検証のほとんどの手順がもう一度実行されます。Salesforce が標準 UI + 編集ページから要求が行われた場合に再度実行しない唯一のシステム検証は、レイアウト固有のルールの適用です。
- レコードはデータベースに保存されますが、まだ確定されません。
- すべてのafter トリガが実行されます。
- 割り当てルールが実行されます。
- 自動応答ルールが実行されます。
- ワークフロールールが実行されます。
- ワークフロー項目自動更新が存在する場合、レコードが再度更新されます。
- レコードがワークフロー項目自動更新により更新された場合、標準検証のほかに、beforeトリガおよびafterトリガがもう一度だけ実行されます。カスタム検証ルールは実行されません。
- エスカレーションルールが実行されます。
- レコードに積み上げ集計項目が含まれる場合、またはレコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親レコードの積み上げ集計項目が更新されます。親レコードに対して保存手順が実行されます。
- 親レコードが更新され、さらにその親レコードに積み上げ集計項目が含まれるか、その親レコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親レコードの積み上げ集計項目が更新されます。親レコードのさらに親レコードに対して保存手順が実行されます。
- 条件に基づく共有の評価が実行されます。
- すべての DML 操作がデータベースで確定されます。
- メール送信など、確定後のロジックが実行されます。
|
2012/12/11 10:46 に Makoto Fukasu が投稿
[
2013/05/15 8:34 に更新しました
]
【VF】
<apex:page language="ja-JP" cache="true" contentType="application/vnd.ms-excel#csvdownload_{!YEAR(TODAY())}{!MONTH(TODAY())}{!DAY(TODAY())}.csv" controller="CsvDownloadCon" showHeader="false" readOnly="true">列1,列2,列3
<apex:repeat value="{!records}" var="rec" >
{!rec.Text1__c},{!rec.Text2__c},{!rec.Text3__c}
</apex:repeat>
</apex:page>
【Apex】
public with sharing class CsvDownloadCon {
private List<CustomObject__c> records;
public CsvDownloadCon() {
records = new List<CustomObject__c>();
for(CustomObject__c rec : [SELECT Text1__c,Text2__c,Text3__c FROM CustomObject__c]) {
rec.Text1__c = rec.Text1__c.escapeCsv();
rec.Text2__c = rec.Text2__c.escapeCsv();
rec.Text3__c = rec.Text3__c.escapeCsv();
records.add(rec);
}
}
public List<CustomObject__c> getRecords() {
return records;
}
}
【CSV】
列1,列2,列3
aaa,bbb,"c""cc"
a1,b1,c1
|
2012/11/27 9:23 に Makoto Fukasu が投稿
[
2013/05/15 8:37 に更新しました
]
【Apex Trigger】
trigger ObjectTrigger on Object__c(before insert, after insert, before update, after update, before delete, after delete, after undelete) {
ObjectTriggerHandler handler = new ObjectTriggerHandler(Trigger.isExecuting, Trigger.size);
if(Trigger.isInsert) {
if(Trigger.isBefore) {
handler.OnBeforeInsert(Trigger.new);
} else if(Trigger.isAfter) {
handler.OnAfterInsert(Trigger.new);
}
} else if(Trigger.isUpdate) {
if(Trigger.isBefore) {
handler.OnBeforeUpdate(Trigger.old, Trigger.new, Trigger.newMap);
} else if(Trigger.isAfter) {
handler.OnAfterUpdate(Trigger.old, Trigger.new, Trigger.newMap);
}
} else if(Trigger.isDelete) {
if(Trigger.isBefore) {
handler.OnBeforeDelete(Trigger.old, Trigger.oldMap);
} else if(Trigger.isAfter) {
handler.OnAfterDelete(Trigger.old, Trigger.oldMap);
}
} else if(Trigger.isUndelete) {
handler.OnAfterUndelete(Trigger.new);
}
}
【Apex Class】
public with sharing class ObjectTriggerHandler {
private boolean m_isExecuting = false;
private Integer batchSize = 0;
public ObjectTriggerHandler(boolean isExecuting, Integer size) {
m_isExecuting = isExecuting;
batchSize = size;
}
public void OnBeforeInsert(Object__c[] newObjects) {
// TODO:LOGIC
}
public void OnAfterInsert(Object__c[] newObjects) {
// TODO:LOGIC
}
public void OnBeforeUpdate(Object__c[] oldObjects, Object__c[] newObjects, Map newMap) {
// TODO:LOGIC
}
public void OnAfterUpdate(Object__c[] oldObjects, Object__c[] newObjects, Map newMap) {
// TODO:LOGIC
}
public void OnBeforeDelete(Object__c[] delObjects) {
// TODO:LOGIC
}
public void OnAfterDelete(Object__c[] delObjects) {
// TODO:LOGIC
}
public void OnAfterUndelete(Object__c[] restoredObjects) {
// TODO:LOGIC
}
public boolean IsTriggerContext{
get{ return m_isExecuting; }
}
}
|
|