You need to sign in to do that
Don't have an account?
Custom Button-Onclick Java Script error
Hi,
I have a custom button on Contact Page layout. The button actually overrides a Visualforce page.
The visualforce page Uses controller extension to extend Standardcontroller 'Contact". The Extension is " InactiveandMove".
Now, i need to execute Javascript when clicked on the button which pops up a confirmation dialog like, " Are you sure?".
When clicked OK, it has to execute the Controller extension Action : "Move".
But for some reason i am unable to do it. when i click on the button, it raises a error like this:
A problem with the OnClick JavaScript for this button or link was encountered:
missing ; before statement
Everything looks fine, but i am unable to figure out the problem.
Am i missing anything or should this be done in a different way?
Here is the VF Page:
<apex:page standardController="Contact" extensions="Inactiveandmove" >
<apex:form >
<apex:actionFunction name="SendtoMoveFunction" action="{!Move}" reRender="{!Id}"/>
</apex:form>
<apex:PageBlock title="Confirmation">
<b><Font Color="Red" Size="3"> <apex:outputLabel rendered="{!errorFlag}" > {!errorMsg}</apex:outputLabel></Font></b><br/><br/>
<b><Font Color="Green" Size="2"> <apex:OutputText >Please Contact your System Admininstartor for any further action on this!</apex:OutputText></Font></b><br/>
</apex:PageBlock>
</apex:page>
Here is the Controller extension:
public class Inactiveandmove {
public String errorMsg { get; set;}
public Boolean errorFlag {get ; set;}
//Constructor
public Inactiveandmove(ApexPages.StandardController controller)
{
errorMsg = '';
errorFlag = false;
}
public Contact contact { get; private set;}
//Function that does the main job
public PageReference Move(){ // This is the Action function to be called from Java script.
//System.debug('id==='+Apexpages.Currentpage().getparameters().get('Id'));
//Check if the contact is associated with any campaign that is Active.
List<CampaignMember> active_Campaigns=[Select ContactId from CampaignMember where Campaign.Isactive=True and Contactid=:Apexpages.Currentpage().getparameters().get('Id')];
if(active_Campaigns.size()!=0) //If present in any active campaign, do not delete the contact
{
errorFlag=true;
errorMsg='Cannot Delete the Contact, as it is associated with an Active Campaign';
return null;
}
else
{
//Get all the campaigns(Inactive Ones) the contact is associated with
List<CampaignMember> inactive_Campaigns=[Select ContactId from CampaignMember where Contactid=:Apexpages.Currentpage().getparameters().get('Id')];
for(CampaignMember cm:inactive_Campaigns)
delete cm; //Delete the contact from the inactive campaigns
//Get the contact ownerID and AccountName which has to be logically deleted.
contact c=[SELECT ownerId,Account.Name FROM contact where Id=:Apexpages.Currentpage().getparameters().get('Id')];
c.OwnerId='005A0000000h2hh'; //change to Admin
//Set the other values accordingly
//c.Status__c='Retired/Resigned';
c.HasOptedOutOfEmail=True;
c.DoNotCall=True;
c.Email=' ';
c.Phone=' ';
//c.No_Postal_Mail__C=True;
//c.Previous_Account_Name__c=c.Account.Name; // Gets the account name and puts that in this custom field.
//System.debug('account name == '+c.Account.Name);
c.AccountId=NULL;
update c; //Update the contact with New Values.
errorFlag=true;
errorMsg='Record Deleted';
return Null;
}
}
//Test Method
public static testMethod void InactiveandmoveTest()
{
Contact con = [Select id from contact limit 1];
ApexPages.StandardController sc = new ApexPages.StandardController(con);
System.debug('sc id =='+sc.getId());
// sc.setId('003Q0000008c1By');
Inactiveandmove InactiveAndMoveTest = new Inactiveandmove(sc);
Apexpages.currentPage().getParameters().Put('id',sc.getId());
InactiveAndMoveTest.Move();
}
}
Added a custom button on Contact:
Detail Page button
Onclick Javascript
Here is the JavaScript:
{!REQUIRESCRIPT("/soap/ajax/17.0/connection.js")}
function confirmation() {
var answer = confirm("Are You Sure?")
if (answer){
S2M()
}
else{
alert("Thanks for sticking around!")
}
}
function executeS2M() {
var pageref = sendtoMoveFunction();
return pageref;
}
confirmation();
Any help on this is highly appreciated.
Thanks,
Sales4ce
You can not call the controller extension methods directly from onclick js. Instead you have to redirect to the vf page by sending proper ids.
if(confirm('Are you sure?'))
{
window.location.href = "../apex/yourVFPage?contId={!Contact.Id}"; //try window.parent.location.href if it not works
}
//This is the only statement you need in your onclick js. nothing else.
All Answers
You're missing semicolons at the end of three statements in your function confirmation() .
I know javascript is fairly forgiving about this, but since the error message complains about a missing semicolon, I'd suggest adding them and seeing if that fixes it.
Hi,
Thanks for your quick reply!
I even tried the same but to no luck.
Also, i changed the function this way, but it now says "SendtoMoveFunction" Not defined.
What i feel is Javascript is unable to identify the function.
Am i missing anything?
thanks,
sales4ce
I don't understand how you are tieing these pieces together.... where does the visual force page come into it at all?
If your custom button is onclick javascript and appears on a standard page, it certainly can't call a function on some visualforce page.
Thats a good question . I am not quite sure too.
Then how do we execute javascript and then call controller extension methods?
You can not call the controller extension methods directly from onclick js. Instead you have to redirect to the vf page by sending proper ids.
if(confirm('Are you sure?'))
{
window.location.href = "../apex/yourVFPage?contId={!Contact.Id}"; //try window.parent.location.href if it not works
}
//This is the only statement you need in your onclick js. nothing else.
Thanks Srinivas, it worked like charm!
Thx,
sales4ce
var url = '/a0Y/e?retURL={!Opportunity.Id}&RecordType=01250000000J5bY&ent=01I50000000QcYO&CF00N50000002DH5h={!Opportunity.Account}&CF00N50000002DH5h_lkid={!Opportunity.AccountId}&CF00N50000002DH5v={!Opportunity.Name}&CF00N50000002DH5v_lkid={!Opportunity.Id}&CF00N50000002DH5i_lkid={!$User.Id}&CF00N50000002Dnha={!Opportunity.Primary_Third_Party_Acc__c}& CF00N50000002Dnha_lkid={!Opportunity.Primary_Third_Party_Account_ID__c}&CF00N50000002DX3C={!Opportunity.Primary_Third_Party_Contact__c}&CF00N50000002DX3C_lkid={!Opportunity.Primary_Third_Party_Contact_ID__c}&CF00N50000002DH5i={!$User.FirstName}+{!$User.LastName}&00N50000002DK1t={!TODAY()}';
window.open(url,'_self');
}
else{
alert('You don\'t have permission to access this button');
}
Getting the same error
A problem with the OnClick JavaScript for this button or link was encountered:
missing ; before statement
can you help me plz?