親Accountにおいて、子AccountのOpportunity一覧を見たいです。
標準機能できる可能(ややこしくて、Triggerでやってみようかな)
Opportunityの上で、カスタム項目(親Account)の新規作成、データ型:参照(Account)、AccountのPageLayoutの上でその関連レストを選択します。新規Opportunityの場合は、(親Accounnt)を選択し、このOpportunityレコードを選択した(親Account)に関連レスト表示されています。
⇒上記の方法で確かにできるけど、ユーザが選ばないといけないので、Accountにある”parent Account”の項目を利用して作れる?トリガーでParentの参照関係に値を入れてます!
⇒そうですね。トリガーでParentの参照関係に値を取得できます。Opportunityの上で参照項目を作って、Opportunity新規と更新の場合、トリガーでParentの参照関係に値を取得します。
⇒新しい関連リストでOKです
準備できるもの:
Accountでの親取引先項目
Opportunityでの親Account項目(Lookup参照(Account))の
API名:Parent_Account__c
関連リストの表示ラベル:Opportunity(Children)
シナリオ:
Account:A、B、Cがある、AはBの親Account、BはCの親Account。(仕様通りに一番上の親Account:AにB、CのOpportunity一覧みたい)
Bで
Bーー商談1、
Bーー商談2
を作って、
Cで
C--商談1、
C--商談2
を作って。
期待:Aで関連リストOpportunity(Children)に
Bーー商談1、
Bーー商談2、
C--商談1、
C--商談2
を表示されている状態という。
A画面でのイメージは追加させて頂きました。
サンプルコードはご参考になれば幸いです。
====*====================================================
AccountRelatedOpportunityTrigger.apxt
trigger AccountRelatedOpportunityTrigger on Opportunity (before insert, before update) {
AccountRelatedOpportunityTriggerHandler handler = new AccountRelatedOpportunityTriggerHandler(Trigger.isExecuting, Trigger.size);
if(Trigger.isInsert && Trigger.isBefore){
handler.onBeforeInsert(Trigger.new);
}
else if(Trigger.isUpdate && Trigger.isBefore){
handler.onBeforeUpdate(Trigger.old, Trigger.oldMap, Trigger.new, Trigger.newMap);
}
}
AccountRelatedOpportunityTriggerHandler.apxc
public class AccountRelatedOpportunityTriggerHandler {
private boolean isExecuting = false;
private integer size = 0;
public AccountRelatedOpportunityTriggerHandler (boolean isExecuting, integer size){
this.isExecuting = isExecuting;
this.size = size;
}
// 登録前処理
public void onBeforeInsert(List<Opportunity> newObjs){
for (Opportunity op : newObjs) {
op.Parent_Account__c = GetParentAccountIdById(op.AccountId);
}
}
// 変更前処理
public void onBeforeUpdate(List<Opportunity> oldObjs, Map<ID, Opportunity> oldObjMap,
List<Opportunity> newObjs, Map<ID, Opportunity> newObjMap){
for (Opportunity op : newObjs) {
op.Parent_Account__c = GetParentAccountIdById(op.AccountId);
}
// ParentAccount取得用の再帰処理
private String GetParentAccountIdById(String accountId) {
String parentId = accountId;
List<Account> accList = new List<Account>();
accList = [select Id
,Name
,ParentId
from
Account
where Id =: accountId
];
//Opportunityは一番上の親Accountの関連リストに表示されています
if (accList.size() == 1) {
if (String.isNotBlank(accList[0].ParentId)) {
parentId = GetParentAccountIdById(accList[0].ParentId);
}
//Opportunityは自分の親Accountの関連リストに表示されています
//if (accList.size() > 0) {
//メソッド一
//Integer i;
//for (i=0;i<accList.size();i++) {
//if (String.isNotBlank(accList[i].ParentId)) {
//parentId = accList[i].ParentId;
//}
//}
//メソッド二
//for(Account a:accList){
//if (String.isNotBlank(a.ParentId)){
//parentId=a.ParentId;
//}
//}
//}
}
return parentId;
}
}
====================================================*====
以上となります。
もしかしたら、毎日、昨日の自分より今日の自分は良くなるなら、十分だと思います。
何より大事なことは、人生を楽しむこと、幸せを感じること、それだけです。
Latest posts by zchao (see all)
- リストビューのカラムにリンクできるAccount Ownerを追加 - 2020年6月12日
- Salesforce環境構造一覧 - 2020年5月10日
- Salesforce プラットフォーム紹介 - 2020年5月9日
转载请注明:zchao博客之家 » 下位階層のOpportunityを親Account(TOP階層)の関連リストにまとめて表示ー再帰処理