这方面的文章园子里有几篇了,不过大家基本上都是参考了http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx这篇文章,在此我也推荐大家仔细看下本文及文中涉及到的相关文章。工作中也遇到了类似的需求,在此也做个总结。
1.MOSS中已经提供了定时器的功能,我们要开发自己的定时器需要继承自SPJobDefinition类,在重写的Execute方法写自己的业务逻辑。我的需求是找出列表中符合条件的item,并做mail通知,代码如下:
using System; using System.Collections.Generic; using System.Text; using Microsoft.SharePoint.Administration; using Microsoft.SharePoint; using Microsoft.SharePoint.Utilities; namespace CaryTimer { public class ListRemindEvent : SPJobDefinition { public ListRemindEvent() : base() { } public ListRemindEvent(string _timername, SPWebApplication _wp) : base(_timername, _wp, null, SPJobLockType.ContentDatabase) { this.Title = "TestTimer"; } public override void Execute(Guid targetInstanceId) { SPWebApplication webApp = this.Parent as SPWebApplication; SPContentDatabase contentDB = webApp.ContentDatabases[targetInstanceId]; SPWeb web = contentDB.Sites[0].AllWebs[0]; string sendTo = ""; string mailTitle = ""; string mailBody = ""; //实现自己业务逻辑,找出复合条件的并发mail做相关通知。 SPUtility.SendEmail(web, false, false, sendTo, mailTitle, mailBody); } } }
2.该类完成后我们使用Feature来部署该功能,我们写一个自己的安装类,如下:
using System; using System.Collections.Generic; using System.Text; using Microsoft.SharePoint; using Microsoft.SharePoint.Administration; namespace CaryTimer { public class ListRemindEventInstaller : SPFeatureReceiver { const string caryTimerName = "Testtimer"; public override void FeatureInstalled(SPFeatureReceiverProperties properties) { } public override void FeatureUninstalling(SPFeatureReceiverProperties properties) { } public override void FeatureActivated(SPFeatureReceiverProperties properties) { SPSite site = properties.Feature.Parent as SPSite; foreach (SPJobDefinition job in site.WebApplication.JobDefinitions) { //判断是否已存在 if (job.Name == caryTimerName) { job.Delete(); } } ListRemindEvent timer = new ListRemindEvent(caryTimerName, site.WebApplication); /下边是设置定时器的执行计划部分。 SPMinuteSchedule schedule = new SPMinuteSchedule(); schedule.BeginSecond = 0; schedule.EndSecond = 59; schedule.Interval = 1; timer.Schedule = schedule; timer.Update(); } public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { SPSite site = properties.Feature.Parent as SPSite; foreach (SPJobDefinition job in site.WebApplication.JobDefinitions) { if (job.Name == caryTimerName) { job.Delete(); } } } } }
3.需要在"c:\program files\common files\microsoft shared\web server extensions\12\Template\features"文件夹下建立CaryTimer文件夹,在该文件夹下建一个Feature.xml,代码如下:
<Feature Id="6283ADA0-B882-47fe-8507-D8CC763DC320" Title="CaryTimer" Description=" CaryTimer des" Scope="Site" Hidden="FALSE" ReceiverAssembly="HelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b38a04419cc857d9" ReceiverClass="HelloWorld.ListRemindEventInstaller" xmlns="http://schemas.microsoft.com/sharepoint/"> </Feature>
4.然后我们使用一个批处理来安装Feature,批处理代码如下:
@SET TEMPLATEDIR="c:\program files\common files\microsoft shared\web server extensions\12\Template"
@SET STSADM="c:\program files\common files\microsoft shared\web server extensions\12\bin\stsadm"
@SET GACUTIL="d:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe"
Echo Installing HelloWorld.dll in GAC
%GACUTIL% -if bin\debug\HelloWorld.dll
Echo Copying files to TEMPLATE directory
xcopy /e /y TEMPLATE\* %TEMPLATEDIR%
Echo Installing feature
%STSADM% -o installfeature -filename HelloWorld\feature.xml -force
IISRESET
REM cscript c:\windows\system32\iisapp.vbs /a "SharePointDefaultAppPool" /r
5.项目完成后,我们要添加强命名密钥。部署成功后就可以在网站集功能中看见该Feature,激活该Feature后,在管理中心—操作—计时器作业定义中可以看见该定时器的相关信息,并且可以禁用和启用该定时器,在管理中心—操作—计时器作业状态中可以该定时器最后一次运行的情况。
6.如果我们要调试该定时器我们需要附加OwsTimer.exe进程,每次更改后需走以下步骤:
6.1.使用批处理从新部署Feature
6.2.先Deactivate feature, 然后activate feature.
6.3.命令行:net stop SPTimerV3
6.4.命令行:net start SPTimerV3
6.5.Visual Studio: Attach to process: OWSTIMER.EXE
7.如果你在ListRemindEvent类中需要读取外部文件的配置,直接读web.config是读不到的,我们需要在c:/program files/common files/microsoft shared/…/12/bin目录里新建一个文件OwsTimer.exe.config,并做相关配置如下:
<configuration> <appSettings> <add key="key" value="value" /> </appSettings> </configuration> 然后用ConfigurationManager.AppSettings.Get("key"); 来取得这个值。
发表评论
-
Sharepoint之升级篇
2008-03-07 07:47 1629一:sharepoint介绍<?xml:namespac ... -
SharePoint之定义管理路径
2008-03-12 07:14 1108一:如何设置 通过定义管理路径,可以指定 Web 应用程序 ... -
Sharepiont之页面模型
2008-03-15 17:33 1090本文主要包括以下几方面内容:1.页面布局和母版页2.页面布局模 ... -
Sharepoint站点把我的名字显示成“系统帐户”问题
2008-03-18 21:48 1008在你安装了SharePoint Server 2007之后,当 ... -
MOSS中对列表的一些操作(创建,查询等)
2008-06-17 20:47 9211.查询列表的所有字段 SPSite site = new S ... -
使用对象模型来创建内容类型
2008-07-03 21:49 671一:首先定义一个函数来创建内容类型,代码如下: private ... -
微软发布WSS3.0和MOSS2007 基础结构更新
2008-07-17 07:07 758一:Windows SharePoint Services 3 ... -
[翻译]Training Site Template—Part 1:介绍
2008-07-30 20:08 715原文地址:http://blogs.msdn.com/shar ... -
如何取到MOSS列表中item的链接
2008-12-04 18:07 853SPListItem的Url属性返回的不是绝对路径,形式如下面 ... -
MOSS程序中如何发Mail?
2008-12-09 10:42 801我们使用.NET类库中的API发Mail的时候,我们要配置他的 ...
相关推荐
长江学者名单,来自网络
内容概要:本文介绍了基于COMSOL的单相变压器绕组及铁芯振动形变仿真模型。绕组在漏磁场的洛伦兹力作用下会发生振动并导致位移形变,而铁芯则因磁致伸缩效应产生振动形变。这两种形变都会影响变压器的性能和寿命。通过有限元仿真模型,特别是时域仿真,可以设置观察点并导出随时间变化的磁通、位移、压力和形变曲线,帮助研究人员更好地理解和解决这些问题。 适合人群:从事电力系统设备设计、制造和维护的技术人员,以及对有限元仿真感兴趣的科研人员。 使用场景及目标:①用于研究单相变压器绕组和铁芯的振动形变机理;②为优化变压器设计提供数据支持;③预测和预防变压器可能出现的问题,延长其使用寿命。 其他说明:文中提到的仿真模型不仅可以帮助理解变压器内部的工作机制,还可以为实际工程应用提供有价值的参考。
内容概要:本文介绍了一个基于Java语言实现的简单扑克牌游戏程序,详细阐述了游戏规则、功能模块设计、核心功能实现以及扩展建议。游戏使用标准52张扑克牌,支持2-4名玩家对战,玩家可出单张、对子、三张或顺子等牌型,牌型大小按三张>顺子>对子>单张排列。功能模块包括扑克牌类(Card)、牌堆管理类(Deck)、玩家类(Player)和游戏主逻辑类(PokerGame)。核心功能涵盖扑克牌的数据结构设计与比较规则、牌堆的初始化与洗牌发牌逻辑、玩家的手牌管理和游戏的回合制流程与胜负判定。; 适合人群:具有Java编程基础的学习者或开发者,尤其是对面向对象编程和游戏开发感兴趣的读者。; 使用场景及目标:①理解面向对象编程思想,掌握类与对象的定义和使用;②学习扑克牌游戏的基本规则和实现逻辑;③掌握Java语言中集合、枚举、接口等特性在实际项目中的应用;④为后续开发更复杂的扑克牌游戏打下基础。; 其他说明:本文提供了完整的代码实现和详细注释,有助于读者快速上手并理解每个部分的功能。同时,文中还给出了多项扩展建议,如增加牌型规则、优化交互界面、实现网络对战和AI对战系统等,鼓励读者在此基础上进行创新和改进。
cmd-bat-批处理-脚本-findEscapeQuote.zip
cmd-bat-批处理-脚本-循环-9.for-f-eol.zip
内容概要:本文探讨了基于灰狼算法的MPPT控制策略,旨在解决局部阴影遮挡和光照突变条件下传统MPPT算法难以实现最优跟踪的问题。文中详细介绍了灰狼算法的基本原理及其在光伏系统中的应用,提出了建立光伏系统的数学模型并利用灰狼算法优化输出电压和电流的方法。通过编写灰狼算法程序并在Matlab/Simulink中搭建仿真模型,验证了该策略的有效性和优越性。仿真结果显示,灰狼MPPT控制策略在复杂环境下具有更高的寻优精度和更强的适应性。 适合人群:从事太阳能光伏系统研究的技术人员、科研工作者及高校相关专业师生。 使用场景及目标:适用于需要优化光伏系统能量利用率的研究项目,特别是在存在局部阴影遮挡和光照突变的应用环境中。目标是提高光伏系统的稳定性和效率。 其他说明:未来可以通过进一步优化灰狼算法程序和模型,拓展其在更多类似优化问题中的应用,为太阳能光伏系统的智能化发展提供支持。
cmd-bat-批处理-脚本-check ad status.zip
内容概要:本文介绍了一种基于多通道卷积神经网络(MCCNN)的变压器故障诊断模型的研究与实现。针对传统诊断方法面对变压器内部故障种类繁多且隐蔽性强的问题,提出了利用MCCNN处理多维度振动信号的方法。通过不同大小的卷积核提取局部和全局特征,在不增加模型复杂度的情况下提高了故障识别能力。文中详细描述了MCCNN模型的构建步骤,包括数据预处理、卷积层和池化层的设计,以及MATLAB平台上的具体实现。实验结果显示,MCCNN模型在变压器故障诊断方面表现出更高的准确率和更好的泛化能力。 适合人群:从事电力系统维护、故障诊断领域的工程师和技术研究人员。 使用场景及目标:适用于需要提升变压器故障诊断精度和效率的实际应用场景,如电力公司、变电站等。目标是通过先进的机器学习技术改进现有诊断手段,减少误判并提高系统的可靠性。 其他说明:文章提供了详细的理论背景和技术细节,有助于读者深入理解MCCNN的工作机制及其在特定任务中的优势。同时,附带的变压器振动信号数据集为后续研究提供了宝贵的数据支持。
内容概要:本文详细探讨了利用COMSOL多物理场仿真软件进行水力压裂传热-应力-渗流-损伤模型的研究。文章介绍了水力压裂过程中涉及的多个物理现象及其相互作用,如流体流动、岩层变形、温度变化和岩层破坏。通过具体的数学公式展示了不同物理场之间的耦合关系,如应力计算、热量传递、压力分布和损伤演化。此外,文章还讨论了模型构建的方法以及仿真结果的应用价值,强调了通过优化流体注入速率等参数来提高压裂效率的实际意义。 适合人群:从事水力压裂技术研究的专业人士、地质工程研究人员、能源开发领域的工程师和技术人员。 使用场景及目标:适用于希望深入了解水力压裂多物理场耦合机制的研究人员,旨在通过仿真分析优化水力压裂过程,提高压裂效率并降低成本。 阅读建议:读者应具备一定的物理学和工程学背景,特别是对多物理场耦合有基本了解。建议结合实际案例进行学习,以便更好地理解和应用文中提到的技术和方法。
内容概要:本文详细介绍了如何使用Qt C++实现一个多功能的节点式图形编辑器。该编辑器具有左侧树形结构,支持面板缩放、节点间的输入输出接口连接以及图片导出功能。文章首先阐述了编辑器的基本架构和特性,接着逐步讲解了节点的添加与操作方法,包括通过右键菜单添加节点、鼠标选择并删除节点或线条。然后重点讨论了节点之间的接口连接机制,允许用户通过拖拽方式进行灵活的图形构建。最后,文章提到了图片导出功能,使用户能够保存编辑成果。此外,文中还简要提及了技术实现的关键点和技术细节,提供了部分代码片段供参考。 适合人群:对Qt C++有一定了解,希望深入学习图形编辑器开发的技术爱好者和开发者。 使用场景及目标:适用于需要开发复杂图形界面的应用程序,如数据流图绘制工具、流程设计器等。目标是掌握Qt C++在图形编辑器开发中的具体应用,提升编程技能。 其他说明:文中提供的源码已在特定版本(Qt5.6.1_MinGW、Qt5.13.1_MinGW)下验证通过,其他版本可能需要适当调整。
内容概要:本文深入探讨了利用Abaqus软件进行三点弯裂纹扩展的模拟研究,重点分析了骨料占比、骨料砂浆界面强度对混凝土断裂性能的影响,以及微裂缝的作用。同时,还讨论了混凝土水化热和浇筑温度场、应力场的相互影响。通过具体案例和技术细节的解析,展示了如何通过内聚力单元(COHESIVE)模拟混凝土材料内部的应力、应变行为,揭示了不同因素对混凝土性能的具体影响。 适合人群:从事土木工程、材料科学研究的专业人士,尤其是对混凝土性能有深入研究需求的工程师和科研人员。 使用场景及目标:适用于需要评估混凝土结构安全性和耐久性的项目,旨在优化工程设计并提高混凝土的使用寿命。通过对裂纹扩展机制的理解,可以更好地预防和解决实际工程中的问题。 阅读建议:读者应在已有一定的混凝土材料基础知识和有限元分析经验的基础上,结合实际工程案例进行理解和应用。文中涉及的技术细节和难点部分,建议反复研读并结合实际操作加深理解。
内容概要:本文详细介绍了两级式电力电子变换器的仿真模型及其构建方法。前级采用三相全桥整流电路,用于将380V交流电转换为直流电;后级则为闭环Buck电路,利用PI控制实现10V直流电的稳定输出。整个模型在MATLAB/Simulink环境中搭建,通过仿真验证了系统的性能和稳定性。文中不仅展示了具体的电路设计步骤,还提供了详细的仿真参数设置和结果分析。 适合人群:从事电力电子技术研究的专业人士、高校相关专业师生、对电力电子变换器感兴趣的工程技术人员。 使用场景及目标:适用于需要理解和掌握两级式电力电子变换器工作原理和技术细节的人群。通过本模型的学习,能够深入了解三相全桥整流和闭环Buck电路的设计思路,掌握MATLAB/Simulink仿真工具的应用技巧。 其他说明:该模型不仅有助于理论研究,还能为实际工程项目提供有价值的参考。通过对仿真结果的分析,可以优化电路设计,提高系统的效率和可靠性。
cmd-bat-批处理-脚本-splitCommand.zip
cmd脚本-bat批处理-8.DecimalConversion.zip
内容概要:本文详细介绍了如何使用Python进行变压器励磁涌流的仿真复现,重点探讨了磁饱和效应对电流波形的影响。首先构建了一个非线性电感模型,利用欧拉法求解电路微分方程,展示了励磁涌流的典型特征——尖峰衰减波形。接着引入了两台变压器并列运行的情况,讨论了因参数差异导致的环流问题及其潜在危害。最后加入了磁滞效应,使仿真更加贴近实际情况。文中还提到了仿真过程中需要注意的关键参数调整方法。 适合人群:从事电力系统仿真研究的技术人员、高校相关专业学生、对电力电子感兴趣的开发者。 使用场景及目标:适用于需要深入理解变压器励磁涌流特性的场合,如电力设备保护设计、故障诊断等领域。目标是帮助读者掌握励磁涌流产生的机理,提高对电力系统的认知水平。 阅读建议:本文提供了完整的Python代码示例,建议读者跟随代码逐步实践,同时关注关键参数的选择和调整,以便更好地理解和应用所学知识。
如何快速判断目标函数的凸性?如何判断一个矩阵是正定的?函数组合的凸性传递规律是什么?函数凸性总结
win7系统下,运行qt程序,提示缺少api-ms-win-core-winrt-l1-1-0.dll 的解决方法,对应的dll复制到程序根目录即可
cmd脚本-bat批处理-2.Shift-MoreArgument0.zip
内容概要:本文深入探讨了Turbo码及其相关信道编码技术,涵盖线性分组码、卷积码、RSC递归系统卷积码、交织、解交织、咬尾卷积编码、打孔删余及Log-Map译码算法等关键概念和技术细节。文中不仅解释了各编码方法的工作原理,还展示了通过调整编码器参数和打孔删余策略实现的不同码率(如1/3、1/5)的灵活变换,并提供了误码率和误包率仿真的实例图表,帮助读者更好地理解和评估Turbo码的实际性能。 适合人群:从事数字通信领域的研究人员、工程师和技术爱好者,尤其是对信道编码技术和Turbo码有浓厚兴趣的专业人士。 使用场景及目标:适用于需要深入了解信道编码原理及其应用的研究项目、工程设计和技术培训。目标是掌握Turbo码的设计思路、编码译码流程及其优化方法,提升通信系统的可靠性和抗噪能力。 其他说明:本文不仅提供理论讲解,还包括具体的代码实现和仿真结果,使读者能够在实践中验证所学知识。