salesforce零基础学习(七十三)ProcessInstanceWorkItem/ProcessInstanceStep/ProcessInstanceHistory浅谈
对于审批流中,通过apex代码进行审批操作一般都需要获取当前记录对应的ProcessInstanceWorkitem或者ProcessInstanceStep然后执行Approval.process操作。曾几何时,一直很狭隘的以为ProcessInstanceWorkItem和ProcessInstanceStep差距很小,差距仅在于ProcessInstanceWorkItem存储的是审批流的最新的一条,ProcessInstanceStep存储的是所有的审批步骤。其实这个理解是有一些偏差的。
一. ProcessInstanceWorkItem
文档上ProcessInstanceWorkItem的解释为 代表一个用户的Pending的审批请求。我们知道,审批的情况除了Pending以外还有很多的状态,比如Approved, Fault, Held, NoResponse, Pending, Reassigned, Rejected,Removed,Started.这些状态中,只有Pending的状态下才会在ProcessInstanceWorkItem保留记录,其他情况下记录会删除。因为ProcessInstanceWorkItem只存在Pending状态,所以ProcessInstanceWorkItem表没有Status字段,有的情况下就比较多余了。
ProcessInstanceWorkItem相关的查询:
1.直接查询 : SELECT CreatedById, CreatedDate, OriginalActorId, IsDeleted, ActorId, SystemModstamp, ProcessInstanceId, Id FROM ProcessInstanceWorkitem
2.通过ProcessInstance进行子查询: SELECT Id, (SELECT Id, ActorId, ProcessInstanceId FROM Workitems) FROM ProcessInstance
二.ProcessInstanceStep
ProcessInstnceStep为当审批流进行下一步动作的时候便会生成记录,不像ProcessInstanceWorkitem,它记录着所有经历过的步骤以及每个步骤的意见,所以其拥有Status字段用来记录审批的各个状态和comments记录审批意见。
1.直接查询:SELECT ActorId, Comments, CreatedById, CreatedDate, OriginalActorId, ProcessInstanceId, Id, StepStatus, SystemModstamp FROM ProcessInstanceStep
2.通过ProcessInstance进行子查询:SELECT Id, (SELECT Id, StepStatus, Comments FROM Steps) FROM ProcessInstance
三.ProcessInstanceHistory
有时候我们需要获取审批的历史信息,用来进行相关审批节点的展示。这个时候我们就可以使用ProcessInstanceHistory。ProcessInstanceHistory是salesforce提供的一个只读的,将ProcessInstanceWorkItem和ProcessInstanceStep结果结合在一起的审批历史表,通常情况下搜索时建议使用子查询方式查询。
通过ProcessInstance进行子查询:SELECT Id, (SELECT Id, StepStatus, Comments FROM StepsAndWorkitems) FROM ProcessInstance
四.关于审批流
我们在配置审批流的时候,会配置当节点审批通过或者失败时的操作,比如更新字段或者发邮件等等操作。如果执行了更新的字段操作,触发了此对象的trigger的时候。在trigger里面如果要是获取审批状态有可能获取不到,因为ProcessInstanceStep或者ProcessInstanceWorkItem是异步生成的。在执行trigger的时候,有可能没有生成,所以在trigger里面不要写关于此条记录的审批状态等操作。
总结:如果针对正常的审批操作,可以使用ProcessInstanceWorkItem或者ProcessInstanceStep进行操作。针对查询历史,使用ProcessInstanceHistory。篇中有错误的地方欢迎指出,有问题欢迎留言。
salesforce零基础学习(七十三)ProcessInstanceWorkItem/ProcessInstanceStep/ProcessInstanceHistory浅谈的更多相关文章
- salesforce零基础学习(九十八)Type浅谈
在Salesforce的世界,凡事皆Metadata. 先通过一句经常使用的代码带入一下: Account accountItem = (Account)JSON.deserialize(accoun ...
- salesforce零基础学习(一百一十三)Trigger中获取IP地址的过程
本篇参考: https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_class_Auth ...
- salesforce 零基础学习(六十八)http callout test class写法
此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...
- salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现
项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...
- salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见
项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值
注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...
- salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件
在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...
- 【转】【Salesforce】salesforce 零基础学习(十七)Trigger用法
看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...
随机推荐
- NancyFx 2.0的开源框架的使用-Forms
同样的像前面2篇博文一样,每个项目的开始基本都是建个空的Web项目 在NuGet库中安装以下几个NuGet包 Nancy Nancy.Authentication.Forms Nancy.Hostin ...
- Potato(邪恶土豆)–windows全版本猥琐提权
工作原理: Potato利用已知的Windows中的问题,以获得本地权限提升,即NTLM中继(特别是基于HTTP > SMB中继)和NBNS欺骗.使用下面介绍的技术,它有可能为一个非特权用户获得 ...
- 控制器controller与指令中的link、controller中变量作用域的关系
angjualrjs中的作用域与原生js中的函数嵌套原理一致,都是存在作用域的继承.若在子控制器(同样包括在指令中的link或是controllerding中定义变量,此时指令中必须未使用scope独 ...
- Rabin-Karp字符串查找算法
1.简介 暴力字符串匹配(brute force string matching)是子串匹配算法中最基本的一种,它确实有自己的优点,比如它并不需要对文本(text)或模式串(pattern)进行预处理 ...
- servlet的过滤器的doFilter()
doFilter中的chain.doFilter(res,req);//Filter 只是链式处理,请求依然转发到目的地址 意思就说过滤器只是一个关口,如果符合条件的请求会被过滤器拦截下来,然后进行处 ...
- 关于Java解压文件的一些坑及经验分享(MALFORMED异常)
文章也已经同步到我的csdn博客: http://blog.csdn.net/u012881584/article/details/72615481 关于Java解压文件的一些坑及经验分享 就在本周, ...
- myEclipse hibernate连接数据库配置方法
Access数据库:
- repo版本切换
repo init -u https://android.googlesource.com/platform/manifest repo sync 之后 这样初始化之后,相当于下载了全部的分支, 本想 ...
- R语言机器学习之caret包运用
在大数据如火如荼的时候,机器学习无疑成为了炙手可热的工具,机器学习是计算机科学和统计学的交叉学科, 旨在通过收集和分析数据的基础上,建立一系列的算法,模型对实际问题进行预测或分类. R语言无疑为我们提 ...
- css因Mime类型不匹配而被忽略,怎么解决
问题:在火狐.谷歌都可以正常显示出来,在别人的IE浏览器上也可以正常显示出来,但是在自己的ie浏览器就完全不能加载的熬样式了 控制台报告 SEC7113: CSS 因 Mime 类型不匹配而被忽略 答 ...