2012-06-18 65 views
3

我正在使用使用dll Microsoft.Dynamics.AX.ManagedInterop與AX 2012環境一起工作的C#項目。從代碼中,我需要根據特定條件查找SalesQuotationLine並將其刪除。到目前爲止,我可以獲得我需要的記錄,但我無法刪除它,因爲我沒有使用TTSBEGIN/TTSCOMMI T語句,而且我也沒有使用FORUPDATE。這是我的代碼:使用ManagedInterop從C#中刪除記錄

DictTable dictTable = new DictTable(Global.tableName2Id("SalesQuotationLine")); 
int quotationIdFieldId = (int)dictTable.Call("fieldName2Id", "QuotationId"); 
int bdcParentRecIdFieldId = (int)dictTable.Call("fieldName2Id", "BDCParentRecId"); 

var query = new Query(); 
var datasource = query.addDataSource(Global.tableName2Id("SalesQuotationLine")); 
var queryRange1 = datasource.addRange(quotationIdFieldId); 
queryRange1.value = "=" + line.QuotationId;    

QueryRun queryRun = new QueryRun(query as object); 
while (queryRun.next()) 
{ 
    var result = queryRun.get(Global.tableName2Id("SalesQuotationLine")); 
    result.Delete(); 
} 

我也看了一下代碼在這裏,http://msdn.microsoft.com/en-us/library/cc197113.aspx但我發現,因爲我一起工作的代碼不使用.NET Business Connector的,我不能用它(我不知道什麼時候一個DLL應該用於其他)。

回答

2

在Microsoft.Dynamics.AX.ManagedInterop.RuntimeContext.Current上使用TTSBegin()TTSCommit()方法。 forUpdate標誌可以通過QueryBuildDataSource的update()進行設置。

將它寫入X ++方法中調用C#中的方法可能更容易(也更好維護)。

+0

我會使用X ++,但這是部署代碼,並且我已經瞭解到部署X ++代碼在最好的過程中是一個混亂的過程。特別是當AX服務器上有自己的代碼時。 –