商談から取引先名取得数式
IF(Account.IsPersonAccount,
Account.LastName + ' ' + Account.FirstName,
Account.Name
)
kinkun's blog
商談から取引先名取得数式
IF(Account.IsPersonAccount,
Account.LastName + ' ' + Account.FirstName,
Account.Name
)
レコードコピー例を紹介します。
List<Account> InsertAccs = new List<Account>();
for(Account acc : this.selectedAccs){
Account a = acc.clone(false,true,false,false);
InsertAccs.add(a);
}
if(InsertAccs.size() > 0){
insert InsertAccs;
}
リストビューで表示されたレコードを一括してコピー例を紹介します。
コントローラ
public with sharing class CustomAccountSetController {
public List<Account> selectedAccs {get;set;}
public CustomAccountSetController(ApexPages.StandardSetController controller) {
List<Account> accs = controller.getSelected();
this.selectedAccs = [SELECT Id, Name FROM Account WHERE Id IN :(new Map<Id, Account>(accs)).keySet()];
}
public void execute() {
system.debug('execute');
}
}
Visualforceページ
<apex:page standardController="Account" recordSetvar="accs" extensions="CustomAccountSetController">
<apex:form>
<apex:pageBlock title="選択済み取引先" >
<apex:pageBlockButtons location="bottom">
<apex:commandButton action="{!execute}" value="実行" oncomplete="history.back();" />
</apex:pageBlockButtons>
<apex:pageBlockTable value="{!selectedAccs}" var="acc">
<apex:column value="{!acc.Name}"/>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>
カスタムボタン
取引先リストビュー
Visualforceアクションを紹介します。
Visualforceコントローラ
public with sharing class lifecycle {
private final Account acct;
Integer EmpAdd;
public lifecycle(myController controller) {
this.acct = (Account)controller.getAccount();
}
public String getGreeting() {
return acct.name + ' Current Information';
}
public void resetEmp() {
acct.numberofemployees = 10;
update acct;
}
}
Visualforceページ
<apex:page controller="myController" tabStyle="Account" extensions="lifecycle" action="{!resetEmp}">
<apex:messages />
<apex:pageBlock title="{!greeting}">
<apex:outputLabel value="{!$ObjectType.account.fields.Name.label}: "
for="acctName"/>
<apex:outputField value="{!account.name}" id="acctName"/>
<br/>
<apex:outputLabel
value="{!$ObjectType.account.fields.NumberOfEmployees.label}: "
for="emps"/>
<apex:outputField value="{!account.NumberOfEmployees}" id="emps"/>
<br/>
</apex:pageBlock>
<apex:pageBlock title="Variable values">
<c:editMode value="{!$CurrentPage.parameters.key}"/>
</apex:pageBlock>
<apex:form rendered="{!$CurrentPage.parameters.key = 'true'}">
<apex:pageBlock title="Update the Account" id="thePageBlock">
<apex:pageBlockSection columns="1">
<apex:inputField id="aName" value="{!account.name}"/>
<apex:inputField value="{!account.NumberOfEmployees}"/>
<apex:pageBlockSectionItem>
<apex:outputLabel value="{!$ObjectType.account.fields.Industry.label}"
for="acctIndustry"/>
<apex:actionRegion>
<apex:inputField value="{!account.Industry}" id="acctIndustry">
<apex:actionSupport event="onchange" rerender="thePageBlock"
status="status"/>
</apex:inputField>
</apex:actionRegion>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
<apex:pageBlockButtons location="bottom">
<apex:commandButton action="{!save}" value="Save"/>
<apex:commandButton action="{!cancel}" value="Cancel" immediate="true"/>
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:form>
</apex:page>
上記のVisualforceページ以下がアクションです。
action="{!resetEmp}"
StandardController クラス紹介します。
Visualforceページコントローラ
public class myControllerExtension {
private final Account acct;
// The extension constructor initializes the private member
// variable acct by using the getRecord method from the standard
// controller.
public myControllerExtension(ApexPages.StandardController stdController) {
this.acct = (Account)stdController.getRecord();
}
public String getGreeting() {
return 'Hello ' + acct.name + ' (' + acct.id + ')';
}
}
Visualforceページ
<apex:page standardController="Account" extensions="myControllerExtension">
{!greeting} <p/>
<apex:form>
<apex:inputField value="{!account.name}"/> <p/>
<apex:commandButton value="Save" action="{!save}"/>
</apex:form>
</apex:page>
コミュニティユーザの判定方法を紹介します。
ユーザのIsPortalEnabled値がTrueのユーザはコミュニティユーザ
partnerUserList = [SELECT id
,userName
FROM User
WHERE
IsPortalEnabled = true
];
[Salesforce]Exceptionについて紹介します。
getCause: 例外オブジェクトとして例外の原因を返します。 getLineNumber: 例外が発生した箇所の行番号を返します。 getMessage: ユーザに表示されるエラーメッセージを返します。 getStackTraceString: 文字列としてスタック追跡を返します。 getTypeName: DMLException、ListException、MathException などの例外種別を返します。
try {
xxx
} catch(Exception e) {
System.debug('Exception type: ' + e.getTypeName());
System.debug('Message: ' + e.getMessage());
System.debug('Cause: ' + e.getCause());
System.debug('Line number: ' + e.getLineNumber());
System.debug('Stack trace: ' + e.getStackTraceString());
}
編集、コピー、削除リンク表示手順を共有します。
・メニュー「構造」押下
・セクション「インデックス」の「実行」押下
・項目「インデックス名」に「PRIMARY」入力、項目「インデックスの選択」に「PRIMARY」選択、カラムに、例えば項目「id(text)」選択とサイズ「9」入力
・「実行」押下
上記の順で実行すると、項目「id」に鍵マークが表示される。
メニュー「表示」押下すると、「編集」、「コピー」、「削除」リンクが表示される。
Test.isRunningTest()使用例
if (Test.isRunningTest()) return; // ※テストコードでは実行しない
Id重複のListをMapに入れることでId重複解消策を紹介します。
Account acc = [SELECT Id, Name FROM Account LIMIT 1];
List<Account> accList = new List<Account>();
accList.add(acc);
accList.add(acc);
System.debug('accList:'+accList);
Map<Id, Account> mapAccIdToAcc = new Map<Id, Account>();
mapAccIdToAcc.putAll(accList);
System.debug('mapAccIdToAcc:'+mapAccIdToAcc);
ログは以下です。
19:07:46:010 USER_DEBUG [97]|DEBUG|accList:(Account:{Id=0016T00002kM9AVQA0, Name=Slテスト名変更}, Account:{Id=0016T00002kM9AVQA0, Name=Slテスト名変更})
19:07:46:010 USER_DEBUG [101]|DEBUG|mapAccIdToAcc:{0016T00002kM9AVQA0=Account:{Id=0016T00002kM9AVQA0, Name=Slテスト名変更}}