在一个record center的Drop Off Library中,编辑一个文档的属性的界面,与其他的文档库有所不同,其中的“Save”按钮变成了“Submit”:
而且点击Submit之后的行为也不一样了,普通的文档库直接跳转回文档库,但是Drop Off Library,执行了一个LongOperation的操作:
然后转向了一个页面:
这个页面其实是通知用户,这个文档会根据管理员设定的策略,被转移到其他的文档库中。具体如何配置record center和文档传送的规则(Route Rule)请参考微软官方文档。这里想说的是,这个submit的过程,SharePoint到底做了什么?
我们知道,SharePoint的属性编辑表单(EditForm)与一般的application page不同,并不是在layouts目录下,而是保存在数据库中的,在用户请求的时候,通过ListFormWebPart来展示。如果使用SharePoint desiger打开这个页面,就可以看到ListFromWebPart:
在reflector中,找到ListFormWebPart的定义,可以发现在它的CreateChildContorls()方法中,使用了Template:
常用的模板都是在15\Template\CONTROLTEMPLATES文件夹下的“DefaultTemplate.ascx”这个用户控件中定义的,但是Drop Off Library的模板并没有定义在这里,而是在另外一个用户控件中,这个控件的名字是“DropOffZoneRoutingForm.ascx”,打开这个控件,可以找到“Submit”按钮的定义,可以看到,这个按钮是一个名字叫“RouteFileButton”的Control:
这样就找到了这个“Submit”按钮的对象,这个RouteFileButton是在Microsoft.Office.RecordsManagement.Controls命名空间下的一个button,这个命名空间在“Microsoft.Office
.Policy.dll”中。同样使用reflector打开它,可以看到如下方法,其中的“SaveItem()”方法就是我们要找的方法:
具体的代码可以使用reflector查看,这里简单说一下这个SaveItem()做的事情:
首先根据当前站点,初始化一个RoutingWeb,这个对象用来处理文档的传送(Routing),并且判断当前的站点是否启用了routing:
EcmDocumentRoutingWeb routingWeb = new EcmDocumentRoutingWeb(SPContext.Current.Web); ... ... if(routingWeb.IsRoutingEnabled)
... ... SPListItem routeItem = SPContext.Current.ListItem; ...... SPFile file = routeItem.File; ... ... if (file.CheckOutType != SPFile.SPCheckOutType.None) { file.CheckIn(string.Empty); }如果文档需要审批,当前用户又有审批的权限,就先审批文档,
... ... if (enableModeration && routeItem.DoesUserHavePermissions(SPBasePermissions.ApproveItems)) { file.Approve(string.Empty); } ... ...
然后启动一个longoperation的操作,来执行文档的流转:
using (SPLongOperation operation = new SPLongOperation(this.Page)) { ... ... routeSucceeded = web2.Router.RouteFileToFinalLocationNowAsSystem(itemToRoute, web, currentUser, string.Empty, out routeDestination, out externalRouteResult); ... ... }
这个方法的返回值是一个bool类型的值,如果是true,说明这个文档被传送的其他的文档库了,如果是false,说明这个文档没有被传送到其他的文档库。
这个方法还有两个out 参数,routedDestination是指文档的URL,就是传送完毕之后,页面上显示的URL,通过这个URL可以直接找到文档(即使没有传送到其他的文档库,也是有这个URL的);另一个参数是externalRouterProperties,这个参数包含了传送的结果信息,其中的OfficialFileResult包含了很多有用的信息,
以上就是点击“Submit”按钮之后SharePoint执行的一些操作,记录下来备忘。