• SharePoint:扩展DVWP 第14部分:用jQuery编写PreSaveAction()实务


    通过前面的学习,我们已经掌握了如何在DVWP中使用PreSaveAction(),并利用jQuery协助我们创建了一些变量,接下让我们将变量的值写到审计列表中。

    使用SharePoint Web服务新建审计记录

    Marc的库中的UpdataListItems为我们提供了一种快速记录审计跟踪信息变更的方式。

    首先把老的域值(或者说是表单本身的值)作一个记录...

    $().SPServices({
        operation: "UpdateListItems", // 下面的Cmd决定了要进行插入操作
        async: false,
        listName: "FTE Change Audit", // 我之前创建好的审计列表的显示名称
        updates: "<Batch OnError='Continue' PreCalc='TRUE'>" +
                "<Method ID='1' Cmd='New'>" +
                    "<Field Name='FromTo'>From</Field>" + // Field Name 为该列表栏的 'Static Name' 
                    "<Field Name='Title'>" + txtOldName + "</Field>" +
                    "<Field Name='Location'>" + txtOldLoc + "</Field>" +
                    "<Field Name='Group'>" + txtOldGrp + "</Field>" +
                    "<Field Name='Position'>" + txtOldPos + "</Field>" +
                    "<Field Name='WorkShift'>" + txtOldShift + "</Field>" +
                    "<Field Name='FTE'>" + txtOldFTE + "</Field>" +
                    "<Field Name='EffDate'>" + txtEffDate + "</Field>" +
                    "<Field Name='ChangeType'>" + txtChangeType + "</Field>" +
                "</Method>" +
            "</Batch>",
        completefunc: function(xData, Status) {
        }
    });

    ...然后,为所有的新(或修改后)纪录重复以上过程。修改FromTo的值为To;注意到我们在这两个过程中使用相同的EffDate(你的需求或许不同)。ChangeType可以自动设置或者基于已有的一些变更计算出来。

    现在合在一起

    尽管你写的代码可能根据你的需求进行了修改,但是到目前为止大致上我们的PreSaveAction()的样子如下所示:

      function PreSaveAction() {
         var txtChangeType = "Update";
    
         var txtNewName = $("input[name*=$ff1_]").val();
         var txtOldName = $("span[id*=_ff9_]").text();
    
         var txtNewPos = $("input[name*=$ff3_]").val();
         var txtOldPos = $("span[id*=_ff11_]").text();
    
         var txtNewShift = $("select[name*=$ff4_]").val();
         var txtOldShift = $("span[id*=_ff12_]").text();
    
         var txtNewFTE = $("input[name*=$ff5_]").val();
         var txtOldFTE = $("span[id*=_ff13_]").text();
    
         var txtNewGrp = $("input[name*=$ff2_]").val();
         var txtOldGrp = $("span[id*=_ff10_]").text();
    
         var txtNewLoc = $("input[name*=$ff6_]").val();
         var txtOldLoc = $("span[id*=_ff14_]").text();
    
         var txtEffDate = $("input[name*=$ff7_]").val();
    
         $().SPServices({
              operation: "UpdateListItems",
              async: false,
              listName: "FTE Change Audit",
              updates: "<Batch OnError='Continue' PreCalc='TRUE'>" +
                        "<Method ID='1' Cmd='New'>" +
                             "<Field Name='FromTo'>From</Field>" +
                             "<Field Name='Title'>" + txtOldName + "</Field>" +
                             "<Field Name='Location'>" + txtOldLoc + "</Field>" +
                             "<Field Name='Group'>" + txtOldGrp + "</Field>" +
                             "<Field Name='Position'>" + txtOldPos + "</Field>" +
                             "<Field Name='WorkShift'>" + txtOldShift + "</Field>" +
                             "<Field Name='FTE'>" + txtOldFTE + "</Field>" +
                             "<Field Name='EffDate'>" + txtEffDate + "</Field>" +
                             "<Field Name='ChangeType'>" + txtChangeType + "</Field>" +
                        "</Method>" +
                   "</Batch>",
              completefunc: function(xData, Status) {
              }
         });
    
         $().SPServices({
              operation: "UpdateListItems",
              async: false,
              listName: "FTE Change Audit",
              updates: "<Batch OnError='Continue' PreCalc='TRUE'>" +
                        "<Method ID='1' Cmd='New'>" +
                             "<Field Name='FromTo'>To</Field>" +
                             "<Field Name='Title'>" + txtNewName + "</Field>" +
                             "<Field Name='Location'>" + txtNewLoc + "</Field>" +
                             "<Field Name='Group'>" + txtNewGrp + "</Field>" +
                             "<Field Name='Position'>" + txtNewPos + "</Field>" +
                             "<Field Name='WorkShift'>" + txtNewShift + "</Field>" +
                             "<Field Name='FTE'>" + txtNewFTE + "</Field>" +
                             "<Field Name='EffDate'>" + txtEffDate + "</Field>" +
                             "<Field Name='ChangeType'>" + txtChangeType + "</Field>" +
                        "</Method>" +
                   "</Batch>",
              completefunc: function(xData, Status) {
              }
         });
         return true;
    };

    其他用途

    你可以通过PreSaveAction()做什么?

    1、栏验证 - 确保你即将写入到数据库中的数据满足一些要求,比如:

        i.结束日期在起始日期后面

        ii.一个时间段内至少包含x天(或这说天数大于x天)

        iii.某个人已经在某个列表中(或在某个列表中不存在)

        iv.如果一些可选字段在某些字段填写后会变成必填字段

        v.等等 

    2、添加“您的意思是...?”功能

       i.“...要进行修改,但是并不更新有效日期?”

       ii.“...要在以后再设置这个日期?”

       iii.“...找的是这个名子与此很接近的人?”

       iv.“...指这个转换后的结果?或者是指这个最终结果?”

       v.等等

    3、需要做审计跟踪

    4、确认是否要删除

    5、查找存储在该列表项中的信息

    5、其他你的创意...

    想了解更多应用场景?

    不妨搜索一下PreSaveAction(),看看其他博文作者有什么好的想法。

    下一次:如何在DVWP中使用用户自定义的下拉列表框?网上有些最佳实践,不论你是不是在用DVWP都可能会用到。但如果你需要在你的DVWP中使用级联下拉框,那么你需要提前进行规划。我们将开始着手这一规划,并指出其中可能存在的一些陷阱。

    从现在开始接下来的4篇文章中,我们将在DVWP中实现级联下拉列表框功能。相应列表的所有者将在SharePoint列表中管理其内容和相互之间的关系。

    参考资料

    SharePoint:Extending the DVWP- Part 14:Putting PreSaveAction() to Work with jQuery

  • 相关阅读:
    Java 强、弱、软、虚,你属于哪一种?
    为啥阿里巴巴规定要在 @Transactional 指定 rollbackFor?
    DataGrip 上手体验,真香!
    日志框架选型,Logback 还是 Log4j2?
    基于OpenLayers和ArcGIS Server REST的要素信息保存功能
    基于Openlayers和Arcgis Server REST实现地图(要素)点击查询功能
    使用OpenLayers加载ArcGIS Server矢量图层
    ArcGIS Server在线编辑功能
    使用OpenLayers显示百度地图
    如何分析SAP ABAP的SYSTEM_NO_ROLL运行时错误
  • 原文地址:https://www.cnblogs.com/Sunmoonfire/p/1816661.html
Copyright © 2020-2023  润新知