4D v16Llamar tablas y métodos 4D |
||||||||||
|
4D v16
Llamar tablas y métodos 4D
|
Alcance 4D | Objeto Wakanda |
tabla | clase de datos |
selección actual | colección de entidades |
registro actual | entidad |
Nota: los métodos 4D también se pueden llamar del lado del cliente por las fuentes de datos (ver más adelante), en este caso todos los métodos están disponibles, y la fuente de datos los aplica automáticamente a la colección actual o la entidad actual dependiendo del contexto.
Por ejemplo, si realiza un a búsqueda con el método query (ver sección anterior), Wakanda devuelve una colección de entidades. Puede ejecutar cualquier método de proyecto 4D cuyo alcance declarado sea "selección actual".
Los métodos 4D pueden ser llamados por código JavaScript de tres formas:
var vTot = ds.Emp.raiseSalary(param)) //raiseSalary es una propiedad de datastore class //el catálogo está fusionado al modelo activo var vTot2 = my4DStore.Company.first().capital(param)) //capital es una propiedad de entidad ya que first() devuelve una entidad //utilización del modelo dedicado my4DStore
sources.employee.raiseSalary(param, {onSuccess: function(event) { ... //código a ejecutar cuando el método ha terminado} }))
ds.Employee.raiseSalary(param, // a sintaxis se parece a una llamada SSJS {onSuccess: function(event) // pero es el código del lado del cliente por lo que debe gestionar el método de retrollamada de la llamada asincrónica { ... //código a ejecutar cuando el método 4D termina} }))
La elección del lugar (servidor o cliente) y del API depende de las necesidades de la aplicación y se describe en la documentación de Wakanda.
Al igual que con los métodos estándar, usted puede pasar parámetros durante la llamada, que se reciben en el orden en los parámetros $1,$2, etc. Del mismo modo, el método puede devolver un resultado en la variable $0.
Ejemplo: Quiere darle un aumento del 5% a los empleados cuyo salario es menor que 1500.
C_REAL($1)
READ WRITE([Empleados])
FIRST RECORD([Empleados])
While(Not(End selection([Empleados])))
[Employees]salary:=[Empleados]salary*$1
SAVE RECORD([Empleados])
NEXT RECORD([Empleados])
End while
UNLOAD RECORD([Empleados])
var emp = ds.Employees.query("salary < :1",1500); // emp contiene la colección de empleados cuyo salario es <1500 emp.IncreaseSalary(1.05); /ejecuta el método IncreaseSalary en la colección //También se podría escribir: //"ds.Employees.query("salary < :1",1500).IncreaseSalary(1.05);
También puede devolver una selección 4D directamente como una colección Wakanda utilizando el comando MOBILE Return selection. Por ejemplo:
//método proyecto FindCountries
//FindCountries( string ) -> object
C_TEXT($1)
C_OBJECT($0)
QUERY([Countries];[Countries]ShortName=$1+"@")
$0:=MOBILE Return selection([Countries])
Al llamar a un método 4D por medio del enlace de Wakanda:
Tenga en cuenta que después de ejecutar un método vía 4D Mobile, el contexto 4D se reinicializa:
Debe asegurarse de que el alcance del método 4D corresponde al tipo de objeto Wakanda que lo está llamando, de lo contrario el error "TypeError: 'undefined' is not a function" es devuelto por Wakanda.
Por ejemplo, dado el método 4D "getcursel" que contiene el siguiente código:
$0:=Records in selection([Table_1])
Dado el método run del lado Wakanda
var tt = ds.Table_1.query("Field_2 = 'a*'").getcursel();
El método query() devuelve una colección. Si el alcance del método getcursel fue definido como "Registro actual", Wakanda devuelve el siguiente error:
TypeError: 'undefined' is not a function (evaluating 'ds.Table_1.query("Field_2 = 'a*'").getcursel()')".
Producto: 4D
Tema: Llamar tablas y métodos 4D
4D Mobile ( 4D v16)