Aller au contenu principal

Gestion des imports

L'import de fichier vous permet d’importer une liste d'abonnés depuis votre ordinateur ou depuis votre SFTP Mindbaz. Si vous ne connaissez pas les identifiants pour vous connecter à votre SFTP, vous pouvez les demander au service client en cliquant ici.

CENTRE D'aide

Cette article du centre d'aide vous donnera plus d'informations sur les formats et encodages utilisés par l'import de fichier

Programmer un import

Pour importer un fichier d'abonnés, vous pouvez utiliser l'appel POST api/{idsite}/imports/scheduleNow.

Les paramètres à spécifier dans l'url sont les suivants:

NomDescriptionTypeInformations complémentaires
idsiteIdentifiant de site MindBazNombre entierObligatoire

Dans le corps de la requête, les paramètres à passer sous la forme "application/json, text/json" sont les suivants:

NomDescriptionTypeInformations complémentaires
parametersParamètres de base pour créer un importImportParametersObligatoire

Le type ImportParameters est une structure contenant les paramètres pour créer un import d'abonnés:

NomDescriptionTypeInformations complémentaires
filenameNom du fichier à importer. Le fichier doit etre présent sur le ftp de votre base (accès a demander au support mindbaz). 500 caractères maximum. Remarque: Vous pouvez utiliser un sous-répertoire mais il faut également que ce sous-répertoire existe dans le répertoire "errors"Chaine de caractèresObligatoire
startLineNumero de la premiere ligne à importer (1 par defaut)Nombre entierObligatoire
columnNamesFirstLineEntetes de colonne sur la premiere ligneBooléenAucune
textQualifierIdentificateur de texte (" par ex) 1 carac maxChaine de caractèresObligatoire
columnDelimiterSéparateur de colonne (; par ex) 1 carac maxChaine de caractèresObligatoire
rowDelimiterSéparateur de ligne (\\r\ par ex) 10 caractères maximumChaine de caractèresObligatoire
codepageCodepage du fichier (1252 ou 65001 par ex) 1252 par defautNombre entierAucune
sheetNameNom de la feuille excel à importer 255 carac maxChaine de caractèresObligatoire
keyDbFieldNameNom du champ bdd utilisé comme clef de déduplication. 255 carac max Par ex : fld1 pour utiliser l'email comme clef (val par defaut) fld0 pour l'id de l'abonné fld43 pour l'id client md5_fld1 pour le fld1 encodé en md5 (à activer par le support mindbaz avant)Chaine de caractèresObligatoire
keepFld7Ne pas changer l'état de l'abonné? true par defautBooléenAucune
insertEnabledAutoriser l'insertion de nouveaux abonnés? true par defautBooléenAucune
safeModeMode sans échec Activé : Des valeurs vides ou NULL remplacent les champs en erreur de la ligne. La ligne est quand meme importé Désactivé (par défaut) :La ligne complète est en erreur si au moins un de ses champs est en erreur.BooléenAucune
emailNotificationListe des emails (séparé par des ;) qui recevront le rapport d'import à la fin. 500 caractères maximumChaine de caractèresObligatoire
deleteFileSupprimer le fichier du ftp à la fin de l'import? false par defautBooléenAucune
columnMappingMapping des colonnes et des valeurs fixes sur les champs de la bdd. Si une colonne du fichier n'est pas importée, il ne faut pas la mettre dans ce tableau. Attention: Champ obligatoireCollection de ImportMappingObligatoire

Le type ImportMapping enregistre le mapping d'une colonne du fichier sur un champ de la bdd. Dans cette classe, on peut aussi ajouter d'une valeur fixe dans un champ de la bdd (cette valeur fixe sera utilisée pour toutes les lignes du fichier).

NomDescriptionTypeInformations complémentaires
dbFieldNameNom du champs dans la bdd. 15 carac max. Ex : fld1 pour l'email fld2 pour la date de premiere inscription etc. Attention Champ obligatoireChaine de caractèresObligatoire
idMappingModeId du mode de mapping: 1 (par defaut) : écraser (la donnée du fichier écrase la donnée en bdd - sauf si la donnée du fichier est null) 2 : conserver (la donnée du fichier est écrite que si la donnée en bdd est null) Attention Champ obligatoireNombre entierObligatoire
fileColumnNameNom de la colonne du fichier qui est mappé sur dbFieldName. Ne peut etre utilisé en meme temps que le champ fixedValue. 255 carac max Attention Champ obligatoire si fixedValue est null Attention Si le fichier n'a pas d'entete, il faut utiliser col0, col1,etc. comme nom de colonneChaine de caractèresObligatoire
fixedValueValeur fixe mappée sur dbFieldName. Pour une date, mettre au format "dd/MM/yyyy". Ne peut etre utilisé en meme temps que le champ fileColumnName. 1000 carac max Attention Champ obligatoire si fileColumnName est nullChaine de caractèresObligatoire
format Format (de date essentiellement) de la colonne du fichier. A renseigner uniquement pour un mapping sur une colonne (fileColumnName) de type DATE ou LISTE.
Ex de format de DATE: "dd/MM/yyyy HH:mm:ss", "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", ...
Pour un type LISTE, il faut choisir entre 2 formats: "ID" ou "VALUE"
ID : les données dans le fichier pour cette colonne correspondent aux id de la liste (ex "0","1" pour le liste "0:Non,1:Oui")
VALUE : les données dans le fichier pour cette colonne correspondent aux valeurs de la liste (ex "Non","Oui" pour le liste "0:Non,1:Oui")
Pour les autres types, ce champ doit etre null. 30 carac max
Chaine de caractèresAucune

Voici un exemple d'import du fichier "ExportMindBaz_21-06-2022.csv" avec un mapping sur 2 colonnes:

{
"parameters":{
"filename": "ExportMindBaz_21-06-2022.csv",
"startLine": 1,
"columnNamesFirstLine": true,
"textQualifier": null,
"columnDelimiter": "|",
"rowDelimiter": "\r\n",
"codepage": 0,
"sheetName": null,
"keyDbFieldName": "fld1",
"keepFld7": false,
"insertEnabled": true,
"safeMode": false,
"emailNotification": "serviceclient@mindbaz.com;mindbaz@mail.com",
"deleteFile": true,
"columnMapping": [
{
"dbFieldName": "fld158",
"idMappingMode": 1,
"fileColumnName": "ANIMAL_DATE_NAISSANCE",
"fixedValue": null,
"format": "dd/MM/yyyy HH:mm:ss"
},
{
"dbFieldName": "fld157",
"idMappingMode": 1,
"fileColumnName": "ANIMAL_NOM",
"fixedValue": null,
"format": null
}
]
}
}

Codeline

var client = new RestClient("https://api.mindbaz.com/api/{idSite}/imports/scheduleNow");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer `TOKEN`");
request.AddHeader("Content-Type", "application/json");
var body = @"{
" + "\n" +
@" ""parameters"": {
" + "\n" +
@" ""filename"": ""ExportMindBaz_21-06-2022.csv"",
" + "\n" +
@" ""startLine"": 1,
" + "\n" +
@" ""columnNamesFirstLine"": true,
" + "\n" +
@" ""textQualifier"": null,
" + "\n" +
@" ""columnDelimiter"": ""|"",
" + "\n" +
@" ""rowDelimiter"": ""\r\n"",
" + "\n" +
@" ""codepage"": 0,
" + "\n" +
@" ""sheetName"": null,
" + "\n" +
@" ""keyDbFieldName"": ""fld1"",
" + "\n" +
@" ""keepFld7"": false,
" + "\n" +
@" ""insertEnabled"": true,
" + "\n" +
@" ""safeMode"": false,
" + "\n" +
@" ""emailNotification"": ""mail1@mindbaz.com;mail2@mindbaz.com"",
" + "\n" +
@" ""deleteFile"": true,
" + "\n" +
@" ""columnMapping"": [
" + "\n" +
@" {
" + "\n" +
@" ""dbFieldName"": ""fld158"",
" + "\n" +
@" ""idMappingMode"": 1,
" + "\n" +
@" ""fileColumnName"": ""ANIMAL_DATE_NAISSANCE"",
" + "\n" +
@" ""fixedValue"": null,
" + "\n" +
@" ""format"": ""dd/MM/yyyy HH:mm:ss""
" + "\n" +
@" },
" + "\n" +
@" {
" + "\n" +
@" ""dbFieldName"": ""fld157"",
" + "\n" +
@" ""idMappingMode"": 1,
" + "\n" +
@" ""fileColumnName"": ""ANIMAL_NOM"",
" + "\n" +
@" ""fixedValue"": null,
" + "\n" +
@" ""format"": null
" + "\n" +
@" }
" + "\n" +
@" ]
" + "\n" +
@" }
" + "\n" +
@"}";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Attention

Le fichier doit exister sur le sftp au moment de la création de l'import. Sinon vous aurez une erreur 400 avec en erreur "Error, file not found".

L'objet Import

En retour d'appel, j'obtiens un objet de type Import qui contient les informations de l'import nouvellement créé. Récupérez bien l'id de l'import créé. Il vous sera utile pour suivre son état d'avancement.

{
"success": true,
"data": {
"id":252,
"parameters":
{
"filename": "ExportMindBaz_21-06-2022.csv",
"startLine":1,
"columnNamesFirstLine":true,
"textQualifier":null,
"columnDelimiter": "|" ,
"rowDelimiter": "\r\n" ,
"codepage": 0,
"sheetName":null,
"keyDbFieldName": "fld1",
"keepFld7": false,
"insertEnabled": true,
"safeMode": false,
"emailNotification": "serviceclient@mindbaz.com;mindbaz@mail.com" ,
"deleteFile": true,
"columnMapping": [
{
"dbFieldName": "fld157" ,
"idMappingMode": 1,
"fileColumnName": "animal_nom",
"fixedValue": "",
"format": ""
},{
"dbFieldName": "fld158" ,
"idMappingMode": 1,
"fileColumnName": "animal_date_naissance" ,
"fixedValue": "",
"format": "dd/MM/yyyy HH:mm:ss"
}]
},
"creationDate": "2023-01-05T10:35:30.9983907+01:00" ,
"importState": 1,
"isDeleted": false,
"deletionDate":null,
"schedulingInfos":{
"isRecurring":false,
"recurringInfos":null,
"scheduledDate": "2023-01-05T10:37:30.8108812+01:00"
},
"lastImportLog":null
},
"error": null,
"typeName": "Import"
}

Nous retrouvons les paramètres d'entrée et le mapping. Nous obtenons en plus, les informations de programmation :

  • la programmation dans schedulingInfos,
  • le statut de l'import dans importState (1 = programmé)
  • et le log du dernier import effectué dans lastImportLog '(pour l'instant null car l'import ne s'est pas encore lancé).

Le type ImportSchedulingInfos représente les informations d'ordonnancements d'un job d'import:

NomDescriptionTypeInformations complémentaires
scheduledDateDate et heure prévues d'exécutionDateObligatoire
isRecurringIndique s'il s'agit d'une planification récurrenteBooléenAucune
recurringInfosInformations de récurrenceRecurringInfosAucune

Le type RecurringInfos représente les informations de récurrence d'un job:

NomDescriptionTypeInformations complémentaires
filenameTemplateNom de fichier templateChaine de caractèresAucune
frequencyUnitsUnité de fréquence pour qualifier la propriété FrequencyEFrequencyUnitAucune
frequencyFréquence d'exécution (ex: Frequency=5, FrequencyUnits=Day signifie "tous les 5 jours")Nombre entierAucune
monthDayJour du mois programmé (ex: MonthDay=5 signifie "le 5 de chaque mois")Octet non signéAucune
monthDay2Jour du mois programmé (ex: premier lundi, dernier jour ouvrable...)Chaine de caractèresAucune
weekDaysJour(s) de la semaine programméCollection de Octet non signéAucune
timeHeure de la journée programméeChaine de caractèresAucune
startDateDate de débutDateAucune
endDateDate de finDateAucune

Le type EFrequencyUnit est de type Enum:

NomValeurDescription
Day1L'unité de fréquence est en jours
Week2L'unité de fréquence est en semaines
Monthly3L'unité de fréquence est en mois

Suivre l'état d'avancement de mon import

Si vous voulez connaitre l'état de votre import, vous pouvez utiliser l'api GET /api/{idsite}/imports/{idImport} avec l'id de l'import que vous venez de créer. Vous récupérez également le même objet Import en réponse.

Le paramètre qui nous intéresse est le champ importState (EImportState). Le type EImportState est de type Enum:

NomValeurDescription
Scheduled1L'import est programmé
InProgress2L'import est en cours d'exécution
Completed3L'import est terminé
Paused4L'import est en pause
PackageErrorCreation5Erreur lors de la création du package

Si votre import a été mal configuré ou si le mapping a été mal fait, vous aurez un état=5 (PackageErrorCreation).

Lorsque l'import sera fini, vous obtiendrez son log d'execution dans le champ lastImportLog (ImportLog):

NomDescriptionTypeInformations complémentaires
idIdentifiant du logNombre entierAucune
filenameNom du fichier importéChaine de caractèresAucune
startDateDate de début de l'importDateAucune
endDateDate de fin de l'importDateAucune
errorMessageMessage en cas d'erreurChaine de caractèresAucune
totalRowsNombre total de lignes dans le fichierNombre entierAucune
totalDuplicateKeysNombre de lignes en doublon selon la clef selectionnéeNombre entierAucune
nbValidationsNombre de lignes validées suite à la validationNombre entierAucune
nbErrorRowsNombre de lignes en erreurs (avec des valeurs non valides, emails, format de date, longueur de chaines...)Nombre entierAucune
nbBadFormattedRowsnombre de lignes avec des problèmes de format de colonnes (trop de colonnes, colonne avec le texte mal identifié ex: "valeur;"valeur";)Nombre entierAucune
badFormattedRowNumbersNumeros des lignes du fichier avec un mauvais format (1000 carac max)Chaine de caractèresAucune
totalUpdatesNombre total de lignes à mettre à jourNombre entierAucune
nbUpdatesNombre total de lignes mises à jourNombre entierAucune
totalInsertsNombre total de lignes a insérerNombre entierAucune
nbInsertsNombre total de lignes inséréesNombre entierAucune
nbForbiddenInsertsNombre d'insertions interdites (si option interdire les insertions actives ou s'il y a des doublons dans le fichier)Nombre entierAucune