FIELD_INTEGRITY_EXCEPTION,输入与父订单相同的货币。:货币 ISO 代码:[CurrencyIsoCode]

问题描述 投票:0回答:1

我们在我们的组织中启用了多种货币。启用多货币后,我们使用欧元货币代码转换的报价正在创建没有行项目的订单,错误消息如下。

FIELD_INTEGRITY_EXCEPTION,输入与父订单相同的货币。:货币 ISO 代码:[CurrencyIsoCode]

我们有一个类用于处理订单报价。当我检查该类时,我可以看到货币和价格手册都是硬编码的。班级如下。

public with sharing class PRXS_Quote_Service {
    private static final String CURRENCY_CODE                       = 'USD';
        private static final String QUOTE_SUCCESSFULL_TITLE             = 'Quote Import Completed Succesfully';
        private static final String QUOTE_SUCCESSFULL_BODY              = 'Your quote has finished processing and has been imported successfully';
        public static final  String ERROR_TYPE_DATA_ERROR               = 'Data Error';
        public static final  String ERROR_TYPE_SYSTEM_EXCEPTION         = 'System Exception';
        public static final  String PRICEBOOK                           = 'Standard Price Book';
    
        //private static API_QuoteLoadRuleRunner productRulesRunner = new API_QuoteLoadRuleRunner();
        private static API_QuoteSaver quoteSaver = new API_QuoteSaver();
        private static API_QuoteReader quoteReader = new API_QuoteReader();
        private static API_QuoteProductAdder quoteProductAdder = new API_QuoteProductAdder();
        private static API_QuoteProductReader productReader = new API_QuoteProductReader();
        private static Map<String, ProductModel> configsByProduct2Code = new Map<String, ProductModel>();
        private static String  priceBookId = '';
        private static List<Default_Filter_Field_To_Add__mdt> defaultFiltersToUse = new List<Default_Filter_Field_To_Add__mdt>();
       
        private static void loadDefaultFilterValues() {
        
            if (defaultFiltersToUse.isEmpty()) {
                defaultFiltersToUse = [SELECT Id, Default_Value__c, Product_Option_Field_Name__c FROM Default_Filter_Field_To_Add__mdt];
            }
        }
    
        private static String getPriceBook() {
            
            if (String.isBlank(priceBookId)) {
                List<Pricebook2> books = [SELECT Id FROM Pricebook2 WHERE Name = : PRICEBOOK LIMIT 1];
                for(Pricebook2 pb : books) {
                    priceBookId = pb.Id;
                }
            }
    
            return priceBookId;
        } 

}

我该如何改变这个?如何获取货币和价格手册的正确值并将它们分配到硬编码值的位置?

我们可以在这个类中通过获取Quote ID来查询Quote,并通过Quote记录获取CurrencyISOCode和priceBookId吗?如果是的话,我怎样才能做到这一点。

提前致谢。

salesforce apex
1个回答
0
投票

当然,您可以更改提供的类以从报价记录中动态检索货币和价格账面值,而不是严格编码它们。以下是实现这一目标的方法:

  1. 从报价记录中获取货币ISO代码和价目表标识符:

    首先需要根据报价ID从报价记录中查询相关字段。您可以使用类中现有的报价 ID。整合后续代码即可从报价记录中获取货币 ISO 代码和价目表标识符:

    // Inside the PRXS_Quote_Service class
    private static Quote obtainQuoteById(Id quoteId) {
        return [SELECT Id, CurrencyIsoCode, Pricebook2Id FROM Quote WHERE Id = :quoteId LIMIT 1];
    }
    
  2. 更新动态货币和价目表的使用方法:

    随后,您应该调整使用硬编码值的方法。将硬编码的货币代码和价格手册名称替换为从报价记录中检索到的值。修改方法如下:

    // Inside the PRXS_Quote_Service class
    
    // Enhance this method to employ dynamic currency
    private static String fetchCurrencyCode(Id quoteId) {
        Quote quote = obtainQuoteById(quoteId);
        return quote.CurrencyIsoCode;
    }
    
    // Enhance this method to employ dynamic price book
    private static String obtainPriceBookId(Id quoteId) {
        Quote quote = obtainQuoteById(quoteId);
        return quote.Pricebook2Id;
    }
    
  3. 调整方法中货币和价目表的使用:

    接下来,调整使用货币和价目表值的方法来调用您生成的新动态方法:

    // Inside the PRXS_Quote_Service class
    
    private static void methodUsingCurrencyAndPriceBook(Id quoteId) {
        String currencyCode = fetchCurrencyCode(quoteId);
        String priceBookId = obtainPriceBookId(quoteId);
    
        // Employ currencyCode and priceBookId in your processing logic
        // ...
    }
    

通过这些修改,您的类将能够从链接到所提供的报价 ID 的报价记录中动态检索货币和价格账面值。这种方法可确保您避免对这些值进行硬编码,从而保证在整个转换过程中每个报价的货币和价格手册应用准确。

修改使用合适的报价 ID 调用这些方法的实例也很重要。根据类的使用情况,您可能需要稍微调整类的结构以将报价 ID 传输到相关方法。

© www.soinside.com 2019 - 2024. All rights reserved.