2016-01-15 35 views
0

我很想搞清楚狀態碼將在哪裏改變。因爲如果我嘗試預訂訂單。並出現問題,然後會出現回滾。但是在現在,狀態代碼將會改變,不一定是什麼。因爲你以後無法預訂整個訂單。狀態代碼必須保持不變。微軟動力學中的狀態代碼navision 2009

enter image description here

enter image description here

enter image description here

謝謝

狀態代碼將這個錯誤後改變: enter image description here

是的,我調試的代碼

,並在代碼單元:7301在這條線:

END ELSE 
    IF FromBinContent."Quantity (Base)" + "Qty. (Base)" < 0 THEN 
     FromBinContent.FIELDERROR(
     "Quantity (Base)",STRSUBSTNO(Text000,FromBinContent."Quantity (Base)")); 
END; 

我會得到錯誤

謝謝

奧凱,我發現了一段代碼,其中狀態代碼將被改變。

lRecStatus.FILTERGROUP(4); 
lRecStatus.SETRANGE("Change Status",lRecStatus."Change Status"::Released); 
lRecStatus.FILTERGROUP(0); 
IF NOT lFncNextStatus2(vRecSalesHeader,lRecStatus,FALSE,FALSE) THEN 
    ERROR(lCtx000,vRecSalesHeader."Document Type",vRecSalesHeader."No.",vRecSalesHeader."Status Code"); 
    lRecStatus.SETRANGE("Change Status",lRecStatus."Change Status"::01-NEW); 

vRecSalesHeader.FIND('='); 

所以我加了這一點:

lRecStatus.SETRANGE("Change Status",lRecStatus."Change Status"::01-NEW); 

但是如何設置值新 - 究竟是怎麼回事?而不是代碼去「vrijgegeven」?

謝謝

Oke。我在codeunit發現:1107570此:

lRecStatus.FILTERGROUP(4); 
lRecStatus.SETRANGE("Change Status",lRecStatus."Change Status"::Released); 
lRecStatus.FILTERGROUP(0); 
IF NOT lFncNextStatus2(vRecSalesHeader,lRecStatus,FALSE,FALSE) THEN 
    ERROR(lCtx000,vRecSalesHeader."Document Type",vRecSalesHeader."No.",vRecSalesHeader."Status Code"); 
vRecSalesHeader.FIND('='); 

,如果我的評論是:

IF NOT lFncNextStatus2(vRecSalesHeader,lRecStatus,FALSE,FALSE) THEN 
    ERROR(lCtx000,vRecSalesHeader."Document Type",vRecSalesHeader."No.",vRecSalesHeader."Status Code"); 

則狀態代碼將沒有被改變。但我不知道這是否正確,因爲也許別的地方出了問題。

謝謝

+0

我不確定您是否試圖完全刪除狀態更改,或者只是處理更新情況,即使事務由於錯誤而回滾。代碼單元1107570意味着這應該是ISV解決方案[編號約定](https://msdn.microsoft.com/en-us/library/ee414238.aspx);你會得到最好的結果,討論你試圖用代碼的原作者完成的事情。如果您仍然希望這樣做,則需要查看lFncNextStatus2中的代碼,然後在已更改的系統上進行一些測試。 – Akedren

回答

0

如果狀態代碼是錯誤消息後剩餘更新,那麼最有可能的原因是發佈的路由被稱爲後COMMIT已經發出,但該錯誤消息之前。

銷售訂單上的OMS標籤似乎是以太網ISV插件或數據庫特定定製的結果,因此很難確定可疑代碼在哪裏,有多種方式找到它。

查找代碼的最直接的方法是在重複進程和進入/結束事務時使用調試器(工具 - >調試器 - >觸發器上的活動/斷點),直到遇到COMMIT語句。

如果您更熟悉C/AL代碼(並且擁有足夠的許可證/許可證),則可以打開表單進行修改並手動跟蹤用於發佈文檔的代碼。

重構代碼以刪除COMMIT可能非常棘手,並且如果在發佈路由中進行更改,可能需要動態合作伙伴或ISV根據開發許可證結構的工作原理進行修改。

+0

嗨Akedren。謝謝您的回覆。編輯信息 – InfinityGoesAround

+0

你還有其他建議嗎? – InfinityGoesAround