On Account page, I have a Button which opens a VF page which creates Task record. When I click Edit button on the Task record to update it and click Save, it's redirecting to the Task record page on Desktop in both classic and lightning mode. However, when I am performing same action on Mobile, upon clicking on Save, it is giving me error. Page doesn't exist. Enter a valid URL and try again.
public class Sim_NewTaskController {
//private Task taskObjectParent;
public Task taskObjectParent{get;set;}
private Task tempTask;
public String whoId{get;set;}
public String whatId{get;set;}
public String recordId{get;set;}
public String retURL{get;set;}
private String close;
// these three variables will set when log a call button will clicked on activity history
private String title;
private String tsk5;
private String followup;
public String inputValue{get;set;}
public List<MultiSelect> avaiableContactlList {get;set;}
public List<MultiSelect> avaiableGoalList {get;set;}
public List<MultiSelect> avaiableTopicList {get;set;}
public boolean isNAOProfile{get;set;}
public Integer totalAvaiableGoal {get;set;}
public Integer totalAvaiableTopic {get;set;}
public List<SelectOption> avaiableOptionsContacts{get;set;}
public String selectedContact{get;set;}
public string searchstring {get;set;}
//For SOS Profile
//Set<String> setSOSAvlTopics = new Set<String>{'Account Maintenance', 'Co-Management','Material Request','Referral Process','Divisions','Events','Issue Resolution','New Provider'};
public Sim_NewTaskController(ApexPages.StandardController stdController) {
totalAvaiableGoal = 0;
totalAvaiableTopic = 0;
//this.taskObjectParent = (Task)stdController.getRecord();
avaiableOptionsContacts = new List<SelectOption>();
selectedContact = searchText = '';
tempTask=new Task();
taskObjectParent=new Task();
whatId = ApexPages.currentPage().getParameters().get('what_id');
whoId = ApexPages.currentPage().getParameters().get('who_id');
recordId = ApexPages.currentPage().getParameters().get('id');
close = ApexPages.currentPage().getParameters().get('close');
retURL = ApexPages.currentPage().getParameters().get('retURL');
title = ApexPages.currentPage().getParameters().get('title');
tsk5 = ApexPages.currentPage().getParameters().get('tsk5');
followup = ApexPages.currentPage().getParameters().get('followup');
CheckProfile();
}
public void CheckProfile(){
isNAOProfile=false;
//If Logged in user prfile is NAO profile then replace picklist value like below
//Get looged in user profile
User objUser=[select profile.Name from user where id=:UserInfo.getUserId()];
if(objUser!=null && objUser.profile.Name=='NAO Profile'){
isNAOProfile=true;
}
}
public void filterFields() {
//Get Profile Name of logged in user
string profileName=[select profile.Name from user where id=:UserInfo.getUserId()].profile.Name;
System.debug('taskObjectParent.type------------'+taskObjectParent.type);
avaiableGoalList = new List<MultiSelect>();
avaiableTopicList = new List<MultiSelect>();
if(taskObjectParent.type == 'Sports Medicine Phone Call' || taskObjectParent.type == 'Sports Medicine Visit') {
avaiableTopicList.add(new MultiSelect(false, '2 Day Athlete Guarantee', null));
avaiableTopicList.add(new MultiSelect(false, 'Athletic Training Protocols', null));
avaiableTopicList.add(new MultiSelect(false, 'Divisions', null));
avaiableTopicList.add(new MultiSelect(false, 'Events', null));
avaiableTopicList.add(new MultiSelect(false, 'Hospitals', null));
avaiableTopicList.add(new MultiSelect(false, 'Issue Resolution', null));
avaiableTopicList.add(new MultiSelect(false, 'Material Request', null));
avaiableTopicList.add(new MultiSelect(false, 'Medical Coverage', null));
avaiableTopicList.add(new MultiSelect(false, 'New Clinic', null));
avaiableTopicList.add(new MultiSelect(false, 'New Physicians', null));
avaiableTopicList.add(new MultiSelect(false, 'Quality Outcomes', null));
avaiableTopicList.add(new MultiSelect(false, 'Referral Process', null));
avaiableTopicList.add(new MultiSelect(false, 'Sports Injury Clinics', null));
avaiableTopicList.add(new MultiSelect(false, 'Sponsorships', null));
avaiableTopicList.add(new MultiSelect(false, 'Team Physicals', null));
avaiableGoalList.add(new MultiSelect(false, 'Establishing New Relationships', null));
avaiableGoalList.add(new MultiSelect(false, 'Maintaining Relationship', null));
avaiableGoalList.add(new MultiSelect(false, 'Service Update', null));
}
if(taskObjectParent.type == 'E-mail or Fax' || taskObjectParent.type == 'Follow-Up' || taskObjectParent.type == 'Mailed Collateral/Document' || taskObjectParent.type == 'Office Staff Meeting' || taskObjectParent.type =='Outreach or CME Event' || taskObjectParent.type == 'Out of the Field' || taskObjectParent.type == 'Phone Call' || taskObjectParent.type == 'Unsuccessful Visit' ){
avaiableTopicList.add(new MultiSelect(false, 'Account Maintenance', null));
avaiableTopicList.add(new MultiSelect(false, 'Co-Management', null));
avaiableTopicList.add(new MultiSelect(false, 'Material Request', null));
avaiableTopicList.add(new MultiSelect(false, 'Referral Process', null));
avaiableTopicList.add(new MultiSelect(false, 'Divisions', null));
avaiableTopicList.add(new MultiSelect(false, 'Events', null));
avaiableTopicList.add(new MultiSelect(false, 'Issue Resolution', null));
avaiableTopicList.add(new MultiSelect(false, 'New Provider', null));
avaiableTopicList.add(new MultiSelect(false, 'Urgent Ortho/Walk-In', null));
}
else {
avaiableTopicList.add(new MultiSelect(false, 'Account Maintenance', null));
avaiableTopicList.add(new MultiSelect(false, 'Co-Management', null));
avaiableTopicList.add(new MultiSelect(false, 'Material Request', null));
avaiableTopicList.add(new MultiSelect(false, 'Referral Process', null));
avaiableTopicList.add(new MultiSelect(false, 'Divisions', null));
avaiableTopicList.add(new MultiSelect(false, 'Events', null));
avaiableTopicList.add(new MultiSelect(false, 'Quality Outcomes', null));
avaiableTopicList.add(new MultiSelect(false, 'Issue Resolution', null));
avaiableTopicList.add(new MultiSelect(false, 'New Provider', null));
avaiableTopicList.add(new MultiSelect(false, 'Urgent Ortho/Walk-In', null));
/* if(profileName=='SOS Profile'){
for(String st:setSOSAvlTopics){
avaiableTopicList.add(new MultiSelect(false, st, null));
}
}*/
for( Schema.PicklistEntry f : Task.Goal_of_Activity__c.getDescribe().getPicklistValues()) {
if(isNAOProfile==true){
if(f.getValue()!='CORE Referral Manager Training'){
avaiableGoalList.add(new MultiSelect(false, f.getLabel(), null));
}
}
else{
avaiableGoalList.add(new MultiSelect(false, f.getLabel(), null));
}
}
}
//For Goal
system.debug(taskObjectParent.Id + ' =====> ' + taskObjectParent.Goal_of_Activity__c);
if(string.isNotBlank(taskObjectParent.Goal_of_Activity__c)){
for(MultiSelect goal : avaiableGoalList){
for(string str:taskObjectParent.Goal_of_Activity__c.split(';')){
if(goal.Name == str.trim()){
goal.isChecked = true;
}
}
}
totalAvaiableGoal = taskObjectParent.Goal_of_Activity__c.split(';').size();
}
system.debug('avaiableGoalList--111------------->' + avaiableGoalList);
/*if(isNAOProfile==true){
avaiableTopicList = new List<MultiSelect>();
avaiableTopicList.add(new MultiSelect(false, 'Account Maintenance', null));
avaiableTopicList.add(new MultiSelect(false, 'Divisions', null));
avaiableTopicList.add(new MultiSelect(false, 'Events', null));
avaiableTopicList.add(new MultiSelect(false, 'Issue Resolution', null));
avaiableTopicList.add(new MultiSelect(false, 'NAO Material Request', null));
avaiableTopicList.add(new MultiSelect(false, 'New Clinic', null));
avaiableTopicList.add(new MultiSelect(false, 'New Physician', null));
avaiableTopicList.add(new MultiSelect(false, 'NAO Referral Process', null));
avaiableTopicList.add(new MultiSelect(false, 'Quality Outcomes', null));
avaiableTopicList.add(new MultiSelect(false, 'Urgent Ortho', null));
}*/
//For Topics
system.debug(taskObjectParent.Id + ' =====> ' + taskObjectParent.Topics_Discussed__c);
if(string.isNotBlank(taskObjectParent.Topics_Discussed__c)){
for(MultiSelect goal : avaiableTopicList){
for(string str:taskObjectParent.Topics_Discussed__c.split(';')){
if(goal.Name == str.trim()){
goal.isChecked = true;
}
}
}
totalAvaiableTopic = taskObjectParent.Topics_Discussed__c.split(';').size();
}
system.debug('avaiableTopicList--2222------------->' + avaiableTopicList);
}
// Task cannot be created from contact. Button hidden
public PageReference loadNewTask(){
try{
taskObjectParent=new Task();
//Assign default value
taskObjectParent.ActivityDate=Date.Today();
if(recordId != null){
List<Task> taskList = [select whatId,whoId,ActivityDate ,Priority ,Status,
Activity_Cost__c,OwnerId,Visit_Duration__c,Description,Goal_of_Activity__c ,
Topics_Discussed__c,Subject, Type
from task where id=:recordId limit 1];
if(taskList!= null && taskList.size()>0)
{
taskObjectParent=taskList[0];
whatId = taskList[0].whatId;
whoId = taskList[0].whoId;
inputValue = taskList[0].Type;
}
}
if((whatId != null && !whatId.startsWith('001')) || (whoId!=null && !whoId.startsWith('003'))){
PageReference refObject = new PageReference('/00T/e');
refObject.getParameters().putAll(ApexPages.currentPage().getParameters());
refObject.getParameters().put('nooverride', '1');
refObject.setRedirect(true);
return refObject;
}else{
avaiableContactlList = new List<MultiSelect>();
filterFields();
//We do not create task through contact
if(whatId != null && whatId.startsWith('001')){
//get Account Id to fileter contact based on profile
Set<string> setAccountId=new Set<string>();
if(Test.isRunningTest()){
setAccountId.add(whatId);
}
string labelActId=Label.Core_Account_Id;
if(isNAOProfile==true){
labelActId=Label.NAO_Account_Id;
}
if(string.isNotBlank(labelActId)){
for(string st:labelActId.split(',')){
setAccountId.add(st);
}
for(Contact contactObject : [Select id,Name,Email, AccountId From Contact where
RecordType.Name='Internal Provider' AND Inactive__c = false order by Name]){
avaiableContactlList.add(new MultiSelect(false, contactobject.Name, contactObject.Id));
avaiableOptionsContacts.add(new SelectOption(contactObject.Id, contactObject.Name));
}
}
taskObjectParent.WhatId = whatId;
taskObjectParent.OwnerId = Userinfo.getUserId();
}
if(close != null && close =='1'){
taskObjectParent.Status = 'Completed';
}
// when task is created from log a call
System.debug('title > '+ title + 'followup > '+ followup + 'tsk5 > '+ tsk5);
if(title != null && title =='Referral Meeting' && followup !=null && followup == '1' && tsk5 != null && tsk5 == 'Referral Meeting'){
taskObjectParent.Status = 'Completed';
taskObjectParent.Type = title;
}
return null;
}
//return null;
}catch(Exception e){
ApexPages.addMessage(new ApexPages.message(ApexPages.severity.FATAL,e.getMessage()));
return null;
}
}
public String searchText{get;set;}
public PageReference filterContacts(){
for(MultiSelect option : avaiableContactlList){
if(String.isBlank(searchText)){
option.isDisplay = '';
continue;
}
if(!option.Name.contains(searchText)){
option.isDisplay = 'none';
}
}
return null;
}
// for all activity objectives except 'Physician to physician visit' contact is not required.
public PageReference performSave(){
System.debug('############');
try{
string retId=ApexPages.currentPage().getParameters().get('retURL');
system.debug('retId------------>' + retId);
system.debug('recordId------------>' + recordId);
if(string.isBlank(retId)==null || retId==null){
retId=recordId;
}
system.debug('retId111------------>' + retId);
if(string.isBlank(retId)){
if(string.isNotblank(whatId)){
retId=whatId;
}
if(string.isNotblank(whoId)){
retId=whoId;
}
}
system.debug('retId222------------>' + retId);
//String retId = ApexPages.currentPage().getParameters().get('retURL');
boolean isContactSelected = false;
for(MultiSelect conObj : avaiableContactlList){
if(conObj.isChecked){
isContactSelected = true;
break;
}
}
List<Task> tasksToBeSaved = new List<Task>();
if(recordId == null){
if((taskObjectParent.Type == 'Physician-to-Physician Visit' || taskObjectParent.Type == 'Unsuccessful Physician-to-Physician Visit' || taskObjectParent.Type == 'Sports Medicine Phone Call' || taskObjectParent.Type =='Sports Medicine Visit') && isContactSelected == true){
for(MultiSelect conObj : avaiableContactlList){
if(conObj.isChecked){
Task taskObject = createTask(taskObjectParent,conObj.Value);
taskObject.Topics_Discussed__c = '';
taskObject.Goal_of_Activity__c = '';
for(MultiSelect sltVal : avaiableTopicList){
if(sltVal.isChecked){
taskObject.Topics_Discussed__c += sltVal.Name + ';';
}
}
for(MultiSelect sltVal : avaiableGoalList){
if(sltVal.isChecked){
taskObject.Goal_of_Activity__c += sltVal.Name + ';';
}
}
tasksToBeSaved.add(taskObject);
}
}
}else{
Task taskObject = createTask(taskObjectParent,null);
taskObject.Topics_Discussed__c = '';
taskObject.Goal_of_Activity__c = '';
for(MultiSelect sltVal : avaiableTopicList){
if(sltVal.isChecked){
taskObject.Topics_Discussed__c += sltVal.Name + ';';
}
}
for(MultiSelect sltVal : avaiableGoalList){
if(sltVal.isChecked){
taskObject.Goal_of_Activity__c += sltVal.Name + ';';
}
}
tasksToBeSaved.add(taskObject);
}
system.debug(' >>>>> === '+tasksToBeSaved);
upsert tasksToBeSaved;
system.debug(' >>>>> ------'+tasksToBeSaved);
system.debug('retId44------------>' + retId);
System.debug(' Current Url -- '+ApexPages.currentPage().getHeaders().get('Origin'));
System.debug(' > >> > >> > '+Apexpages.currentPage().getUrl());
//PageReference pg = new PageReference('/'+ApexPages.currentPage().getParameters().get('retURL'));
//PageReference pg = new PageReference('/'+retId);
System.debug(' >> > > > 299 = = = '+retId);
PageReference pg = new PageReference(retId);
pg.setRedirect(true);
return pg;
// return null;
}else{
if(((taskObjectParent.Type == 'Physician-to-Physician Visit' && inputValue != 'Physician-to-Physician Visit' ) || (taskObjectParent.Type == 'Sports Medicine Visit' && inputValue != 'Sports Medicine Visit') || (taskObjectParent.Type == 'Sports Medicine Phone Call' && inputValue != 'Sports Medicine Phone Call') ) && isContactSelected == true){
for(MultiSelect conObj : avaiableContactlList){
if(conObj.isChecked){
Task taskObject = createTask(taskObjectParent,conObj.Value);
taskObject.Topics_Discussed__c = '';
taskObject.Goal_of_Activity__c = '';
for(MultiSelect sltVal : avaiableTopicList){
if(sltVal.isChecked){
taskObject.Topics_Discussed__c += sltVal.Name + ';';
}
}
for(MultiSelect sltVal : avaiableGoalList){
if(sltVal.isChecked){
taskObject.Goal_of_Activity__c += sltVal.Name + ';';
}
}
tasksToBeSaved.add(taskObject);
}
}
}else{
taskObjectParent.Subject = taskObjectParent.Type;
taskObjectParent.Topics_Discussed__c = '';
taskObjectParent.Goal_of_Activity__c = '';
for(MultiSelect sltVal : avaiableTopicList){
if(sltVal.isChecked){
taskObjectParent.Topics_Discussed__c += sltVal.Name + ';';
}
}
for(MultiSelect sltVal : avaiableGoalList){
if(sltVal.isChecked){
taskObjectParent.Goal_of_Activity__c += sltVal.Name + ';';
}
}
upsert taskObjectParent;
}
System.debug('=:tasksToBeSaved:=' +tasksToBeSaved);
if(!tasksToBeSaved.isEmpty()){
upsert tasksToBeSaved;
}
//PageReference pg = new PageReference('/'+ApexPages.currentPage().getParameters().get('retURL'));
//PageReference pg = new PageReference('/'+retId);
PageReference pg = new PageReference(retId);
System.debug(' >> > > > 342 = = = '+retId);
pg.setRedirect(true);
return pg;
// return null;
}
}catch(Exception e){
System.debug(e);
return null;
}
//return null;
}
private Task createTask(Task taskObjectParent1,String contactIdStr){
Task taskObject = new Task();
if((taskObjectParent.Type == 'Physician-to-Physician Visit' && inputValue != 'Physician-to-Physician Visit') || (taskObjectParent.Type == 'Sports Medicine Visit' && inputValue != 'Sports Medicine Visit') || (taskObjectParent.Type == 'Sports Medicine Phone Call' && inputValue != 'Sports Medicine Phone Call')){
}else{
taskObject.Id = taskObjectParent1.Id;
}
taskObject.Type = taskObjectParent1.Type;
//taskObject.Subject = taskObjectParent1.Type;
taskObject.whatId = taskObjectParent1.whatId;
taskObject.whoId = contactIdStr;
taskObject.OwnerId = taskObjectParent1.OwnerId;
taskObject.Description = taskObjectParent1.Description;
taskObject.ActivityDate = taskObjectParent1.ActivityDate;
taskObject.Status = taskObjectParent1.Status;
taskObject.Priority = taskObjectParent1.Priority;
taskObject.Goal_of_Activity__c = taskObjectParent1.Goal_of_Activity__c;
taskObject.Topics_Discussed__c = taskObjectParent1.Topics_Discussed__c;
taskObject.Visit_Duration__c = taskObjectParent1.Visit_Duration__c;
taskObject.Activity_Cost__c = taskObjectParent1.Activity_Cost__c;
return taskObject;
}
//Wrapper class
public class MultiSelect{
public boolean isChecked{get;set;}
public String Name{get;set;}
public Id Value{get;set;}
public String isDisplay{get;set;}
public MultiSelect(boolean isChecked, String Name, Id Value){
this.isChecked = isChecked;
this.Name = Name;
this.Value = Value;
this.isDisplay = '';
}
}
}```
Visualforce page -
<apex:page standardController="Task" id="thePageId" extensions="Sim_NewTaskController" tabStyle="Task" action="{!loadNewTask}">
<head>
<meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
</head>
<apex:includeScript value="/soap/ajax/32.0/apex.js"/>
<apex:outPutPanel id="myMSG">
<apex:pageMessages id="msg" />
</apex:outPutPanel>
<script>
function setFocusOnLoad() {}
function toggleComponent(taskType,componentToToggle,taskId){
console.log('taskId : '+taskId);
//filterFields();
if(taskId == 'NULL' || taskId == ''){
var contactComponent = document.getElementsByClassName(componentToToggle)[0];
var selectedValue = taskType.value;
console.log(componentToToggle);
if(selectedValue == 'Physician-to-Physician Visit' || selectedValue == 'Unsuccessful Physician-to-Physician Visit' || selectedValue == 'Sports Medicine Visit' || selectedValue == 'Sports Medicine Phone Call'){
contactComponent.style.display ='block';
}else{
contactComponent.style.display ='none';
}
}else{
var contactComponent = document.getElementsByClassName(componentToToggle)[0];
var selectedValue = taskType.value;
console.log(componentToToggle);
var oldTaskType = String(document.getElementById('thePageId:newTaskPage:theHiddenInput').value);
if((oldTaskType != 'Physician-to-Physician Visit' && selectedValue == 'Physician-to-Physician Visit') || (oldTaskType != 'Sports Medicine Visit' && selectedValue == 'Sports Medicine Visit') || (oldTaskType != 'Sports Medicine Phone Call' && selectedValue == 'Sports Medicine Phone Call') ){
contactComponent.style.display ='block';
}else{
contactComponent.style.display ='none';
}
}
//alert(taskType.value);
filterFields(taskType.value);
}
function filterContactList(searchVal){
var y = document.getElementsByClassName("contactRow");
for (i = 0; i < y.length; i++) {
var title = y[i].title.toUpperCase();
if(title.search(searchVal.toUpperCase()) == 0){
y[i].style.display = '';
}else if(title.search(searchVal) == -1){
y[i].style.display = 'none';
}
}
}
</script>
<style>
<!-- .multilist{
float:left;
vertical-align:middle
}
.multilist p {
padding: 0;
text-align: center;
white-space: normal;
width: 50px;
margin:0;
}
.multilist .btn{
margin-top:3px;
margin-left:10px;
margin-right:10px;
}
.label{
width:100%;
font-weight:bold;
float:left;
}
.relatedToSection{
float:left;
padding-left:13.5%;
}-->
.searchTextBox::placeholder {
font-style:italic;
font-weight: bold;
text-shadow: 0.5px 0px 0.5px #000000;
opacity: 1;
}
.lookupInput {
position: relative;
}
.lookupInput a, .lookupInput a:hover, .lookupInput a:focus {
position: absolute;
width: 30px !important;
height: 30px !important;
right: 0;
top: -1px;
border: 0 !important;
background: transparent !important;
padding: 0 !important;
outline: none !important;
box-shadow: none !important;
}
.custom-tooltip .slds-popover {
display: none;
}
.custom-tooltip a:hover+.slds-popover {
display: block;
}
#media (min-width:767px){
select[multiple] {
min-height: 101px !important;
}
}
</style>
<!-- immediate="true" -->
<apex:slds />
<apex:form id="newTaskPage">
<apex:actionFunction action="{!filterFields}" name="filterFields" reRender="myMSG,taskInfo" >
<apex:param value="" name="tType" />
</apex:actionFunction>
<apex:sectionHeader title="Task" subtitle="New Task"/>
<apex:inputHidden value="{!inputValue}" id="theHiddenInput"/>
<div class="slds-card">
<div class="slds-card__header slds-grid slds-border_bottom slds-p-bottom_small" style="background-color: #fafaf9;">
<div class="slds-media slds-media_center slds-has-flexi-truncate">
<div class="slds-media__body">
<h2 class="slds-card__header-title slds-text-heading_small">
Task Edit
</h2>
</div>
<div class="slds-no-flex">
<apex:commandButton action="{!performSave}" title="Save" value="Save" styleClass="slds-button slds-button_brand"/>
<apex:commandButton action="{!cancel}" title="Cancel" value="Cancel" styleClass="slds-button slds-button_neutral"/>
</div>
</div>
</div>
<div class="slds-card__body slds-p-horizontal_small">
<div class="slds-m-bottom_small slds-p-around_xx-small" style="background-color: #fafaf9;"><strong>Related To</strong></div>
<div class="slds-form slds-form_horizontal">
<div>
<div style="max-width: 600px;">
<apex:outputPanel styleClass="relatedToSection">
<div class="slds-form-element">
<apex:outputLabel value="Account" styleClass="slds-form-element__label"/>
<div class="slds-form-element__control slds-m-top_xxx-small">
<apex:outputField value="{!taskObjectParent.WhatId}" title="This will contain Related Account" label="Account" />
</div>
</div>
<!--apex:outputPanel ></apex:outputPanel-->
<!-- rendered="{!IF((taskObjectParent.Id = null),true,false)}" -->
<apex:outputPanel style="display:none" styleclass="taskContactMultiList" id="contactPenal" >
<apex:inputText styleClass="searchTextBox" value="{!searchText}" onkeyup="filterContactList(this.value);"
style="box-shadow: -10px -2px 25px -8px rgba(158,150,158,1);background-color:#f2f2ff;font-weight: bold;font-size:100%;padding: 5px; color: black; width: 314px;height: 20px;margin-left: 33%;margin-bottom: 1px;" html-placeholder="Select Contacts" >
</apex:inputText>
<div class="slds-form-element">
<apex:outputLabel value="Select Contact to create task" styleClass="slds-form-element__label" id="con12"/>
<div class="slds-form-element__control" style="padding-right: 82px;">
<div class="slds-scrollable_y slds-m-top_x-small slds-m-bottom_small slds-p-around_x-small" style="max-height: 90px; border: 1px solid #dddbda; border-radius: .25rem;">
<table>
<apex:repeat value="{!avaiableContactlList}" var="con" id="myTable">
<tr class="contactRow" title="{!con.Name}">
<td width="20" class="slds-p-bottom_x-small">
<span class="slds-checkbox slds-checkbox_standalone">
<apex:inputCheckbox value="{!con.isChecked}" onclick="selectAllCheckboxes('contactCheckBoxId')" id="contactCheckBoxId"/>
<span class="slds-checkbox_faux"></span>
</span>
</td>
<td class="slds-p-bottom_x-small">
<label >
{!con.Name}
</label>
</td>
</tr>
</apex:repeat>
</table>
</div>
Total Number of Selected record :<span style="font-weight:bold" id="selContactSize">0</span>
</div>
</div>
</apex:outputPanel>
<div class="slds-form-element">
<apex:outputLabel value="Contact" styleClass="slds-form-element__label" rendered="{!IF((taskObjectParent.Id != null),IF(taskObjectParent.whoId == null,false,true),false)}"/>
<div class="slds-form-element__control">
<apex:outputField value="{!taskObjectParent.whoId}" title="this will contain related contact" label="Contact" rendered="{!IF((taskObjectParent.Id != null),IF(taskObjectParent.whoId == null,false,true),false)}"/>
</div>
</div>
</apex:outputPanel>
</div>
<div class="slds-m-bottom_small slds-p-around_xx-small" style="background-color: #fafaf9;"><strong>Task Information</strong></div>
<div id="taskInfo" style="max-width: 600px;">
<div class="slds-form-element">
<apex:outputLabel value="Activity Objective" styleClass="slds-form-element__label"/>
<div class="slds-form-element__control">
<apex:inputField value="{!taskObjectParent.Type}" required="true" onchange="toggleComponent(this,'taskContactMultiList','{!taskObjectParent.Type}');onChangeActMethod()" styleClass="slds-select" Id="st" >
</apex:inputField>
<apex:actionFunction name="onChangeActMethod" action="{!filterFields}" rerender="refreshing"/>
</div>
</div>
<div class="slds-form-element">
<apex:outputLabel value="Goal of Activity" styleClass="slds-form-element__label"/>
<div class="slds-form-element__control" style="padding-right: 82px;">
<div class="slds-scrollable_y slds-m-top_x-small slds-m-bottom_small slds-p-around_x-small" style="max-height: 90px; border: 1px solid #dddbda; border-radius: .25rem;">
<table>
<apex:repeat value="{!avaiableGoalList}" var="goal" >
<tr>
<td width="20" class="slds-p-bottom_x-small">
<span class="slds-checkbox slds-checkbox_standalone">
<apex:inputCheckbox onclick="selectAllCheckboxes('goalCheckBoxId')" value="{!goal.isChecked}" id="goalCheckBoxId"/>
<span class="slds-checkbox_faux"></span>
</span>
</td>
<td class="slds-p-bottom_x-small">
<label>
{!goal.Name}
</label>
</td>
</tr>
</apex:repeat>
</table>
</div>
Total Number of Selected record :<span style="font-weight:bold" id="setGoalsLength">{!totalAvaiableGoal}</span>
</div>
</div>
<div class="slds-form-element">
<apex:outputLabel value="Due Date" styleClass="slds-form-element__label"/>
<div class="slds-form-element__control" style="padding-right: 82px;">
<apex:inputField required="true" value="{!taskObjectParent.ActivityDate}" styleClass="slds-input"/>
</div>
</div>
<div class="slds-form-element">
<apex:outputLabel value="Priority" styleClass="slds-form-element__label"/>
<div class="slds-form-element__control">
<apex:inputField value="{!taskObjectParent.Priority}" styleClass="slds-select"/>
</div>
</div>
<div class="slds-form-element">
<apex:outputLabel value="Status" styleClass="slds-form-element__label"/>
<div class="slds-form-element__control">
<apex:inputField value="{!taskObjectParent.Status}" styleClass="slds-select"/>
</div>
</div>
<div class="slds-form-element">
<label class="slds-form-element__label">Activity Cost
<span class="custom-tooltip" style="position: relative;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<a href="javascript:void(0)" aria-describedby="help">
<span class="slds-icon_container slds-icon-utility-info">
<svg class="slds-icon slds-icon slds-icon_xx-small slds-icon-text-default" aria-hidden="true">
<use xlink:href="{!URLFOR($Asset.SLDS, '/assets/icons/utility-sprite/svg/symbols.svg#info')}"></use>
</svg>
<span class="slds-assistive-text">Click here to learn more</span>
</span>
</a>
<div class="slds-popover slds-popover_tooltip slds-nubbin_bottom-left" role="tooltip" id="help" style="position:absolute;bottom:25px;left:-15px; width: 200px;">
<div class="slds-popover__body">
Enter the cost of any gift or other expense for the activity
</div>
</div>
</span>
</label>
<div class="slds-form-element__control">
<apex:inputField value="{!taskObjectParent.Activity_Cost__c}" styleClass="slds-input"/>
</div>
</div>
<div class="slds-form-element">
<apex:outputLabel value="Assigned To" styleClass="slds-form-element__label"/>
<div class="slds-form-element__control">
<apex:inputField value="{!taskObjectParent.OwnerId}" styleClass="slds-input"/>
</div>
</div>
<div class="slds-form-element">
<apex:outputLabel value="Visit Duration" styleClass="slds-form-element__label"/>
<div class="slds-form-element__control">
<apex:inputField value="{!taskObjectParent.Visit_Duration__c}" styleClass="slds-select" />
</div>
</div>
<div class="slds-form-element">
<apex:outputLabel value="Notes" styleClass="slds-form-element__label"/>
<div class="slds-form-element__control">
<apex:inputField value="{!taskObjectParent.Description}" styleClass="slds-textarea"/>
</div>
</div>
<div class="slds-form-element">
<apex:outputLabel value="Topics Discussed" styleClass="slds-form-element__label"/>
<apex:outputPanel id="refreshing">
<div class="slds-form-element__control" style="padding-right: 82px;">
<div class="slds-scrollable_y slds-m-top_x-small slds-m-bottom_small slds-p-around_x-small" style="max-height: 90px; border: 1px solid #dddbda; border-radius: .25rem;">
<table>
<apex:repeat value="{!avaiableTopicList}" var="topic">
<tr>
<td width="20" class="slds-p-bottom_x-small">
<span class="slds-checkbox slds-checkbox_standalone">
<apex:inputCheckbox value="{!topic.isChecked}" onclick="selectAllCheckboxes('topicCheckBoxId')" id="topicCheckBoxId"/>
<span class="slds-checkbox_faux"></span>
</span>
</td>
<td class="slds-p-bottom_x-small">
<label>
{!topic.Name}
</label>
</td>
</tr>
</apex:repeat>
</table>
</div>
Total Number of Selected record :<span style="font-weight:bold" id="selTopicSize">{!totalAvaiableTopic}</span>
</div>
</apex:outputPanel>
</div>
</div>
</div>
</div>
</div>
<div class="slds-card__footer slds-text-align_right">
<apex:commandButton action="{!performSave}" title="Save" value="Save" styleClass="slds-button slds-button_brand" />
<apex:commandButton action="{!cancel}" title="Cancel" value="Cancel" styleClass="slds-button slds-button_neutral"/>
<apex:commandButton action="{!edit}" title="Edit" value="{!URLFOR($Action.Task.Edit,recordId)}" styleClass="slds-button slds-button_neutral"/>
<!--<apex:outputLink value="{!URLFOR($Action.Task.Edit,recordId)}">Edit</apex:outputLink>-->
</div>
</div>
<script>
function selectAllCheckboxes(receivedInputID){
var inputCheckBox = document.getElementsByTagName("input");
var totalCount = 0;
for(var i=0; i<inputCheckBox.length; i++){
if(inputCheckBox[i].id.indexOf(receivedInputID)!=-1){
if(inputCheckBox[i].checked == true){
totalCount = totalCount + 1;
}
}
}
//console.log('====>' + totalCount);
if(receivedInputID=='contactCheckBoxId'){
document.getElementById('selContactSize').innerHTML = totalCount;
}else if(receivedInputID=='goalCheckBoxId'){
document.getElementById('setGoalsLength').innerHTML = totalCount;
}else if(receivedInputID=='topicCheckBoxId'){
document.getElementById('selTopicSize').innerHTML = totalCount;
}
}
/*window.onload = ()=>{
alert('hello');
}*/
//console.log({!whatId});
function navigateTo() {
//debugger;
let data = '{!whatId}';
console.log(data+'--'+text);
if((typeof sforce != 'undefined') && sforce && (sforce.one)){
// Salesforce1 navigation
sforce.one.navigateToURL('https://www.google.com');
} /*else {
// Set the window's URL using a Visualforce expression
window.location.href = location.origin + '/' + {!whatId};
// site prefix helps when navigation in community
}*/
}
</script>
</apex:form>
</apex:page>
I need to pass id field value to apex class to delete that row by using command button.
Class:
public class search_delete
{
public string id {get;set;}
public list<account> acc{get;set;}
public search_delete()
{
acc = new list<account>();
acc = [SELECT id,name,phone,industry from account];
}
public void delete_record()
{
acc = [SELECT name,phone,industry from account where id = :id];
delete acc;
}
}
VP:
<apex:page controller="search_delete" >
<apex:form >
<apex:pageBlock >
<apex:pageBlockTable value="{!acc}" var="a">
<apex:column value="{!a.Name}"/>
<apex:column value="{!a.Phone}"/>
<apex:column value="{!a.Industry}"/>
<apex:column >
<apex:commandButton value="Delete" Action="{!delete_record}">
<apex:param name="accId" value="{!a.id}"/>
</apex:commandButton>
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
</apex:page>
Now i need to pass id value to apex class from Vp page by the click of delete button.
My Output
use the assignto property of apex command button.
<apex:page controller="search_delete" >
<apex:form >
<apex:pageBlock >
<apex:pageBlockTable value="{!acc}" var="a">
<apex:column value="{!a.Name}"/>
<apex:column value="{!a.Phone}"/>
<apex:column value="{!a.Industry}"/>
<apex:column >
<apex:commandButton value="Delete" Action="{!delete_record}">
<apex:param name="accId" value="{!a.id}" assignto="{!idchosen}/>
</apex:commandButton>
</apex:column>
</apex:pageBlockTable>
</apex:pageBlock>
</apex:form>
public class search_delete
{
public string id {get;set;}
public string idchosen {get;set;}
public list<account> acc{get;set;}
public search_delete()
{
acc = new list<account>();
acc = [SELECT id,name,phone,industry from account];
}
public void delete_record()
{
acc = [SELECT name,phone,industry from account where id = :idchosen];
delete acc;
}
}
I have a visualforce page with pagination using the standardSetController. On the page, I've also added filtering by status...i.e. new, working, closed, etc. Right now, I'm doing a count() for each status value to display the status count on the page, but that requires a query for each status, which is inefficient. I'd like to get the status counts in a more efficient way.
Here is my controller:
public with sharing class myController {
public ApexPages.StandardSetController setCtrl{get; set;}
public String projId { get; set; }
public String clientName { get; set; }
private List<Ticket__c> TicketList = new List<Ticket__c>();
public myController()
{
projId = ApexPages.currentPage().getParameters().get('id');
clientName = [Select Client__r.Name From Project__c Where Id =: projId].Client__r.Name;
setCtrl = new ApexPages.StandardSetController(Database.getQueryLocator([select Ticket_Number__c, Name, Status__c, Description__c, Description_of_Resolution__c, CreatedDate from Ticket__c Where Project__c =: projId ORDER BY CreatedDate DESC]));
ticketList = (List<Ticket__c>)setCtrl.getRecords();
setCtrl.setPageSize(5);
}
public Integer getNewStatusCount() {
return [select count() from Ticket__c Where Project__c =: projId and status__c = 'New'];
}
public Integer getWorkingStatusCount() {
return [select count() from Ticket__c Where Project__c =: projId and status__c = 'Working'];
}
public Integer getResolvedStatusCount() {
return [select count() from Ticket__c Where Project__c =: projId and status__c = 'Resolved'];
}
public Integer getClosedStatusCount() {
return [select count() from Ticket__c Where Project__c =: projId and status__c = 'Closed'];
}
public Integer getCancelledStatusCount() {
return [select count() from Ticket__c Where Project__c =: projId and status__c = 'Cancelled'];
}
public Integer getReopenedStatusCount() {
return [select count() from Ticket__c Where Project__c =: projId and status__c = 'Reopened'];
}
public Boolean hasNext {
get {
return setCtrl.getHasNext();
}
}
public Boolean hasPrevious {
get {
return setCtrl.getHasPrevious();
}
set;
}
public Integer pageNumber {
get {
return setCtrl.getPageNumber();
}
set;
}
public Integer totalPages {
get {
totalPages = math.ceil((Double)setCtrl.getResultSize() / setCtrl.getPageSize()).intValue();
return totalPages;
}
set;
}
public void first() {
setCtrl.first();
}
public void last() {
setCtrl.last();
}
public void previous() {
setCtrl.previous();
}
public void next() {
setCtrl.next();
}
public List<Ticket__c> getTickets()
{
return (List<Ticket__c>)setCtrl.getRecords();
}
public void filterStatus() {
string myParam = apexpages.currentpage().getparameters().get('myParam');
setCtrl = new ApexPages.StandardSetController(Database.getQueryLocator([select Ticket_Number__c, Name, Status__c, Description__c, Description_of_Resolution__c, CreatedDate from Ticket__c Where Project__c =: projId AND Status__c =: myParam ORDER BY CreatedDate DESC]));
setCtrl.setPageSize(5);
}
}
Here is the VF code:
<div class="contact-form">
<apex:outputPanel id="contactForm">
<apex:form >
<ul class="filteredView">
<li>
<apex:outputLink value="/tickets?id={!projId}">View All</apex:outputLink>
</li>
<li>
({!NewStatusCount})
<apex:commandLink action="{!filterStatus}" value=" New" rerender="contactForm">
<apex:param name="myParam" value="New"/>
</apex:commandLink>
</li>
<li>
({!WorkingStatusCount})
<apex:commandLink action="{!filterStatus}" value=" Working" rerender="contactForm">
<apex:param name="myParam" value="Working"/>
</apex:commandLink>
</li>
<li>
({!ResolvedStatusCount})
<apex:commandLink action="{!filterStatus}" value=" Resolved" rerender="contactForm">
<apex:param name="myParam" value="Resolved"/>
</apex:commandLink>
</li>
<li>
({!ClosedStatusCount})
<apex:commandLink action="{!filterStatus}" value=" Closed" rerender="contactForm">
<apex:param name="myParam" value="Closed"/>
</apex:commandLink>
</li>
<li>
({!CancelledStatusCount})
<apex:commandLink action="{!filterStatus}" value=" Cancelled" rerender="contactForm">
<apex:param name="myParam" value="Cancelled"/>
</apex:commandLink>
</li>
<li id="last">
({!ReopenedStatusCount})
<apex:commandLink action="{!filterStatus}" value=" Reopened" rerender="contactForm">
<apex:param name="myParam" value="Reopened"/>
</apex:commandLink>
</li>
</ul>
<h5>
TICKETS
</h5>
<table width="95%" border="1" cellpadding="5">
<tr align="left">
<th style="width:25px;">Ticket#</th>
<th style="width:200px;">Subject</th>
<th>Description</th>
<th style="width:50px;">Status</th>
<th style="width:75px;"></th>
</tr>
<apex:repeat value="{!tickets}" var="ticket">
<tr>
<td>{!ticket.Ticket_Number__c}</td>
<td>{!ticket.Name}</td>
<td>{!ticket.Description__c}</td>
<td>{!ticket.Status__c}</td>
<td><apex:outputLink value="/detail?id={!projId}&ticketId={!ticket.Id}">View Details</apex:outputLink></td>
</tr>
</apex:repeat>
</table>
<apex:outputPanel rendered="{!(tickets.empty == false)}" styleClass="pagination" >
<ul>
<li><apex:commandLink id="first" value="First" action="{!first}" rendered="{!hasPrevious}" /></li>
<li><apex:commandLink id="prev" value="Prev" action="{!previous}" rendered="{!hasPrevious}" /></li>
<li><apex:commandLink id="next" value="Next" action="{!next}" rendered="{!hasNext}" /></li>
<li><apex:commandLink id="last" value="Last" action="{!last}" rendered="{!hasNext}" /></li>
<li><apex:outputText value="Page {!pageNumber} of {!totalPages}" /></li>
</ul>
</apex:outputPanel>
</apex:form>
</apex:outputPanel>
</div>
</div>
Thanks.
You can get the count of each status for all the status's in a single SOQL query
[select status__c, count(id) from Ticket__c Where Project__c =: projId group by status__c]
You could then expose the results through your existing getter, expose the query results and bind them to the UI via a repeater.