Fork me on GitHub
摘要: 这几个月一直在帮客户改需求,部署。我已经心力憔悴,经过一段时间的摸索,我对用PowerShell实现自动化部署也有了一些心得,比如说利用PowerShell导出导入AD中的User。在基于SharePoint平台开发时,利用AD来进行人员的管理,一般会建组织单元(OrganizationalUnit)来对用户进行管理。当最终部署到客户的服务器上时,怎样把本地AD中的用户数据同步到服务器上呢,要知道如果手动输入人员是一件麻烦的事。幸运的事,PowerShell可以帮我们解决这个麻烦的问题。导出AD Users(Export-Csv)首先导出本地相应OU中的User Objectparam([st 阅读全文
posted @ 2013-10-07 22:56 木宛城主 阅读(5799) 评论(5) 推荐(3) 编辑
摘要: 客户需要在OA中实现每日动态功能,能够记录每一位员工的每天的工作动态,我很快想到了时间轴,因为时间轴能很直观的现实员工每一刻的动态。就像Facebook的Timeline效果(点击查看)。尝试着搜索这个效果,园友的这篇博文正好给我启发,接下来就去实现吧。成果演示最终的效果如下所示:点击每个员工的姓名,即可进入他当天的工作动态(只能看),若点击自己的名字(既能看又能发送/编辑/删除动态),如下所示:动态的详细页,如下所示:点击时间轴,即可新增动态,如下所示:编辑效果,鼠标移至内容区域,现实黄色提醒,如下所示:单击即可显示编辑界面,如下所示:移开鼠标,即可自动保存。当然如果想把一条当太删掉,点击右 阅读全文
posted @ 2013-09-25 19:47 木宛城主 阅读(2954) 评论(5) 推荐(6) 编辑
摘要: 在SharePoint中,相对于Linq to SharePoint而言,CAML是轻量化的。当然缺点也是显而易见的,"Hard Code"有时会让你抓狂。在实际场景中,经常会根据某些并不复杂的要求从List中取出相关的ListItemCollection,所以用Linq to SharePoint这把牛刀就显得笨拙了,往往用CAML会显得便捷多了。所以本篇博客将对CAML查询进行快速指导。 对于List而言,我们对常见的Column进行讲解,常见的Column Type有Single Line Of Text、Multiple Lines of Text、Number、B 阅读全文
posted @ 2013-09-01 16:36 木宛城主 阅读(1710) 评论(0) 推荐(2) 编辑
摘要: 在SharePoint中,我们经常要对List进行操作,比如要从List中取出相应的ListItem,利用CAML是个好办法。在没了解CAML之前,我是这样取数据的:MyList.Items.Cast().ToList().Where(Condition).Select(Fields);原谅我当初如此放荡不羁的写法吧。好了,现在进入CAML实战中,首先CAML (Collaborative Application Markup Language)基于XML的一种语言。所以你写CAML时一定要注意Tag是否闭合,另外CAML也是区分大小写的。正巧在看蝙蝠侠,可以将SPList对象可以看成是银行, 阅读全文
posted @ 2013-08-12 15:13 木宛城主 阅读(3041) 评论(5) 推荐(2) 编辑
摘要: 接上篇我们知道,HttpRuntime中会对每一个Request创建一个HttpApplication对象(HttpApplicationFactory从一个HttpApplication池来拿)。对于Global.asax,当创建第一个HttpApplication对象才会执行的Application_Start方法。然后每一个HttpApplication对象会创建HttpModule对象,然后只执行一次Init方法。但在实际场景中,HttpRuntime会根据请求次数创建多个HttpApplication对象,所以每一个对象都会执行一遍Init方法,那怎么实现只执行一次Init方法来实现 阅读全文
posted @ 2013-08-11 00:49 木宛城主 阅读(1194) 评论(5) 推荐(2) 编辑
摘要: 在SharePoint开发时,你会遇到这样一个问题,Global.asax去哪儿?怎样添加一个Global.asax?怎样在Application_Start这个事件处理程序里设置初始化?似乎在Visual Studio中无法像纯ASP.NET开发那样轻松添加一个Global.asax。当然找到这个Global.asax也不难,打开IIS,右键浏览对应网站,在网站根目录下你可以找到Global.asax。比如我的网站部署在C:\inetpub\wwwroot\wss\VirtualDirectories\4909路径下。我不推荐去修改这个Global文件,因为这似乎不是最佳实践。在ShareP 阅读全文
posted @ 2013-08-10 12:51 木宛城主 阅读(2030) 评论(1) 推荐(1) 编辑
摘要: 基于SharePoint平台开发时,人员选择器使用频率是非常高的,但是原生的人员选择器使用太麻烦,而且非常笨拙,非常不友好,特别是对呆在政府部门的老爷们,要让他们手动输入人员,简直就是痴心妄想。总之一句话,越简单越好。 为了让客户满意,必须要对人员选择器进行改造,原生的PeopleEditor彻底抛弃。只能另辟蹊径,寻找适合的JQuery插件,创建新的人员选择器,分析了一下需求,可以归纳新的人员选择器必须支持如下情况:支持人员的多选,比如像会议、通知需要对多人进行发送,当然也要支持删除。对于单选的人员选择器,可以删除选中的人员。不管单选还是多选,支持Jquey AutoComplete那样索. 阅读全文
posted @ 2013-07-29 00:33 木宛城主 阅读(6370) 评论(7) 推荐(6) 编辑
摘要: 我一直以为只有在Document Library里面的File才会支持在线编辑。直到今天早上我才发现用IE打开List里面的Attachments也是支持在线编辑的,但前提是必须是IE浏览器。目前正在开发的项目,我开始设计时是把所有的审批信息存放在List中,上传的文档以Attachments形式保存于List中,昨天客户来公司,我演示的时候,用Chrome打开附件,直接下载了(以后建议用IE),客户需要在线编辑功能,还狠狠的批了我们一顿,附件不能在线编辑,那我审核个毛线。(其实是可以的,用IE就行。)结束后,我也没多想(经验不足)直接对代码进行该了,将FileUpload上传的文件保存到一个 阅读全文
posted @ 2013-07-27 13:02 木宛城主 阅读(2929) 评论(1) 推荐(3) 编辑
摘要: 起因今天想进入SharePoint 2013 Central Administration创建一个WebApplication,尽然发生了错误:The password supplied with the username Domain\UserName was not correct. Verify that it was entered correctly and try again具体如下图:中文意思是Password不正确,验证之后再尝试,想了一下,确实之前AD中设置了密码过期了,所以更新了Farm(spDevFarmAcc)的密码,难道是这个原因?解惑确实是由于更新了密码导致了验证不 阅读全文
posted @ 2013-06-26 10:10 木宛城主 阅读(1205) 评论(0) 推荐(1) 编辑
摘要: SharePoint的文档库非常方便,可以管理日常的文档,更强大的是可以创建文件夹来分类,通常在UI界面上是非常简单了,点击文件夹,Create a Folder即可。但是,怎样手动去创建文件夹呢,怎样在文件夹中创建子文件夹。项目分析举个栗子,我需要上传文档到文档库,希望把该文件上传到以年、月、日、上传人命名的子文件夹中,如:2013年-->5月-->11日-->陈小春,如下图所示这样点击2013年,进入当前月子文件夹点击当前月,进入以上传人命名的子文件夹点击上传人(陈小春),即可看到我们上传的文档代码实现首先我们完成对参数的设置,初始化参数 //获取年度参数 ... 阅读全文
posted @ 2013-06-11 18:21 木宛城主 阅读(2998) 评论(4) 推荐(0) 编辑
摘要: 平常开发时,或多或少都需要和Word打交道,特变是编辑、导出Word。利用DocX,开源的读写Word组件,可以快速帮助我们进行对Word的操作。DocX官方网站:http://docx.codeplex.com/DocX主要功能在文档中(Word)插入,删除或者替换文本,支持所有的标准文本格式,如字体{Family,Size,Color},出体,斜体、下划线、高亮等。提供段落属性,你可以设置其对其方向,如从左到右,居中对齐等。DocX同样支持对图片的操作、超链接、表格、页首、页眉等。最重要的一点DocX支持自定义文档属性(Custom Properties)最近要对一个SharePoint项 阅读全文
posted @ 2013-06-11 09:44 木宛城主 阅读(2607) 评论(6) 推荐(2) 编辑
摘要: 写了个Demo,利用Microsoft.VisualBasic这个程序集中的TextFieldParser解析器解析CSV格式的文件,然后将解析的数据插入到相关表,这样的好处是不用去用令人头疼的ODBC去操作CSV格式文件,如之前是这样去操作:利用ODBC去操作string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + this.dirCSV.Trim() + ";Extensions=asc,csv,tab,txt;Persist Security Info=Fals 阅读全文
posted @ 2013-06-04 15:31 木宛城主 阅读(1349) 评论(0) 推荐(0) 编辑
摘要: 操作系统要求Windows Server 2012安装SharePoint前准备当安装了Windows Server 2012后,你需要做如下事情:给你的计算机取一个新的名字,你可以在控制面板-->系统和安全-->计算机名、域和工作组设置-->更改设置完成配置AD(我的域名:Medusa)安装SQL Server之前建议更新一下Windows安装SQL Server开始安装SharePoint这儿我们用Autospinstaller和AutoSpSourceBuilder这两个开源的工具包来安装配置我们的SharePoint Server 2013,详细步骤如下:a) 下载最 阅读全文
posted @ 2013-04-16 14:05 木宛城主 阅读(2272) 评论(3) 推荐(3) 编辑
摘要: 虽然开发中很少接触多线程,但你必须承认你离不开他。接着上篇博客(ASP.NET那点不为人知的事(三)),基本可以实现一个Mini版的服务器,但也有不足:倘若客户端飞快地连接,服务端很快被压垮。幸好,Socket类实现了.NET框架的异步调用模式,使用这个模式,利用线程池就可以让服务器更好的服务于到来的请求。重构后的版本:class Program { private const int ConnectionQueueLength = 4; private const int ListenPort = 1234; private const int... 阅读全文
posted @ 2013-04-02 02:17 木宛城主 阅读(1068) 评论(1) 推荐(0) 编辑
摘要: 有了以下的知识:ASP.NET那点不为人知的事(一)ASP.NET那点不为人知的事(二)想必开发一个小型服务器以不是问题了,功能补复杂,能够响应客户端浏览器的请求,并根据请求文件的类型返回响应的信息,如能处理静态页面、图片、样式、脚本、动态页面等。回顾由于客户端和服务端的通信是通过Socket通信,且它们通信的“语言”是基于Http1.1协议。根据这个线索,我们完全可以自己开发服务器软件,暂且叫他Melodies Server,当然这是一个很简单的样例,和真正的服务器还是有差距的,好,我们进入正题,首先需要了解以下几个知识点:客户端和服务端是由Socket进行通信,在服务器端需要有监听请求的套 阅读全文
posted @ 2013-03-23 01:09 木宛城主 阅读(1268) 评论(1) 推荐(1) 编辑
摘要: 服务层的定义Domain Model的设计与实现IRepository的设计与实现Document Message模式和Request-Response模式的探索DataContract的设计与实现Contracts的设计与实现Service的设计与实现Idempotent模式的探索ClientProxy的设计与实现服务门面Facade的设计与实现客户端访问什么是服务层服务层位于表示层和业务层之间,他提供一个接口来定义应用程序的边界以及可供客户端使用的操作,在服务层向客户端描绘的门面后,它将业务逻辑、验证和工作流封装起来并协调业务实体的持久化和和检索工作——《ASP.NET设计模式》接下来,将 阅读全文
posted @ 2012-12-02 03:10 木宛城主 阅读(1977) 评论(1) 推荐(6) 编辑
摘要: 什么是Query Object模式Query Object的架构设计Query Object在服务层的应用测试Query Object模式Query Object:可以在领域服务层构造查询然后传给资源库使用,并使用某种查询翻译器将对象查询(Query)翻译成底层数据库持久化框架可以理解的查询(即翻译成一条Sql 语句)。而Query Object即可以理解为表示数据库查询的对象。且可以构造任意查询,然后传给Repository。Query Object模式的主要好处是它完全将底层的数据库查询语言抽象出来。如果没有某种查询机制,我们的持久化层可能会这样定义方法: public interf... 阅读全文
posted @ 2012-11-14 22:59 木宛城主 阅读(2997) 评论(10) 推荐(6) 编辑
摘要: 什么是Unit Of Work模式Unit Of Work(工作单元)模式用来维护一个由已经被业务事物修改(增加、删除或更新)的业务对象组成的列表。Unit Of Work模式负责协调这些修改的持久化工作以及所有标记的并发问题。在数据访问层中采用Unit Of Work模式带来的好处是能够确保数据完整性。如果在持久化一系列业务对象(他们属于同一个事物)的过程中出现问题,那么应该将所有的修改回滚,以确保数据始终处于有效状态。为了演示Unit Of Work模式,使用一个简单的银行领域对两个账号之间的转账建模。下图给出了服务层(AccountService)与使用了Unit Of Work模式(以 阅读全文
posted @ 2012-10-29 23:57 木宛城主 阅读(8560) 评论(14) 推荐(10) 编辑
摘要: 目录What Is MVPDomain ModelStubRepositotyIView & PresenterViewIoc容器StructureMap开篇忙碌的9月,工作终于落定,新公司里的框架是MVP+Linq,对于MVP虽然不熟,但有MVC的基础,花了两天时间研究了MVP,故作此博文,留作参考。Model-View-Presenter(模型-视图-呈现器,MVP)模式的重点是让呈现器控制整个表示层的逻辑流。MVP模式由如下三个不同部分组成:模型表示视图显示或者修改的业务数据,包括业务逻辑和领域相关的逻辑。视图通过呈现器显示模型数据,并将用户输入委托给呈现器。呈现器被视图调用来显 阅读全文
posted @ 2012-10-21 05:18 木宛城主 阅读(1357) 评论(2) 推荐(1) 编辑
摘要: 生产者消费者例如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。我们举一个寄信的例子,假设你要寄一封平信,大致过程如下:你把信写好——相当于生产者制造数据你把信放入邮筒——相当于生产者把数据放入缓冲区邮递员把信从邮筒取出——相当于消费者把数据取出缓冲区邮递员把信拿去邮局做相应的处理——相当于消费者处理数据生产者消费者模式可以用来处理并发问题的。从寄信的例子来看。如果没有邮筒,你得拿着信傻站在路口等邮递员过来收(相当于生产者阻塞);又或者邮递员得挨家挨户问,谁要寄 阅读全文
posted @ 2012-09-12 11:27 木宛城主 阅读(642) 评论(0) 推荐(0) 编辑
multifunction lasers
访问人数