...
4.3.2.4. Mapovanie parametra so štruktúrovaným typom
Blok kódu | ||||
---|---|---|---|---|
| ||||
@RPC(name = "Redim", |
...
parameters = |
...
{ @Parameter(name = "n", type = ParameterType.integer, inOut = false), |
...
@Parameter(name = "r", type = ParameterType.record, recordType = Person.class) |
...
}) |
...
@ReturnValue(name = "r") |
...
public List<Person> redim( |
...
@ParameterValue(name = "n") Integer length, |
...
@ParameterValue(name = "r") List<Person> data); |
Metóda redim
mapuje RPC, ktorej druhým formálnym parametrom je štruktúrovaná hodnota. Pre správne mapovanie je typ parametra v anotácii nastavený na @Parameter.type = ParameterType.record
a nepovinný parameter anotácie @Parameter.recordType = Person.class
. Použitá definícia štruktúry SD.Person
a jej mapovanie triedou Person
pochádza z kapitoly 5.2.1.
Pri použití metódy redim
bude pre účely návratovej hodnoty vytvorená nová inštancia typu List<Person>
a jej prvky budú nové inštancie typu Person
napriek tomu, že majú rovnaký obsah ako inštancie, ktoré boli použité ako parametre.
4.3.2.5. Mapovanie asynchrónneho volania a časovej značky hodnoty
...
Blok kódu | ||||
---|---|---|---|---|
| ||||
@RPC(name = "SetValue", |
...
asynchronous = true, |
...
parameters = |
...
{ @Parameter(name = "v", type = ParameterType.time, inOut = false) |
...
}) |
...
public void setValue( |
...
@ParameterValue(name = "v") Date value, |
...
@ParameterAttribute(name = "v", attributeType = UnivalAttributeType.valueTime) |
...
Long valueTime); |
Metóda setValue
sa od predošlých príkladov odlišuje tým, že mapuje asynchrónne volanie (RPC.asynchronous = true
). To znamená, že z pohľadu používateľa skončí jej volanie okamžite (po odoslaní správy) a nečaká sa na doručenie odpovede o výsledku. Preto tiež asynchrónna metóda nemôže pristupovať ku výstupnej časti parametrov volania a teda nemôže použiť anotáciu @ReturnValue
alebo @ReturnAttribute
a takisto nemôže nastaviť parametre anotácií ParameterValue.direction
a ParameterAttribute a ParameterAttribute.direction
na hodnoty inout
alebo out
.
Nová anotácia @ParameterAttribute
mapuje vybraný unival atribút – v tomto prípade časovú značku hodnoty (attributeType = UnivalAttributeType.valueTime
) . Pozor, nie je dovolené zavolať metódu s null hodnotou null
hodnotou tohto parametra – mapovanie null
na atribút univalu nie je možné.
V príklade je zámerne použitý iný typ parametra value
(java.util.Date
) a parametra valueTime
(java.lang.Long
). Obidva typy je možné rovnako dobre použiť na mapovanie hodnoty vyjadrujúcej „D2000 absolútny čas", ich výber je na tvorcovi mapovania.
4.3.2.6. Mapovanie procedúry s dvomi výstupnými štruktúrovanými parametrami
...
Blok kódu | ||||
---|---|---|---|---|
| ||||
@RPC(name = "GetDataAndMetadata", |
...
asynchronous = false, |
...
parameters = |
...
{ @Parameter( name = "data", |
...
inOut = true, |
...
type = ParameterType.record, |
...
recordType = Person.class), |
...
@Parameter( |
...
name = "meta", |
...
inOut = true, |
...
type = ParameterType.record, |
...
recordType = Metadata.class)}) |
...
public void getDataAndMetadata( |
...
@ParameterValue(name = "data") InOut<List<Person>> data, |
...
@ParameterValue(name = "meta") InOut<List<Metadata>> meta); |
Metóda getDataAndMetadata
mapuje procedúru s dvomi vstupno-výstupnými parametrami (2 parametre s inOut = true
). V porovnaní s predošlými metódami stojí za povšimnutie:
...