我有一个外部列表,其中包含一个名为“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?
任何帮助将不胜感激。提前谢谢。
答案 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>
我希望它有所帮助!