Activity Forums Salesforce® Discussions How to create and host S Control in Salesforce?

  • shariq

    Member
    September 22, 2018 at 10:54 pm

    Click on “Setup” which is located on the top right corner of the force.com page.
    Expand “Develop” item and click on “S-Controls”
    Hit “New Custom S-Control”
    Provide a Label “Google Map” and a description is you wished to
    The Type should be HTML since we want to create a HTML, Google API mash up

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Google Maps JavaScript API Example: Advanced Directions</title>
    <link href="/dCSS/Theme2/default/common.css" type="text/css" media="handheld,print,projection,screen,tty,tv"
    rel="stylesheet">
    <link href="/dCSS/Theme2/default/custom.css" type="text/css" media="handheld,print,projection,screen,tty,tv"
    rel="stylesheet">

    <script src=" http://maps.google.com/?file=api&amp;v=2.x&amp;key={YOUR KEY}"
    type="text/javascript"></script>

    <script src="/js/functions.js" type="text/javascript"></script>

    <script type="text/javascript" src="/soap/ajax/13.0/connection.js"></script>

    <style type="text/css">
    body {
    font-family: Verdana, Arial, sans serif;
    font-size: 11px;
    margin: 2px;
    }
    table.directions th {
    background-color:#EEEEEE;
    }

    img {
    color: #000000;
    }
    </style>

    <script type="text/javascript">

    var map;
    var gdir;
    var geocoder = null;
    var addressMarker;
    var dirFrom = '{!$Request.from}';
    var dirTo = '{!$Request.to}';
    var mapLocale = ""
    var SControlID = '{!$Request.lid}';
    var SFrameIC = '{!$Request.ic}';

    function initValues()
    {
    mapLocale = "en_US";

    setInputFields(dirFrom,dirTo);
    }

    function setInputFields(from, to)
    {
    window.document.getElementById("fromAddress").value = from;
    window.document.getElementById("toAddress").value = to;
    }

    function initialize()
    {
    initValues();

    if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map_canvas"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    gdir = new GDirections(map, document.getElementById("directions"));
    GEvent.addListener(gdir, "load", onGDirectionsLoad);
    GEvent.addListener(gdir, "error", handleErrors);

    setDirections(dirFrom, dirTo, mapLocale);
    }
    }

    function setDirections(fromAddress, toAddress, locale) {
    if ((fromAddress) && (toAddress))
    gdir.load("from: " + fromAddress + " to: " + toAddress,
    { "locale": locale });
    }

    function handleErrors()
    {
    if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
    alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.nError code: " + gdir.getStatus().code);
    else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
    alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.n Error code: " + gdir.getStatus().code);

    else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
    alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.n Error code: " + gdir.getStatus().code);

    // else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS) <--- Doc bug... this is either not defined, or Doc is wrong
    // alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.n Error code: " + gdir.getStatus().code);

    else if (gdir.getStatus().code == G_GEO_BAD_KEY)
    alert("The given key is either invalid or does not match the domain for which it was given. n Error code: " + gdir.getStatus().code);

    else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
    alert("A directions request could not be successfully parsed.n Error code: " + gdir.getStatus().code);

    else alert("An unknown error occurred.");

    }

    function onGDirectionsLoad(){
    // Use this function to access information about the latest load()
    // results.

    // e.g.
    // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
    // and yada yada yada...
    }
    </script>

    </head>
    <body onload="initialize()" onunload="GUnload()">
    <div style="background-color: #CCCCCC">
    <form action="#" onsubmit="setDirections(this.from.value, this.to.value, this.locale.value); return false">
    <table>
    <tr>
    <th align="right">
    From:&nbsp;</th>
    <td>
    <input type="text" size="25" id="fromAddress" name="from" value="" /></td>
    <th align="right">
    &nbsp;&nbsp;To:&nbsp;</th>
    <td align="right">
    <input type="text" size="25" id="toAddress" name="to" value="" /></td>
    <th align="right">
    Language:&nbsp;</th>
    <th align="right">
    <select id="locale" name="locale">
    <option value="en" selected="selected">English</option>
    <option value="fr">French</option>
    <option value="de">German</option>
    <option value="ja">Japanese</option>
    <option value="es">Spanish</option>
    </select>
    </th>
    <td>
    <input name="submit" type="submit" value="Get Directions!" /></td>
    </tr>
    </table>
    </form>
    </div>
    <div style="border-width: 1px; border-color: #000000; border-style: solid;">
    <div style="overflow: auto; width: 99.5%; height: 380px">
    <table class="directions" style="width: 100%; height: 100%">
    <tr>
    <td valign="top" style="width: 275px;">
    <div id="directions" style="width: 275px; background-color: #ffffff;">
    </div>
    </td>
    <td valign="top">
    <div id="map_canvas" style="width: 100%; height: 375px; background-color: #ffffff;">
    </div>
    </td>
    </tr>
    </table>
    </div>
    </div>
    </body>
    </html>

    In order to host your s-control in your Visual Force Pages you need to the the following steps:

    Create a new VF page or go to your existing VF page editor
    Pick your S-Control API name and have it ready.
    Within the Page block or where you find suitable add an apex:scontrol tab as follows:

    <apex:scontrol controlName="Google_Map" width="-100"height="415"> </apex:scontrol>

  • Parul

    Member
    September 23, 2018 at 3:22 am

    Hi

    S-Controls allow Salesforce developers to leverage HTML and Javascript to create custom pages and UI components.  These customizations are used when an admin needs to work with a small set of records or fields, or if he or she needs to link to an external server.

    S-Controls enable developers to add their own functionality to a Salesforce org.  Among some of the possibilities, you can integrate hosted apps, or extend the Salesforce UI.

Log In to reply.

Popular Salesforce Blogs

Popular Salesforce Videos