Warning: unlink(D:\wwwroot\zchaohome\wwwroot/wp-content/uploads/gravatar/129203351467020a0eb0c37.tmp) [function.unlink]: Permission denied in D:\wwwroot\zchaohome\wwwroot\wp-includes\functions.php on line 1824
下位階層のOpportunityを親Account(TOP階層)の関連リストにまとめて表示ー再帰処理 – zchao博客之家
特殊时期,大家一定要保重身体。增强自身免疫力,一切都会过去,一起加油!!!

下位階層のOpportunityを親Account(TOP階層)の関連リストにまとめて表示ー再帰処理

Salesforce zchao 1023℃ 0评论

親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;
}
}


====================================================*====

以上となります。

もしかしたら、毎日、昨日の自分より今日の自分は良くなるなら、十分だと思います。
何より大事なことは、人生を楽しむこと、幸せを感じること、それだけです。

转载请注明:zchao博客之家 » 下位階層のOpportunityを親Account(TOP階層)の関連リストにまとめて表示ー再帰処理

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!