Jump to content
  • 0

Script sur serveur d'import automatique


dden
 Share

Question

Bonjour a toute et tous

J'ai un petit sujet a vous proposer.

Je souhaite faire une import automatique de fichier data dans une de mes base.

Pour ce faire plusieurs  étapes sont nécessaires

 1 lire le contenue du dossier qui va bien

2 choisir le premier fichier à importer

3 importer ce 1er fichier

4 mettre en mémoire ce fichier

5 l’écrire dans un autre dossier avec un nom différents

6 supprimer le 1er fichier pour qu'il ne soit plus importer

7 boucle choisir le 2e fichier etc

fin de script après le dernier fichier

Le script fonctionne très bien en local.

Mais ne fonctionne pas en en automatique a partir du serveur.

J'ai fait en sorte de paramétrer le script sur le poste client qui est sur le serveur pour m'assurer que les adresses fichiers soient les bonnes

Aucune restriction dans le script vis a vis de la compatibilité serveur n'est remontée

Bref ca devrait marcher.

Voici le script : qui utilise BE element


Gestion erreurs [ Oui ]
Mode Recherche [ ]
Activer modèle [ “Liste des lignes de Commande” (LIGNES_CDE) ]
#Action : recherche du contenu dans le dossier DEPOT sur N

Définir variable [ $chemin; Valeur :
BE_FileListFolder ( ConvertFromFileMakerPath (" File:D:\DEPOTKONICA" ; WinPath)
;BE_FileTypeFile
;True
;True
;False
) ]
#Action : Import des données en fonction de la ref LIGNES_CDE::_Kp_Lignes_Id
Boucle
#Action : pour passer au fichier suivant à importer
Définir variable [ $NumLigne; Valeur :$NumLigne+1 ]
#Action : définition du nom du fichier à importer, contenu dans le dossier DEPOT sur N
Définir variable [ $LIN; Valeur :ConvertToFileMakerPath ( ObtenirValeur ( $chemin ; $numligne ) ; WinPath)]
Fin de boucle si [ $LIN="?" ]

Définir variable [ $IDLINE; Valeur :
Extrait (
$LIN;
22;
13) ]
#Action : après la 1re ID recherche des ID suivantes
Définir rubrique [ LIGNES_CDE::_Kp_Lignes_Id; $IDLINE ]

//import XML Tirage depuis "D"
Exécuter la recherche [ ]
#Action : 1re importation dans la ligne de commande
Fin de boucle si [ Obtenir ( DernièreErreur )=401 ]
Définir variable [ $OF; Valeur :Substituer ( LIGNES_CDE::LF_OF_Num ; "." ;"") ]
Importer enregistrements [ XML (du fichier) : $LIN; XSL (du fichier) : xsltretourimp2.xslt; Cible : “LIGNES_CDE”; Méthode : Mettre à
jour; Jeu de caractères : “Windows ANSI”; Correspondance des rubriques : Correspondance de rubrique source 1 avec LIGNES_CDE::
_Kp_Lignes_Id(Activer l'entrée automatique);
LIGNES_CDE::_kf_ref(Activer l'entrée automatique);
Correspondance de rubrique source 3 avec LIGNES_CDE::_kf_NumCDE;
Importation de rubrique source 4 dans LIGNES_CDE::LF_OF_Num(Activer l'entrée automatique);
Importation de rubrique source 5 dans LIGNES_CDE::LF_OperateurImpression;
Importation de rubrique source 6 dans LIGNES_CDE::LF_HoroDateImpression;
Importation de rubrique source 7 dans LIGNES_CDE::LF_QTTirageTotal;
Importation de rubrique source 8 dans LIGNES_CDE::LF_OperateurImpressionVernis;
Importation de rubrique source 9 dans LIGNES_CDE::LF_HoroDateImpressionVernis;
Importation de rubrique source 10 dans LIGNES_CDE::LF_QTTirageTotalVernis;
Importation de rubrique source 11 dans LIGNES_CDE::LF_CouvertureVernis;
Importation de rubrique source 12 dans LIGNES_CDE::LF_HoroDateImpressionFOIL;
Importation de rubrique source 13 dans LIGNES_CDE::LF_OperateurImpressionFOIL;
Importation de rubrique source 14 dans LIGNES_CDE::LF_QTTirageTotalFOIL;
LIGNES_CDE::LF_Date_creation(Activer l'entrée automatique);
LIGNES_CDE::LF_TypeProduit(Activer l'entrée automatique);
LIGNES_CDE::LF_TypeImpression(Activer l'entrée automatique);
LIGNES_CDE::LF_PrixHT_remise(Activer l'entrée automatique);
LIGNES_CDE::LF_PoidsUnitaire(Activer l'entrée automatique);
LIGNES_CDE::LF_Poids_fxqt(Activer l'entrée automatique);
LIGNES_CDE::LF_RistourneUNICEF(Activer l'entrée automatique);
LIGNES_CDE::LF_Logo Unicef(Activer l'entrée automatique);
LIGNES_CDE::LF_DésignationCopie(Activer l'entrée automatique);
LIGNES_CDE::LF_AncienNomClient(Activer l'entrée automatique);
LIGNES_CDE::LF_PrixHT(Activer l'entrée automatique);
LIGNES_CDE::LF_OPE(Activer l'entrée automatique);
LIGNES_CDE::LF_imp fiche suivie(Activer l'entrée automatique);
LIGNES_CDE::LF_valide_annulé(Activer l'entrée automatique);
LIGNES_CDE::LF_ELEMENT OPE(Activer l'entrée automatique);
LIGNES_CDE::LF_OPERATION(Activer l'entrée automatique);
LIGNES_CDE::LF_DateCommande(Activer l'entrée automatique);
LIGNES_CDE::LF_Unités entrantes(Activer l'entrée automatique);
LIGNES_CDE::LF_NumBL(Activer l'entrée automatique);
LIGNES_CDE::LF_MouvId(Activer l'entrée automatique);
LIGNES_CDE::LF_Date_modification(Activer l'entrée automatique);
LIGNES_CDE::LF_AncienNomPDF_Impression(Activer l'entrée automatique);
LIGNES_CDE::LF_Expediable Copie(Activer l'entrée automatique);
LIGNES_CDE::LF_NumCdeFichier(Activer l'entrée automatique);
LIGNES_CDE::LF_compte_modification(Activer l'entrée automatique);
LIGNES_CDE::LF_compte_creation(Activer l'entrée automatique); ]
[ Sans fenêtre ]
#Action : change le nom du fichier pour qu'il ne soit plus choisi
Définir variable [ $NxNom; Valeur :Definir (
[
A =$OF;
B = "_";
C = $IDLINE;
D = " Traité le ";
E = Heures ( Obtenir ( HeureActuelle ));
E1 = Minutes (Obtenir ( HeureActuelle ) );
E2 = Secondes (Obtenir ( HeureActuelle ) );
F = " le ";

3 novembre 2022 23:00:19 CENTURY 21.fmp12 - import XML Tirage depuis "D" -3-
import XML Tirage depuis "D"
G = Jour ( Obtenir ( DateActuelle ) ) ;
H = " ";
I = NomMois ( Obtenir ( DateActuelle ) );
J = " ";
K = Annee ( Obtenir ( DateActuelle ) );
L = ".xml"
];
A & B & C & D & E &"h"& E1 &"m"& E2 &"s"& F & G & H & I & J & k & L
) ]
Définir variable [ $NomFichier; Valeur :"/D:/RETOURKONICA/"&$NxNom]
$NxNom ]
Ouvrir un fichier de données [ “$LIN” ; Cible: $fileID ]
Lire depuis le fichier de données [ ID de fichier: $fileID ; Quantité (octets): ; Cible: $MEM ; Lire au format: Octets ]
Fermer le fichier de données [ ID de fichier: $fileID ]
Créer un fichier de données [ “$NomFichier” ; Créer des dossiers: Non ]
Ouvrir un fichier de données [ “$NomFichier” ; Cible: $fileID ]
Écrire dans le fichier de données [ ID de fichier: $fileID ; Source de données: $MEM ; Écrire au format: UTF-8 ; Ajouter un saut de
ligne: Oui ]
Fermer le fichier de données [ ID de fichier: $fileID ]
Supprimer le fichier [ Fichier cible: “$LIN” ]
Mode Recherche [ ]
Fin de boucle
Activer modèle [ modèle d'origine ]
Mode Utilisation

-----------------------------

Comme je ne peux pas faire de pas a pas avec le serveur

Comment faire pour trouver d"ou viens le couac

Merci de vos retours précieux

Bien Cordialement

 

script.pdf

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Bonjour,

Il y a 8 heures, dden a dit :

D:\DEPOTKONICA

Cet emplacement existe bien sur le serveur, n'est-ce pas ?

Il y a 8 heures, dden a dit :

Comme je ne peux pas faire de pas a pas avec le serveur

Le corollaire du pas à pas sur le serveur est la détection d'erreur.

En gros, après chaque étape importante ("importante" est à définir selon le contexte) du script :

Si [ Obtenir ( DernièreErreur ) ]

	Fin de script [ "Ca coince à l'étape XXX ; Script exécuté : "
    & Obtenir ( NomScript )
    & " ; Table active : "
    & Obtenir ( NomTableModèle )
    & " ; Erreur rencontrée : "
    & Obtenir ( DernièreErreur )
    & " ; Etat des variables : $_variable_1 = "
    & $_variable_1
    & " • $_variable_2 = "
    & $_variable_2
    & " • $_variable_3 = "
    & $_variable_3
    ]

Fin de si

On multiplie donc ce bloc de 3 lignes de script, en adaptant à chaque fois le XXX. Evidemment, en fin de script, on mettra simplement :

Fin de script [ "Opération exécutée entièrement ; Script exécuté : " & Obtenir ( NomScript ) & " ; Table active : " & Obtenir ( NomTableModèle ) & " ; Nombre d'enregistrement trouvés : " & Obtenir ( NombreEnregTrouvés ) ]

Et du côté client : Ouvrir boîte de dialogue [ Obtenir ( RésultatScript ) ].

Dans un second temps, on peut apprendre à enregistrer ("loguer") ces résultats de script exécuté sur serveur.

Bonne journée,

Jérémie

Link to comment
Share on other sites

  • 0

Bonjour,

Pour rappel, FileMaker Server n'a accès qu'à deux répertoires et deux seulement : le dossier Documents (FileMaker Server/Data/Documents) et le dossier temporaire.

Link to comment
Share on other sites

  • 0

Merci @David Julot. N'ayant jamais essayé, je ne savais pas que FileMaker Server ne pouvait accéder à l'ensemble des dossiers de sa propre machine.

Link to comment
Share on other sites

  • 0

Bonjour

@ David J

Une nouvelle nuit de reflexion et de recheche et je pense que tout vient de là :

"Pour rappel, FileMaker Server n'a accès qu'à deux répertoires et deux seulement : le dossier Documents (FileMaker Server/Data/Documents) et le dossier temporaire. "

 

 

 

Donc, il me faut ajuster le script en fonction et faire en sorte de pouvoir faire des tests en local sans avoir les bons chemins

En effet en Locaux le chemin de "Documents" n'est pas le même que sur le serveur. c'est un peu Galère donc.

 

Je vais donc ajuster cela mais :

Question : peut on mettre des sous dossiers dans "Documents" du Serveur et qu'ils soient accessibles?

MERCI

 

Jérémy

Pas mal le sous script avec les retours d'erreurs

merci 

 

 

 

 

 

 

 

 

 

 

 

 

Link to comment
Share on other sites

  • 0

Vous pouvez bien évidemment créer des sous-répertoires dans le dossier Documents. Veillez à appliquer les mêmes droits d'accès à ces sous-répertoires pour FileMaker Server.

Link to comment
Share on other sites

  • 0
Il y a 4 heures, dden a dit :

en Locaux le chemin de "Documents" n'est pas le même que sur le serveur. c'est un peu Galère donc

FileMaker permet de résoudre cette question très simplement avec Obtenir ( CheminDocuments )

Il y a 4 heures, dden a dit :

Pas mal le sous script avec les retours d'erreurs

Il y a plusieurs manières possibles, mais remonter les erreurs est un incontournable de ce genre de situations !

Link to comment
Share on other sites

  • 0

Jeremy :

"FileMaker permet de résoudre cette question très simplement avec Obtenir ( CheminDocuments )"

 

Effectivement, mais le chemin n'est pas le même entre le local et le serveur.

Donc ma ligne de script de comptage des caractères pour allé chercher la bonne ID est faussée

 

David :

" Veillez à appliquer les mêmes droits d'accès à ces sous-répertoires pour FileMaker Server. "

j'ai un doute cC'est dans le terminal FMS ou dans dans Windows ?

Dans windows j'ai donné le contrôle total a tous le monde ...

Cela suffira t il ?

 

merci beaucoup

 

Link to comment
Share on other sites

  • 0

Je parlais des droits Windows. Dans le cas de Windows, vous n'avez normalement pas d'action à mener. Mais, de là à donner les droits à tout le monde ?! Seul FileMaker Server travaille dans ce répertoire.

Link to comment
Share on other sites

  • 0

Ok merci David

Je vais corriger cela ?

Pour l’heure ce n'est pas gagné

mon premier essais pares correction m'a fait buguer le serveur sérieusement

Il m'a fallut redémarrer le poste...

 

 

Link to comment
Share on other sites

  • 0

Bonsoir

Toujours dans l'idée d'importer des fichiers Xml je fait des tests avec de vrais données issue de la production.

Sur les presses numérique ont lance des feuilles teste, puis d'autre encore, jusqu’au tirage finale. Je souhaite récupérer ces quantité de feuilles imprimées

 

Mais avant de lancer le script sur le serveur. Ce que je n'ai pas encore fait par manque de temps pour faire l_installation et les contrôles correcte

Je fait donc les teste pas a pas en manuel et je me suis rendu compte d'un problème dans ma méthodologie.

Le principe du xml est de relier une machine qui génère les XMl à ma base Fmp, pour remonté des données de quantités et d'horodatage dans les rubriques qui vont bien.

Je lis donc dans un fichier les multiples xml de remonté d'info.

Un a un je les importe.

L'ordre d'importation est du plus récent au plus vieux selon la position du fichier dans le dossier (je pense)

Donc dans ma rubrique receveuse, il s'inscrit le dernier nombre remonté.

Mais il se peut que j'ai plusieurs xml pour un seul enregistrement

Exemple

Enregistrement "2555"

1re import xml C = 34

2e import Xml B = 2

3 import Xml A = 2

 

Si ces 3 xml sont pour le même enregistrement alors le dernier chiffre sera 3 car le dernier import écrase les autres

Alors que dans l'idéal : au mieux il me faudrait avoir 34 +2+2 =38 ce qui serait exacte pour mes comptes.

Au pire 34, , mais qui est importée en 1er.. et donc effacé par le plus ancienne ( moins exacte que 39 mais plus juste que 2 qui est la dernière valeur)

 

Question :

Comment procéderiez vous ?

Comment faire pour sommer les valeurs importée

ou au pire que l'ordre d 'importation soit différent

 

Merci de votre retour

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...