Calculated Field是怎么更新值?

问题描述

有谁研究过Calculated字段是怎么更新值的?这个字段的值是根据其他字段的值计算出来的,但是当其他字段的值变化的时候,这个字段是怎么样被更新的?看了下反编译后的代码,既没有发现eventreceiver,也没有工作流或者其他方法。

解决方案

解决方案二:
https://msdn.microsoft.com/en-us/library/office/bb862071(v=office.14).aspxhttps://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.spfieldcalculated(v=office.14).aspx可以看看
解决方案三:
看看看msdn的文档,然后反编译了一下dll,我觉得应该是保存Item或者更新field的时候,会刷新这个值;而这个值也像其他值一样,存在数据库中,至于怎样显示存在字段的SchemaXml中;这个是我用控制台读取的值,前面是字段展示类型,后面是值,正好跟反编译里面展示的方法吻合;然后我又去sql里查了一下,里面只有这个值,如下图:
解决方案四:
感谢版主详细的回复,你说的对,确实是在保存Item或者更新field的时候,刷新这个值。但是一直没有找到刷新这个值的代码,一开始猜测可能是用了eventreceiver来捕捉item的保存,然后刷新这个值,结果没有找到eventreceiver,然后猜测可能是用了FormContext的OnSaveHandler,结果反编译代码里也没有找到。同样在SPItem.Update里也没找到哪里更新了calculatedfield。。。会不会是在COM里或者在数据库里刷新的这个值?
解决方案五:
引用3楼shrenk的回复:

感谢版主详细的回复,你说的对,确实是在保存Item或者更新field的时候,刷新这个值。但是一直没有找到刷新这个值的代码,一开始猜测可能是用了eventreceiver来捕捉item的保存,然后刷新这个值,结果没有找到eventreceiver,然后猜测可能是用了FormContext的OnSaveHandler,结果反编译代码里也没有找到。同样在SPItem.Update里也没找到哪里更新了calculatedfield。。。会不会是在COM里或者在数据库里刷新的这个值?

基类SPField里找到下面的方法,可以看看,我估计不一定是这个方法,也是这种方式操作的;privatevoidUpdateInWeb(boolbToggleSealed){SPFieldCalculatedcalculated=thisasSPFieldCalculated;if(calculated!=null){List<Guid>fids=newList<Guid>();List<string>fldTitles=newList<string>();if(calculated.Formula!=null){ParseFormula(this.Fields.Web,calculated.Formula,fids,fldTitles);}this.UpdateSchemaXmlInWeb(this.Node.OuterXml,bToggleSealed,false,false,calculated.Formula,fldTitles,fids);}else{stringnamedStringItem=SPGlobal.GetNamedStringItem(this.Node,"RelationshipDeleteBehavior");if(!string.IsNullOrEmpty(namedStringItem)&&(string.Compare(namedStringItem,"None",true,CultureInfo.InvariantCulture)!=0)){thrownewSPException(SPResource.GetString("LookupRelationshipsSiteColumnsCannotHaveRI",newobject[0]));}stringstr2=SPGlobal.GetNamedStringItem(this.Node,"EnforceUniqueValues");if(!string.IsNullOrEmpty(str2)&&(string.Compare(str2,"true",true,CultureInfo.InvariantCulture)==0)){GuidfieldId=newGuid(SPGlobal.GetNamedStringItem(this.Node,"ID"));if(SPUtility.IsBuiltInFieldDisallowingUniqueness(fieldId)){thrownewSPException(SPResource.GetString("EnforceUniqueValuesDisallowedOnBuiltInFieldId",newobject[0]));}}this.UpdateSchemaXmlInWeb(this.Node.OuterXml,bToggleSealed,false,false,string.Empty,null,null);}}

解决方案六:
之前有个问题问的是计算列不更新的问题,应该跟这个是一个事情,在点编辑item属性的时候会更新计算列,好像是这样,当时我还试了一下

时间: 2024-12-21 10:22:34

Calculated Field是怎么更新值?的相关文章

从零开始学_JavaScript_系列(十一)——dojo(5)(GRID表格进阶:更新值,name,重置表结构/缓存,重绘表格)

如果没接触过dojo,或者是dojo的gridx控件,请查看我之前几篇博客,写的已经非常详细了 最重要的,更新grid中指定单元格的值,请拉到最后看(59) 至此,grid表格日常所需的常见功能已经基本完结.如果有其他功能需求,请评论提出. (54)获得某列的name属性 代码: grid.column(2).name(); 效果: ①获得第2+1=3列的name属性: ②这里的name属性指表头的名字,如图中红框的 补充: ③grid.column(2).width 显示本列宽度 ④grid.

我的架构之路 — 配置中心(三)— 动态更新配置

包含两方面的含义:一.变化的配置能够下发到客户端.二.客户端能够方便地处理这些变化的配置.下面会讲普通监听器回调方式和spring 注解到field的方式. 配置下发 1)客户端间隔20秒(可配)去数据库拉取配置,sql传递的参数有配置名称.环境.上一次最大更新时间2)取到配置后,合并更新本地备份.3)通过监听器的方式通知配置变化. #监听器接口 public interface ConfigUpdateListener { void update(Properties properties);

解决-查询更新Oracle C# 问题求大神支援

问题描述 查询更新Oracle C# 问题求大神支援 目前我DB里面有张表,每次做动作之前我都要先去查询表中的某个栏位,然后更新它, 那么问题来来,我同时做动作的的,有多个SQL去查询他然后更改它,那么就会出现这样的 情况,我第一查询的值是正确的,在我第一更改这个值之前,我的第二次查询过来了,那我 地次查询到的值不是第一次更新后的值,那我的第二次更新就毫无意义了,问下大神这个问题 该如何解决 解决方案 这个用事务应该可以解决的,关于如何用事务你可以百度一下 如果回答对您有帮助,请采纳 解决方案二

判断字段是否被更新 新旧数据写入Audit Log表中_MsSql

Insus.NET解决这个问题,只有创建另外一个表,将存储用户决定要跟踪的表,以及这个表中需要跟踪的字段. 还要创建另外一个表[Audit],就是存储跟踪记录的表: 复制代码 代码如下: Audit SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Audit]( [Audit_nbr] [int] IDENTITY(1,1) NOT NULL, [AuditTy

sphinx UpdateAttributes 更新负数出错

问题描述 sphinx UpdateAttributes 更新负数出错 例如更新: $cl->UpdateAttributes ("test1",array("displayorder"),array(1=>array(-1))); 更新值为-1 得到的如果是: 'displayorder' => int 4294967294 更新正数就正常是什么情况.

sqlserver-sql 通过like查询出一张表的一些数据,然后打算更新其中一列数据

问题描述 sql 通过like查询出一张表的一些数据,然后打算更新其中一列数据 请问下,先通过like查询a表中一些数据然后打算更新查询结果中一列数据,请问怎么弄你? 解决方案 update a set 字段1='新值' where 字段2 like '%条件%' 解决方案二: update tablename set 字段='XX' where 字段 like '%XX%' 解决方案三: 如果是在Oracle下,我用PLSQL Developer试过这样的方式.select * from ta

ORM数据层框架的设计热点:更新指定的列的几种设计方案

ORM框架的定义:对象-关系映射(Object/Relation Mapping,简称ORM) 常见的是:数据库结构=>映射Object(实体属性)=>基于实体类的操作. 还有一种:数据库结构=>映射Object(内存表结构)=>基于内存表的操作. 当然,如果你有创意,你还能创造出更多的映射载体来实现ORM. 避免思维定式:  由于思维定式,很多开发者,只有见到基于实体类映射,才会认为是一种ORM框架,于是很少人去思考其它映射载体来实现ORM. 这个思维定式,和早期在ASP.NET

mongodb的java开发查询返回结果后取值的问题

问题描述 mongodb的java开发查询返回结果后取值的问题 用find查询会返回一个document,但是这个document只能获取一级key的数据,如果我想要获得某个子目录的下的数据应该怎么做,好像用get方法取出来的并不谁document类型也就没 办法转型后继续用get方法来取值.比如 {"table":{field:"字段1"}}这个数据格式,在结果的document里可以用get("table")的方式获得"{field

精通Python网络爬虫:核心技术、框架与项目实战.3.3 网页更新策略

3.3 网页更新策略 一个网站的网页经常会更新,作为爬虫方,在网页更新后,我们则需要对这些网页进行重新爬取,那么什么时候去爬取合适呢?如果网站更新过慢,而爬虫爬取得过于频繁,则必然会增加爬虫及网站服务器的压力,若网站更新较快,但是爬虫爬取的时间间隔较长,则我们爬取的内容版本会过老,不利于新内容的爬取.显然,网站的更新频率与爬虫访问网站的频率越接近,则效果越好,当然,爬虫服务器资源有限的时候,此时爬虫也需要根据对应策略,让不同的网页具有不同的更新优先级,优先级高的网页更新,将获得较快的爬取响应.