リストビューにカスタムボタンをクリックして、選択したレコードを一括処理を実施する。
1.処理成功した場合、正常メッセージ出す・
2.レコードを選択されてなかった場合、レコードを選択してくださいというメッセージ出す。
3.権限ない人がボタンをクリックした場合、権限がない、管理者に問い合わせくださいというメッセージを出す。
-------開発-------:
1.カスタムボタンの設定
2.ボタン押下後、メッセージを出す画面の開発
<!--本部長承認(代理入力)ボタンアクション画面 -->
<apex:page standardController="ContractRenewReport_M__c" recordSetVar="objs" extensions="Y15_BulkApproveCtrl" action="{!bulkApprove}" tabStyle="ContractRenewReport_M__c" title="本部長承認(代理入力)">
<apex:form id="form">
<apex:pageBlock id="block">
<apex:pageBlockButtons id="buttons">
<apex:commandButton value="戻る" title="戻る" action="{!list}"/>
</apex:pageBlockButtons>
<apex:pageBlockSection title="情報" showHeader="false" columns="1">
<apex:pageMessages id="msg"/>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
3.apexの開発
public class Y15_BulkApproveCtrl {
public User loginUser; // ログインユーザー情報
public Set<ID> Ids; //選択したレコードIDセット
public List<ContractRenewReport_M__c> contractRenewReportMList; //契約更新報告書
public List<ContractRenewReport_3__c> contractRenewReport3List; //【3年前】契約更新報告書
public List<ContractRenewReport_2__c> contractRenewReport2List; //【2年前】契約更新報告書
public List<ContractRenewReport_1__c> contractRenewReport1List; //【1年前】契約更新報告書
public List<ContractRenewReport_H__c> contractRenewReportHList; //【6ヶ月前】契約更新報告書
public Boolean isOPSStaff = false; //OPS部担当フラグ
public Boolean isOPSMgr = false; //OPS部Mgrフラグ
public Boolean isOPDeputyOfficer = false; //OP副本部長フラグ
public Boolean isOPOfficer = false; //OP本部長フラグ
public Boolean hasError = false; //本部長承認(代理入力)時エラーフラグ
public Boolean isDM = false; //DMフラグ テスト用
/**
* コンストラクタ
*/
public Y15_BulkApproveCtrl(ApexPages.StandardSetController stdSetController) {
try{
contractRenewReportMList = new List<ContractRenewReport_M__c>();
contractRenewReport3List = new List<ContractRenewReport_3__c>();
contractRenewReport2List = new List<ContractRenewReport_2__c>();
contractRenewReport1List = new List<ContractRenewReport_1__c>();
contractRenewReportHList = new List<ContractRenewReport_H__c>();
//選択したレコードIDセットを取得
Ids = new Map<ID, ContractRenewReport_M__c>((List<ContractRenewReport_M__c>)stdSetController.getSelected()).keySet();
//ログインユーザ情報取得
this.getUserInfo();
//役割フラグ設定
this.setDisplayButtonFlag();
//契約更新報告書リストを取得
this.getContractRenewReportM();
//【3年前】契約更新報告書リストを取得
this.getContractRenewReport3();
//【2年前】契約更新報告書リストを取得
this.getContractRenewReport2();
//【1年前】契約更新報告書リストを取得
this.getContractRenewReport1();
//【6ヶ月前】契約更新報告書リストを取得
this.getContractRenewReporth();
}catch(exception e){
//エラーメッセージを出力する
ApexPages.addMessage(
new ApexPages.Message(ApexPages.Severity.FATAL,CommonConst.MESSAGE_ERROR_UNEXPECTE));
ApexPages.addMessages(e);
}
}
/**
* ログインユーザ情報取得
**/
public void getUserInfo(){
try{
loginUser = [select Id, IsActive,
DepartmentCode__c,
JobCategoryCode__c,
OPDeputyOfficer__c,
OPOfficer__c
from User
where Id=:UserInfo.getUserId()];
}catch(Exception e) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage(), e.getStackTraceString()));
}
}
/**
* 契約更新報告書情報取得
**/
public void getContractRenewReportM(){
contractRenewReportMList = [Select Id,
Name,
Division__c
From ContractRenewReport_M__c
where Id in :ids];
System.debug('contractRenewReportMList=>:'+contractRenewReportMList);
}
/**
* 【3年前】契約更新報告書情報取得
**/
public void getContractRenewReport3(){
contractRenewReport3List = [Select Id,
Name,
OPSConfirmDate_3__c,
OPSConfirmer_3__c,
OPSMgrConfirmDate_3__c,
OPSMgrConfirmer_3__c,
OPOfficeApprovalDate_3__c,
OPOfficeApprover_3__c,
OPDeputyOfficerApprovalDate_3__c,
OPDeputyOfficerApprover_3__c,
ApprovalStatus__c
From ContractRenewReport_3__c
where ContractRenewReport_M__c in :ids AND
ContractRenewReport_M__r.Division__c = '3年前'];
System.debug('contractRenewReport3List=>:'+contractRenewReport3List);
}
/**
* 【2年前】契約更新報告書情報取得
**/
public void getContractRenewReport2(){
contractRenewReport2List = [Select Id,
Name,
OPSConfirmDate_2__c,
OPSConfirmer_2__c,
OPSMgrConfirmDate_2__c,
OPSMgrConfirmer_2__c,
OPOfficeApprovalDate_2__c,
OPOfficeApprover_2__c,
OPDeputyOfficerApprovalDate_2__c,
OPDeputyOfficerApprover_2__c,
ApprovalStatus__c
From ContractRenewReport_2__c
where ContractRenewReport_M__c in :ids AND
ContractRenewReport_M__r.Division__c = '2年前'];
System.debug('contractRenewReport2List=>:'+contractRenewReport2List);
}
/**
* 【1年前】契約更新報告書情報取得
**/
public void getContractRenewReport1(){
contractRenewReport1List = [Select Id,
Name,
OPSConfirmDate_1__c,
OPSConfirmer_1__c,
OPSMgrConfirmDate_1__c,
OPSMgrConfirmer_1__c,
OPOfficeApprovalDate_1__c,
OPOfficeApprover_1__c,
OPDeputyOfficerApprovalDate_1__c,
OPDeputyOfficerApprover_1__c,
ApprovalStatus__c
From ContractRenewReport_1__c
where ContractRenewReport_M__c in :ids AND
ContractRenewReport_M__r.Division__c = '1年前'];
System.debug('contractRenewReport1List=>:'+contractRenewReport1List);
}
/**
* 【6ヶ月前】契約更新報告書情報取得
**/
public void getContractRenewReportH(){
contractRenewReportHList = [Select Id,
Name,
OPSConfirmDate_H__c,
OPSConfirmer_H__c,
OPSMgrConfirmDate_H__c,
OPSMgrConfirmer_H__c,
OPOfficeApprovalDate_H__c,
OPOfficeApprover_H__c,
OPDeputyOfficerApprovalDate_H__c,
OPDeputyOfficerApprover_H__c,
ApprovalStatus__c
From ContractRenewReport_H__c
where ContractRenewReport_M__c in :ids AND
ContractRenewReport_M__r.Division__c = '6ヶ月前'];
System.debug('contractRenewReportHList=>:'+contractRenewReportHList);
}
/**
* 役割フラグ設定処理
**/
@TestVisible
private void setDisplayButtonFlag(){
/* ★★★★★システム管理者の場合★★★★★ */
if(UserInfo.getProfileId().contains(system.label.ProfileSystemAdminId)){
//this.isDM = true;
//this.isZM = true;
//0309テスト用
//2022/03/08 追加 START
//this.isAccountZOMgr = true;
//this.isPublicRelationMgr = true;
//this.isOPSStaff = true;
//this.isOPSMgr = true;
//this.isOPDeputyOfficer = true;
//this.isOPOfficer = true;
//this.isLegalStaff = true;
//this.isLegalMgr = true;
//this.isLegalGM = true;
//this.isPublicRelationGM = true;
//this.canApprove = true;
//this.canRemand = true;
//this.canConfirm = true;
//2022/03/08 追加 END
}
/* ★★★★★★★★★★★★★★★★★★★★★★★★★ */
if(loginUser.DepartmentCode__c == Y15_Const.DEP_CODE_949000 && loginUser.JobCategoryCode__c == Y15_Const.JOB_STAFF){
//OPS部担当フラグを設定する
this.isOPSStaff = true;
}else if(loginUser.DepartmentCode__c == Y15_Const.DEP_CODE_949000 && loginUser.JobCategoryCode__c == Y15_Const.JOB_MGR){
//OPS部Mgrフラグを設定する
this.isOPSMgr = true;
}else if(loginUser.OPDeputyOfficer__c){
//OPS部Mgrフラグを設定する
this.isOPDeputyOfficer = true;
}else if(loginUser.OPOfficer__c){
//OPS部Mgrフラグを設定する
this.isOPOfficer = true;
}
//
if(!isOPSStaff && !isOPSMgr && !isOPDeputyOfficer && !isOPOfficer){
//エラーフラグを設定
this.hasError = true;
}
}
/**
* 本部長承認(代理入力)処理
**/
public PageReference bulkApprove(){
try{
//本部長承認(代理入力)時エラーがtrueの場合、
if(this.hasError){
//その他のユーザの場合、エラーメッセージを表示
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '権限が無い為、本部長承認(代理入力)できません。'));
return null;
}
//【3年前】契約更新報告書情報更新リスト
List<ContractRenewReport_3__c> uppdateContractRenewReport3List = new List<ContractRenewReport_3__c>();
if(contractRenewReport3List.size()>0){
for(ContractRenewReport_3__c contractRenewReport_3 :contractRenewReport3List){
System.debug('contractRenewReport_3.ApprovalStatus__c=>:'+contractRenewReport_3.ApprovalStatus__c);
//「全体承認状況」が「OPS部Mgr確認済」の場合
if(contractRenewReport_3.ApprovalStatus__c == 'OPS部Mgr確認済'){
//ログインユーザがOPS部担当 or ログインユーザがOPS部Mgrの場合
if(isOPSStaff || isOPSMgr){
uppdateContractRenewReport3List.add(new ContractRenewReport_3__c(id = contractRenewReport_3.Id,
OPDeputyOfficerApprovalDate_3__c = system.today(), //【3年前】OP副本部長承認日
OPDeputyOfficerApprover_3__c = UserInfo.getName()+'(代理承認)', //【3年前】OP副本部長承認者
OPDeputyOfficerDivision_3__c = '確認', //【3年前】OP副本部長区分
SurrogateOPSFlag__c = true, // 代理OPSフラグ
SurrogateFlag__c = true, // 代理フラグ
ApprovalStatus__c = '副本部長承認済')); // 全体承認状況
}
//ログインユーザがOP副本部長の場合
if(isOPDeputyOfficer){
uppdateContractRenewReport3List.add(new ContractRenewReport_3__c(id = contractRenewReport_3.Id,
OPDeputyOfficerApprovalDate_3__c = system.today(), //【3年前】OP副本部長承認日
OPDeputyOfficerApprover_3__c = UserInfo.getName(), //【3年前】OP副本部長承認者
OPDeputyOfficerDivision_3__c = '承認', //【3年前】OP副本部長区分
ApprovalStatus__c = '副本部長承認済')); // 全体承認状況
}
}
//「全体承認状況」が「副本部長承認済」の場合
if(contractRenewReport_3.ApprovalStatus__c == '副本部長承認済'){
//ログインユーザがOPS部担当 or ログインユーザがOPS部Mgrの場合
if(isOPSStaff || isOPSMgr){
uppdateContractRenewReport3List.add(new ContractRenewReport_3__c(id = contractRenewReport_3.Id,
OPOfficeApprovalDate_3__c = system.today(), //【3年前】OP本部長承認日
OPOfficeApprover_3__c = UserInfo.getName()+'(代理承認)', //【3年前】OP本部長承認者
OPOfficerDivision_3__c = '確認', //【3年前】OP本部長区分
SurrogateOPSFlag__c = true, // 代理OPSフラグ
SurrogateFlag__c = true, // 代理フラグ
ApprovalStatus__c = '本部長承認済')); // 全体承認状況
}
//ログインユーザがOP本部長の場合
if(isOPOfficer){
uppdateContractRenewReport3List.add(new ContractRenewReport_3__c(id = contractRenewReport_3.Id,
OPOfficeApprovalDate_3__c = system.today(), //【3年前】OP本部長承認日
OPOfficeApprover_3__c = UserInfo.getName(), //【3年前】OP本部長承認者
OPOfficerDivision_3__c = '承認', //【3年前】OP本部長区分
ApprovalStatus__c = '本部長承認済')); // 全体承認状況
}
}
}//for end
}
//【2年前】契約更新報告書情報更新リスト
List<ContractRenewReport_2__c> uppdateContractRenewReport2List = new List<ContractRenewReport_2__c>();
if(contractRenewReport2List.size()>0){
for(ContractRenewReport_2__c contractRenewReport_2 :contractRenewReport2List){
//「全体承認状況」が「OPS部Mgr確認済」の場合
if(contractRenewReport_2.ApprovalStatus__c == 'OPS部Mgr確認済'){
//ログインユーザがOPS部担当 or ログインユーザがOPS部Mgrの場合
if(isOPSStaff || isOPSMgr){
uppdateContractRenewReport2List.add(new ContractRenewReport_2__c(id = contractRenewReport_2.Id,
OPDeputyOfficerApprovalDate_2__c = system.today(), //【2年前】OP副本部長承認日
OPDeputyOfficerApprover_2__c = UserInfo.getName()+'(代理承認)', //【2年前】OP副本部長承認者
OPDeputyOfficerDivision_2__c = '確認', //【2年前】OP副本部長区分
SurrogateOPSFlag__c = true, // 代理OPSフラグ
SurrogateFlag__c = true, // 代理フラグ
ApprovalStatus__c = '副本部長承認済')); // 全体承認状況
}
//ログインユーザがOP副本部長の場合
if(isOPDeputyOfficer){
uppdateContractRenewReport2List.add(new ContractRenewReport_2__c(id = contractRenewReport_2.Id,
OPDeputyOfficerApprovalDate_2__c = system.today(), //【2年前】OP副本部長承認日
OPDeputyOfficerApprover_2__c = UserInfo.getName(), //【2年前】OP副本部長承認者
OPDeputyOfficerDivision_2__c = '承認', //【2年前】OP副本部長区分
ApprovalStatus__c = '副本部長承認済')); // 全体承認状況
}
}
//「全体承認状況」が「副本部長承認済」の場合
if(contractRenewReport_2.ApprovalStatus__c == '副本部長承認済'){
//ログインユーザがOPS部担当 or ログインユーザがOPS部Mgrの場合
if(isOPSStaff || isOPSMgr){
uppdateContractRenewReport2List.add(new ContractRenewReport_2__c(id = contractRenewReport_2.Id,
OPOfficeApprovalDate_2__c = system.today(), //【2年前】OP本部長承認日
OPOfficeApprover_2__c = UserInfo.getName()+'(代理承認)', //【2年前】OP本部長承認者
OPOfficerDivision_2__c = '確認', //【2年前】OP本部長区分
SurrogateOPSFlag__c = true, // 代理OPSフラグ
SurrogateFlag__c = true, // 代理フラグ
ApprovalStatus__c = '本部長承認済')); // 全体承認状況
}
//ログインユーザがOP本部長の場合
if(isOPOfficer){
uppdateContractRenewReport2List.add(new ContractRenewReport_2__c(id = contractRenewReport_2.Id,
OPOfficeApprovalDate_2__c = system.today(), //【2年前】OP本部長承認日
OPOfficeApprover_2__c = UserInfo.getName(), //【2年前】OP本部長承認者
OPOfficerDivision_2__c = '承認', //【2年前】OP本部長区分
ApprovalStatus__c = '本部長承認済')); // 全体承認状況
}
}
}//for end
}
//【1年前】契約更新報告書情報更新リスト
List<ContractRenewReport_1__c> uppdateContractRenewReport1List = new List<ContractRenewReport_1__c>();
if(contractRenewReport1List.size()>0){
for(ContractRenewReport_1__c contractRenewReport_1 :contractRenewReport1List){
//「全体承認状況」が「OPS部Mgr確認済」の場合
if(contractRenewReport_1.ApprovalStatus__c == 'OPS部Mgr確認済'){
//ログインユーザがOPS部担当 or ログインユーザがOPS部Mgrの場合
if(isOPSStaff || isOPSMgr){
uppdateContractRenewReport1List.add(new ContractRenewReport_1__c(id = contractRenewReport_1.Id,
OPDeputyOfficerApprovalDate_1__c = system.today(), //【1年前】OP副本部長承認日
OPDeputyOfficerApprover_1__c = UserInfo.getName()+'(代理承認)', //【1年前】OP副本部長承認者
OPDeputyOfficerDivision_1__c = '確認', //【1年前】OP副本部長区分
SurrogateOPSFlag__c = true, // 代理OPSフラグ
SurrogateFlag__c = true, // 代理フラグ
ApprovalStatus__c = '副本部長承認済')); // 全体承認状況
}
//ログインユーザがOP副本部長の場合
if(isOPDeputyOfficer){
uppdateContractRenewReport1List.add(new ContractRenewReport_1__c(id = contractRenewReport_1.Id,
OPDeputyOfficerApprovalDate_1__c = system.today(), //【1年前】OP副本部長承認日
OPDeputyOfficerApprover_1__c = UserInfo.getName(), //【1年前】OP副本部長承認者
OPDeputyOfficerDivision_1__c = '承認', //【1年前】OP副本部長区分
ApprovalStatus__c = '副本部長承認済')); // 全体承認状況
}
}
//「全体承認状況」が「副本部長承認済」の場合
if(contractRenewReport_1.ApprovalStatus__c == '副本部長承認済'){
//ログインユーザがOPS部担当 or ログインユーザがOPS部Mgrの場合
if(isOPSStaff || isOPSMgr){
uppdateContractRenewReport1List.add(new ContractRenewReport_1__c(id = contractRenewReport_1.Id,
OPOfficeApprovalDate_1__c = system.today(), //【1年前】OP本部長承認日
OPOfficeApprover_1__c = UserInfo.getName()+'(代理承認)', //【1年前】OP本部長承認者
OPOfficerDivision_1__c = '確認', //【1年前】OP本部長区分
SurrogateOPSFlag__c = true, // 代理OPSフラグ
SurrogateFlag__c = true, // 代理フラグ
ApprovalStatus__c = '本部長承認済')); // 全体承認状況
}
//ログインユーザがOP本部長の場合
if(isOPOfficer){
uppdateContractRenewReport1List.add(new ContractRenewReport_1__c(id = contractRenewReport_1.Id,
OPOfficeApprovalDate_1__c = system.today(), //【1年前】OP本部長承認日
OPOfficeApprover_1__c = UserInfo.getName(), //【1年前】OP本部長承認者
OPOfficerDivision_1__c = '承認', //【1年前】OP本部長区分
ApprovalStatus__c = '本部長承認済')); // 全体承認状況
}
}
}//for end
}
//【6ヶ月前】契約更新報告書情報更新リスト
List<ContractRenewReport_H__c> uppdateContractRenewReportHList = new List<ContractRenewReport_H__c>();
if(contractRenewReportHList.size()>0){
for(ContractRenewReport_H__c contractRenewReport_H :contractRenewReportHList){
//「全体承認状況」が「OPS部Mgr確認済」の場合
if(contractRenewReport_H.ApprovalStatus__c == 'OPS部Mgr確認済'){
//ログインユーザがOPS部担当 or ログインユーザがOPS部Mgrの場合
if(isOPSStaff || isOPSMgr){
uppdateContractRenewReportHList.add(new ContractRenewReport_H__c(id = contractRenewReport_H.Id,
OPDeputyOfficerApprovalDate_H__c = system.today(), //【6ケ月前】OP副本部長承認日
OPDeputyOfficerApprover_H__c = UserInfo.getName()+'(代理承認)', //【6ケ月前】OP副本部長承認者
OPDeputyOfficerDivision_H__c = '確認', //【6ケ月前】OP副本部長区分
SurrogateOPSFlag__c = true, // 代理OPSフラグ
SurrogateFlag__c = true, // 代理フラグ
ApprovalStatus__c = '副本部長承認済')); // 全体承認状況
}
//ログインユーザがOP副本部長の場合
if(isOPDeputyOfficer){
uppdateContractRenewReportHList.add(new ContractRenewReport_H__c(id = contractRenewReport_H.Id,
OPDeputyOfficerApprovalDate_H__c = system.today(), //【6ケ月前】OP副本部長承認日
OPDeputyOfficerApprover_H__c = UserInfo.getName(), //【6ケ月前】OP副本部長承認者
OPDeputyOfficerDivision_H__c = '承認', //【6ケ月前】OP副本部長区分
ApprovalStatus__c = '副本部長承認済')); // 全体承認状況
}
}
//「全体承認状況」が「副本部長承認済」の場合
if(contractRenewReport_H.ApprovalStatus__c == '副本部長承認済'){
//ログインユーザがOPS部担当 or ログインユーザがOPS部Mgrの場合
if(isOPSStaff || isOPSMgr){
uppdateContractRenewReportHList.add(new ContractRenewReport_H__c(id = contractRenewReport_H.Id,
OPOfficeApprovalDate_H__c = system.today(), //【6ケ月前】OP本部長承認日
OPOfficeApprover_H__c = UserInfo.getName()+'(代理承認)', //【6ケ月前】OP本部長承認者
OPOfficerDivision_H__c = '確認', //【6ケ月前】OP本部長区分
SurrogateOPSFlag__c = true, // 代理OPSフラグ
SurrogateFlag__c = true, // 代理フラグ
ApprovalStatus__c = '本部長承認済')); // 全体承認状況
}
//ログインユーザがOP本部長の場合
if(isOPOfficer){
uppdateContractRenewReportHList.add(new ContractRenewReport_H__c(id = contractRenewReport_H.Id,
OPOfficeApprovalDate_H__c = system.today(), //【6ケ月前】OP本部長承認日
OPOfficeApprover_H__c = UserInfo.getName(), //【6ケ月前】OP本部長承認者
OPOfficerDivision_H__c = '承認', //【6ケ月前】OP本部長区分
ApprovalStatus__c = '本部長承認済')); // 全体承認状況
}
}
}//for end
}
//【3年前】契約更新報告書更新を行う
if(uppdateContractRenewReport3List.size()>0){
update uppdateContractRenewReport3List;
}
//【2年前】契約更新報告書更新を行う
if(uppdateContractRenewReport2List.size()>0){
update uppdateContractRenewReport2List;
}
//【1年前】契約更新報告書更新を行う
if(uppdateContractRenewReport1List.size()>0){
update uppdateContractRenewReport1List;
}
//【6ヶ月前】契約更新報告書更新を行う
if(uppdateContractRenewReportHList.size()>0){
update uppdateContractRenewReportHList;
}
if(uppdateContractRenewReport3List.size()>0 ||
uppdateContractRenewReport2List.size()>0 ||
uppdateContractRenewReport1List.size()>0 ||
uppdateContractRenewReportHList.size()>0 ){
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM, ' 本部長承認(代理入力)が正常に行われました。'));
}else{
//更新リストにレコードが存在しない場合
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '対象データを選択してください。'));
}
}catch(Exception e) {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage(), e.getStackTraceString()));
return null;
}
return null;
}// method end
}