blogSite

我是谁?我在哪儿?我在干什么?

View project on GitHub

SharePoint 常用写法


前端写法

  1. 查询
     var camlqueryStr = "";
     function FindData() {
         var siteUrl = _spPageContextInfo.webServerRelativeUrl;
         var clientContext = new SP.ClientContext(siteUrl);
         // 列表id(类似于表的id,不是表内容的id)
         var ListId = GetQueryString("ListId"); // 从url链接中获取列表id
         this.CurrentList = clientContext.get_web().get_lists().getById(ListId);
         // this.CurrentList = clientContext.get_web().get_lists().getByTitle("列表名称"); // 方法二 例:产品新规明细
         // 根据具体的需要在这个地方写查询条件、排序等
         camlqueryStr = "<View><Query /><ViewFields /><QueryOptions /></View>";
         var SSDeilscamlQuery = new SP.CamlQuery();
         SSDeilscamlQuery.set_viewXml(camlqueryStr);
         this.Currentitems = this.CurrentList.getItems(SSDeilscamlQuery);
         clientContext.load(this.Currentitems);
         clientContext.executeQueryAsync(
             Function.createDelegate(this, this.FindDataSucceeded),
             Function.createDelegate(this, this.FindDataFailed)
         );
     }
    
     function FindDataSucceeded()
     {
         // 成功
         var CurrentitemsEnumerator = this.Currentitems.getEnumerator();
         while (CurrentitemsEnumerator.moveNext()) {
             var currentItem = CurrentitemsEnumerator.get_current();
    
             // 获取字段值
             var temp = currentItem.get_item('字段英文名称与caml中的对应');
         }
     }
    
     function FindDataFailed()
     {
         // 失败
     }
    
  2. 新增/修改
     var listItem; // 列表
     var ctx; // 客户端上下文
     function UpdateData(listItemID) {
         // 遮罩层
         // ResetWarningDIV("warningsss", true, "<img src='https://olympus.sharepoint.cn/sites/GSPWF/Image/firstLoad.gif'>");
    
         listItem = null;
         // ctx(客户端上下文)赋值,方法1
         // var siteUrl = _spPageContextInfo.webServerRelativeUrl; // 当前url:"/sites/SSBGWFTest/OCSM"
         // ctx = new SP.ClientContext(siteUrl);
         // ctx(客户端上下文)赋值,方法2
         ctx = SP.ClientContext.get_current();
    
         var web = ctx.get_web();
         list = web.get_lists().getByTitle("列表名称"); // 例:产品新规明细
         ctx.load(list);
    
         var itemCreateInfo = new SP.ListItemCreationInformation();
    
         // 如果listItemID没有值就新增,有值就更新
         if (listItemID != "" && listItemID != null) {
             // 更新
             listItem = list.getItemById(listItemID);
         }
         else {
             // 新增
             listItem = list.addItem(itemCreateInfo);
             listItem.set_item('key1', value1);
             listItem.set_item('key2', value2);
         }
            
         listItem.set_item('key3', value3);
         listItem.update();
         ctx.load(listItem);
         ctx.executeQueryAsync(
             Function.createDelegate(this, this.SucceededCallback),
             Function.createDelegate(this, this.FailedCallback)
         );
     }
    
     function SucceededCallback()
     {
         // 成功    
     }
     function FailedCallback()
     {
         // 失败    
     }
    
  3. 删除
     function DelDate() 
     {
         var siteUrl = _spPageContextInfo.webServerRelativeUrl;
         this.Context = new SP.ClientContext(siteUrl);
         this.delList = this.Context.get_web().get_lists().getByTitle("列表名称"); // 例: 揭示板申请
         this.ApplyItem = delList.getItemById(Number(this.DelID)); // 参数为要删除数据的id
         this.ApplyItem.recycle(); // 放入回收站
         Context.executeQueryAsync(
             Function.createDelegate(this, this.DelSucceeded),
             Function.createDelegate(this, this.DelFailed)
         );
     }
    
     function DelSucceeded()
     {
         // 成功
     }
    
     function DelFailed()
     {
         // 失败
     }
    
  4. 模态窗口
    • 弹出
        // 弹出框共通
        function OpenFormPage(url, callback, ismode, addsiteurl, openblank, dlgtitle) {
            if (ismode) {
                var options = {
                    url: (addsiteurl ? _spPageContextInfo.siteAbsoluteUrl : _spPageContextInfo.webAbsoluteUrl) + url,
                    allowMaximize: false,
                    showClose: true,
                    dialogReturnValueCallback: callback
                };
                if (dlgtitle != null && dlgtitle != undefined && dlgtitle != "") {
                    options.title = dlgtitle;
                }
                try {
                    SP.UI.ModalDialog.showModalDialog(options);
                }
                catch (error) {
                    SP.SOD.execute('sp.ui.dialog.js', 'SP.UI.ModalDialog.showModalDialog', options);
                }
            }
            else {
                if (url.indexOf("Source") >= 0 || url.indexOf("source") >= 0) {
                    url = _spPageContextInfo.webAbsoluteUrl + url;
                }
                else if (window.location.href.indexOf("?") >= 0) {
                    if (url.indexOf("?") >= 0) {
                        url = _spPageContextInfo.webAbsoluteUrl + url + "&Source=" + window.location.href.split('?')[0];
                    }
                    else {
                        url = _spPageContextInfo.webAbsoluteUrl + url + "?Source=" + window.location.href.split('?')[0];
                    }
                }
                else {
                    if (url.indexOf("?") >= 0) {
                        url = _spPageContextInfo.webAbsoluteUrl + url + "&Source=" + window.location.href;
                    }
                    else {
                        url = _spPageContextInfo.webAbsoluteUrl + url + "?Source=" + window.location.href;
                    }
                }
                if (openblank) {
                    window.open(url);
                }
                else {
                    window.location.href = url;
                }
            }
        }
        // 页面具体应用(回调部分)
        function formcallback(dialogResult, returnValue)
        {
            // 具体逻辑
        }
      
    • 弹出页面处理
         function ReturnValue() {
             window.frameElement.commitPopup("返回值");
         }
      

      后端写法

  5. 查询
     /// <summary>
     /// 方法说明
     /// </summary>
     /// <param name="webUrl"></param>
     /// <param name="date"></param>
     /// <returns></returns>
     private List<NonMedicalProductsModel> GetNonMedicalProductsList(string webUrl, string date)
     {
         LogHelper.MethodStart("方法说明");
         // 最终返回结果
         List<NonMedicalProductsModel> resultList = new List<NonMedicalProductsModel>();
         NonMedicalProductsModel products = new NonMedicalProductsModel();
         try
         {
             ClientContext context = SPContext.CreateClientContext(webUrl);
             List productsList = context.Web.Lists.GetByTitle("列表名称"); // 例:产品新增
             CamlQuery camlQuery = new CamlQuery();
             // 查询系统时间前一天的数据
             // ApprovalFinishTime	审批完成时间
             // ApplyStatus	审批状态:草稿;提交;审批中;同意;拒绝;已取消;取消首营;
             camlQuery.ViewXml = @"<View><Query><Where>
                                     <And>
                                         <Eq>
                                             <FieldRef Name='ApprovalFinishTime' />
                                             <Value Type='DateTime'>" + date + @"</Value>
                                         </Eq>
                                         <Or>
                                             <Eq>
                                                 <FieldRef Name='ApplyStatus' />
                                                 <Value Type='Choice'>同意</Value>
                                             </Eq>
                                             <Eq>
                                                 <FieldRef Name='ApplyStatus' />
                                                 <Value Type='Choice'>拒绝</Value>
                                             </Eq>
                                         </Or>
                                     </And>
                                 </Where></Query></ViewFields></View>";
             ListItemCollection productsListItems = productsList.GetItems(camlQuery);
             // 加载查询结果(因为后面需要用到,所以需要Load)
             context.Load(productsListItems); 
             // 查询
             // context.ExecuteQueryWithIncrementalRetry(SSBGConfig.RETRY_COUNT, SSBGConfig.DELAY_SECOND); // 为了解决具体问题增加的自定义方法
             context.ExecuteQuery(); // 与上面的效果相同
    
             foreach (ListItem item in productsListItems)
             {
                 products = new NonMedicalProductsModel();
                 products.Title = item["Title"].SafeToString();
    
                 resultList.Add(products);
             }
         }
         catch (Exception ex)
         {
             LogHelper.Error("【Method.GetNonMedicalProductsList】查询异常");
             LogHelper.Error(ex);
             throw ex;
         }
    
         LogHelper.MethodEnd("方法说明");
         return resultList;
     }
    
  6. 新增
     /// <summary>
     /// 新增
     /// </summary>
     public void AddListItem()
     {
         try
         {
             ClientContext ctx = SPContext.CreateClientContext(rootWebUrl);
             List addList = ctx.Web.Lists.GetByTitle("列表名称"); // 例:基础数据
             ListItemCreationInformation info = new ListItemCreationInformation();
             ListItem addItem = addList.AddItem(info);
             addItem["key1"] = "value1";
             addItem["key2"] = "value2";
             addItem["key3"] = "value3";
             addItem.Update(); // 更新语句不能少
             // 如果后面需要用到的话,进行Load
             ctx.Load(addItem);
             // 执行插入
             ctx.ExecuteQuery();
         }
         catch (Exception ex)
         {
             LogHelper.Error(ex);
         }
     }
    
  7. 修改
     /// <summary>
     /// 更新
     /// </summary>
     /// <param name="Id">条目Id</param>
     public void UpdateListItem(string Id)
     {
         try
         {
             ClientContext ctx = SPContext.CreateClientContext(rootWebUrl);
             List updateList = ctx.Web.Lists.GetByTitle("列表名称"); // 例:基础数据
             ListItem updateItem = updateList.GetItemById(Id);
             updateItem["key1"] = "value1";
             updateItem["key2"] = "value2";
             updateItem["key3"] = "value3";
             updateItem.Update();
             // 如果后面需要用到的话,进行Load
             ctx.Load(updateItem);
             // 执行更新
             ctx.ExecuteQuery();
         }
         catch (Exception ex)
         {
             LogHelper.Error(ex);
         }
     }
    
  8. 删除
     public void DeleteData(string alistid)
     {
         try
         {
             ClientContext context = SPContext.CreateClientContext(rootWebUrl);
             List detailedlist = context.Web.Lists.GetByTitle("列表名称");
    
             CamlQuery delcaml = new CamlQuery();
             // 根据具体情况进行查询
             delcaml.ViewXml = "<View><Query></Query><ViewFields><FieldRef Name='ID'/></ViewFields></View>";
             // 获取查询所有数据
             ListItemCollection listitems = detailedlist.GetItems(delcaml);
             // 加载(如果后面不使用可以不用Load)
             context.Load(listitems);
             // 执行
             context.ExecuteQuery();
             // 循环
             for (int i = listitems.Count - 1; i >= 0; i--)
             {
                 // 删除
                 ListItem listitem = listitems[i];
                 listitem.Recycle();
             }
             // 执行
             context.ExecuteQuery();
         }
         catch (Exception)
         {
    
             throw;
         }
     }
    

后记说明

  1. 如果后面不使用那么就可以不用加载到内存(执行Load()方法),直接执行ExecuteQuery()方法就可以了;
  2. 遮罩层对应html代码
     <div id="warningsss" class="divwarning" style="font-size: 20px; color: green;display:none;">
     正在加载,请稍后...</div>
    
     ResetWarningDIV("warningsss", true, ""); // 显示遮罩
     ResetWarningDIV("warningsss", false, ""); // 隐藏遮罩
    
     function ResetWarningDIV(idorclass, ishow, innerhtml) {
         if ($("." + idorclass).length > 0 && !$("." + idorclass).hasClass("divwarning")) {
             $("." + idorclass).addClass("divwarning");
         }
         if ($("#" + idorclass).length > 0 && !$("#" + idorclass).hasClass("divwarning")) {
             $("#" + idorclass).addClass("divwarning");
         }
         $(".divwarning").html(innerhtml);
         if (ishow) {
             $(".divwarning").show();
         }
         else {
             $(".divwarning").hide();
         }
     }
    
  3. caml语句中的<view>标签不能少,如果少了会把所有的数据都查询出来(不会报语法错误)
  4. rootWebUrl:网站url地址;例:https://xxx.sharepoint.cn/sites/Test/OCSM
  5. Load()后面跟ExecuteQuery()才会把数据加载到内存,只有Load()不会把数据加载到内存
  6. 参考文档:sharepoint 2010 弹出模式窗口showModalDialog并返回值returnResult方法

首页 > 学习总览 > 开发语言 > SharePoint