您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > Salesforce动态审批
Salesforce动态审批由于Salesforce只支持根据条件动态选择审批分支,如果我们想进一步支持动态根据页面的某种条件选择审批人,Salesforce是不支持的。因此我们只能通过overridesalesforce审批类来实现,具体步骤如下:0,以管理员身份新建立一个审批流为Opportunity(审批流名称和每个节点的名称我们从写时候时候需要用到)1,添加一个名称为SubmitforApprovalByNeo自定义按钮给Opportunity(由于我们要重写的是Opportunity的审批流)在OpportunityObject中的‘Buttons,Links,andActions’如下:填完后填写js代码,由于我们想通过点击直接启动工作流,所以我们需要在这里通过js调用webservice类启动。代码如下:1!--参数名区分大小写,对于跨层object直接在Object名后直接加参字段名即可--2{!REQUIRESCRIPT(/soap/ajax/30.0/connection.js)}3{!REQUIRESCRIPT(/soap/ajax/30.0/apex.js)}45varOppID='{!Opportunity.Id}'6varComments='submited'7varOppSubmitter='{!$User.Id}'8varresult=sforce.apex.execute(OppApprovalProcess,SubmitforApproval,{oppID:OppID,Comments:Comments,userID:OppSubmitter});9window.location.reload()2,在这里我们看到我们需要调用OppApprovalProcess类下SubmitforApproval方法实现审批的提交,下面就是调用提交的代码:(里面还还涉及动态选择审批人的问题,我们后边会讲到)1globalclassOppApprovalProcess{23//submit4webservicestaticbooleanSubmitforApproval(stringoppID,stringComments,stringuserID)5{6try7{8system.debug('oppID:'+oppID);9Usernextapprover=getApprover(oppID);;10Approval.ProcessSubmitRequestsubReq=newApproval.ProcessSubmitRequest();11subReq.setComments(Comments);12subReq.setObjectId(oppID);13subReq.setSubmitterId(userID);14subReq.setNextApproverIds(newId[]{nextapprover.Id});15subReq.setProcessDefinitionNameOrId('Opportunity_Discount');16Approval.ProcessResultsubmitResult=Approval.process(subReq);1718returnsubmitResult.isSuccess();19}20catch(Exceptionex)21{22system.debug('ex:'+ex.getMessage());23returnfalse;24}25}26}3,创建完按钮后,我们需要把这个自定义按钮添加到pagelayout中,我们的最终目的是在添加完成后替换原有默认的提交按钮,所以我们要重写原有的Opportunity的Detail页面通过Jquery进行代码注入,所以我们要新建一个vistualforce页面代码如下:1apex:pagesidebar=truestandardController=Opportunity2!--apex:relatedListlist=ProcessSteps/apex:relatedList--3apex:includescriptvalue={!$Resource.JQuery}/4scripttype=text/javascript5$(function(){67//添加新按钮隐藏老按钮8//alert($('input[name=piSubmit]').val());9if($('input[name=piSubmit]').val()=='SubmitforApproval')10{11($('input[name=piSubmit]').hide()).parent().append($('input[name=submit_for_approval]'));12$('input[name=piSubmit]').next().hide();13}14else15{16//alert($('input[name=piSubmit]').val());17$('input[name=submit_for_approval]').hide();18//替换HistoryList中的审批链接19varOppId=('{!Opportunity.Id}').substring(0,15);20varApprovalListID=OppId+'_RelatedProcessHistoryList_body';21//alert(ApprovalListID);22varApprovalprocessdiv=document.getElementById(ApprovalListID);23//alert(Approvalprocessdiv.getAttribute('class'));24if(Approvalprocessdiv!=null)25{26varoriginalHTML=Approvalprocessdiv.innerHTML;27varnewHtml=originalHTML.replace('/p/process/ProcessInstanceWorkitemWizardStageManager?','/apex/ProcessInstance?OppId='+OppId+'&');28Approvalprocessdiv.innerHTML=newHtml;29}30}31});32/script33apex:detailrelatedList=truetitle=true/34/apex:page添加完成后效果如下:submitforapprovalbyNeo就是我们的自定义按钮4,添加提交按钮后,我们同时要替换审批页面的同意和拒绝按钮,但是由于salesforce不支持重写这个页面,所以我们自己创建一个审批页面来替换salesforce默认的审批页面,前端代码如下:1apex:pagecontroller=ProcessInstanceControllertabStyle=Opportunity2apex:form3apex:sectionHeadertitle=Opportunitysubtitle={!objOpp.Name}/4apex:pageBlocktitle=Approve/RejectApprovalRequest5apex:pageBlockButtonslocation=bottom6apex:commandButtonvalue=Approveaction={!Approval}reRender=block7apex:paramname=approvevalue=ApproveassignTo={!ApprovalAction}/8/apex:commandButton9apex:commandButtonvalue=Rejectaction={!Approval}reRender=block10apex:paramname=rejectvalue=RejectassignTo={!ApprovalAction}/11/apex:commandButton12apex:commandButtonvalue=Cancelaction={!Approval}reRender=block13apex:paramname=cancelvalue=CancelassignTo={!ApprovalAction}/14/apex:commandButton15/apex:pageBlockButtons16apex:pageBlockSectioncolumns=117apex:pageBlockSectionItem18Nameapex:outputFieldvalue={!objOpp.Name}/19/apex:pageBlockSectionItem20apex:pageBlockSectionItem21LeadOwnerapex:outputFieldvalue={!objOpp.Owner.Name}/22/apex:pageBlockSectionItem23apex:pageBlockSectionItem24RejectionReasonfontcolor=red(MandatorywhileRejection)/fontapex:inputFieldvalue={!objOpp.Rejection_Reason__c}/25/apex:pageBlockSectionItem26apex:pageBlockSectionItem27Commentsfontcolor=red(MandatorywhileRejection)/fontapex:inputTextAreavalue={!objOpp.Comments__c}rows=5cols=100/28/apex:pageBlockSectionItem29/apex:pageBlockSection30/apex:pageBlock31/apex:form32/apex:page5,同时在后台类中重写Apprve和Reject类,代码如下:1publicclassProcessInstanceController{2publicStringprocessId;3publicStringOppId;4publicProcessInstanceobjProcessInstance;5publicOpportunityobjOpp{get;set;}6publicstringApprovalAction{get;set;}7publicPageReferenceredirectPage;8//初始化9publicProcessInstanceController()10{11processId=ApexPages.currentPage().getParameters().get('id');//获取当前的工作流ID12OppId=ApexPages.currentPage().getParameters().get('OppId');//获取当前caseID13objOpp=[selectName,Owner.Name,Rejection_Reason__c,Comments__cfromOpportunitywhereid=:OppId];//获取当前Opp对象为了后面更新comments和Reson14redirectPage=newPageReference('/'+OppId);15}16//审批17publicPageReferenceApproval(){18try19{20if(ApprovalAc
本文标题:Salesforce动态审批
链接地址:https://www.777doc.com/doc-2856908 .html