in JSLib/src/odata-json-light.js [602:651]
var jsonLightReadAdvertisedFunctionOrAction = function (name, value, obj, baseURI, model) {
/// <summary>Converts a JSON light advertised action or function object into its library representation.</summary>
/// <param name="name" type="String">Advertised action or function name.</param>
/// <param name="value">Advertised action or function value.</param>
/// <param name="obj" type="Object">Object that will the converted value of the advertised action or function.</param>
/// <param name="baseURI" type="String">Base URI for normalizing the action's or function's relative URIs.</param>
/// <param name="model" type="Object" optional="true">Object describing an OData conceptual schema.</param>
/// <remarks>
/// Actions and functions have the same representation in json light, so to disambiguate them the function uses
/// the model object. If available, the function will look for the functionImport object that describes the
/// the action or the function. If for whatever reason the functionImport can't be retrieved from the model (like
/// there is no model available or there is no functionImport within the model), then the value is going to be treated
/// as an advertised action and stored under obj.__metadata.actions.
/// </remarks>
if (!name || !isArray(value) && !isComplex(value)) {
return;
}
var isFunction = false;
var nsEnd = name.lastIndexOf(".");
var simpleName = name.substring(nsEnd + 1);
var containerName = (nsEnd > -1) ? name.substring(0, nsEnd) : "";
var container = (simpleName === name || containerName.indexOf(".") === -1) ?
lookupDefaultEntityContainer(model) :
lookupEntityContainer(containerName, model);
if (container) {
var functionImport = lookupFunctionImport(container.functionImport, simpleName);
if (functionImport && !!functionImport.isSideEffecting) {
isFunction = !parseBool(functionImport.isSideEffecting);
}
}
var metadata = obj.__metadata;
var targetName = isFunction ? "functions" : "actions";
var metadataURI = normalizeURI(name, baseURI);
var items = (isArray(value)) ? value : [value];
var i, len;
for (i = 0, len = items.length; i < len; i++) {
var item = items[i];
if (item) {
var targetCollection = metadata[targetName] = metadata[targetName] || [];
var actionOrFunction = { metadata: metadataURI, title: item.title, target: normalizeURI(item.target, baseURI) };
targetCollection.push(actionOrFunction);
}
}
};