Bonjour,

Aujourd'hui nous rencontrons un petit problème.
Nous développons une application mobile avec framework Ionic.
Nous avons lié notre application à un site Sharepoint sur lequel nous téléchargeons des fichiers qui nous servent de base de données.
L'application est simple : c'est un annuaire. L'utilisateur arrive sur l'application, récupère le fichier de base à jour sur Sharepoint et fait des recherches d'utilisateurs.

Le problème : Pour télécharger notre fichier de bdd sur Sharepoint, nous utilisons le plugin Cordova FileTransfer. C'est grâce à ce plugin qu'on arrive à télécharger le fichier et le mettre dans le stockage du smartphone. Le soucis, c'est que nous n'arrivons pas à accéder à ce fichier une fois qu'il est stocké. Quand on y arrive, une erreur apparait et empêche l'affichage du header de l'application. Si on fait réapparaître le header en supprimant ce qui ne va pas, le fichier n'est plus chargé.

Voici les codes du controller, du service et de la vue :

Controller.js :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.controller('EmployeeIndexCtrl', function ($q, $scope, $http, $timeout, $cordovaFileTransfer, EmployeeService, $ionicPlatform, $rootScope) {
 
       $scope.searchKey = "";
 
       $scope.clearSearch = function () {
           $scope.searchKey = "";
       }
 
       $scope.search = function () {
           EmployeeService.findByName($scope.searchKey).then(function (employees) {
               $scope.employees = employees;
           });
       }
 
       var findAllEmployees = function() {
           EmployeeService.findAll().then(function (employees) {
               $scope.employees = employees;
           });
       }
})
services.js :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
angular.module('directory.services', ['ngCordova'])
  .factory('EmployeeService',  function($q, $http, $cordovaFile, $cordovaFileTransfer) {
 
      fileTransfer = new FileTransfer();
      var employees = {};
      var fileURL = cordova.file.externalApplicationStorageDirectory + 'data_mobmouv.txt';
 
      $http.get(fileURL).success(function(data, $cordovaFile, $cordovaFileTransfer) {
        employees = angular.fromJson(data);
      });
            // Now safe to use device APIs
 
      return {
          findAll: function() {
              var deferred = $q.defer();
              deferred.resolve(employees);
              return deferred.promise;
          },
          findById: function(employeeId) {
              var deferred = $q.defer();
              var employee = employees[employeeId - 1];
              deferred.resolve(employee);
              return deferred.promise;
          },
          findByName: function(searchKey) {
              var deferred = $q.defer();
              var results = employees.filter(function(element) {
                  var fullName = element.firstName + " " + element.lastName;
                  return fullName.toLowerCase().indexOf(searchKey.toLowerCase()) > -1;
              });
 
              deferred.resolve(results);
              return deferred.promise;
          },
          findByManager: function (managerId) {
              var deferred = $q.defer(),
                  results = employees.filter(function (element) {
                      return parseInt(managerId) === element.managerId;
                  });
              deferred.resolve(results);
              return deferred.promise;
          }
      }
});
vue :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<view title="'Annuaire DC Ouest'">
 
    <div class="bar bar-subheader item-input-inset">
 
        <a class="button button-positive ion-gear-a decal"  ng-click="login()" href="#/login"></a>
 
        <label class="item-input-wrapper">
            <i class="icon ion-ios7-search placeholder-icon" ></i>
            <input id="searchKey" type="search" placeholder="Nom ou Prénom" ng-model="searchKey" autocorrect="off" >
            <button class="button button-clear" ng-click="clearSearch()">X</button>
        </label>
        <button class="button button-positive ion-search search_employee" ng-click="search();"></button>
    </div>
 
    <content has-header="true" has-subheader="true">
        <list>
            <item ng-repeat="employee in employees" type="item-text-wrap" href="#/employee/{{employee.id}}">
                <h3>{{employee.firstName}} {{employee.lastName}}</h3>
                <p>{{employee.title}}</p>
            </item>
        </list>
    </content>
</view>

Avec ce code, nous avons l'erreur suivante :
"ReferenceError : FileTransfer is not defined."
Si on l'enlève, nous avons une erreur avec cordova.file.externalApplicationStorageDirectory.

Nous avons déjà essayé pas mal de solutions, mais on débute en AngularJS...
Petite précision, le plugin FileTransfer ainsi que le plugin File sont bien installés et appelé dans notre index.html.


Merci de votre aide,
Bonne journée !