Passer au contenu principal
ABBYY FlexiLayout Studio offre plusieurs fonctionnalités spéciales pour développer des FlexiLayouts supplémentaires pour les projets de factures :
  • Vous pouvez définir l’emplacement des éléments par rapport aux régions des champs détectés lors de l’application du FlexiLayout principal du projet de factures.
  • Les identifiants des fournisseurs et des unités commerciales peuvent être utilisés dans les requêtes adressées au jeu de données de la Document Definition.
  • Les listes de mots-clés et les autres paramètres d’un FlexiLayout peuvent être exportés vers un fichier XML, ce qui permet de les modifier sans avoir à modifier le FlexiLayout ni la Document Definition.
  1. Ouvrez un batch contenant des factures reconnues dans FC.
  2. Créez un nouveau projet dans ABBYY FlexiLayout Studio. Dans le menu principal, sélectionnez Tools → Export Batch to FlexiLayout Studio → Create New FlexiLayout Studio Project…
Remarque : Cette commande n’est disponible que pour les projets FC stockés sur votre ordinateur. Si vous utilisez la version distribuée de FC et que le projet est stocké sur le serveur, vous devez d’abord le télécharger sur votre ordinateur en cliquant sur Export Project… dans le menu Project.Remarque : Le suffixe du projet ABBYY FlexiLayout Studio indique la version de la Document Definition au moment de la création du projet.Le projet ABBYY FlexiLayout Studio que vous venez de créer contient tous les documents du batch FC, ainsi que les régions des champs détectés lors de la reconnaissance dans FC, sous la forme d’une disposition de référence.

Arborescence

Nœud

Description

SearchElements

CommonBlockRegions

Ce nœud contient les éléments correspondant à tous les champs de la Document Definition. Les coordonnées de toutes les régions de blocs détectées lors de l’application des FlexiLayouts à chaque document dans FC sont enregistrées dans le projet ABBYY FlexiLayout Studio. Par défaut, les régions ayant ces coordonnées sont affectées aux éléments portant le même nom que les champs de la Document Definition. Vous pouvez ainsi les utiliser pour définir les emplacements relatifs des éléments et créer de nouveaux éléments.

CustomSearchElements

Ce nœud contient des exemples d’éléments. Ils sont désactivés par défaut afin d’éviter toute interférence lors de l’application du FlexiLayout.

DataSetRequestSample - Exemple de requête adressée au jeu de données des fournisseurs et des unités commerciales stockés dans la Document Definition. Ce jeu de données inclut les identifiants des fournisseurs et des unités commerciales.

Pour ajouter un champ à un FlexiLayout supplémentaire, vous devez créer un bloc pour ce champ et définir son élément de recherche.Les champs de la Document Definition doivent avoir des noms uniques. Cela signifie que :
  • Pour décrire la logique de recherche d’un champ, vous devez créer un bloc avec un nom unique.
  • Pour modifier la logique de recherche d’un champ qui existe déjà dans la Document Definition, vous devez créer un bloc portant le même nom.
Si vous souhaitez tester sur de nouvelles images les modifications apportées à un FlexiLayout supplémentaire, vous pouvez exporter vos batchs FC vers un projet de factures existant dans ABBYY FlexiLayout Studio. Pour exporter vos batchs, cliquez sur Tools → Export Batch to FlexiLayout Studio → Add to Existing FlexiLayout Studio Project…
  • Vous pouvez exporter des batchs FC uniquement vers les projets ABBYY FlexiLayout Studio créés en sélectionnant Tools → Export Batch to FlexiLayout Studio → Create New FlexiLayout Studio Project…
  • Lorsque vous exportez un batch FC vers ABBYY FlexiLayout Studio, un nouveau batch est créé dans ABBYY FlexiLayout Studio pour ce batch.
  • Si la nouvelle Document Definition comporte plus de champs que la Document Definition utilisée pour le projet ABBYY FlexiLayout Studio, le journal d’exportation contiendra un avertissement pour chaque champ supplémentaire.
  • Pour que le programme exporte les champs supplémentaires, ajoutez, pour chacun d’eux, un bloc portant le même nom dans le nœud CommonBlockRegions de l’arborescence SearchElements.
Vous pouvez trouver un exemple de requête dans l’élément DataSetRequestSample. Cet élément est désactivé par défaut.
TypeDescription
NamedValueUne valeur nommée
Constructeur
NamedValue( String, String )
Méthodes
String Name()Retourne le nom d’une valeur nommée
String Value()Retourne la valeur d’une valeur nommée
NamedValueArrayUn tableau de valeurs nommées
Constructeurs
NamedValueArray()
NamedValueArray( NamedValue namedValue )
Méthodes
Int Count()Retourne le nombre total d’éléments du tableau.
NamedValue GetAt( Int index )Retourne l’élément à l’indice spécifié.
Void Add( NamedValue namedValue )Ajoute une valeur nommée au tableau.
Void Add( NamedValueArray namedValueArray )Ajoute un tableau de valeurs nommées à un autre tableau de valeurs nommées.
Void InsertAt( Int index, NamedValue namedValue )Insère namedValue à la position indiquée par l’indice.
Void DeleteAll()Supprime tous les éléments d’un tableau.
Void DeleteAt( Int index )Supprime l’élément situé à l’indice de position.
Int FindByName( String name )Renvoie la position de la valeur nommée name.

Fonctions

Syntaxe :
  • Le chemin d’accès du Document Definition et le nom du jeu de données seront utilisés pour accéder au jeu de données lorsque vous travaillez avec un FlexiLayout dans ABBYY FlexiLayout Studio.
  • Une fois qu’un FlexiLayout compilé a été ajouté à une définition de document dans FC, seul son nom sera utilisé pour accéder au jeu de données.
  • Format connectionString :
“dbtype=FCDataset;fcTemplate=path_to_Document_Definition;datasetName=name_of_Data_Set;”Remarque : Les éléments du chemin doivent être séparés par des doubles barres obliques inverses ""
  • searchFields Tableau contenant les noms des colonnes à partir desquelles récupérer les valeurs.
  • searchCriteria Tableau de paires colonne-entrée ; renvoie toutes les valeurs s’il est vide.
    • Si une requête contient plusieurs valeurs pour un même champ, utilisez l’opérateur OR
    • Si une requête contient plusieurs valeurs, chacune correspondant à un seul champ, utilisez l’opérateur AND
    • Si une requête contient plusieurs valeurs pour un même champ et des valeurs pour plusieurs champs, utilisez l’opérateur OR pour distinguer les différentes valeurs d’un même champ et l’opérateur AND pour combiner les valeurs de différents champs.
DéfinitionDescription
Logic TestAccessToFCDataSet( String connectionString )Teste la connexion au jeu de données
Logic TestFCDataSetSearchCriteria( String connectionString, StringArray searchFields, NamedValueArray searchCriteria )Teste les conditions de recherche du jeu de données
StringArray FieldNamesOfFCDataset( String connectionString )Renvoie une liste de tous les champs du jeu de données, triés par ordre croissant de leur indice.
StringArray FieldNamesOfFCDataset( String connectionString, StringArray searchFields )Renvoie une liste des champs du jeu de données spécifié, par ordre croissant de leur indice. À utiliser avec la fonction RecordOfFCDataset en présence de colonnes complexes.
Int RecordCountOfFCDataset( String connectionString, StringArray searchFields, NamedValueArray searchCriteria )Retourne le nombre d’entrées du jeu de données correspondant aux conditions de recherche spécifiées. Permet de déterminer combien d’entrées peuvent être renvoyées par la fonction RecordOfFCDataset.
Void PrepareRecordsetOfFCDataset( String connectionString, StringArray searchFields, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount )Prépare les données nécessaires à une requête sur le jeu de données. Cette opération doit être effectuée pour chaque nouvel ensemble de conditions de recherche avant l’appel de la fonction RecordOfFCDataset.
StringArray RecordOfFCDataset( String connectionString, StringArray searchFields, NamedValueArray searchCriteria, Int rowIndex )Renvoie un tableau de valeurs de l’entrée numéro rowIndex parmi les résultats renvoyés par une requête sur le jeu de données. Le nombre de valeurs est égal au nombre de champs passés dans searchFields (y compris dans le cas de colonnes complexes).
Quality ValidateByFCDataSet( String word, String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxErrors, Rational maxErrorsPart, Logic ignoreSpaces = true, Int maxRecordsCount = DefaultMaxRecordsCount );Renvoie la qualité de la chaîne word. Accepte les indices des champs. Vous pouvez obtenir ces indices en indexant la sortie de la fonction FieldNamesOfFCDataset.
Void SearchTextFromFCDataSet( String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount )Cette fonction permet de définir des conditions de recherche pour les mots de la fonction Static Text. Lorsqu’elle est appelée, les conditions de recherche existantes sont remplacées par de nouvelles conditions. Elle accepte les numéros d’indice de champ. Vous pouvez obtenir les numéros d’indice en indexant la sortie de la fonction FieldNamesOfFCDataset.
Void RegularExpressionFromFCDataSet( String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount )Cette fonction permet de définir des conditions de recherche à l’aide d’expressions régulières pour la fonction CharString. Lorsqu’elle est appelée, les conditions de recherche existantes sont remplacées par de nouvelles conditions. Elle accepte des numéros d’indice de champ. Vous pouvez obtenir ces numéros en indexant la sortie de la fonction FieldNamesOfFCDataset.

Comment rechercher des lignes à partir d’une colonne d’une base de données externe sur une image

  1. Utilisez FieldNamesOfFCDataset pour obtenir une liste de colonnes triées par ordre croissant de leur indice.
  2. Déterminez le numéro d’indice de la colonne dans laquelle vous devez rechercher des données.
  3. Créez un tableau de conditions pour filtrer les données à partir du jeu de données.
  4. Transmettez à SearchTextFromFCDataSet l’indice de la colonne et les conditions de filtre (ou à RegularExpressionFromFCDataSet, si vous devez utiliser des expressions régulières).
Ce code sera automatiquement généré lorsqu’un batch reconnu est exporté depuis FC

Comment rechercher dans une image des entrées issues de plusieurs colonnes d’une base de données externe

Étant donné que les paramètres de recherche sont remplacés à chaque appel de la fonction SearchTextFromFCDataSet, appeler cette fonction plusieurs fois est inutile. Il existe une solution de contournement : vous pouvez récupérer des strings depuis une base de données externe et les transmettre à la fonction SearchText. L’appel de cette fonction ajoute les strings aux paramètres de recherche existants au lieu de les remplacer.Pour ce faire, effectuez les étapes suivantes :
  1. Créez un tableau contenant les noms des colonnes dans lesquelles vous devez rechercher des données.
  2. Créez un tableau de conditions de filtrage pour filtrer les données du jeu de données.
  3. Déterminez le nombre d’entrées qui seront renvoyées à l’aide de la fonction RecordCountOfFCDataset.
  4. Préparez les données de requête à l’aide de la fonction PrepareRecordsetOfFCDataset.
  5. Parcourez tous les enregistrements et récupérez le tableau de chacun à l’aide de la méthode RecordOfFCDataset.
  6. Passez la valeur de chaque élément du tableau à la fonction SearchText.

Considérations supplémentaires pour les colonnes complexes

  • La fonction FieldNamesOfFCDataset renvoie un tableau qui contiendra plusieurs occurrences du nom de la colonne complexe. Le nombre d’occurrences sera le même que le nombre d’instances de colonne dans une base de données externe encodée. Exemple : {VendorId, VATID, Name, Name, Name, City}. Dans ce cas, la base de données externe contient 3 colonnes pour l’unique colonne complexe Name du jeu de données.
  • Si SearchCriteria contient une condition pour un champ correspondant à une colonne complexe (comme dans l’exemple ci-dessus), cette condition sera utilisée pour vérifier toutes les instances de cette colonne.
  • Si searchFields contient une condition pour un champ correspondant à une colonne complexe (comme dans l’exemple ci-dessus), le résultat contiendra le tableau des valeurs pour chaque occurrence de la colonne. Par exemple, si pour {VendorId, VATID, Name, Name, Name, City} vous demandez
searchFields = { VATID, Name, City}, you will receive
{VATID_value, Name_valueInColumn1, Name_valueInColumn2, Name_valueInColumn3, City_value}
  • Vous pouvez obtenir la liste des colonnes qui seront renvoyées en passant le tableau searchFields à la fonction FieldNamesOfFCDataset.
Vous pouvez effectuer des requêtes sur un fichier XML contenant des paramètres FlexiLayout à l’aide de deux fonctions standard décrites dans la documentation d’ABBYY FlexiLayout Studio :
StringArray ReadFromXML(String filename, String xPathQuery)
String ReadSingleStringFromXML(String filename, String xPathQuery)
Ce fichier doit se trouver dans l’un des sous-dossiers du dossier de projet ABBYY FlexiLayout Studio si vous souhaitez l’utiliser lorsque vous travaillez sur un FlexiLayout dans ABBYY FlexiLayout Studio. Le chemin d’accès à ce fichier est relatif au fichier de projet ABBYY FlexiLayout Studio.Si vous chargez un FlexiLayout compilé dans une Document Definition dans FC et l’utilisez comme FlexiLayout supplémentaire, le fichier XML sera placé dans le dossier Templates et vous pourrez le modifier. Lorsque le FlexiLayout est appliqué, le programme gérera automatiquement l’accès à ce fichier.