EntitySelection
Una entity selection es un objeto que contiene una o más referencias a entidades pertenecientes a la misma Dataclass. Una entity selection puede contener 0, 1 o X entidades de la dataclass -- donde X puede representar el número total de entidades contenidas en la dataclass.
Las entity selections pueden crearse a partir de selecciones existentes utilizando varias funciones de la clase DataClass
como .all()
o .query()
, o funciones de la propia clase EntityClass
, como .and()
u orderBy()
. You can also create blank entity selections using the dataClass.newSelection()
function or the Create new selection
command.
Resumen
[index] : 4D.Entity permite acceder a las entidades dentro de la entity selection utilizando la sintaxis estándar de colecciones |
.attributeName : Collection .attributeName : 4D.EntitySelection una "proyección" de los valores del atributo en la entity selection |
.add( entity : 4D.Entity ) : 4D.EntitySelection .add( entitySelection : 4D.EntitySelection ) : 4D.EntitySelection añade la entity o entitySelection especificada a la selección de entidades original y devuelve la selección de entidades modificada |
.and( entity : 4D.Entity ) : 4D.EntitySelection .and( entitySelection : 4D.EntitySelection ) : 4D.EntitySelection combina la entity selection con un parámetro entity o entitySelection utilizando el operador lógico AND |
.at( index : Integer ) : 4D.Entity devuelve la entidad en la posición index, permitiendo enteros positivos y negativos |
.average( attributePath : Text ) : Real devuelve la media aritmética (promedio) de todos los valores no nulos de attributePath en la entity selection |
.clean() : 4D.EntitySelection devuelve una nueva selección de entidades basada en la selección de entidades original pero sin las entidades eliminadas, si las hubiera |
.contains( entity : 4D.Entity ) : Boolean devuelve true si la referencia de entidad pertenece a la entity selection |
.copy( { option : Integer } ) : 4D.EntitySelection devuelve una copia de la entity selection original |
.count( attributePath : Text ) : Real devuelve el número de entidades en la entity selection con un valor no null en attributePath |
.distinct( attributePath : Text { ; options : Integer } ) : Collection devuelve una colección que contiene sólo valores distintos (diferentes) del attributePath en la entity selection |
.distinctPaths( attribute : Text ) : Collection devuelve una colección de rutas distintas encontradas en el objeto indexado attribute para la entity selection |
.drop( { mode : Integer } ) : 4D.EntitySelection elimina las entidades pertenecientes a la selección de entidades de la tabla relacionada con su dataclass en el datastore |
.extract( attributePath : Text { ; option : Integer } ) : Collection .extract( attributePath { ; targetPath } { ; ...attributePathN : Text ; targetPathN : Text } ) : Collection retorna una colección que contiene los valores de attributePath extraídos de la entity selection |
.first() : 4D.Entity devuelve una referencia a la entidad en la primera posición de la entity selection |
.getDataClass() : 4D.DataClass devuelve la dataclass de la entity selection |
.getRemoteContextAttributes() : Text devuelve información sobre el contexto de optimización utilizado por la entidad |
.isAlterable() : Boolean devuelve True si la entity selection es modificable |
.isOrdered() : Boolean devuelve True si la entity selection está ordenada |
.last() : 4D.Entity devuelve una referencia a la entidad en última posición de la entity selection |
.length : Integer devuelve el número de entidades en la entity selection |
.max( attributePath : Text ) : any devuelve el valor más alto (o máximo) entre todos los valores de attributePath en la entity selection |
.min( attributePath : Text ) : any devuelve el valor más bajo (o mínimo) entre todos los valores de attributePath en la entity selection |
.minus( entity : 4D.Entity { ; keepOrder : Integer } ) : 4D.EntitySelection .minus( entitySelection : 4D.EntitySelection { ; keepOrder : Integer } ) : 4D.EntitySelection excluye la entity selection a la que se aplica la entity o las entidades de entitySelection y devuelve la entity selection resultante |
.or( entity : 4D.Entity ) : 4D.EntitySelection .or( entitySelection : 4D.EntitySelection ) : 4D.EntitySelection combina la entity selection con el parámetro entity o entitySelection utilizando el operador lógico OR (no exclusivo) |
.orderBy( pathString : Text ) : 4D.EntitySelection .orderBy( pathObjects : Collection ) : 4D.EntitySelection devuelve una nueva selección ordenada de entidades que contiene todas las entidades de la entity selection en el orden especificado por los criterios pathString o pathObjects |
.orderByFormula( formulaString : Text { ; sortOrder : Integer } { ; settings : Object} ) : 4D.EntitySelection .orderByFormula( formulaObj : Object { ; sortOrder : Integer } { ; settings : Object} ) : 4D.EntitySelection devuelve una nueva entity selection ordenada |
.query( queryString : Text { ; ...value : any } { ; querySettings : Object } ) : 4D.EntitySelection .query( formula : Object { ; querySettings : Object } ) : 4D.EntitySelection busca las entidades que cumplan con los criterios de búsqueda especificados en queryString o formula y (opcionalmente) value(s) entre todas las entidades de la entity selection |
.queryPath : Text contiene una descripción detallada de la búsqueda tal y como fue realizada por 4D |
.queryPlan : Text contiene una descripción detallada de la búsqueda justo antes de su ejecución (es decir, la búsqueda planeada) |
.refresh() invalida inmediatamente los datos de la entidad seleccionada en la caché local de ORDA |
.selected( selectedEntities : 4D.EntitySelection ) : Object devuelve un objeto que describe la(s) posición(es) de selectedEntities en la entity selection de origen |
.slice( startFrom : Integer { ; end : Integer } ) : 4D.EntitySelection devuelve una parte de una entity selection en una nueva entity selection |
.sum( attributePath : Text ) : Real devuelve la suma de todos los valores de attributePath en la entity selection |
.toCollection( { options : Integer { ; begin : Integer { ; howMany : Integer } } ) : Collection .toCollection( filterString : Text {; options : Integer { ; begin : Integer { ; howMany : Integer }}} ) : Collection .toCollection( filterCol : Collection {; options : Integer { ; begin : Integer { ; howMany : Integer }}} ) : Collection crea y devuelve una colección donde cada elemento es un objeto que contiene un conjunto de propiedades y valores |
[index]
Historia
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
[index] : 4D.Entity
Descripción
La notación EntitySelection[index]
permite acceder a las entidades dentro de la entity selection utilizando la sintaxis estándar de colecciones: pase la posición de la entidad que desea obtener en el parámetro index.
Tenga en cuenta que la entidad correspondiente se vuelve a cargar desde el almacén de datos.
index puede ser cualquier número entre 0 y .length
-1.
- Si index está fuera de rango, se devuelve un error.
- Si index corresponde a una entidad eliminada, se devuelve un valor Null.
EntitySelection[index]
es una expresión no asignable, lo que significa que no se puede utilizar como referencia de entidad editable con métodos como .lock()
o .save()
. Para trabajar con la entidad correspondiente, es necesario asignar la expresión devuelta a una expresión asignable, como una variable. Ejemplos:
$sel:=ds.Employee.all() //creación de la entity selection
//declaraciones no válidas:
$result:=$sel[0].lock() //NO funcionará
$sel[0].lastName:="Smith" //NO funcionará
$result:=$sel[0].save() //NO funcionará
//valid code:
$entity:=$sel[0] //OK
$entity.lastName:="Smith" //OK
$entity.save() //OK
Ejemplo
var $employees : cs.EmployeeSelection
var $employee : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName = :1";"H@")
$employee:=$employees[2] // La tercera entidad de la selección de entidades $employees se recarga de la base de datos
.attributeName
Historia
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.attributeName : Collection
.attributeName : 4D.EntitySelection
Descripción
Todo atributo de dataclass puede ser utilizado como una propiedad de una entity selection para devolver una "proyección" de los valores del atributo en la entity selection. Los valores proyectados pueden ser una colección o una nueva entity selection, dependiendo del kind (storage
o relation
) del atributo.
- Si el tipo de attributeName es
storage
:.attributeName
devuelve una colección de valores del mismo tipo que attributeName. - Si el tipo de attributeName es
relatedEntity
:.attributeName
devuelve una nueva entity selection de valores relacionados del mismo tipo que attributeName. Se eliminan los duplicados (se devuelve una entity selection desordenada). - Si el tipo de attributeName es
relatedEntities
:.attributeName
devuelve una nueva entity selection de valores relacionados del mismo tipo que attributeName. Se eliminan los duplicados (se devuelve una entity selection desordenada).
Cuando se utiliza un atributo de relación como propiedad de una selección de entidades, el resultado es siempre otra selección de entidades, aunque sólo se devuelva una entidad. Cuando se utiliza un atributo de relación como propiedad de una selección de entidades, el resultado es siempre otra selección de entidades, aunque sólo se devuelva una entidad.
Si el atributo no existe en la selección de entidades, se devuelve un error.
Ejemplo 1
Proyección de valores de almacenamiento:
var $firstNames : Collection
$entitySelection:=ds.Employee.all()
$firstNames:=$entitySelection.firstName // firstName es un string
La colección resultante es una colección de cadenas, por ejemplo:
[
"Joanna",
"Alexandra",
"Rick"
]
Ejemplo 2
Proyección de la entidad relacionada:
var $es; $entitySelection : cs.EmployeeSelection
$entitySelection:=ds.Employee.all()
$es:=$entitySelection.employer // employer está relacionado a la dataClass Company
El objeto resultante es una selección de entidades de la empresa con los duplicados eliminados (si los hay).
Ejemplo 3
Proyección de entidades relacionadas:
var $es : cs.EmployeeSelection
$es:=ds.Employee.all().directReports // directReports está relacionado a la dataclass Employee
El objeto resultante es una entity selection de la dataclass Employee sin duplicados (si los hay).
.add()
Historia
Lanzamiento | Modificaciones |
---|---|
19 R7 | Soporte del parámetro entitySelection |
18 R5 | Sólo soporta las entity selections alterables |
17 | Añadidos |
.add( entity : 4D.Entity ) : 4D.EntitySelection
.add( entitySelection : 4D.EntitySelection ) : 4D.EntitySelection
Parámetros | Tipo | Descripción | |
---|---|---|---|
entity | 4D.Entity | -> | Entidad que debe añadirse a la entity selection |
entitySelection | 4D.EntitySelection | -> | Selección de entidades que se añade a la selección de entidades original |
Result | 4D.EntitySelection | <- | Entity selection incluyendo la entity o entitySelection añadida |
Descripción
La función .add()
añade la entity o entitySelection especificada a la selección de entidades original y devuelve la selección de entidades modificada.
Los valores de tipo Date se convierten en valores numéricos (segundos) y se utilizan para calcular la media.
La entity selection debe ser modificable, es decir, ha sido creada, por ejemplo, por .newSelection()
o Create entity selection
, de lo contrario .add()
devolverá un error. Las entity selections compartibles no aceptan la adición de entidades. Para más información, consulte la sección Selecciones de entidades compartibles o modificables.
Añadir una entidad
- Si la entity selection está ordenada, entity se añade al final de la selección. Si una referencia a la misma entidad ya pertenece a la selección de entidades, se duplica y se añade una nueva referencia.
- Si la entity selection no está ordenada, entity se añade en cualquier lugar de la selección, sin un orden específico.
Añadir una selección de entidades
- Si la selección de entidades está ordenada, se mantiene su orden y se añade entitySelection al final de la selección. Si las referencias a las mismas entidades de entitySelection ya pertenecen a la selección de entidades, se duplican y se añaden nuevas referencias.
- Si la selección de entidades está desordenada, se convierte en ordenada.
Para más información, consulte la sección Selección de entidades ordenadas o no ordenadas.
La entity selection modificada es devuelta por la función, de modo que las llamadas a la función pueden encadenarse.
Se produce un error si entity y la entity selection no están relacionadas con la misma dataclass. Si entity es Null, no se produce ningún error.
Ejemplo 1
var $employees : cs.EmployeeSelection
var $employee : cs.EmployeeEntity
$employees:=ds.Employee.newSelection()
$employee:=ds.Employee.new()
$employee.lastName:="Smith"
$employee.save()
$employees.add($employee) //La entidad $employee se añade a la selección de entidades $employees
Ejemplo 2
Las llamadas a la función se pueden encadenar:
var $sel : cs.ProductSelection
var $p1;$p2;$p3 : cs.ProductEntity
$p1:=ds.Product.get(10)
$p2:=ds.Product.get(11)
$p3:=ds.Product.get(12)
$sel:=ds.Product.newSelection()
$sel:=$sel.add($p1).add($p2).add($p3)
Ejemplo 3
En una interfaz de usuario, tenemos dos listas. El usuario selecciona elementos de la lista1 para añadirlos a la lista2.
$sellist2:=$sellist2.add($sellist1)
.and()
Historia
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.and( entity : 4D.Entity ) : 4D.EntitySelection
.and( entitySelection : 4D.EntitySelection ) : 4D.EntitySelection
Parámetros | Tipo | Descripción | |
---|---|---|---|
entity | 4D.Entity | -> | Entidad a intersectar |
entitySelection | 4D.EntitySelection | -> | Entity selection a intersectar |
Result | 4D.EntitySelection | <- | Entity selection resultante de la intersección con el operador lógico AND |
Descripción
La función .and()
combina la entity selection con un parámetro entity o entitySelection utilizando el operador lógico AND; devuelve una nueva entity selection desordenada que contiene sólo las entidades a las que se hace referencia tanto en la entity selection como en el parámetro.
- Si pasa entity como parámetro, se combina esta entidad con la entity selection. Si la entidad pertenece a la entity selection, se devuelve una nueva entity selection que sólo contiene la entidad. En caso contrario, se devuelve una selección de entidades vacía.
- Si se pasa entitySelection como parámetro, se combinan ambas selecciones de entidades. If the entity belongs to the entity selection, a new reference to the entity selection is returned. Otherwise, a new entity selection containing the original entity selection and the entity is returned.
Puede comparar las entity selections ordenadas y/o desordenadas. La selección resultante es siempre desordenada.
Si la entity selection inicial o el parámetro entitySelection están vacíos, o si entity es Null, se devuelve una entity selection vacía.
Si la entity selection inicial y el parámetro no están relacionados con la misma dataclass, se produce un error.
Ejemplo 1
var $employees; $result : cs.EmployeeSelection
var $employee : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName = :1"; "H@")
//La selección de entidades $employees contiene la entidad
//con llave primaria 710 y otras entidades
//por ej. "Colin Hetrick" / "Grady Harness" / "Sherlock Holmes" (llave primaria 710)
$employee:=ds.Employee.get(710) // Devuelve "Sherlock Holmes"
$result:=$employees.and($employee) //$result es una selección de entidades que contiene
//sólo la entidad con llave primaria 710 ("Sherlock Holmes")
Ejemplo 2
Queremos tener una selección de empleados llamados "Jones" que vivan en Nueva York:
var $sel1; $sel2; $sel3 : cs.EmployeeSelection
$sel1:=ds.Employee.query("name =:1";"Jones")
$sel2:=ds.Employee.query("city=:1";"New York")
$sel3:=$sel1.and($sel2)
.at()
Historia
Lanzamiento | Modificaciones |
---|---|
20 | Añadidos |
.at( index : Integer ) : 4D.Entity
Parámetros | Tipo | Descripción | |
---|---|---|---|
index | Integer | -> | Índice de la entidad a devolver |
Result | 4D.Entity | <- | La entidad en ese índice |
Descripción
La función .at()
devuelve la entidad en la posición index, permitiendo enteros positivos y negativos.
Si index es negativo (de -1 a -n con n: longitud de la selección de entidades), la entidad devuelta se basará en el orden inverso de la selección de entidades.
La función devuelve Null si index está más allá de los límites de la entity selection.
Ejemplo
var $employees : cs.EmployeeSelection
var $emp1; $emp2 : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName = :1"; "H@")
$emp1:=$employees.at(2) /3ª entidad de la selección de entidades $employees
$emp2:=$employees.at(-3) //empezando por el final, 3ª entidad
//de la selección de entidades $employees
.average()
Historia
Lanzamiento | Modificaciones |
---|---|
18 R6 | Devuelve undefined si la entity selection está vacía |
17 | Añadidos |
.average( attributePath : Text ) : Real
Parámetros | Tipo | Descripción | |
---|---|---|---|
attributePath | Text | -> | Ruta del atributo a utilizar para el cálculo |
Result | Real | <- | Media aritmética (promedio) de los valores de las entidades para el atributo (No se define para una entity selection vacía) |
Descripción
La función .average()
devuelve la media aritmética (promedio) de todos los valores no nulos de attributePath en la entity selection.
Pase en el parámetro attributePath la ruta del atributo a evaluar.
Sólo se tienen en cuenta los valores numéricos para el cálculo. Tenga en cuenta, sin embargo, que si el attributePath de la selección de entidades contiene tipos de valores mixtos, .average()
tiene en cuenta todos los elementos escalares para calcular el valor medio.
Para más información sobre propiedad compartible de entity selections, consulte la sección Entity selections compartibles o modificables.
.average()
devuelve undefined si la entity selection está vacía o attributePath no contiene valores numéricos.
Se devuelve un error si:
- attributePath es un atributo relacionado,
- attributePath designa un atributo que no existe en la dataclass de la entity selection.
Ejemplo
Queremos obtener una lista de empleados cuyo salario es superior al salario medio:
var $averageSalary : Real
var $moreThanAv : cs.EmployeeSelection
$averageSalary:=ds.Employee.all().average("salary")
$moreThanAv:=ds.Employee.query("salary > :1";$averageSalary)
.clean()
Historia
Lanzamiento | Modificaciones |
---|---|
20 R6 | Añadidos |
.clean() : 4D.EntitySelection
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.EntitySelection | <- | Nueva selección de entidades sin entidades eliminadas |
Descripción
La función .clean()
devuelve una nueva selección de entidades basada en la selección de entidades original pero sin las entidades eliminadas, si las hubiera.
Por defecto, cuando una entidad es eliminada, su(s) referencia(s) en la(s) selección(es) de entidades existente(s) se vuelve(n) undefined pero no se elimina(n) del objeto(s) de selección de entidades. Las entidades eliminadas se siguen incluyendo en la propiedad .length
y se muestran como líneas en blanco si la selección de entidades está vinculada a un objeto de interfaz como una lista. En este caso, llamar a la función .clean()
en la selección de entidades permite obtener una nueva selección de entidades actualizada, que no contiene referencias de entidades undefined.
La selección de entidad resultante mantiene los mismos criterios de orden y la misma propiedad modificable/compartible que la selección de entidad original.
Ejemplo
var $sel; $sel2 : cs.SpecialitySelection
var $status : Object
$sel:=ds.Speciality.query("ID <= 4")
$status:=ds.Speciality.get(2).drop() //eliminar la entidad de la clase de datos
//$sel.length = 4
$sel2:=$sel.clean()
//$sel2.length = 3
Ver también
.contains()
Historia
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.contains( entity : 4D.Entity ) : Boolean
Parámetros | Tipo | Descripción | |
---|---|---|---|
entity | 4D.Entity | -> | Entidad a evaluar |
Result | Boolean | <- | True si la entidad pertenece a la entity selection, de lo contrario False |
Descripción
La función .contains()
devuelve true si la referencia de entidad pertenece a la entity selection, y false en caso contrario.
En entity, especifique la entidad a buscar en la entity selection. Si la entidad es Null, la función devolverá false.
Si entity y la entity selection no pertenecen a la misma dataclass, se produce un error.
Ejemplo
var $employees : cs.EmployeeSelection
var $employee : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName=:1";"H@")
$employee:=ds.Employee.get(610)
If($employees.contains($employee))
ALERT("La entidad con llave primaria 610 tiene un apellido que empieza por H")
Else
ALERT("La entidad con llave primaria 610 no tiene un apellido que empiece por H")
End if
.count()
Historia
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.count( attributePath : Text ) : Real
Parámetros | Tipo | Descripción | |
---|---|---|---|
attributePath | Text | -> | Ruta del atributo que se utilizará para el cálculo |
Result | Real | <- | Número de valores de attributePath no null en la entity selection |
Descripción
La función .count()
devuelve el número de entidades en la entity selection con un valor no null en attributePath.
Sólo se tienen en cuenta los valores escalares. Los valores de tipo objeto o colección se consideran valores nulos.
Se devuelve un error si:
- attributePath es un atributo relacionado,
- attributePath no se encuentra en la dataclass de la entity selection.
Ejemplo
Queremos averiguar el número total de empleados de una empresa sin contar a los que no se les ha especificado el cargo:
var $sel : cs.EmployeeSelection
var $count : Real
$sel:=ds.Employee.query("employer = :1";"Acme, Inc")
$count:=$sel.count("jobtitle")
.copy()
Historia
Lanzamiento | Modificaciones |
---|---|
18 R5 | Añadidos |
.copy( { option : Integer } ) : 4D.EntitySelection
Parámetros | Tipo | Descripción | |
---|---|---|---|
option | Integer | -> | ck shared : devuelve una entity selection compartible |
Result | 4D.EntitySelection | <- | Copia de la entity selection |
Descripción
La función .copy()
devuelve una copia de la entity selection original.
Las entidades de una colección de entidades a las que se accede por medio de [ ] no se recargan desde la base de datos.
Por defecto, si se omite el parámetro option, la función devuelve una nueva entity selection alterable (incluso si la función se aplica a una entity selection compartible). Pase la constante ck shared
en el parámetro option si desea crear una entity selection compartible.
Para obtener información sobre la propiedad compartible de las selecciones de entidades, consulte la sección Selecciones de entidades compartibles o alterables.
Ejemplo
Se crea una nueva entidad vacía de selección de productos cuando se carga el formulario:
Case of
:(Form event code=On Load)
Form.products:=ds.Products.newSelection()
End case
A continuación, esta selección de entidades se actualiza con productos y se desea compartir los productos entre varios procesos. Se copia la selección de la entidad Form.products como compartible:
...
// La selección de entidades de Form.products se actualiza
Form.products.add(Form.selectedProduct)
Use(Storage)
If(Storage.products=Null)
Storage.products:=New shared object()
End if
Use(Storage.products)
Storage.products:=Form.products.copy(ck shared)
End use
End use
.distinct()
Historia
Lanzamiento | Modificaciones |
---|---|
20 | Soporte de dk count values |
17 | Añadidos |
.distinct( attributePath : Text { ; options : Integer } ) : Collection
Parámetros | Tipo | Descripción | |
---|---|---|---|
attributePath | Text | -> | Ruta del atributo cuyos valores distintos desea obtener |
options | Integer | -> | dk diacritical , dk count values |
Result | Collection | <- | Colección con sólo valores distintos |
Descripción
La función .distinct()
devuelve una colección que contiene sólo valores distintos (diferentes) del attributePath en la entity selection.
La colección devuelta se clasifica automáticamente. Los valores Null no son devueltos.
En el parámetro attributePath, pase el atributo de entidad cuyos valores distintos quiere obtener. Sólo se pueden manejar valores escalares (texto, número, booleano o fecha). Si el attributePath conduce a una propiedad de objeto que contiene valores de distintos tipos, primero se agrupan por tipo y después se ordenan. Si attributePath lleva a una propiedad de objeto que contiene valores de diferentes tipos, primero se agrupan por tipo y se ordenan después.
- booleans
- cadenas
- numbers
- dates
Puede utilizar la notación []
para designar una colección cuando attributePath es una ruta en un objeto (ver los ejemplos).
En el parámetro options, puede pasar una o una combinación de las siguientes constantes:
Constante | Valor | Comentario |
---|---|---|
dk diacritical | 8 | La evaluación distingue entre mayúsculas y minúsculas y diferencia los caracteres acentuados. Por defecto si se omite, se realiza una evaluación no diacrítica |
dk count values | 32 | Devuelve el conteo de entidades para cada valor distinto. Cuando se pasa esta opción, .distinct() devuelve una colección de objetos que contienen un par de propiedades {"value":*value*; "count":*count*} . |
La opción dk count values
sólo está disponible con atributos de almacenamiento de tipo booleano, cadena, número y fecha.
Se devuelve un error si:
- attributePath es un atributo relacionado,
- attributePath no se encuentra en la dataclass de la entity selection.
Ejemplos
Quiere obtener una colección que contenga un solo elemento por nombre de país:
var $countries : Collection
$countries:=ds.Employee.all().distinct("address.country")
//$countries[0]={"Argentina"}
//$countries[1]={"Australia"}
//$countries[2]={"Belgium"}
///...
nicknames
es una colección y extra
es un atributo de objeto:
$values:=ds.Employee.all().distinct("extra.nicknames[].first")
Desea obtener el número de nombres de posiciones diferentes en la empresa:
var $jobs : Collection
$jobs:=ds.Employee.all().distinct("jobName";dk count values)
//$jobs[0]={"value":"Developer";"count":17}
//$jobs[1]={"value":"Office manager";"count":5}
//$jobs[2]={"value":"Accountant";"count":2}
//...
.distinctPaths()
Historia
Lanzamiento | Modificaciones |
---|---|
20 | Añadidos |
.distinctPaths( attribute : Text ) : Collection
Parámetros | Tipo | Descripción | |
---|---|---|---|
atributo | Text | -> | Nombre del atributo del objeto cuyas rutas desea obtener |
Result | Collection | <- | Nueva colección con rutas distintas |
Descripción
La función .distinctPaths()
devuelve una colección de rutas distintas encontradas en el objeto indexado attribute para la entity selection.
Si attribute no es un atributo de objeto indexado, se genera un error.
Tras la llamada, el tamaño de la colección devuelta es igual al número de rutas distintas encontradas en attribute para la selección de entidades. Las rutas se devuelven como cadenas que incluyen atributos anidados y colecciones, por ejemplo "info.address.number" o "children[].birthdate". Las entidades con un valor null en el attribute no se tienen en cuenta.
Ejemplo
Desea obtener todas las rutas almacenadas en un atributo objeto fullData:
var $paths : Collection
$paths:=ds.Employee.all().distinctPaths("fullData")
//$paths[0]="age"
//$paths[1]="Children"
//$paths[2]="Children[].age"
//$paths[3]="Children[].name"
//$paths[4]="Children.length"
///...
length se añade automáticamente como ruta para las propiedades de colección anidadas.
.drop()
Historia
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.drop( { mode : Integer } ) : 4D.EntitySelection
Parámetros | Tipo | Descripción | |
---|---|---|---|
mode | Integer | -> | dk stop dropping on first error : detiene la ejecución del método en la primera entidad no suprimible |
Result | 4D.EntitySelection | <- | Entity selection vacía si se ejecuta con éxito, si no entity selection que contengan las entidades no eliminables |
Descripción
La función .drop()
elimina las entidades pertenecientes a la selección de entidades de la tabla relacionada con su dataclass en el datastore. La entity selection permanece en la memoria.
La eliminación de entidades es permanente y no se puede deshacer. Se recomienda llamar a esta acción en una transacción para tener una opción de recuperación.
Si se encuentra una entidad bloqueada durante la ejecución de .drop()
, no se elimina. Por defecto, el método procesa todas las entidades de la selección de entidades y devuelve las entidades no eliminables en la selección de entidades. Si desea que el método detenga la ejecución en la primera entidad no suprimible encontrada, pase la constante dk stop dropping on first error
en el parámetro mode.
Ejemplo
Ejemplo sin la opción dk stop dropping on first error
:
var $employees; $notDropped : cs.EmployeeSelection
$employees:=ds.Employee.query("firstName=:1";"S@")
$notDropped:=$employees.drop() // $notDropped es una entity selection que contiene todas las entidades que no suprimidas
If($notDropped.length=0) //La acción de eliminación es exitosa, todas las entidades han sido eliminadas
ALERT("You have dropped "+String($employees.length)+" employees") //La selección de entidades eliminada permanece en la memoria
Else
ALERT("Problem during drop, try later")
End if
Ejemplo con la opción dk stop dropping on first error
:
var $employees; $notDropped : cs.EmployeeSelection
$employees:=ds.Employee.query("firstName=:1";"S@")
$notDropped:=$employees.drop(dk stop dropping on first error) //$notDropped es una entity selection que contiene la primera entidad no suprimida
If($notDropped.length=0) //La acción de eliminación es exitosa, todas las entidades han sido eliminadas
ALERT("You have dropped "+String($employees.length)+" employees") //La selección de entidades eliminada permanece en la memoria
Else
ALERT("Problem during drop, try later")
End if
.extract()
Historia
Lanzamiento | Modificaciones |
---|---|
18 R3 | Añadidos |
.extract( attributePath : Text { ; option : Integer } ) : Collection
.extract( attributePath { ; targetPath } { ; ...attributePathN : Text ; targetPathN : Text } ) : Collection
Parámetros | Tipo | Descripción | |
---|---|---|---|
attributePath | Text | -> | Ruta del atributo cuyos valores deben ser extraídos en la nueva colección |
targetPath | Text | -> | Ruta o nombre del atributo objetivo |
option | Integer | -> | ck keep null : incluye los atributos null en la colección devuelta (ignorados por defecto) |
Result | Collection | <- | Colección que contiene los valores extraídos |
Descripción
La función .extract()
retorna una colección que contiene los valores de attributePath extraídos de la entity selection.
attributePath puede referirse a:
- un atributo escalar de dataclass,
- entidad relacionada,
- entidades relacionadas.
Si attributePath es inválido, se devuelve una colección vacía.
Esta función acepta dos sintaxis.
.extract( attributePath : Text { ; option : Integer } ) : Collection
Con esta sintaxis, .extract()
llena la colección devuelta con los valores attributePath de la entity selection.
Por defecto, las entidades para las que attributePath es null o indefinida se ignoran en la colección resultante. Puede pasar la constante ck keep null
en el parámetro option para incluir estos valores como elementos null en la colección devuelta.
- Los atributos dataclass con .kind = "relatedEntity" se extraen como una colección de entidades (se mantienen las duplicaciones).
- Los atributos dataclass con .kind = "relatedEntities" se extraen como una colección de entity selections.
.extract ( attributePath ; targetPath { ; ...attributePathN ; ... targetPathN}) : Collection
Con esta sintaxis, .extract()
llena la colección devuelta con las propiedades attributePath. Cada elemento de la colección devuelta es un objeto con las propiedades targetPath llenadas con las propiedades attributePath correspondientes. Se conservan los valores null (el parámetro opción se ignora con esta sintaxis).
Si se indican varios attributePath, debe indicarse un targetPath para cada uno de ellos. Sólo los pares [attributePath, targetPath] válidos se extraen.
- Los atributos dataclass con .kind = "relatedEntity" se extraen como una entidad.
- Los atributos dataclass con .kind = "relatedEntities" se extraen como una selección de entidades.
Los valores Null se evalúan como inferiores a los otros valores.
Ejemplo
Dada la siguiente tabla y relación:
var $firstnames; $addresses; $mailing; $teachers : Collection
//
//
//$firstnames es una colección de cadenas
$firstnames:=ds.Teachers.all().extract("firstname")
//
//$addresses es una colección de entidades relacionadas con la dataclass Address
//Se extraen los valores null de Address
$addresses:=ds.Teachers.all().extract("address";ck keep null)
//
//
//$mailing es una colección de objetos con las propiedades "who" y "to"
//El contenido de la propiedad "who" es de tipo Cadena
//El contenido de la propiedad "to" es de tipo entity (dataclass Address)
$mailing:=ds.Teachers.all().extract("lastname";"who";"address";"to")
//
//
//$mailing es una colección de objetos con las propiedades "who" y "city"
//El contenido de la propiedad "who" es de tipo Cadena
//El contenido de la propiedad "city" es de tipo Cadena
$mailing:=ds.Teachers.all().extract("lastname";"who";"address.city";"city")
//
//$teachers es una colección de objetos con las propiedades "where" y "who"
//El contenido de la propiedad "where" es de tipo Cadena
//El contenido de la propiedad "who" es una entity selection (dataclass Teachers)
$teachers:=ds.Address.all().extract("city";"where";"teachers";"who")
//
//$teachers es una colección de entity selections
$teachers:=ds.Address.all().extract("teachers")
.first()
Historia
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.first() : 4D.Entity
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.Entity | <- | Referencia a la primera entidad de la entity selection (Null si la selección está vacía) |