Le module repris ci-dessous montre comment uploader dans la base de données SQL des fichiers de l'onglet explorateur de fichiers. Cela requiert bien entendu l'activation au préalable des fichiers stockés dans la base de données SQL et de l'utilisation de SqlFileView.
Le but ici est de télécharger les fichiers correspondant à des actions du 4ème signalétiques (DEST) et dont l'ID_ACTEMPL (ID du template d'actions) est connu. Le code peut bien entendu être adapté facilement à toutes autres circonstances. Il est exécuté directement depuis l'éditeur de code de Mercator.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
namespace MyNameSpace
{
public class Class1 : MercatorUi.Interfaces. IExec
{
public void Main()
{
DataSet ds = Api .Zselect( Globals .RepData, "select id,module from actions where (module='DEST') and ((id_actempl='.A-A729D53') or (id_actempl='.A-C48A0EB'))" );
if (ds == null )
return ;
Progress .ProgressCreate(ds.Tables[0].Rows.Count);
foreach ( DataRow dr in ds.Tables[0].Rows)
{
Progress .ProgressIncrement(1);
string id = Api .CleanRep(dr[ "id" ].ToString().TrimEnd());
string dir = Globals .RepData + "Files\\Actions\\DEST\\" + id;
if (System.IO. Directory .Exists(dir))
Api .CopyFolder(dir, "<" + Api . SqlFilePathRoots .Files.ToString() + "\\Actions\\DEST\\" + id);
}
Progress .ProgressDestroy();
Dialogs .Stop( "OK !" );
}
}
}
Si on souhaite ne pas conserver la copie d'origine des fichiers sur disque, il suffit de remplacer Api.CopyFolder par Api.MoveFolder.
Le code ci-dessous présente une alternative : il copie tous les fichiers de tous les sous-répertoires du répertoire "Files" vers Sql :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
namespace MyNameSpace
{
public class Class1 : MercatorUi.Interfaces.IExec
{
public void Main()
{
Api.CopyFolder(Globals.RepData + "Files", "<" + Api.SqlFilePathRoots.Files.ToString());
Dialogs.Stop("OK !");
}
}
}