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

时间:2014-01-13 15:38:07

标签: c# sharepoint-2013

我有一个外部列表,其中包含一个名为“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;
}

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

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();
}

传递给updater方法的'order'项是由特定finder方法检索的项,因此对该项进行的更改将丢失,并且不会提交给de Database。

*更新*我的问题是:如何在调用updater方法之前阻止Sharepoint用其原始值覆盖ItemList?

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

1 个答案:

答案 0 :(得分:0)

我刚刚为我的项目编写了一些代码,用于更新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>

我希望它有所帮助!