/// <summary>
        /// Demande au serveur d'exécuter le rapport
        /// </summary>
        /// <param name="oid"> L'identifiant de la table</param>
        /// <returns>La table</returns>
        ///


        public virtual void Run(StructuredReportRunData data)
        {
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            serializer.MaxJsonLength = int.MaxValue;
            Socket socket = buildSocket(SocketResourcePath + "/structured/run/");

            socket.OnMessage += (sender, e) =>
            {
                AllocationRunInfo runInfo = deserializeRunInfo(e.Data);
                if (runInfo != null)
                {
                    if (RunHandler != null)
                    {
                        System.Windows.Application.Current.Dispatcher.Invoke(() => RunHandler(runInfo));
                    }
                    if (runInfo.runEnded)
                    {
                        socket.Close(CloseStatusCode.Normal);
                    }
                    return;
                }
            };

            socket.OnOpen  += (sender, e) => { logger.Debug("Socket opened"); };
            socket.OnError += (sender, e) => { logger.Debug("Socket error  : " + e.Message); };
            socket.OnClose += (sender, e) => { logger.Debug("Socket closed : " + e.Reason); };

            socket.Connect();
            string text = serializer.Serialize(data);

            socket.Send(text);
        }
        private void updateRunProgress(AllocationRunInfo info)
        {
            StructuredReportEditorItem page = (StructuredReportEditorItem)getStructuredReportEditor().getActivePage();

            if (info == null || info.runEnded == true)
            {
                GetStructuredReportService().RunHandler -= updateRunProgress;
                page.IsModify = true;
                nextRunData = null;
                OnChange();
                Mask(false);
            }
            else
            {
                int rate = info.totalCellCount != 0 ? (Int32)(info.runedCellCount * 100 / info.totalCellCount) : 0;
                if (rate > 100) rate = 100;

                ApplicationManager.MainWindow.LoadingProgressBar.Maximum = info.totalCellCount;
                ApplicationManager.MainWindow.LoadingProgressBar.Value = info.runedCellCount;
                ApplicationManager.MainWindow.LoadingLabel.Content = "" + rate + " %";
            }
        }
        public virtual OperationState Run()
        {
            OperationState state = OperationState.CONTINUE;
            StructuredReportEditorItem page = (StructuredReportEditorItem)getStructuredReportEditor().getActivePage();
            if (page == null) return state;
            nextRunData = null;
            String filePath = openSaveDialog();
            if (string.IsNullOrEmpty(filePath)) return state;

            StructuredReportRunData data = new StructuredReportRunData();
            data.filePath = filePath;
            if (page.EditedObject.oid.HasValue) data.oid = page.EditedObject.oid.Value;

            //if (page.IsModify)
            //{
            //    nextRunData = data;
            //    return Save(page);
            //}

            GetStructuredReportService().RunHandler += updateRunProgress;
            Mask(true, "Running...");
            GetStructuredReportService().Run(data);
            return state;
        }