python操作sharepoint对象模型

     前段时间刚接触python,发觉它很简单很实用。最近也一直做sharepoint的项目,很自然就想到,能不能使用python来做一些简单的sharepoint? 如果能直接操作sharepoint的对象模型,使用python对sharepoint做一些简单的开发定制应该是可行吧?
    于是花了点时间研究了一下,写一些代码。基本上我是在把对sharepoint对象模型操作封装成.net com对象,然后在python里通过pythonwin的com api操作这些对象。
    下面是代码:
ContractedBlock.gif ExpandedBlockStart.gif PySite
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using Microsoft.SharePoint;
 5 using System.Runtime.InteropServices;
 6 
 7 namespace PySP
 8 {
 9     [ComVisible(true)]
10     public class PySite
11     {
12         protected SPSite site = null;
13 
14         public PySite() { }
15 
16         public void Open(string url) { this.site = new SPSite(url); }
17 
18         public void Close()
19         {
20             if (this.site != null)
21             {
22                 site.Dispose();
23                 site = null;
24             }
25         }
26 
27         public PyWeb OpenWeb(string url)
28         {
29             if (this.site != null)
30             {
31                 return new PyWeb(this.site, url);
32             }
33 
34             return null
35         }
36         
37     }
38 }
39
ContractedBlock.gif ExpandedBlockStart.gif PyWeb
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using System.Runtime.InteropServices;

namespace PySP
{
    [ComVisible(
true)]
    
public class PyWeb
    {
        
protected SPWeb web = null;

        
protected void EnsureWeb()
        {
            
if (this.web == null)
                
throw new NullReferenceException("the web object can't be null!");
        }

        
public PyWeb() { }

        
public PyWeb(SPSite site, string url)
        {
            
this.web = site.OpenWeb(url);
        }

       
        
public bool AllowAnonymousAccess
        {
            
get
            {
                EnsureWeb();
                
return this.web.AllowAnonymousAccess;
            }

        }

        

        
public bool AllowRssFeeds
        {
            
get
            {
                EnsureWeb();
                
return this.web.AllowRssFeeds;
            }

        }

        
public bool AllowUnsafeUpdates
        {
            
get
            {
                EnsureWeb();
                
return this.web.AllowUnsafeUpdates;
            }
            
set
            {
                EnsureWeb();
                
this.web.AllowUnsafeUpdates = value; 
            }
        }


        
public string Title
        {
            
get
            {
                EnsureWeb();
                
return this.web.Title;
            }
            
set
            {
                EnsureWeb();
                
this.web.Title = value;
            }
        }

        
public string Description
        {
            
get
            {
                EnsureWeb();
                
return this.web.Description;
            }
            
set
            {
                EnsureWeb();
                
this.web.Description = value;
            }
        }

        
public string Name
        {
            
get
            {
                EnsureWeb();
                
return this.web.Name;  
            }
            
set
            {
                EnsureWeb();
                
this.web.Name = value;
            }
        }
         

        
public uint Language
        {
            
get
            {
                EnsureWeb();
                
return this.web.Language;  
            }
        }

        
public void Update()
        {
            EnsureWeb();
            
this.web.Update(); 
        }

        
public void Delete()
        {
            EnsureWeb();
            
this.web.Delete();  
        }

        
public void Close()
        {
            
if (this.web != null)
            {
                
this.web.Dispose();
                
this.web = null;
            }
        }

        
public PyListCollection Lists
        {
            
get
            {
                EnsureWeb();
                
return new PyListCollection(this.web.Lists);
            }
        }

    }
}
ContractedBlock.gif ExpandedBlockStart.gif PyList
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using System.Runtime.InteropServices;

namespace PySP
{
    [ComVisible(
true)]
    
public class PyList
    {
        
protected SPList list = null;

        
protected void EnsureList()
        {
            
if (this.list == null)
                
throw new NullReferenceException("the list object can't be null!");
        }

        
public PyList() { }

        
public PyList(SPList list)
        {
            
this.list = list;
        }

        
public string Title
        {
            
get
            {
                EnsureList();
                
return this.list.Title;
            }
            
set
            {
                EnsureList();
                
this.list.Title = value;
            }
        }

        
public bool AllowContentTypes
        {
            
get
            {
                EnsureList();
                
return this.list.AllowContentTypes;
            }
        }

        
public bool AllowDeletion
        {
            
get
            {
                EnsureList();
                
return this.list.AllowDeletion;
            }
        }

        
public bool CanReceiveEmail
        {
            
get
            {
                EnsureList();
                
return this.list.CanReceiveEmail;
            }
        }

        
public DateTime Created
        {
            
get
            {
                EnsureList();
                
return this.list.Created;
            }
        }

        
public PyListItemCollection GetAllItems()
        {
            EnsureList();
            
return new PyListItemCollection(this.list.Items);
        }



        
public void Update()
        {
            EnsureList();
            
this.list.Update();
        }
    }
}
ContractedBlock.gif ExpandedBlockStart.gif PyListCollection
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using System.Runtime.InteropServices;

namespace PySP
{
    [ComVisible(
true)]
    
public  class PyListCollection
    {
        
protected SPListCollection lists;

        
protected void EnsureLists()
        {
            
if (this.lists == null)
                
throw new NullReferenceException("the lists object can't be null!");
        }

        
public PyListCollection() { }

        
public PyListCollection(SPListCollection lists)
        {
            
this.lists = lists;
        }

        
public int Count
        {
            
get
            {
                EnsureLists();
                
return this.lists.Count;
            }
        }

        
public PyList GetListByIndex(int index)
        {
            EnsureLists();
            
return  new PyList(this.lists[index]);
        }

        
public PyList GetListByName(string name)
        {
            EnsureLists();
            
return new PyList(this.lists[name]);
        }

    }
}
ContractedBlock.gif ExpandedBlockStart.gif PyListItem
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using System.Runtime.InteropServices;

namespace PySP
{
    [ComVisible(
true)]
    
public class PyListItem
    {
        
protected SPListItem item = null;

        
protected void EnsureItem()
        {
            
if (item == null)
                
throw new NullReferenceException("the item object can't be null !");
        }

        
public PyListItem() { }

        
public PyListItem(SPListItem item)
        {
            
this.item = item;  
        }

        
public string Title
        {
            
get
            {
                EnsureItem();
                
return this.item.Title;
            }
            
        }

        
public void Update()
        {
            EnsureItem();
            
this.item.Update();
        }
    }
}
ContractedBlock.gif ExpandedBlockStart.gif PyListItemCollection
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using Microsoft.SharePoint;
 5 using System.Runtime.InteropServices;
 6 
 7 namespace PySP
 8 {
 9     [ComVisible(true)]
10     public class PyListItemCollection
11     {
12         protected SPListItemCollection items = null;
13 
14         protected void EnsureListItems()
15         {
16             if (items == null)
17                 throw new NullReferenceException("the items object can't be null!");
18         }
19 
20         public PyListItemCollection() { }
21 
22         public PyListItemCollection(SPListItemCollection items)
23         {
24             this.items = items;
25             EnsureListItems();
26         }
27 
28         public int Count
29         {
30             get
31             {
32                 EnsureListItems();
33                 return this.items.Count;
34             }
35         }
36 
37         public PyListItem GetItemByIndex(int index)
38         {
39             EnsureListItems();
40             return new PyListItem(this.items[index]);
41         }
42     }
43 }
44

编译后生成pyps.dll,然后注册com组件,运行命令regasm pyps.dll / register

下面是python 代码:

 

ContractedBlock.gif ExpandedBlockStart.gif pspy.py
  1import win32com.client
  2class PySite:
  3    def __init__(self,url):
  4        self.__com__=win32com.client.Dispatch("PySP.PySite")
  5        self.__com__.open(url)
  6    def OpenWeb(self,url):
  7        return pyweb(self.__com__.openweb(url))
  8    def Close(self):
  9        self.__com__.close
 10  
 11
 12class PyWeb(object):
 13    def __init__(self,com):
 14        self.__com__=com
 15    @property
 16    def AllowAnonymousAccess(self):
 17        return self.__com__.AllowAnonymousAccess
 18    @property
 19    def AllowAutomaticASPXPageIndexing(self):
 20        return self.__com__.AllowAnonymousAccess
 21    @AllowAutomaticASPXPageIndexing.setter
 22    def AllowAutomaticASPXPageIndexing(self,bool):
 23        self.__com__.AllowAutomaticASPXPageIndexing=bool
 24    @property
 25    def AllowRssFeeds(self):
 26        return self.__com__.AllowAnonymousAccess
 27    @property
 28    def AllowUnsafeUpdates(self):
 29        return self.__com__.AllowAnonymousAccess
 30    @AllowUnsafeUpdates.setter
 31    def AllowUnsafeUpdates(self,value):
 32        self.__com__.AllowUnsafeUpdates=value
 33    @property
 34    def Title(self):
 35        return self.__com__.Title
 36    @Title.setter
 37    def Title(self,value):
 38        self.__com__.Title=value
 39    def Update(self):
 40        self.__com__.Update
 41    def Close(self):
 42        self.__com__.Close
 43    @property
 44    def Lists(self):
 45        return pylistcollection(self.__com__.Lists)
 46
 47class PyList(object):
 48    def __init__(self,com):
 49        self.__com__=com
 50    @property
 51    def Title(self):
 52        return self.__com__.Title
 53    @Title.setter
 54    def Title(self,value):
 55        self.__com__.Title=value
 56    @property
 57    def AllowContentTypes(self):
 58        return self.__com__.AllowContentTypes
 59    @property
 60    def AllowDeletion(self):
 61        return self.__com__.AllowDeletion
 62    @property
 63    def CanReceiveEmail(self):
 64        return self.__com__.CanReceiveEmail
 65    @property
 66    def Created(self):
 67        return self.__com__.Created
 68    @property
 69    def Items(self):
 70        return pylistitemcollection(self.__com__.GetAllItems)
 71    def update(self):
 72        self.__com__.Update
 73
 74class PyListCollection(object):
 75    def __init__(self,com):
 76        self.__com__=com
 77    @property
 78    def Count(self):
 79        return self.__com__.Count
 80    def getList(self,index=-1,name=''):
 81        if index!=-1:
 82            return pylist(self.__com__.GetListByIndex(index))
 83        if name!='':
 84            return pylist(self.__com__.GetListByName(name))
 85
 86class PyListItem(object):
 87    def __init__(self,com):
 88        self.__com__=com
 89    @property
 90    def Title(self):
 91        return self.__com__.Title
 92    def Update(self):
 93        self.__com__.Update
 94
 95class PyListItemCollection(object):
 96    def __init__(self,com):
 97        self.__com__=com
 98    @property
 99    def Count(self):
100        return self.__com__.Count
101    def getItem(self,index=-1):
102        return  pylistitem(self.__com__.GetItemByIndex(index))
103    
104
105        

 

最后是python的简单测试代码:

>>site=PySite('http://sun/')

>>web=site.OpenWeb('/test')

>>print  web.Title

>>'Moss'

>>web.Title='MyMoss'

>>web.Update()

>>print web.Title

>>'MyMoss'

这是一时无聊写下的代码,本身也没有什么实用价值。

不过还是希望大虾们指点一下,这样写会有什么副作用没有?

谢谢.

转载于:https://www.cnblogs.com/flysun/archive/2009/04/21/1440176.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值