Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304416
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站网址导航为大家提供关于网站网页设计设计相关的的教程知识。

  • 本篇文章具体介绍如下
所谓的客户端对象模型就是调用了背后的WCF服务来提供数据,为了减轻数据的访问量数据包使用JSON,我们还可以看到对象模型的设计也加入了诸多对于减轻数据访问量的考量。技术上没有什么新意,你要愿意,在SharePoint2007里面也可以实现类似的功能,当然在使用上方便了我们不少


三种使用客户端模型的.NET托管、ECMA脚本,SilverLightClient.
aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

本文讲阐述如何使用.NET托管具体代码来访问SharePoint对象模型。
aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ECMAScript Client OM需要注意的几个点aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

  • 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的一个简单的匹配关系:aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

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

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

看看最后会呈现的效果,下图是初步计划的功能,主要设计列表的创建、查询以及管理,另外也涉及上传文件的Case,后续里如果有重要的也会逐步加进来。aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

里面的链接会调用UI方面的Javascript接口创建SharePoint2010风格的弹出窗口,弹出窗口的后台页面位于SitePage文档库内,请注意这个仅仅适用于打开的页面是WebPart page,如果不是打开的时候会报错误:“The Ribbon Tab with id: "Ribbon.Read" has not been made available for this page or does not exist”。aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

(注意,此Page在之后都不会被用到,留在这里仅为了解释Ribbon用)aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

创建列表:aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

首先,通过Designer,加入以下两个Script链接:aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

<SharePoint:ScriptLink Name="SP.js" runat="server" OnDemand="true" Localizable="false" />
<SharePoint:ScriptLink Name="SP.debug.js" runat="server" OnDemand="true" Localizable="false" /> aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ECMAScriptOM和.NET Managed ClientOM(随后会讲到)异曲同工,但也有几点需要注意的:aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

  1. 在ClientContext里面不能使用服务器端URLs;
  2. 不支持LINQ;
  3. 本质上ECMAScript OM是异步的

具体代码非常的简单易懂,里面有个好玩的东西SP.UI.Notify.addNotification,通过这个类可以在调用的画面里显示提示消息,非常的SharePoint。aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

演示结果如下:aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

在文本框里输入列表名字后,点击"Create List”按钮,生成列表后会在右上角提示“List test1 created”,本例中使用annoucement做为列表类型。aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

源具体代码如下:
aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

具体代码如下:
<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>

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

获取所有列表:aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

同样,先看一下效果,点击“Get All List”按钮,会将当前站点下的所有列表都读取出来并设置了响应的超链接属性,点击“hide List”按钮则将之隐藏(实际上就是个Div)aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

具体代码非常的直接,只说明一个点,getEnumerator()以及moveNexst(), get_current()等JavaScript函数的使用为遍历集合提供了很好的方法。aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

源具体代码:
aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

具体代码如下:
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='" "http://localhost" 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());
}

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

CAML查询:aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

这里面提供了两种方式查询,一个按DueDate,一种按Title,当然功能可以设计的更加有利于用户使用些,Demo里就不做过多渲染。点击Search就可以进行数据的查询,有一点小发现,如果使用<asp:calendar/>控件的时候选择好日期会导致页面postback,SharePoint里面至少有两种解决方案:aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

  1. 单独在某个页面里面放入calendar控件,然后添加以下具体代码:

    <input type="text" id="txtDate" name="txtDate" />
    <button value="lookup" onclick="document.all['txtDate'].value =
    window.showModalDialog( 'Calendar.aspx' );" >aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

  2. 使用SharePoint Calendar控件<SharePoint:DateTimeControl runat=server id="DateTimeControl1" DateOnly="True"></SharePoint:DateTimeControl>aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

做了一段对控件显示的控制,选择Date则出现输入Date的控件,选择Title则出现输入Title的控件,本来想用JQuery的方法,后来一下没想起来JQuery的Selector写法,半土不洋的用了下面的方法结合控制:
aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

具体代码如下:
<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查询的细节本身也不做过多说明,如果有兴趣可以参见拙文(http://www.cnblogs.com/johnsonwong/archive/2011/02/27/1966008.html),这是一篇针对2007版本的CAML,在2010里有了很多增强,譬如跨列表Joint查询等,随后会发布相应2010的版本。

需要注意的知识是:

里面使用了对field的查询,注意相关API的调用;
ClientContext里面对若干个结果集进行操作,但需要调用Load对不同结果集进行加载:clientContext.load(fieldCollection);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对象进行操作。

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

js实时监听文本框状态的方法-javascript技巧aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

aioAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

好了关于网站网页设计设计相关的这篇文章就给大家介绍到这里不明白的地方给本站留言。声明,本站内容来源于互联网,如果侵犯了你的权益请联系本站删除。,

标签:

分享到:

  admin

注册时间:

网站:0 个   APP:3 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304416

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市