Afkoblingsmodel
Det er muligt for det kaldende EPJ system at angive hvilken afkoblingsmodel, der skal anvendes.
Der findes 3 modeller:
| Model | Betydning | Typisk anvendelse |
| Synkron timeout | Svartidsgaranti. Lav synkront kald, men returner fejl ved timeout. | Rekvirering af oplysninger. Er de ikke tilgængelige inden timeout, anses servicen og at være utilgængelig. |
| Kø efter timeout | Lav synkront kald og returner svar, hvis det kommer inden timeout. Ved timeout returneres timeout_queued og kaldet konverteres til et asynkront kald. Når svaret kommer sendes det til den angivne svar-kø. | Opdateringer som returnerer Id'er eller andet, som det kan være hensigtsmæssige at have i det videre forløb. |
| Asynkron | Fire-and-forget. Der returneres med det samme, og kaldet udføres snarest muligt. Svaret sendes til den angivne svar-kø. | Opdateringer, hvor man ikke behøver retur-data. |
Hvis der ikke angives en afkoblingsmodel, vil afkoblingskomponenten benytte en default-model og en default timeout. Disse default værdier er:
| Kald | Afkoblingsmodel | Timeout |
| Hent medicinkort | synkron timeout | 20 sek |
| Hent lægemiddelordination | synkron timeout | 20 sek |
| Opret lægemiddelordination | kø efter timeout | 10 sek |
| Opdater lægemiddelordination | kø efter timeout | 10 sek |
| Pausering af lægemiddelordination | kø efter timeout | 10 sek |
| Ophæv pausering af lægemiddelordination | kø efter timeout | 10 sek |
| Seponer lægemiddelordination | kø efter timeout | 10 sek |
| Suspendering af medicinkort | kø efter timeout | 10 sek |
| Frigiv medicinkort | asynkron | - |
| Opret effektuering | asynkron | - |
| Bulk opdatering af medicinkort | asynkron | - |
| Hent medicinkort-version | synkron timeout | 10 sek |
| Opret receptordination ud fra "Den gode XML recept" | synkron timeout | 10 sek |
| Hent receptordination | synkron timeout | 20 sek |
| Opret eller ophæv tilknytning af lægemiddelordination til receptordination | asynkron | - |
| Søg efter seponerede lægemiddelordinationer | synkron timeout | 20 sek |
Ønskes en specifik afkoblingsmodel angives dette i soap-envelope'n med et DecouplingHeader-tag, der er defineret i et SOSI-decoupling-component namespace.
Der mulige værdier for DecouplingModel er:
- synchronous_timeout
- queue_after_timeout
- asynchronous
For de to første angives timeout-tiden i sekunder.
Eksempel:
... xmlns:dcc="http://www.sosi.dk/2007/07/decoupling-component-1.0.xds" ...
<dcc:DecouplingHeader>
<dcc:DecouplingModel>synchronous_timeout</dcc:DecouplingModel>
<dcc:Timeout>5</dcc:Timeout>
</dcc:DecouplingHeader>
Asynkron svarkø
For kald der anvender afkoblingsmodel
queue_after_timeout eller
asynchronous, skal der angives, hvor afkoblingskomponenten skal aflevere svar, der modtages fra PEM2 efter at kaldet er afsluttet.
Det er muligt at angive en MQ eller en mail adresse som en URI:
- MQ: mq://[<username>:<password>@]host[:<port>]/<queuemanager>/<channel>/<queue>
- Mail: mailto:person@server
Svar køen angives med et ReplyTo-tag der er defineret i SOSI-decoupling-component namespace.
Eksempel:
... xmlns:dcc="http://www.sosi.dk/2007/07/decoupling-component-1.0.xds" ...
<dcc:DecouplingHeader>
<dcc:DecouplingModel>queue_after_timeout</dcc:DecouplingModel>
<dcc:Timeout>20</dcc:Timeout>
<dcc:ReplyTo>mailto:hmadsen@svs.rsd.dk</dcc:ReplyTo>
</dcc:DecouplingHeader>
Hvis der ikke er angivet en svarkø, vil svaret blive afleveret i en default svarkø eller default mail-addresse, som er defineret i afkoblingskomponenten. Der kan defineres en default svardestination for hvert system-id.
Status og fejl svar fra afkoblingskomponenten
For at overholde Den Gode WebService returneres både fejlbeskeder og status svar fra afkoblingskomponenten som DGWSFaults med følgende mulige FaultCodes:
| medcom:FaultCode | Forklaring |
| dcc_syntax_error | Beskeden kunne ikke parses. Faultstring indeholder en beskrivelse af fejlen |
| dcc_general_error | Der er opstået en fejl i afkoblingskomponenten. Faulstringen indeholder en beskrivelse af fejlen |
| dcc_timeout | Timeout på forespørgslen under synchronous_timeout afkoblingsmodellen |
| dcc_queued | Status meddelse om at kaldet bliver videreført som asynkront kald under asynchronous afkoblingsmodellen |
| dcc_queued_after_timeout | Status meddelse på forespørgslen under queue_after_timeout afkoblingsmodellen om at der opstået et timeout, men at kaldet videreføres asynkront |
Et eksempel på en fejl svar fra afkoblingskomponenten.
<soapenv:Body>
<soapenv:Fault>
<faultcode>Server</faultcode>
<detail>
<medcom:FaultCode>dcc_syntax_error</medcom:FaultCode>
</detail>
<faultstring>
org.xml.sax.SAXException: Unable to parse decoupling
timeout as a number: 5 seconds
</faultstring>
</soapenv:Fault>
</soapenv:Body>
Et fuldstændig eksempel på en request kan ses
her.
--
ChristianGasser - 23 Oct 2007