繁体   English   中英

APEX Salesforce中的最大列表大小

[英]Maximum Size of List in APEX Salesforce

我创建了一个DataBase.Batchable类,我在其中插入一个名为Event__c的自定义对象

public class BatchCreateGCalendars implements Database.Batchable<SObject>, Database.Stateful, Database.AllowsCallouts {
 private List<Event__c> event_id;
}

例如,我创建了1000个类型事件记录,然后使用该语句

insert event_id;

这是好的,还是逐个插入每个元素更合适? 在我的自定义对象中,我只创建了一个text类型的自定义字段(255),列表的最大大小是多少?

列表的大小没有定义的限制。 我认为你最终遇到的限制是堆大小,批量作业目前为12 MB。 但是,您需要注意可以通过DML处理的记录数量,目前为10,000。

那里有两个问题。

1)是的,如果可以,请始终使用对象列表执行DML语句。 这将更快地执行,并将帮助您避免调控器限制。 (你应该检查他们 ,如果你还没有)

2) 编辑 :几年前曾经是1K,现在它只是Jeremy所写的堆大小。 你仍然有1K用于传递给visualforce的集合(10K,如果它是一个readonly =“true”的页面)并且在所有查询中返回最多50K行

Salesforce在visualforce组件上留下了1000个限制,因为重新渲染大型数据表的性能非常糟糕,可能会使浏览器冻结,需要注意。

随着列表开始变大,您需要注意的是堆大小超出限制。 如果数据太大,我建议使用过滤(在SOQL )来减少需要返回到浏览器的数据。 Select2会做的伎俩)

有几种方法可以解决问题。 这是他们中的几个......

- 使用行和第一个参数来设置显示数据的偏移和限制:

<apex:repeat value="{!myCollection}" var="item" rows="1000" first="0">
{!item.text}
</apex:repeat>
<apex:repeat value="{!myCollection}" var="item" rows="1000" first="1000">
{!item.text}
</apex:repeat>
<apex:repeat value="{!myCollection}" var="item" rows="1000" first="2000">
{!item.text}
</apex:repeat>

- 使用包装:

Visualforce页面:

 <apex:page controller="thousandLimit">    
        <apex:pageBlock >
            <apex:repeat value="{!thousandBlocks}" var="block">
                <apex:pageBlockTable value="{!block.Accounts}" var="a">
                    <apex:column value="{!a.Name}"/>                
                </apex:pageBlockTable>
            </apex:repeat>
        </apex:pageBlock>  
    </apex:page>

控制器:

public class thousandLimit
    {
        private limitWrapper[] thousandBlocks = new limitWrapper[]{};

        private final integer listLimit;

        public thousandLimit()
        {
            listLimit = 999;
        }

        public limitWrapper[] getthousandBlocks()
        {
            thousandBlocks = new limitWrapper[]{};

            integer counter = 0;
            integer loopCount = 0;
            Account[] tmpAccount = new Account[]{};

            for(Account a:[SELECT Id, Name FROM Account])
            {
                if(counter < listLimit)
                {
                    tmpAccount.add(a);
                    counter++;
                }
                else
                {
                    loopCount++;
                    thousandBlocks.add(new limitWrapper(tmpAccount,loopCount));
                    tmpAccount = new Account[]{};
                    tmpAccount.add(a);
                    counter = 0;
                }            
            }

            if(thousandBlocks.size() == 0)
            {
                loopCount++;
                thousandBlocks.add(new limitWrapper(tmpAccount,loopCount));
            }

            return thousandBlocks;
        }

        public class limitWrapper
        {
            public Account[] accounts {get;set;}
            public integer blockNumber {get;set;}
            public limitWrapper(Account[] accs, integer i)
            {
                accounts = accs;
                blockNumber = i;
            }

        }
    }

- 您可以将用户readonly标记从1k增加到10k

<apex:page controller="thousandLimit" readonly="true">
   <apex:pageBlock >
      <apex:repeat value="{!thousandBlocks}" var="block">
            <apex:pageBlockTable value="{!block.cases}" var="c">
            <apex:column value="{!c.CaseNumber}"/>
            <apex:column value="{!c.owner.name}"/>
            <apex:column value="{!c.App_Process__c}"/>
            <apex:column value="{!c.Load__c}"/>
            <apex:column value="{!c.subject}"/>
            <apex:column value="{!c.Estimated_Completion_Date__c}"/>   
            <apex:column value="{!c.Complete__c}"/>
            <apex:column value="{!c.Priority}"/>
            <apex:column value="{!c.Case_Age_Days__c}"/>                    
            </apex:pageBlockTable>
        </apex:repeat>
     </apex:pageBlock>  
</apex:page>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM