Search code examples
javascriptsqlibm-mobilefirstworklight-adapters

Post Form Value to SQL adaper Worklight V6


How do I POST all the values from a form to an sql adapter that inserts the form values into the database?

  1. I have a form with an onclick event

  2. I have an adapter setup with a procedure to addUserInfo:

    function addUserInfo(firstname, lastname, email, state, province, zippostal, phonenumber, streetnamenumber, city) {
        return WL.Server.invokeSQLStatement({
            preparedStatement : addStatement,
            parameters : [firstname, lastname, email, state, province, zippostal, phonenumber, streetnamenumber, city]
        });
    }
    

Can I get some advice/an example of how to connect the two?


Solution

  • The following answer provides an end-to-end scenario for inserting values taken from the HTML and into a database: https://stackoverflow.com/a/25164028/1530814


    You need to get the input from the HTML and use it as the WL.client.invokeProcedure's parameters:

    function loadFeeds1(){
        var invocationData = {
            adapter:"car2",
            procedure:"getuser",
            parameters:[$('#carnum').val(),$('#details').val()]
        };
    
        WL.Server.invokeProcedure(invocationData,{
            onSuccess :loadFeedsSuccess1,
            onFailure :loadFeedsFailure1,
        });
    }
    

    HTML:

    <h1>Test Insert Into Database</h1>
    <input type="text" id="value1" placeholder="value1"/><br/>
    <input type="text" id="value2" placeholder="value2"/><br/>
    <input type="button" value="Insert values to database" onclick="insertValuesToDB();"/>
    

    main.js:

    function insertValuesToDB() {
        var invocationData = {
            adapter: 'insertValuesAdapter',
            procedure: 'insertValuesProcedure',
            parameters: [$('#value1').val(), $('#value2').val()]
        };
    
        WL.Client.invokeProcedure(invocationData, {onSuccess: insertSuccess, onFailure: insertFailure});
    }
    
    function insertSuccess() {
        alert("success");
    }
    
    function insertFailure() {
        alert("failure");
    }
    

    Adapter XML:

    ...
    ...
    <connectivity>
        <connectionPolicy xsi:type="sql:SQLConnectionPolicy">
            <dataSourceDefinition>
                <driverClass>com.mysql.jdbc.Driver</driverClass>
                <url>jdbc:mysql://localhost:3306/worklight_training</url>
                <user>Worklight</user>
                <password>Worklight</password> 
            </dataSourceDefinition> 
        </connectionPolicy>
        <loadConstraints maxConcurrentConnectionsPerNode="5" />
    </connectivity>
    
    <procedure name="insertValuesProcedure"/>
    ...
    ...
    

    Adapter implementation:

    var insertValuesProcedureStatement = WL.Server.createSQLStatement("INSERT INTO users(userId, firstName, lastName, password) VALUES (?,?, 'someLastName', 'somePassword')");
    
    function insertValuesProcedure(value1,value2) {
        return WL.Server.invokeSQLStatement({
            preparedStatement : insertValuesProcedureStatement,
            parameters : [value1,value2]
        });
    }