zoukankan      html  css  js  c++  java
  • 定时器作业将sap数据更新至列表库

    前期工作:SAP数据通过Biztalk连接,发布成webservices。将列表库结构设计好,并存为模板
    为了能实现快速更新,采取直接删除整个列表库再新建录入数据的方式更新。

    新建类

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration;
    using System.Collections;
    //web引用
    using SAPTimer.Biztalk;
    namespace SAPTimer
    {
        public class SAPDataTimer : SPJobDefinition
        {
            public SAPDataTimer() : base() { }

            /// <summary>
            /// 初始化EventCheckTimer
            /// 更多的构造函数请参看SDK
            /// </summary>
            /// <param name="_timername">计时器的名称</param>
            /// <param name="_wp">Web应用程序名称</param>
            public SAPDataTimer(string _timername, SPWebApplication _wp)
                : base(_timername, _wp, null, SPJobLockType.ContentDatabase)
            {
                this.Title = "SAPTimer";
            }

            /// <summary>
            /// 此方法由系统调用,contentDbId也由系统传递
            /// </summary>
            /// <param name="_contentdbid">内容数据库的id</param>
            public override void Execute(Guid targetInstanceId)
            {

                SPWebApplication webApplication = this.Parent as SPWebApplication;
                SPContentDatabase contentDb = webApplication.ContentDatabases[targetInstanceId];
                //门户站点
                SPSite spsite = new SPSite("。。。");
                //子网站
                SPWeb spweb = spsite.OpenWeb("/");
               
                SPList list1 = spweb.Lists["WBSInfo"];
                SPList list2 = spweb.Lists["StaffInfo"];
                SPList list3 = spweb.Lists["DeptInfo"];

                WebService_BizForOA wsBFOA = new WebService_BizForOA();

                WBSInfo wbs = new WBSInfo();
                WBSCollection[] wbsCollections = wsBFOA.GetWBSInfo(wbs);

                StaffInfo si = new StaffInfo();
                StaffCollection[] staffCollections = wsBFOA.GetStaffInfo(si);

                DeptInfo de = new DeptInfo();
                DeptCollection[] deptCollections = wsBFOA.GetDeptList(de);

                //删除权限
                spweb.AllowUnsafeUpdates = true;

                #region 更新WBSInfo
                //清空文档库list1
                spweb.Lists.Delete(list1.ID);
                SPListTemplateCollection listTemplateCollection = spsite.GetCustomListTemplates(spweb);
                //列表库模板:可在Moss中将特定列表库另存为模板文件,位于站点中。
                SPListTemplate template = listTemplateCollection["WBS"];
                Guid ListLibGuid = spweb.Lists.Add("WBSInfo", "", template);
                list1 = spweb.Lists[ListLibGuid];

                //add
                foreach (WBSCollection wwbs in wbsCollections)
                {
                    SPListItem item1 = list1.Items.Add();
                    item1["WBS元素编号"] = wwbs.WBS元素编号;
                    item1["合同名称"] = wwbs.合同名称;
                    item1["简明标识"] = wwbs.简明标识;
                    item1["合同签署地"] = wwbs.合同签署地;
                    item1["合同签署地代码"] = wwbs.合同签署地代码;
                    item1["利润中心"] = wwbs.利润中心;
                    item1["利润中心代码"] = wwbs.利润中心代码;
                    item1["项目负责人"] = wwbs.项目负责人;
                    item1["项目负责人代码"] = wwbs.项目负责人代码;
                    item1.Update();
                }
                #endregion

                #region 更新StaffInfo
                //清空list2
                spweb.Lists.Delete(list2.ID);
                listTemplateCollection = spsite.GetCustomListTemplates(spweb);
                //列表库模板:可在Moss中将特定列表库另存为模板文件,位于站点中。
                template = listTemplateCollection["Staff"];
                ListLibGuid = spweb.Lists.Add("StaffInfo", "", template);
                list2 = spweb.Lists[ListLibGuid];
                //add
                foreach (StaffCollection st in staffCollections)
                {
                    SPListItem item1 = list2.Items.Add();
                    item1["员工ID"] = st.ID;
                    item1["姓名"] = st.姓名;
                    item1["登录名"] = st.登录名;
                    item1["EMail"] = st.EMail;
                    item1["职位"] = st.职位;
                    item1["职位代码"] = st.职位代码;
                    item1["部门"] = st.部门;
                    item1["部门代码"] = st.部门代码;
                    item1["手机"] = st.手机;
                    item1["座机"] = st.座机;
                    item1.Update();
                }
                #endregion

                #region 更新DeptInfo
                //清空list3
                spweb.Lists.Delete(list3.ID);
                listTemplateCollection = spsite.GetCustomListTemplates(spweb);
                //列表库模板:可在Moss中将特定列表库另存为模板文件,位于站点中。
                template = listTemplateCollection["Dept"];
                ListLibGuid = spweb.Lists.Add("DeptInfo", "", template);
                list3 = spweb.Lists[ListLibGuid];
                //add
                foreach (DeptCollection dept in deptCollections)
                {
                    SPListItem item1 = list3.Items.Add();
                    item1["部门ID"] = dept.ID;
                    item1["部门名称"] = dept.名称;
                    item1["负责人ID"] = dept.负责人ID;
                    item1["负责人姓名"] = dept.负责人姓名;
                    item1["负责人登录名"] = dept.负责人登录名;
                    item1["负责人EMail"] = dept.负责人EMail;
                    item1.Update();
                }
                #endregion
            }

        }
    }
    ----------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration;
    namespace SAPTimer
    {
        class SAPDataTimerInstaller : SPFeatureReceiver
        {
            const string MY_TASK = "SAPDataTimer";

            /// <summary>
            /// 在功能被安装以后被调用
            /// </summary>
            public override void FeatureInstalled(SPFeatureReceiverProperties properties)
            {
            }

            /// <summary>
            /// 在功能被卸载的时候被调用
            /// </summary>
            public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
            {
            }

            /// <summary>
            /// 在功能被激活的时候被调用
            /// </summary>
            public override void FeatureActivated(SPFeatureReceiverProperties properties)
            {
                // 取得当前站点的作用域
                SPSite site = properties.Feature.Parent as SPSite;

                SPWeb web = site.RootWeb;

                // 确保在安装此功能之前系统不被调用
                foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
                {
                    if (job.Name == MY_TASK)
                        job.Delete();
                }

                //安装TimerJob
                SAPDataTimer timer = new SAPDataTimer(MY_TASK, site.WebApplication);
                //设置记时器的工作计划表,在这里是每日启动一次,运行时间00:00-01:00,更多的Timer请参看SDK,最小是只执行一次,最长是一天
                SPDailySchedule schedule = new SPDailySchedule();
                schedule.BeginHour = 0;
                schedule.EndHour = 1;

                //每分钟
                //SPMinuteSchedule schedule = new SPMinuteSchedule();
                //schedule.BeginSecond = 0;
                //schedule.EndSecond = 59;
                //schedule.Interval = 1;

                //每小时
                //SPHourlySchedule schedule = new SPHourlySchedule();
                //schedule.BeginMinute = 40;
                //schedule.EndMinute = 45;
           
                timer.Schedule = schedule;
                timer.Update();
            }

            /// <summary>
            /// 在功能被冻结的时候被调用
            /// </summary>
            public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
            {
                SPSite site = properties.Feature.Parent as SPSite;

                // 删除这个功能
                foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
                {
                    if (job.Name == MY_TASK)
                        job.Delete();
                }
            }
        }
    }
    在C盘features文件夹下新建和项目同名的文件夹,并新建feature.xml
    <?xml version="1.0" encoding="utf-8" ?>
    <Feature  Id="DC421BF5-6EAE-4d2b-A1E3-CF3B987DEC10"
              Title="SAPTimer;"
              Description="SAPimerInstaller;"
              Version="12.0.0.0"
              Scope="Site"
              xmlns="http://schemas.microsoft.com/sharepoint/"
              ReceiverAssembly="SAPTimer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a17149b5e6de8152"
              ReceiverClass="SAPTimer.SAPDataTimerInstaller">
    </Feature>
    经测试,对3个列表库共2000多条记录进行一次更新时间是58秒
  • 相关阅读:
    源码学习-出差有感
    《java数据结构与算法》系列之“快速排序"
    新征途
    命运总是喜欢开玩笑
    《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入
    秒杀9种排序算法(JavaScript版)
    《进击的巨人》
    Noip2001 提高组 T3
    Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数
    Noip2012 提高组 Day1 T1 Vigenère 密码
  • 原文地址:https://www.cnblogs.com/Hary/p/1235373.html
Copyright © 2011-2022 走看看