Salesforce 根据VisualForce中的字段值对联系人表进行分区
假设我有下面的visualforce页面:Salesforce 根据VisualForce中的字段值对联系人表进行分区,salesforce,apex-code,visualforce,Salesforce,Apex Code,Visualforce,假设我有下面的visualforce页面: <table width="100%" border="0"> <tr> <td valign="top"> <apex:pageBlock mode="edit" id="results"> <apex:pageBlockTable value="{!contacts}" var="contact">
<table width="100%" border="0">
<tr>
<td valign="top">
<apex:pageBlock mode="edit" id="results">
<apex:pageBlockTable value="{!contacts}" var="contact">
<apex:column >
<apex:facet name="header">
email
</apex:facet>
<apex:outputField value="{!contact.email}"/>
</apex:column>
<apex:column >
<apex:facet name="header">
Name
</apex:facet>
<apex:commandLink reRender="detail">{!contact.name}
<apex:param name="id" value="{!contact.id}"/>
</apex:commandLink>
</apex:column>
</td>
</tr>
</table>
等等
有没有办法在apex页面块中内联执行此操作?或者我需要为每个部门制作一个唯一的页面块吗
是否有人可以采用其他方法来解决此问题?公开列表联系人=[按部门选择姓名、部门、联系人的电子邮件顺序];
public List<Contact> contacts = [SELECT name, division, email FROM Contact order by division];
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" ></script>
<apex:form >
<apex:pageBlock mode="edit" id="results">
<apex:pageBlockTable value="{!contacts}" var="contact">
<apex:column headerValue="email" >
<apex:outputField value="{!contact.email}"/>
<span Class="divisionName" division="{!contact.division}"/>
</apex:column>
<apex:column headerValue="Name" >
<apex:commandLink reRender="detail">{!contact.name}
<apex:param name="id" value="{!contact.id}"/>
</apex:commandLink>
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>
<script>
var previous= $('<tr class="myHeaderRow"><td colspan="2">'+''+'</td></tr>') ;
$('.divisionName').each(
function(index, value){
if( $(value).attr('division')!=previous.text()){
$(this).closest('tr').before('<tr style="height: 10px !important;" class="myHeaderRow"><td colspan="2" style="text-align: -webkit-center;">'+$(value).attr('division')+'</td></tr>');
previous = $(this);
}
}
);
</script>
</apex:form>
{!contact.name}
var previous=$(''+''+'');
$('.divisionName')。每个(
函数(索引、值){
if($(value).attr('division')!=previous.text()){
$(this).closest('tr')。在('+$(value).attr('division')+'')之前;
上一次=$(本次);
}
}
);
如果您的“划分”(自定义字段?将是对一个单独对象的查找,那将非常非常容易。这就是Salesforce中的关系以及SOQL中的这种奇怪语法的用意所在。您只需使用一个子查询和两个循环:
[SELECT Name, (SELECT Id, Name, Email FROM Contacts__r) FROM Division__c]
类似于
[SELECT Name, (SELECT Id, Name, Email FROM Contacts) FROM Account]
但我怀疑这是一个文本/选择列表字段。。。然后——大致来说是这样的:
而不是严格意义上的
等,则可以)//1
Map contactsByDiv=新映射();
对于(联系人c:[从联系人中选择Id、姓名、电子邮件、部门c]){
列出联系人ThisDiv=contactsByDiv.get(c.Division\uu c);
如果(联系ThisDiv.isEmpty()){
contactsInThisDiv=新列表{c};
}否则{
本分部新增联系人(c);
}
联系人ByDiv.put(c.部门,联系人在此部门);
}
// 2
List allDivisions=新列表();
allDivisions.addAll(contactsByDiv.keyset());
//我选择了一个列表来存储Div名称,因为集合是不可预测的。如果您愿意,列表更容易排序
//allDivisions.sort();
{!我}
[SELECT Name, (SELECT Id, Name, Email FROM Contacts__r) FROM Division__c]
[SELECT Name, (SELECT Id, Name, Email FROM Contacts) FROM Account]