Fer servir l'identificador d'un registre
Els identificadors de registre a Ninox
- A cada registre nou de Ninox se li assigna un ID (identificador) únic.
- La numeració comença per
1en una taula nova i s'incrementa d'1a cada entrada nova (2,3, etc.). - Els identificadors suprimits no es tornen a assignar. Per tant, l'ID més alt de la taula reflecteix el nombre total de registres creats, incloent-hi els que s'han suprimit i ja no es veuen.
- Representació dels identificadors:
- Els identificadors es poden representar com a nombres o com a text.
- Quan es representen com a text, l'ID combina l'ID de la taula (una o més lletres majúscules) amb el número del registre.
Exemple:"A1"
Punts clau sobre els identificadors
- Convertir un ID en text:
- Feu servir la funció
string()per obtenir una representació textual d'un ID. - La funció
text()només retorna la part numèrica de l'ID en forma de text. Exemple:"1".
- Feu servir la funció
- Exemple:
"Correct textual representation, e.g. ""A1""";
string(maTable.id);
"Only the numeric part as text, e.g. ""1""";
text(maTable.id);- Fer servir els identificadors en expressions:
- En una operació aritmètica o en una concatenació, l'ID adopta el tipus de l'altra dada.
- Exemple:
var t := "Num ID: " + maTable.id;Resultat: Num ID: 1
Cercar registres per ID
Per recuperar un registre per ID en una clàusula where, podeu fer servir tant un nombre com una representació de text.
Amb un nombre:
select Customer where id = 1;Amb text:
Quan feu servir text, assegureu-vos que l'ID inclogui tant l'ID de la taula com el número del registre.
Exemple:
select Customer where id = "B1";Extreure el número de registre d'un ID
Aquesta funció us permet extreure el número de registre d'un ID en forma de text (per exemple, A1):
function recordNumber(id : text) do
"Capture the digit group.";
number(extractx(id, "^[A-Z]+([0-9]+)$", "", "$1"))
end;
"Example: apply to the current record’s ID";
var numId := recordNumber(string(myId));string(myId) converteix l'ID en text.
La RegExp ^[A-Z]+([0-9]+)$ vol dir
^[A-Z]+→ una o més lletres al començament,([0-9]+)→ les xifres que volem (grup de captura 1),$→ final de la cadena.
extractx(..., "", "$1") retorna només les xifres capturades.
number(...) converteix aquesta cadena de xifres en un nombre.
Trobar un registre amb record()
record(Table, n) retorna directament el registre número n, sense recórrer la taula. El número ha de ser un enter més gran que zero:
- un nombre decimal (
3.5), el zero o un nombre negatiu no retorna res, sense cap missatge: Ninox no arrodoneix el número; 3.0s'accepta: val3;- un text (
"3") o una llista ([3, 4]) es rebutja tan bon punt s'escriu la fórmula («Expression does not return a number», «Expression returns multiple values»): un número rebut com a text s'ha de convertir primer ambnumber().
El parany apareix amb un número calculat (record(Customer, total / 2) quan total és senar) o rebut de fora, per exemple a través de l'API.
"Found: record number 3";
record(Customer, 3);
"Nothing, and no error: Ninox does not round";
record(Customer, 3.5);
"A number received as text must be converted first";
record(Customer, number("3"));Atenció
Un nombre enter que no correspon a cap registre (suprimit o encara no creat) no retorna «res»: record() retorna una referència a un registre absent. Per tant, if record(Customer, 999999) then és cert, mentre que if record(Customer, 3.5) then és fals.
Per saber si el registre existeix, comproveu-ne l'identificador: és buit en tots dos casos.
var n := 3.5;
if record(Customer, n).id then
"The record exists"
else
"No record: n is not a whole number greater than zero, or no record has this number"
end(Mesurat mitjançant l'API, en una taula de 8 registres.)
