Hi,
I've been struggling with the v10 AJAX framework in Sugar 7.6 and I've got it nearly there I think.
Having tackled authentication, and a number of other problems, I'm stuck with it stating my GET request has a "Missing API File" with a 400 error.
Looking in the console, the URL looks right to me by going to: http://%MY LOCAL SITE%/rest/v10/Accounts/VatCheck?vatReg=123&countryCode=GB
The full object returned by the error in the AJAX is:
readyState: 4,
responseText: "{"error":"unknown_exception","error_message":"Missing API file."}", status: 400, statusText: "Bad Request"}
My code is as follows:
custom/modules/Accounts/clients/base/views/record.js
({
// Extends from RecordView
extendsFrom: 'AccountsRecordView',
initialize: function(options) {
this._super('initialize', [options]);
console.log('Custom Record JS in use.');
},
saveClicked: function(callback) {
console.log('save was clicked');
var vatRegNumber = document.getElementsByName('vat_reg_number_c')[0].value;
var countryCodeValue = document.getElementsByName('country_code_c')[0].value;
console.log("Preparing the Ajax Call");
$.ajax
({
beforeSend: function (request)
{
request.setRequestHeader("OAuth-Token", SUGAR.App.api.getOAuthToken());
},
url: "rest/v10/Accounts/VatCheck",
type: "GET",
contentType: "application/json",
data: { "vatReg" : vatRegNumber , "countryCode" : countryCodeValue },
dataType: "json",
success: function(data)
{
console.log("AJAX Call successful");
console.log(data);
if (data.success == 1)
{
console.log("Result succeeded");
}
else
{
app.alert.show('test', {
level: 'error',
title: 'Error:',
messages: data.error,
});
}
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr);
console.log(ajaxOptions);
console.log(thrownError);
}
});
},
})
custom/modules/Accounts/clients/base/api/VatCheck.php
<?php
require_once 'include/api/SugarApi.php';
class VatCheck extends SugarApi
{
public function registerApiRest()
{
return array(
'VatCheck' => array(
'reqType' => 'GET',
'path' => array('Accounts', 'VatCheck'),
'pathVars' => array('vatReg', 'countryCode'),
'method' => 'checkVatCode',
'shortHelp' => 'Returns whether the VAT code entered is valid',
'longHelp' => '',
),
);
}
public function checkVatCode($api,$args)
{
global $db;
$sql = "call AA_CHECK_VAT_NUMBER_S ('?','?')";
$params = array($_REQUEST["vatReg"], $_REQUEST["countryCode"]);
$result = $db->pQuery($sql, $params);
$row = $db->fetchByAssoc($result);
if ($row)
{
$json = array( 'success' => $row['LS_Success'], 'code' => $row['PS_VAT_Number'], 'error' => $row['errorMessage']);
return json_encode($json);
}
else
{
return $db->lastDbError();
}
}
}
?>
I hope someone can point out where I've likely just done something silly here. I've had to make some changes for where it was working in 6.5 using a custom entry point.