Envoi des données vers une autre URL
Développement spécifique d’un composant EpiMob qui surchargerait la synchronisation standard en branchant celle-ci vers l’installation locale et en couvrant les traitements gérés normalement par le Hub (il n’y aurait donc plus besoin de Hub).
Environnement de dev de composant spécifique:
https://github.com/Epiconcept-Paris/epimob-addons
Bulk sur Epicraft
Key: epimob.widget
Value:
{
component: 'SendDataToLocalServer',
option: {
sDatasetName: 'visite'
}
}
Exemple de composant
Attention:
Ce composant utilise la propriété dangerouslyDispatchAction.
Cette propriété permet aux développeurs de déclencher directement des fonctionnalités du noyau sans passer par un objet-interface et NE DOIT être utilisée qu'avec beaucoup de recul et de connaissance des risques.
Cette propriété permet aux développeurs de déclencher directement des fonctionnalités du noyau sans passer par un objet-interface et NE DOIT être utilisée qu'avec beaucoup de recul et de connaissance des risques.
// Library
import React from 'react';
import {View, Text} from 'react-native';
import {Button} from 'epimob-components'
const getManifestOptions = (oProject) => {
if (typeof oProject !== 'object' || oProject === null) {
return {};
}
const {oManifest} = oProject;
if (typeof oManifest === 'object' && typeof oManifest.options === 'object') {
return oManifest.options;
}
return {};
}
export default class SendDataToLocalServer extends React.PureComponent {
constructor() {
super();
this.handleSend = this.handleSend.bind(this);
}
handleSend() {
const {project: oProject, option: oWidgetOptions, datasets: aDatasets} = this.props;
const oManifestOptions = getManifestOptions(oProject);
const {sDatasetName} = oWidgetOptions;
const oDataset = aDatasets.find(oDataset => oDataset.getName() === sDatasetName);
if (oDataset === undefined) {
return undefined;
}
const aRowsIds = oDataset.getRowDatasNotSaved().map(oRow => oRow._id);
dangerouslyDispatchAction(
'projects.message.sendXHR',
// message à envoyer
JSON.stringify(oDataset.toJson(aRowsIds, false)),
// id du message (autogénéré si undefined)
undefined,
// propriétés du message
{
// nom du dataset
sDatasetName,
// liste des rows envoyés
aRowsIds,
// URL pour l'envoi
sDestination: oManifestOptions.localServerURL
}
);
}
render() {
const {project: oProject, option: oWidgetOptions} = this.props;
const oManifestOptions = getManifestOptions(oProject);
return (
<View>
<Text>URL du serveur: {oManifestOptions.localServerURL}</Text>
<Text>Dataset name: {oWidgetOptions.sDatasetName}
<Button onPress={this.handleSend}>Send</Button>
</View>
);
}
}
SendDataToLocalServer.displayName = 'SendDataToLocalServer';
SendDataToLocalServer.defaultProps = {
option: {
sDatasetName: 'patient'
}
}