當您使用 Microsoft 動態航行點 2009 R2 整合 Microsoft Dynamics CRM 藉由使用 Microsoft 動態連接器不正確地更新貨幣匯率

文章翻譯 文章翻譯
文章編號: 2597312 - 檢視此文章適用的產品。
本文適用於 Microsoft 動態航行點的所有國家/地區] 及 [所有語言的地區設定。
全部展開 | 全部摺疊

在此頁中

徵狀

假設您將 Microsoft Dynamics CRM 整合以 Microsoft 動態航行點 2009 R2 之前,藉由使用 Microsoft 動態功能套件 5 連接器。在某些情況下,貨幣匯率會不正確地在 Microsoft Dynamics CRM 中更新。
當您更新貨幣匯率,在 [Microsoft 動態航行點 2009 R2 中時,您會收到下列錯誤訊息:
[貨幣匯率為 [貨幣] 發生錯誤時處理 …
識別碼為 TransactionCurrency =<guid>不存在。</guid>
在此情況下,貨幣匯率第一筆記錄已同步處理為 Microsoft Dynamics CRM。當系統同步處理後續的記錄輸入更新的開始日期與貨幣匯率表時,就會發生此錯誤。

發生的原因

上次變更的貨幣匯率,而非特定的貨幣,目前的匯率同步使用 Microsoft 動態連接器 Microsoft Dynamics CRM,就會發生這個問題。

解決方案

Hotfix 資訊

現在使用 Microsoft 的支援的 hotfix。不過,它只被用來修正本文所述之問題。它只適用於發生此特定問題的系統上。此 hotfix 可能會接受其他測試。因此,如果您不會嚴重受到這個問題,我們建議您等候下一步 Microsoft 動態航行點 2009 service pack 或包含此 hotfix 的下一個 Microsoft 動態航行點版本。

附註 在特殊情況下,通常會支援呼叫可能會收取如果技術支援專業人員 Microsoft 動態及相關的產品所產生的費用會決定某特定更新程式可以解決您的問題。收取支援費用會套用到其他支援問題的特定更新程式無法解決的問題。

安裝資訊

Microsoft 會提供程式設計範例僅供說明,而不做任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保。本文假設您已熟悉使用的我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構符合您特定需求的程序。

附註 安裝這個 hotfix 之前,請確認所有的 Microsoft Navision 用戶端使用者已登出的系統。這包括 Microsoft Navision 應用程式服務 (NAS) 用戶端使用者。您應該是唯一的用戶端使用者已登入,當您實作此 hotfix。

若要執行此 hotfix,您必須有開發者授權。

我們建議您在 Windows 登入視窗或資料庫登入] 視窗中的使用者帳戶被指派 「 進階 」 的角色識別碼。如果使用者帳戶不能指派的 「 進階 」 角色的識別碼,您必須確認使用者帳戶具有下列使用權限:
  • 修改的權限將會變更的物件。
  • [執行] 權限 系統物件 ID 5210 物件,以及 系統物件 ID 9015 物件。


附註 您不必擁有對資料存放區的權限,除非您需要執行資料修復。

程式碼變更

附註 永遠測試程式碼修正在受控制的環境中再套用到實際執行電腦的修正程式。
若要解決這個問題,請依照下列步驟執行:
  1. 在 [Microsoft 動態航行點 2009 R2 下列的程式碼變更:
    1. 建立新的 GetCurrencyFactor 函式貨幣匯率表 (330),如下所示:
      PROCEDURE GetCurrentCurrencyFactor@14(CurrencyCode@1000 : Code[10]) : Decimal;
          BEGIN
            SETRANGE("Currency Code",CurrencyCode);
            IF FINDLAST THEN
              EXIT("Exchange Rate Amount" / "Relational Exch. Rate Amount")
          END;
    2. 建立新的 SetCurrencyFactor 函式貨幣匯率表 (330),如下所示:
      PROCEDURE SetCurrentCurrencyFactor@15(CurrencyCode@1000 : Code[10];CurrencyFactor@1001 : Decimal);
          VAR
            RateForTodayExists@1002 : Boolean;
          BEGIN
            "Currency Code" := CurrencyCode;
            TESTFIELD("Currency Code");
            RateForTodayExists := GET(CurrencyCode,TODAY);
            "Exchange Rate Amount" := 1;
            "Relational Exch. Rate Amount" := 1 / CurrencyFactor;
            "Adjustment Exch. Rate Amount" := "Exchange Rate Amount";
            "Relational Adjmt Exch Rate Amt" := "Relational Exch. Rate Amount";
           IF RateForTodayExists THEN BEGIN
             "Relational Currency Code" := '';
             MODIFY;
           END ELSE BEGIN
             "Starting Date" := TODAY;
             INSERT;
           END;
          END;
    3. 以貨幣格式 (5),新增新的全域變數,然後指定變數,如下所示:
      • 名稱: CurrencyFactor
      • 資料型別: 小數位數
    4. 新增 貨幣因素 以貨幣格式 (5) 的欄位 (46)。
    5. 加入新的本機變數中 貨幣因數-OnValidate 以貨幣格式 (5)、 觸發程序,然後指定變數,如下所示:
      • 名稱: CurrencyExchangeRate
      • 資料型別: 資料錄
      • 子型別: 貨幣匯率
    6. 加入下列程式碼中的 貨幣因數-OnValidate 觸發程序以貨幣格式 (5):
      CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor);
    7. 加入新的本機變數中 OnAfterGetRecord 以貨幣格式 (5)、 觸發程序,然後指定變數,如下所示:
      • 名稱: CurrencyExchangeRate
      • 資料型別: 資料錄
      • 子型別: 貨幣匯率
    8. 加入下列程式碼中的 OnAfterGetRecord 觸發程序以貨幣格式 (5):
      CurrencyFactor := CurrencyExchangeRate.GetCurrentCurrencyFactor(Code);
    9. 在 [貨幣] 頁面 (5),新增新的全域變數,然後指定變數,如下所示:
      • 名稱: CurrencyFactor
      • 資料型別: 小數位數
    10. 新增 貨幣因素 在 [貨幣] 頁面 (5),欄位然後指定的欄位,如下所示:
      • 名稱: CurrencyFactor
      • 標題: 貨幣因素
      • 型別: 欄位
      • SourceExpr: CurrencyFactor
    11. 加入新的本機變數中 貨幣因數-OnValidate 在 [貨幣] 頁面 (5)、 觸發程序,然後指定變數,如下所示:
      • 名稱: CurrencyExchangeRate
      • 資料型別: 資料錄
      • 子型別: 貨幣匯率
    12. 加入下列程式碼中的 貨幣因數-OnValidate 觸發程序 (5) 上的 [貨幣] 頁面中:
      CurrencyExchangeRate.SetCurrentCurrencyFactor(Code,CurrencyFactor);
    13. 加入新的本機變數中 OnAfterGetRecord 在 [貨幣] 頁面 (5)、 觸發程序,然後指定變數,如下所示:
      • 名稱: CurrencyExchangeRate
      • 資料型別: 資料錄
      • 子型別: 貨幣匯率
    14. 加入下列程式碼中的 OnAfterGetRecord 觸發程序 (5) 上的 [貨幣] 頁面中:
      CurrencyFactor := CurrencyExchangeRate.GetCurrentCurrencyFactor(Code);
    15. 加入新的本機變數中 UpdateParentIntegrationRecord 在整合式管理 codeunit (5150),然後再指定變數,如下所示:
      • 名稱: 貨幣
      • 資料型別: 資料錄
      • 子型別: 貨幣
    16. 變更中的程式碼 UpdateParentIntegrationRecord 函式在整合式管理 codeunit (5150),如下所示:
      現有的程式碼
      ...
        DATABASE::"Ship-to Address":
          BEGIN
            FieldRef1 := RecRef.FIELD(1); // "Customer No."
            IF Customer.GET(FieldRef1.VALUE) THEN BEGIN
              ParentRecRef.GETTABLE(Customer);
              InsertUpdateIntegrationRecord(ParentRecRef,TimeStamp);
            END;
          END;
      END;
      取代程式碼
      ...
       
        DATABASE::"Ship-to Address":
          BEGIN
            FieldRef1 := RecRef.FIELD(1); // "Customer No."
            IF Customer.GET(FieldRef1.VALUE) THEN BEGIN
              ParentRecRef.GETTABLE(Customer);
              InsertUpdateIntegrationRecord(ParentRecRef,TimeStamp);
            END;
          END;
      
      // Add the following lines.
        DATABASE::"Currency Exchange Rate":
          BEGIN
            FieldRef1 := RecRef.FIELD(1); // "Currency Code"
            IF Currency.GET(FieldRef1.VALUE) THEN BEGIN
              ParentRecRef.GETTABLE(Currency);
              InsertUpdateIntegrationRecord(ParentRecRef,TimeStamp);
            END;
          END;
      // End of the lines.
      
      END;
    17. 變更中的程式碼 EnableConnector 函式在整合式管理 codeunit (5150),如下所示:
      現有的程式碼
      ...
      SetupWebServicePages(FORM::"Ship-to Address",DATABASE::"Ship-to Address");
      SetupWebServicePages(FORM::"Contact Card",DATABASE::Contact);
      
      //Delete the following line.
      SetupWebServicePages(FORM::"Currency Exchange Rates",DATABASE::"Currency Exchange Rate");
      
      SetupWebServicePages(FORM::"Customer Disc. Groups",DATABASE::"Customer Discount Group");
      SetupWebServicePages(FORM::"Item Disc. Groups",DATABASE::"Item Discount Group");
      ...
      取代程式碼
      ...
      SetupWebServicePages(FORM::"Ship-to Address",DATABASE::"Ship-to Address");
      SetupWebServicePages(FORM::"Contact Card",DATABASE::Contact);
      SetupWebServicePages(FORM::"Customer Disc. Groups",DATABASE::"Customer Discount Group");
      SetupWebServicePages(FORM::"Item Disc. Groups",DATABASE::"Item Discount Group");
      ...
    18. 變更中的程式碼 SetupIntegrationTable 函式在整合式管理 codeunit (5150),如下所示:
      現有的程式碼
      ...
      InitializeIntegrationRecords(DATABASE::"Unit of Measure");
      InitializeIntegrationRecords(DATABASE::"Ship-to Address");
      InitializeIntegrationRecords(DATABASE::Contact);
      
      //Delete the following line.
      InitializeIntegrationRecords(DATABASE::"Currency Exchange Rate");
      
      InitializeIntegrationRecords(DATABASE::"Customer Discount Group");
      ...
      取代程式碼
      ...
      InitializeIntegrationRecords(DATABASE::"Unit of Measure");
      InitializeIntegrationRecords(DATABASE::"Ship-to Address");
      InitializeIntegrationRecords(DATABASE::Contact);
      InitializeIntegrationRecords(DATABASE::"Customer Discount Group");
      ...
    19. 變更中的程式碼 IsIntergrationRecord 函式在整合式管理 codeunit (5150),如下所示:
      現有的程式碼
      ...
      DATABASE::"Unit of Measure",
      DATABASE::"Ship-to Address",
      DATABASE::Contact,
      
      //Delete the following line.
      DATABASE::"Currency Exchange Rate",
      
      DATABASE::"Customer Discount Group",
      ...
      取代程式碼
      ...
      DATABASE::"Unit of Measure",
      DATABASE::"Ship-to Address",
      DATABASE::Contact,
      DATABASE::"Customer Discount Group",
      ...
    20. 變更中的程式碼 IsIntegrationRecordChild 函式中整合管理 codeunit (5150),如下所示:
      現有的程式碼
      ...
      IF TableID IN
        [DATABASE::"Sales Line",
         DATABASE::"Sales Invoice Line"]
      THEN
        EXIT(TRUE);
      EXIT(FALSE);
      ...
      取代程式碼
      ...
      IF TableID IN
        [DATABASE::"Sales Line",
      
         // Add the following line.
         DATABASE::"Currency Exchange Rate",
      
         DATABASE::"Sales Invoice Line"]
      THEN
        EXIT(TRUE);
      EXIT(FALSE);
      ...
  2. 安裝 [Microsoft 動態功能套件 6 連接器。
    附註安裝連接器的 [Microsoft 動態功能套件 6 之後,您必須停用連接器中的 [航行點貨幣匯率為貨幣對應和匯入新的 [航行點的貨幣為貨幣對應、 航行點的介面卡設定,請重新執行,然後啟動新的對應。

必要條件

您必須安裝在套用此 hotfix 的 Microsoft 動態航行點 2009 R2。

移除資訊

您無法移除此 hotfix。

狀況說明

Microsoft 已確認這是 「 套用 」 一節所列的 Microsoft 產品中的問題。
附註 這是直接從 Microsoft 的支援組織內建立的 「 快速發行 」 文件。本文件所包含的資訊依現狀-是以新興的問題回應。以讓它的速度,造成的資料可能包含印刷錯誤,而且可能以後會修訂隨時恕不另行通知。請參閱 使用規定 對於其他考量。

屬性

文章編號: 2597312 - 上次校閱: 2011年8月30日 - 版次: 3.0
這篇文章中的資訊適用於:
  • Microsoft Dynamics NAV 2009
關鍵字:?
kbqfe kbmbsmigrate kbmbscodefix kberrmsg kbsurveynew kbmt KB2597312 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:2597312
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com