场景介绍:在做招投标项目时,有项目比选和应标记录两个对象,其中前者为父/master,后者为子/details,这时需要在项目比选详情页面自定义一个报备按钮,对商务谈判阶段且最终谈判金额不为空的所有符合此要求的应标记录提交报备审批。
代码sample:
1. 自定义报备按钮逻辑:
{!REQUIRESCRIPT("/soap/ajax/40.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/40.0/apex.js")}
if(confirm('确认要对与比选项目相关的应标记录进行报备吗?')){
//document.getElementsByName("submitforapproval")[0].disabled = true;
var jsonResult = sforce.apex.execute("BulkSubmitApprovalProcessOnTenderProject", "submitAdsTenderProjectForApproval",{recId:'{!Tender_Project__c.Id}'});
var result = JSON.parse(jsonResult);
if(result.code == '0'){
alert(result.msg);
window.location.reload();
}else{
alert(result.msg);
//document.getElementsByName("submitforapproval")[0].disabled = false;
}
}
截图:

2. Apex类:
/**********************************************************************
*Name:通过报备按钮提交审批
*Description:专员在项目比选详细页面点击报备,自动将与该比选项目相关的已入围谈判的供应商批量提报报备审批
======================================================
History
-------
VERSION AUTHOR DATE DETAIL
1.0 Wilson Xu 2017-07-18 Created
***********************************************************************/
global class BulkSubmitApprovalProcessOnTenderProject {
public Class Result {
public String code = '';// 结果状态码,"0"表示成功,"1"表示失败
public String msg = '';// 返回消息
}
Webservice static String submitAdsTenderProjectForApproval(String recId) {
Result result = new Result();
result.code = '0';
result.msg = '比选项目相关的应标记录已成功提交报备!';
// 查询已进入入围谈判阶段且最终谈判价格不为空的与该比选项目相关的应标记录
List<Advertiser_Tender_Relationship__c> atrList = [SELECT Id, Approval_Status__c
FROM Advertiser_Tender_Relationship__c
WHERE Tender_Project__c = :recId AND Final_Negotiation_Price__c != NULL AND Is_Shortlisted__c = TRUE LIMIT 1000];
// 验证报备条件 - 查询结果为空不报备
if(atrList.size() == 0) {
result.code = '1';
result.msg = '目前没有与报备相关的应标记录需要审批!';
return JSON.serialize(result);
}
Set<String> acceptedStatusSet = new Set<String>{'未提交','已拒绝','已调回'};
if(atrList.size() > 0) {
for(Advertiser_Tender_Relationship__c atr : atrList) {
// 验证报备条件 - 验证所属批准状态
if(!acceptedStatusSet.contains(atr.Approval_Status__c)) {
result.code = '1';
result.msg = '当前应标记录批准状态为' + atr.Approval_Status__c + ',不能进行报备!';
return JSON.serialize(result);
}
// 验证报备条件 - 验证报备人
if(!isValidUser(UserInfo.getUserId())) {
result.code = '1';
result.msg = '只有相关专员才能发起审批!';
return JSON.serialize(result);
System.debug(result);
}
// 根据角色来匹配批准进程名称
String processName;
String profileName = [SELECT Name FROM Profile WHERE Id = :UserInfo.getProfileId()].Name;
if(profileName == '子公司企划专员') {
processName = 'ChildCompanyTenderRecordSubmit';
}else {
processName = 'CommonTenderRecordSubmit';
}
Approval.ProcessSubmitRequest req = new Approval.ProcessSubmitRequest();
req.setComments('应标记录报备审批');
req.setObjectId(atr.Id);
req.setSubmitterId(UserInfo.getUserId());
req.setProcessDefinitionNameOrId(processName);
req.setSkipEntryCriteria(false);
try {
Approval.ProcessResult processResult = Approval.process(req);
if(!processResult.isSuccess()) {
result.code = '1';
result.msg = AdsUtility.getProperErrorMessage(processResult.getErrors()[0].getMessage());
return JSON.serialize(result);
}
}catch(Exception e) {
result.code = '1';
result.msg = AdsUtility.getProperErrorMessage(e.getMessage());
return JSON.serialize(result);
}
}
}
return JSON.serialize(result);
}
/**
功能说明:判别用户是否为应标记录相关专员
参数说明:用户Id
返回值:true/false
作者:Wilson Xu
日期:2017-07-18
**/
public static Boolean isValidUser(String userId){
Set<String> profileSet = new Set<String>{'品牌专员','事件行销专员','物料制作专员','线上媒介专员','线下媒介专员','展览展示专员','子公司企划专员'};
String profileName = [SELECT Profile.Name FROM User WHERE Id = :userId].Profile.Name;
return profileSet.contains(profileName);
}
}
注意:由于使用此方法提交给相应领导审批时,不能调整通用审批模版的column项,所以被弃用。
最后
以上就是哭泣铃铛最近收集整理的关于在salesforce中用Apex实现在父记录上对所有符合要求的子记录批量提交审批的全部内容,更多相关在salesforce中用Apex实现在父记录上对所有符合要求内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复