SharePoint 客户端对象模型 (一) ECMA Script

2019-08-06 08:59栏目:WRB前端

所谓的客户端对象模型正是调用了幕后的WCF服务来提供数据,为了缓慢解决数据的访谈量数据包使用JSON,大家还是可以见到指标模型的准备也踏向了无数对此缓慢解决数据访谈量的勘查。技能上尚未什么新意,你要愿意,在SharePoint二零零六之中也足以兑现类似的成效,当然在动用上利于了我们广大

图片 1 
三种采纳客户端模型的.NET托管、ECMA脚本,SilverLightClient.

图片 2

正文批注说如何使用.NET托管代码来做客SharePoint对象模型。

ECMAScript Client OM需求小心的多少个点

  • ECMAScript仅能够在SharePoint站点里面使用,无法在另外的Asp.NET站点里选用ECMAScript来拜会SharePoint站点能源,也不能够跨SharePoint站点访问财富;
  • JQuery和ECMAScript使用起来不会有抵触;
  • 为了安全的革新内容,在选拔ECMAScript的画面里增添<SharePoint:FormDigest runat="server" />
  • 在随后你将拜望到的代码里为了缓慢解决加载的数据量,能够钦定须求加载的源委,举例client.Context.load(this.web,'Title','Id','Created'), 这里的属性值名称使用和CAML同样的系列,对大小写敏感;
  • 为保障您的代码推行在SP.JS加载完事后再被调用,能够使用ExecuteOrDelayUntilScriptLoaded(myjsFunction, “sp.js”)。

大家看看SharePoint OM和客户端OM的贰个简易的协作关系:

服务器端OM 客户端OM
SPContext ClientContext
SPSite Site
SPWeb Web
SPList List
SPListItem ListItem
SPField Field

探访最后会显现的效率,下图是从头安顿的效用,首要设计列表的成立、查询以及处理,其余也论及上传文件的Case,后续里若是有根本的也会逐步加进去。

图片 3

里面包车型大巴链接会调用UI方面的Javascript接口创立SharePoint贰零零玖作风的弹出窗口,弹出窗口的后台页面位于SitePage文书档案库内,请小心那个独有适用于开辟的页面是WebPart page,纵然不是张开的时候会报错误:“The Ribbon Tab with id: "Ribbon.Read" has not been made available for this page or does not exist”。

(注意,此Page在之后都不会被用到,留在这里仅为了解说Ribbon用)

创造列表:

先是,通过Designer,到场以下五个Script链接:

<SharePoint:ScriptLink Name="SP.js" runat="server" OnDemand="true" Localizable="false" />
<SharePoint:ScriptLink Name="SP.debug.js" runat="server" OnDemand="true" Localizable="false" />

ECMAScriptOM和.NET Managed ClientOM(随后会讲到)不谋而合,但也会有几点需求注意的:

  1. 在ClientContext里面不可能运用劳务器端URAV4Ls;
  2. 不支持LINQ;
  3. 实为上ECMAScript OM是异步的

代码非常的简短易懂,里面有个风趣的东西SP.UI.Notify.addNotification,通过那个类能够在调用的镜头里显示提示音信,极其的SharePoint。

图片 4

示范结果如下:

在文本框里输入列表名字后,点击"Create List”开关,生成列表后会在右上角提醒“List test1 created”,本例中利用annoucement做为列表类型。

图片 5

源代码如下:

复制代码 代码如下:

<script type="text/javascript">
var messageId;
function createList(listName){
var clientContext = new SP.ClientContext();
var oWebSite = clientContext.get_web();
var listCreationInfo = new SP.ListCreationInformation();
listCreationInfo.set_title(listName);
listCreationInfo.set_templateType(SP.ListTemplateType.announcements);
listCreationInfo.set_quickLaunchOption(SP.QuickLaunchOptions.on);
var oList = oWebSite.get_lists().add(listCreationInfo);
clientContext.load(oList);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
//Remove the 'creating' event notification
if(messageId != null)
{
SP.UI.Notify.removeNotification(messageId);
}
//Add 'created' notification as non sticky
messageId = SP.UI.Notify.addNotification("List <b>" oList.get_title() "</b> created...", false, "", null);
}

function onQueryFailed(sender, args) {
//Remove the 'creating' event notification
if(messageId != null)
{
SP.UI.Notify.removeNotification(messageId);
}
//Shown in case of error on the JS OM call
messageId = SP.UI.Notify.addNotification("Operation was cancelled...", false, "", null);
}

</script>

得到具备列表:

无差异于,先看一下意义,点击“Get All List”开关,会将日前站点下的保有列表都读收取来并安装了响应的超链接属性,点击“Hide List”开关则将之掩盖(实际上正是个Div)

图片 6

代码特其余直白,只说惠氏(WYETH)(Beingmate)个点,getEnumerator()以及moveNexst(), get_current()等JavaScript函数的采纳为遍历集结提供了很好的格局。

源代码:

复制代码 代码如下:

function getLists(){
var clientContext = new SP.ClientContext();
var oWebSite = clientContext.get_web();
listCollection = oWebSite.get_lists();
clientContext.load(listCollection);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onGetListsSucceeded), Function.createDelegate(this, this.onGetListsFailed));
}
function onGetListsSucceeded(){
var str = "";
var listsEnumerator = listCollection.getEnumerator();
while(listsEnumerator.moveNext()){
var objList = listsEnumerator.get_current();
str = "<a href='" "" objList.get_parentWebUrl()

  • objList.get_defaultViewUrl() "'>" objList.get_title() "</a>" "<br/>";
    }
    document.getElementById("lists").innerHTML = str;
    }
    function onGetListsFailed(sender, args){
    alert('Request failed. ' args.get_message() 'n' args.get_stackTrace());
    }

CAML查询:

这一个中提供了二种格局查询,一个按DueDate,一种按Title,当然作用能够陈设的更为便利用户采纳些,德姆o里就不做过多渲染。点击Search就可以张开多少的查询,有一点点小开采,若是采取<asp:calendar/>控件的时候选取好日期会导致页面postback,SharePoint里面足足有三种缓和方案:

  1. 单独在某些页面里面放入calendar控件,然后增多以下代码:

    <input type="text" id="txtDate" name="txtDate" />

    <button value="lookup" onclick="document.all['txtDate'].value

    window.showModalDialog( 'Calendar.aspx' );" >

  2. 使用SharePoint Calendar控件<SharePoint:DateTimeControl runat=server id="DateTimeControl1" DateOnly="True"></SharePoint:DateTimeControl>

图片 7

图片 8

做了一段对控件突显的决定,选取Date则产出输入Date的控件,选取Title则出现输入Title的控件,本来想用JQuery的办法,后来弹指间没想起来JQuery的Selector写法,半土不洋的用了下面包车型客车主意结合调控:

复制代码 代码如下:

<script type="text/javascript">
function changeQueryMethod(){
var method = $("select[id='selectQueryMethod']").val();
if(method == 'Title'){
document.getElementById('querybytitle').style.display = "inline";
document.getElementById('querybyDate').style.display = "none";
}
else{
document.getElementById('querybytitle').style.display = "none";
document.getElementById('querybyDate').style.display = "inline";
}
}
</script>

有关CAML查询的细节自个儿也不做过多表明,假诺风乐趣能够参见拙文(

内需专注的知识是:

里头使用了对田野同志的查询,注意相关API的调用;
ClientContext里面临若干个结果集举办操作,但须求调用Load对两样结果集实行加载:clientContext.load(田野Collection);clientContext.load(listItemCollection);
假定有要求读取的字段值须要在CAML查询XML里面展现表明,否则不会回来到结果集里,那也是由于对质量的虚拟

复制代码 代码如下:

function search(){
var clientContext = new SP.ClientContext();
var oWebSite = clientContext.get_web();
var list = oWebSite.get_lists().getByTitle("Tasks");
fieldCollection = list.get_fields();
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml( "<View><Query><Where><Gt>"
"<FieldRef Name='DueDate' />"
"<Value Type='DateTime'>2008-01-1T00:00:00Z</Value>"
"</Gt></Where></Query><ViewFields>"
"<FieldRef Name="Title" /><FieldRef Name="Body" />"

  • "<FieldRef Name="DueDate" />"
    "</ViewFields></View>");
    listItemCollection = list.getItems(camlQuery);
    clientContext.load(fieldCollection);
    clientContext.load(listItemCollection);
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onSearchListSucceeded), Function.createDelegate(this, this.onSearchListFailed));
    }
    function onSearchListSucceeded(){
    var str = "";
    var listItemEnumerator = listItemCollection.getEnumerator();
    var fieldsEnumerator = fieldCollection.getEnumerator();
    while(listItemEnumerator.moveNext()){
    var oListItem = listItemEnumerator.get_current();
    str = "Item " oListItem.get_id() ":"
    while(fieldsEnumerator.moveNext()){
    var oField = fieldsEnumerator.get_current();
    str = oField.get_staticName() "<br/>";
    }
    str = "<br/>";
    }
    document.getElementById("lists").innerHTML = str;
    }

function onSearchListFailed(sender, args){
alert('Request failed. ' args.get_message() 'n' args.get_stackTrace());
}

操作文件:

可惜的是在ECMAScript里面不大概上传文件,固然有SP.File对象,但更加的多的是对获取回来的SP.File对象开始展览操作。

你可能感兴趣的文章:

  • 在Javascript里拜见SharePoint列表数据的贯彻格局
  • 动用jQuery完结dropdownlist的联合浮动成效(sharepoint 二零零五)
  • 涸泽而渔asp.net Sharepoint无法连接发表自定义字符串管理程序,无法拓展输出缓存管理的不二秘技
  • ASP.NET、SharePoint中另存文件的长文件名被截断的原故及化解办法
  • 删除 Windows SharePoint Services的三种办法
  • sharepoint 2008本子图像和文字安装教程

版权声明:本文由威尼斯人app发布于WRB前端,转载请注明出处:SharePoint 客户端对象模型 (一) ECMA Script