APEX:包装器收集中的分类问题

发布于 2025-01-27 02:04:19 字数 4262 浏览 1 评论 0原文

我正在使用包装器类解析输入JSON。但是,在调用包装程序类的排序功能时获取错误消息:

    List<PPLUsersPerformanceWrapper> MarketingSources = PPLUsersPerformanceWrapper.parse(fpsLeadSettingList[0].PPL_Users_Performance__c);
    System.debug(MarketingSources != null);
    for(PPLUsersPerformanceWrapper MarketingSource:MarketingSources)
    {
        MarketingSource.Users.sort(); //getting error as shared below.
    }

错误:您的开发人员控制台会话是空闲的。要恢复记录和收听更新,请单击下面的简历,或单击“调试” - &GT;稍后恢复。

pplusersperformancewrapper类:

//This wrapper class is used to parse PPL's JSON config stored

global class PPLUsersPerformanceWrapper{

public String Source {get;set;} 
public List<Users> Users {get;set;}
public enum SORT_BY {
    USERconversion_rate, USERleads_recieved
}

public PPLUsersPerformanceWrapper(JSONParser parser) {
    while (parser.nextToken() != System.JSONToken.END_OBJECT) {
        if (parser.getCurrentToken() == System.JSONToken.FIELD_NAME) {
            String text = parser.getText();
            if (parser.nextToken() != System.JSONToken.VALUE_NULL) {
                if (text == 'Source') {
                    Source = parser.getText();
                } else if (text == 'Users') {
                    Users = arrayOfUsers(parser);
                } else {
                    System.debug(LoggingLevel.WARN, 'PPLUsersPerformanceWrapper consuming unrecognized property: '+text);
                    consumeObject(parser);
                }
            }
        }
    }
}

global class Users implements Comparable{
    global String User_id {get;set;} 
    global Double User_conversion_rate {get;set;}
    global Integer User_leads_recieved {get;set;}
    //public Double USERConversion_rate {get;set;}
    //public Integer USERleads_recieved {get;set;}

    global Users(JSONParser parser) {
        while (parser.nextToken() != System.JSONToken.END_OBJECT) {
            if (parser.getCurrentToken() == System.JSONToken.FIELD_NAME) {
                String text = parser.getText();
                if (parser.nextToken() != System.JSONToken.VALUE_NULL) {
                    if (text == 'User_id') {
                        User_id = parser.getText();
                    } else if (text == 'User_conversion_rate') {
                        User_conversion_rate = parser.getDoubleValue();
                    } else if (text == 'User_leads_recieved') {
                        User_leads_recieved = parser.getIntegerValue();
                    }else {
                        System.debug(LoggingLevel.WARN, 'Users consuming unrecognized property: '+text);
                        consumeObject(parser);
                    }
                }
            }
        }
    }
    global integer compareTo(Object recordTocompare){
            return compareTo(((Users)recordTocompare).User_leads_recieved);
    }
}

public static List<PPLUsersPerformanceWrapper> parse(String json) {
    System.JSONParser parser = System.JSON.createParser(json);
    return arrayOfPPLUsersPerformanceWrapper(parser);
}

public static void consumeObject(System.JSONParser parser) {
    Integer depth = 0;
    do {
        System.JSONToken curr = parser.getCurrentToken();
        if (curr == System.JSONToken.START_OBJECT || 
            curr == System.JSONToken.START_ARRAY) {
            depth++;
        } else if (curr == System.JSONToken.END_OBJECT ||
            curr == System.JSONToken.END_ARRAY) {
            depth--;
        }
    } while (depth > 0 && parser.nextToken() != null);
}

private static List<PPLUsersPerformanceWrapper> arrayOfPPLUsersPerformanceWrapper(System.JSONParser p) {
    List<PPLUsersPerformanceWrapper> res = new List<PPLUsersPerformanceWrapper>();
    if (p.getCurrentToken() == null) p.nextToken();
    while (p.nextToken() != System.JSONToken.END_ARRAY) {
        res.add(new PPLUsersPerformanceWrapper(p));
    }
    return res;
}

private static List<Users> arrayOfUsers(System.JSONParser p) {
    List<Users> res = new List<Users>();
    if (p.getCurrentToken() == null) p.nextToken();
    while (p.nextToken() != System.JSONToken.END_ARRAY) {
        res.add(new Users(p));
    }
    return res;
}
}

I'm parsing the input JSON using my wrapper class. But, getting an error message when calling the sort function of wrapper class:

    List<PPLUsersPerformanceWrapper> MarketingSources = PPLUsersPerformanceWrapper.parse(fpsLeadSettingList[0].PPL_Users_Performance__c);
    System.debug(MarketingSources != null);
    for(PPLUsersPerformanceWrapper MarketingSource:MarketingSources)
    {
        MarketingSource.Users.sort(); //getting error as shared below.
    }

Error: Your Developer Console session has been idle. To resume logging and listening for updates, click Resume below or click Debug -> Resume at a later time.

PPLUsersPerformanceWrapper class:

//This wrapper class is used to parse PPL's JSON config stored

global class PPLUsersPerformanceWrapper{

public String Source {get;set;} 
public List<Users> Users {get;set;}
public enum SORT_BY {
    USERconversion_rate, USERleads_recieved
}

public PPLUsersPerformanceWrapper(JSONParser parser) {
    while (parser.nextToken() != System.JSONToken.END_OBJECT) {
        if (parser.getCurrentToken() == System.JSONToken.FIELD_NAME) {
            String text = parser.getText();
            if (parser.nextToken() != System.JSONToken.VALUE_NULL) {
                if (text == 'Source') {
                    Source = parser.getText();
                } else if (text == 'Users') {
                    Users = arrayOfUsers(parser);
                } else {
                    System.debug(LoggingLevel.WARN, 'PPLUsersPerformanceWrapper consuming unrecognized property: '+text);
                    consumeObject(parser);
                }
            }
        }
    }
}

global class Users implements Comparable{
    global String User_id {get;set;} 
    global Double User_conversion_rate {get;set;}
    global Integer User_leads_recieved {get;set;}
    //public Double USERConversion_rate {get;set;}
    //public Integer USERleads_recieved {get;set;}

    global Users(JSONParser parser) {
        while (parser.nextToken() != System.JSONToken.END_OBJECT) {
            if (parser.getCurrentToken() == System.JSONToken.FIELD_NAME) {
                String text = parser.getText();
                if (parser.nextToken() != System.JSONToken.VALUE_NULL) {
                    if (text == 'User_id') {
                        User_id = parser.getText();
                    } else if (text == 'User_conversion_rate') {
                        User_conversion_rate = parser.getDoubleValue();
                    } else if (text == 'User_leads_recieved') {
                        User_leads_recieved = parser.getIntegerValue();
                    }else {
                        System.debug(LoggingLevel.WARN, 'Users consuming unrecognized property: '+text);
                        consumeObject(parser);
                    }
                }
            }
        }
    }
    global integer compareTo(Object recordTocompare){
            return compareTo(((Users)recordTocompare).User_leads_recieved);
    }
}

public static List<PPLUsersPerformanceWrapper> parse(String json) {
    System.JSONParser parser = System.JSON.createParser(json);
    return arrayOfPPLUsersPerformanceWrapper(parser);
}

public static void consumeObject(System.JSONParser parser) {
    Integer depth = 0;
    do {
        System.JSONToken curr = parser.getCurrentToken();
        if (curr == System.JSONToken.START_OBJECT || 
            curr == System.JSONToken.START_ARRAY) {
            depth++;
        } else if (curr == System.JSONToken.END_OBJECT ||
            curr == System.JSONToken.END_ARRAY) {
            depth--;
        }
    } while (depth > 0 && parser.nextToken() != null);
}

private static List<PPLUsersPerformanceWrapper> arrayOfPPLUsersPerformanceWrapper(System.JSONParser p) {
    List<PPLUsersPerformanceWrapper> res = new List<PPLUsersPerformanceWrapper>();
    if (p.getCurrentToken() == null) p.nextToken();
    while (p.nextToken() != System.JSONToken.END_ARRAY) {
        res.add(new PPLUsersPerformanceWrapper(p));
    }
    return res;
}

private static List<Users> arrayOfUsers(System.JSONParser p) {
    List<Users> res = new List<Users>();
    if (p.getCurrentToken() == null) p.nextToken();
    while (p.nextToken() != System.JSONToken.END_ARRAY) {
        res.add(new Users(p));
    }
    return res;
}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岛歌少女 2025-02-03 02:04:19

您确定这一点:

global integer compareTo(Object recordTocompare){
    return compareTo(((Users)recordTocompare).User_leads_recieved);
}

在此类使用整数的方法中,您是否具有“更准确”的compareTo()方法?因为如果不这样做 - 您可能是递归的受害者,无限循环。我的意思是,开发人员控制台死亡...但是如果您使用设置 - &gt;调试日志,它捕获什么吗?看起来像调用compareTo(),直到堆栈深度用完了(我记得的时间为20)或超过的Apex CPU时间?

您可能打算写类似的东西

return this.User_leads_recieved - ((Users)recordTocompare).User_leads_recieved;

Are you sure about this:

global integer compareTo(Object recordTocompare){
    return compareTo(((Users)recordTocompare).User_leads_recieved);
}

Do you have "more accurate" compareTo() method in this class that uses an integer? because if you don't - you might be a victim of recursion, infinite loop. I mean ok, developer console dies... but what if you use setup -> debug logs, does it capture anything? Does it look like it calls compareTo() until stack depth runs out (20 from what I remember) or apex cpu time exceeded?

Did you perhaps plan to write something like

return this.User_leads_recieved - ((Users)recordTocompare).User_leads_recieved;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文