You need to sign in to do that
Don't have an account?
Linked2Mark
Wrapper class not visible
I have a VF page that is not working properly and I cant figure out why. Page and controller are shown below. The page wont build as I am getting the following error.
Error:(1, 1) Unknown property 'TasksHomePageController.eAllTasks.taskSubject'
It looks like the page cant see the fields in the wrapper class. Cant figure out why that is happening. Any tips?
<apex:page id="TasksHomePage" Controller="TasksHomePageController"> <apex:stylesheet value="/resource/SLDS0102/assets/styles/salesforce-lightning-design-system-ltng.css"/> <apex:pageBlock title="Unresolved Emails"> <apex:outputText value="There are {0} incomplete Tasks." > <apex:param value="{!allTasksSize}"/> </apex:outputText> <br></br> <br></br> <apex:pageBlockTable value="{!allTasks}" var="myTask"> <apex:column value="{!myTask.taskSubject}"/> <apex:column value="{!myTask.taskStatus}"/> <apex:column value="{!myTask.TaskType}"/> <apex:column value="{!myTask.TaskActivityDate}"/> <apex:column value="{!myTask.TaskAccount}"/> </apex:pageBlockTable> </apex:pageBlock> </apex:page>
public with sharing class TasksHomePageController { public List<Task> allTasks {get; set;} public List<eAllTasks> eAT {get; set;} public Integer allTasksSize {get; set;} public TasksHomePageController() { Id usrid = UserInfo.getUserId() ; allTasks = [Select Id, Subject, WhoId, WhatId, ownerId, status, type, activityDate, CreatedDate FROM Task Where OwnerId = :usrId and status!= 'Completed']; allTasksSize = allTasks.size(); system.debug('allTasks.size() is ==> ' + allTasks.size()); for(Task t :allTasks){ eAllTasks e = new eAllTasks(); e.taskSubject = t.Subject; e.TaskId = t.Id; e.taskWhoId = t.WhoId; e.taskWhatId = t.WhatId; e.taskOwnerId = t.OwnerId; e.taskStatus = t.Status; e.taskActivityDate = t.ActivityDate; e.taskType = t.Type; e.taskWhoIdType = String.ValueOf(t.WhoId).substring(0,3); system.debug(' e is ==> ' + e); eAT.add(e); system.debug('eAT.size() is ==> ' + eAT.Size()); } List<Id> contactIDsInTasks = new List<Id>(); List<Id> leadIDsInTasks = new List<Id>(); // WhoId that starts with 'oo3' is a Contact // WhoId that starts with '00Q is a Lead if(eAT.size() > 0){ for(eAllTasks e :eAT){ if(e.taskWhoIdType == '003'){ contactIDsInTasks.add(e.taskWhoId); } else if(e.taskWhoIdType == '00Q'){ leadIDsInTasks.add(e.taskWhoId); } } } List<Contact> contactsInTasks = new List<Contact>(); List<Lead> leadsInTasks = new List<Lead>(); If(contactsInTasks.size() > 0){ contactsInTasks = [SELECT Id, Account.Name FROM Contact WHERE ID IN :contactIDsInTasks]; } if(leadIDsInTasks.size() > 0){ leadsInTasks = [SELECT ID, Company FROM Lead WHERE ID IN :leadIDsInTasks]; } //Create the maps here - map the eAT to the COntact or Lead Map<Id, Contact> contactMap = new Map<id, Contact>(); Map<Id, Lead> leadMap = new Map<id, Lead>(); if(contactsInTasks.size() > 0){ for(Contact c :contactsInTasks){ contactMap.put(c.Id, c); } } If(leadsInTasks.size() > 0){ for(Lead l :leadsInTasks){ leadMap.put(l.id, l); } } // everything is ready - now Get the Account Name from either the Contact or Lead if(eAT.size() > 0){ for(eAllTasks e :eAT){ if(contactMap.get(e.TaskWhoId) != null){ e.taskAccount = contactMap.get(e.TaskWhoId).Account.Name; } else if(leadMap.get(e.TaskWhoId) != null){ e.taskAccount = leadMap.get(e.TaskWhoId).Company; } } } } public class eAllTasks{ string taskSubject; Id TaskId; Id taskWhoId; Id taskWhatId; id taskOwnerId; string taskStatus; date taskActivityDate; string taskAccount; string taskWhoIdType; string taskType; }
Steven Nsubuga
Use public properties as the definitions in the inner eAllTasks class.
Raj Vakati
You need to use Get and set if you wanted to access them visualforce page .. (MVC pattern )