I recently had a request where I needed a button to perform some validations and then launch a SalesLogix report using the client side report library in the SalesLogix web client. I thought I would show you how I did it.
My solution was done to a quickform so I was limited in what actions I had available. What I ended up doing was loading hidden fields and then reading those fields client side. I placed all of my code on the Page Load event like so:
Sage.Entity.Interfaces.IAccount account = this.BindingSource.Current as Sage.Entity.Interfaces.IAccount;
if (account.UserField7 != null)
{
Contract.Value = account.UserField7;
Sage.Entity.Interfaces.IContract contract = Sage.Platform.EntityFactory.GetById<Sage.Entity.Interfaces.IContract>(account.UserField7);
if (contract != null && contract.CContract != null)
{
ContractDate.Value = contract.CContract.TerminationDate.ToString();
}
}
string script = "function FXCheckReport() {";
script += " var contract = document.getElementById('" + Contract.ClientID + "');";
script += " if (contract!=null) var cid = contract.value;";
script += " var contractdate = document.getElementById('" + ContractDate.ClientID + "');";
script += " if(contractdate!=null) var cdate = contractdate.value;";
script += " var currentdate = '" + System.DateTime.Now + "';";
script += " if (!cid || cid=='') {";
script += " confirm('No contract specified for this account'); return false; }";
script += " else if (!cdate|| new Date(cdate) <= new Date(currentdate)) {";
script += " confirm('Contract has been terminated for this account'); return false; }";
script += " else { ShowReportByName('Personal:My Report'); return false;} } ";
ScriptManager.RegisterStartupScript(Page, GetType(), "FXCheckReport", script, true);
The first part of my code retrieves data from the currently bound entity and places them in hidden fields. The second part then constructs a java script function called FXCheckReport. This function examines the hidden fields and then based on the examination then shows various messages or if validations pass, it runs the report I want.
On my button client click action I then just called my injected function like so:
return FXCheckReport();
This is a pretty simple solution really. You could even remove the hidden fields and just inject your values right into the java script code that is constructed, if you wanted to. I thought this solution shows a little bit more though since you can see how to retrieve server bound controls client side.