SharePoint 2013 外部列表:ListItem.Update() 正在还原项目值



我有一个外部列表,其中包含一个名为"CostPerUnit"的项目。此字段已经设置了一个值,我正在尝试使用以下代码更改其值:

private void updateCost(int orderIndex, decimal cost)
{
    SPContext.Current.Web.AllowUnsafeUpdates = true;
    SPListItem item = SPContext.Current.Web.Lists[CListNames.ORDERS].Items[orderIndex];
    item["CostPerUnit"] = cost;
    item.Update();
    SPContext.Current.Web.AllowUnsafeUpdates = false;
}

当我调用"项目。Update()",碰巧在调用我的更新程序方法之前,Sharepoint 正在调用 ReadItem(特定查找器),它用数据库中的原始值覆盖整个列表项。以下是我的特定查找器和更新程序方法:

public static TB_ORDER ReadItem(int id, decimal costPerUnit, string comments)
{
    OT_MODEL_DALDataContext dataContext = new OT_MODEL_DALDataContext(_ConnectionString);
    TB_ORDER Order = (from order in dataContext.TB_ORDERs.AsEnumerable() where order.Id == id select order).Single();
    return Order;
}
public static void Update(TB_ORDER order)
{
    OT_MODEL_DALDataContext dataContext = new OT_MODEL_DALDataContext(_ConnectionString);
    var Order = (from orders in dataContext.TB_ORDERs
                      where orders.Id == order.Id
                      select orders).Single();
    Order.Comments= order.Comments;
    Order.CostPerUnit = order.CostPerUnit;
    dataContext.SubmitChanges();
}

传递给更新程序方法的"订单"项是由特定的查找器方法检索到的项,因此对该项所做的更改将丢失,并且不会提交到 de Database。

*

更新*我的问题是:如何防止 SharePoint 在调用更新程序方法之前用其原始值重写 ItemList?

任何帮助将不胜感激。提前谢谢。

我刚刚为我的项目编写了一些代码来更新 SharePoint 列表项字段,它可以工作:

<script type="text/javascript" src="/jquery-1.10.2.min.js"></script>
<script src="https:///jquery.SPServices-2013.02a.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () { ExecuteOrDelayUntilScriptLoaded(loadConstants, "sp.js"); });        
function loadConstants() {
    //get item id from url
    var docurl = document.URL;
    var beginindex = docurl.indexOf('?ID=') + 4;
    var endindex = docurl.indexOf('&Source=');
    var itemid = docurl.substring(beginindex, endindex);
    var ctx = new SP.ClientContext("your site url");
        var oList = ctx.get_web().get_lists().getByTitle('your list name');
        this.oListItem = oList.getItemById(itemid);
        ctx.load(this.oListItem);
        ctx.executeQueryAsync(Function.createDelegate(this, function () {  
            this.oListItem.set_item('Column name', "New value");
            this.oListItem.update();
    ctx.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), 
                          Function.createDelegate(this, this.onQueryFailed));
                    }),  function (sender, args) { alert('Error occured' + args.get_message());});    
    }
    function onError(error) {
        alert("error");
    }       
}    
</script>

我希望它有所帮助!

最新更新