SharePoint开发 - TimerJob简单实例讲解
博客地址 http://blog.csdn.net/foxdave
SharePoint中的TimerJob类似于Windows系统的计划任务,可以实现定时执行指定操作的功能。
本篇所述的实例为在SharePoint 2010 Foundation版本下实现SharePoint用户的同步功能。
1. 打开Visual Studio 2010,创建一个SharePoint的空解决方案,选择部署为场解决方案
2. 添加一个新类MyTimerJob,添加using引用Microsoft.SharePoint.Administration,继承SPJobDefinition类,这个便是我们自己的timerjob。然后声明两个构造函数,如下所示
using Microsoft.SharePoint.Administration; namespace TimerJobExample
{
public class MyTimerJob : SPJobDefinition
{
public MyTimerJob() : base() { } public MyTimerJob(string jobName, SPWebApplication webApp) : base(jobName, webApp, null, SPJobLockType.Job) { this.Title = jobName; }
}
}
3. 接下来最重要的一步,就是我们需要写出来这个timerjob需要做什么。重写Execute方法,代码如下所示
public override void Execute(Guid targetInstanceId)
{
base.Execute(targetInstanceId);
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SPMIPConn"].ConnectionString);
conn.Open();
//取站点 在webConfig部署,用户直接修改自己webConfig
//<add key="SiteURL" value="http://spf02"/>
string siteURL = ConfigurationManager.AppSettings["SiteURL"];
using (SPSite st = new SPSite(siteURL))
{
SPWeb web = st.RootWeb;
SPList userList = web.SiteUserInfoList; //web.Lists["用户信息列表"];
string loginname = string.Empty;
List<string> userIDsForDel = new List<string>();
foreach (SPUser user in web.SiteUsers)
{
if (!user.LoginName.Contains("spmipmp|"))
{
continue;
}
loginname = user.LoginName.Substring(user.LoginName.LastIndexOf('|') + 1);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = string.Format("select a.Zhi_Gid,a.UserCode,b.zhi_gxm,c.Bu_mmch,d.Zhi_wmch from SYS_User as a left join TM_Zhigxx as b on b.Zhi_gid=a.Zhi_gid left join TD_BuM as c on c.id=b.Bu_mid left join TM_ZhiWxx as d on d.Zhi_wxxid=b.Zhi_wid where a.Shan_Cqf='否' and a.UserCode='{0}'", loginname);
SqlDataReader sdr = cmd.ExecuteReader();
if (sdr.Read())
{
//返回或设置用户的显示名
user.Name = sdr["Zhi_gxm"].ToString();
user.Update();
string queryStr = "<Where><Eq><FieldRef Name='ID'/><Value Type='Number'>" + user.ID + "</Value></Eq></Where>";
//SPQuery类来完成对列表的查询
SPQuery query = new SPQuery();
//设置XML查询
query.Query = queryStr;
SPListItem userItem = userList.GetItems(query)[0];
//职务
userItem["JobTitle"] = sdr["Zhi_wmch"].ToString();
//部门
userItem["Department"] = sdr["Bu_mmch"].ToString();
userItem.Update();
}
else
{
userIDsForDel.Add(user.LoginName);
}
sdr.Close();
}
web.SiteUsers.RemoveCollection(userIDsForDel.ToArray());
}
conn.Close();
}
这里,由于我手头的环境是基于SQL数据用户表的Form认证,戳这里,所以具体的做法是,读取到SQL用户表中的数据,然后同步到SharePoint的用户列表。
4. timerjob写完了,现在我们需要通过feature去控制这个timerjob,在feature激活的时候添加这个timerjob,并在取消激活的时候删除它,代码如下
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
const string MY_TASK = "SPMIP用户信息同步";//事件检查定时器
SPSite site = properties.Feature.Parent as SPSite;
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == MY_TASK)
{
job.Delete();
break;
} } Synchronization schtion = new Synchronization(MY_TASK, site.WebApplication);
SPDailySchedule schedule = new SPMonthlySchedule();
schedule.BeginHour = 23;
schedule.BeginMinute = 40;
schedule.BeginSecond = 1;
schedule.EndHour = 23;
schedule.EndMinute = 59;
schedule.EndSecond = 1;
schtion.Schedule = schedule;
schtion.Update();
} public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
const string MY_TASK = "SPMIP用户信息同步";//事件检查定时器
SPSite site = properties.Feature.Parent as SPSite;
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == MY_TASK)
{
job.Delete();
break;
}
}
}
以上就是应用timerjob的大致过程
SharePoint开发 - TimerJob简单实例讲解的更多相关文章
- SharePoint 开发TimerJob 介绍
项目需要写TimerJob,以前也大概知道原理,不过,开发过程中,还是遇到一些问题,网上看了好多博客,也有写的灰常好的,不过,自己还是想再写一下,也算是给自己一个总结,也算给大家多一个参考吧. Tim ...
- (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)
hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...
- 【SSH进阶之路】Hibernate搭建开发环境+简单实例(二)
Hibernate是很典型的持久层框架,持久化的思想是很值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和原理 ...
- Android Studio1.4.x JNI开发基础 - 简单实例
接上一篇,搭建好基于Android Studio的环境之后,编写native代码相对来说也比较简单了.在Android上编写Native代码和在Linux编写C/C++代码还是有区别,Native代码 ...
- 简单实例讲解linux的module模块编译步骤
注:原博文地址http://blog.sina.com.cn/s/blog_4ba5b45e0102v25h.html ---------------------------------------- ...
- VS2008中C#开发webservice简单实例
1.创建工程 文件-> 新建->网站 如下图. 工程建好后,会自动添加如下代码: using System; using System.Linq; using System.Web; us ...
- MVVM开发模式简单实例MVVM Demo
本文主要是翻译Rachel Lim的一篇有关MVVM模式介绍的博文 A Simple MVVM Example 并具体给出了一个简单的Demo(原文是以WPF开发的,对于我自己添加或修改的一部分会用红 ...
- SharePoint 2010 BCS - 简单实例(二)外部列表创建
博客地址 http://blog.csdn.net/foxdave 接上篇 由于图片稍多篇幅过长影响阅读,所以分段来写. 添加完数据源之后,我们需要为我们要放到SharePoint上的数据表定义操作, ...
- SharePoint 2010 BCS - 简单实例(一)数据源添加
博客地址 http://blog.csdn.net/foxdave 本篇基于SharePoint 2010 Foundation. 我的数据库中有一个病人信息表Patient,现在我就想把这个表中的数 ...
随机推荐
- hbase Java API 介绍及使用示例
几个相关类与HBase数据模型之间的对应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) ...
- (27)Cocos2d-x 3.0 Json用法
Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidj ...
- 20155307 2016-2017-2 《Java程序设计》第8周学习总结
20155307 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 日志API:使用日志的起点是Logger类,要取得Logger类,必须使用Logger的静态 ...
- 使用U盘安装linux系统
1. 下载并安装:UltraISO.流氓软件太多,最后是在百度软件中心下的,推荐. 2. 插入U盘.打开UltraISO,然后:文件 -- 打开 -- 选择你的ISO文件,打开. 3. UltraIS ...
- springcloud6---Eureka的配置:
Eureka的配置: 自我保护:表示eureka进入了自我保护模式,eureka启动的时候会从高可用其他节点获取注册表信息,eureka client会每30秒发送心跳,如果eureka server ...
- 【转载】Java动态代理之JDK实现和CGlib实现(简单易懂)
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6542259.html 一:代理模式(静态代理) 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是 ...
- 20145307陈俊达《网络对抗》逆向及Bof基础
20145307陈俊达<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...
- HeyWeGo第三周项目总结
HeyWeGo第三周项目总结 项目进展 第三周的计划是:将收集到的资料和代码,进行汇总并且分工后开始开始撰写游戏代码与测试代码. 本周我们已经开始编写了自己负责部分的代码. 按照我们的计划,本周我们完 ...
- IntelliJ IDEA 常用快捷键,maven依赖图,个性化设置,禁用Search Everywhere
查看idea 中jar关系图 快捷键: Ctrl+/ 用于注释,取消注释 Ctrl+Shift+F 全文搜索 Ctrl+F 单页面查找 Ctrl+Alt+Shift+L 格式化代码 ======== ...
- [nowcoder]contest/172/C保护
C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为首都.国家有m支军队,分别守卫一条路径的城市.具体来说,对于军队i,他守卫的城市区域可以由一对二元组(xi,yi) ...