2014-01-13 49 views
0

我有一個外部列表,其中有一個名爲「CostPerUnit」字段的項目。該字段已經設置好的一個值,我想用下面的代碼來改變其值:Sharepoint 2013外部列表:ListItem.Update()正在恢復項目值

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()」,它發生在調用我的更新方法之前的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(); 
} 

的「秩序」項目傳遞給更新的方法是一個由特定的finder方法檢索,所以做項目的更改都將丟失,而不是致力於爲客戶解除數據庫。

*更新*我的問題是:如何防止Sharepoint在調用updater方法之前用其原始值覆蓋ItemList?

任何幫助將不勝感激。提前致謝。

+0

問題是...? –

+0

如何防止Sharepoint用其原始值覆蓋ListItem? – Aleix

回答

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> 

我希望它幫助!

+0

謝謝葉卡捷琳娜,我一回到辦公室就會檢查一下。只是要確定:你正在更新的列表是一個外部列表,對吧? – Aleix

+0

我在我的網站上使用了這個代碼列表,但我認爲它應該適用於外部列表,當您指定時:SP.ClientContext(「您的網站url」);和ctx.get_web()。get_lists()。getByTitle('your list name');我不是100%肯定,但它值得嘗試;) – Kate

+0

你好,我終於用你的代碼嘗試,我得到完全相同的行爲。該項目在數據庫更新之前返回到其原始值。不管怎麼說,還是要謝謝你! – Aleix

相關問題