Пример #1
0
        void checkDataSource()
        {
            //ToolMobile.setRuntimeMsg("checkDataSource starting");

            var    s    = SettingsFromXmlDoc.createDummy();
            string old_ = s.format();

            fillDataForRequest(s);


            string new_ = s.format();

            if (old_ != new_)
            {
                AgentData ad   = new AgentData(environment);
                string    res_ = ad.sendText(new_);
                if (!string.IsNullOrEmpty(res_))
                {
                    var newS_ = new SettingsFromXmlDoc(res_);
                    //
                    checkDataFromRespose(newS_);
                }
            }

            if (getUnSyncedDocs().Rows.Count > 0)
            {
                log.set(MessageCollection.T_MSG_RECORD_NOT_SYNCED, new object[] { getRecDesc(getUnSyncedDocs().Rows[0]) });

                throw new MyExceptionError(MessageCollection.T_MSG_RECORD_NOT_SYNCED);
            }

            ToolMobile.setRuntimeMsg("checkDataSource finished");
        }
Пример #2
0
        void importRecords(XmlDocument doc, AdapterUserRecords[] arrAdapters, string[] arrDesc)
        {
            for (int i = 0; i < arrAdapters.Length; ++i)
            {
                try
                {
                    // ToolMobile.setRuntimeMsg("importRecords : starting: " + arrDesc[i]);

                    log.set(MessageCollection.T_MSG_DATA_IMPORT, new object[] { arrDesc[i] });


                    //


                    //
                    AdapterUserRecords adp = arrAdapters[i];
                    adp.import(doc);


                    //  ToolMobile.setRuntimeMsg("importRecords : finished: " + arrDesc[i]);
                }
                catch (Exception exc)
                {
                    ToolMobile.setRuntimeMsg(exc.ToString());

                    throw new Exception(arrDesc[i], exc);
                }
            }
        }
Пример #3
0
 public void set(string text, object[] data)
 {
     try
     {
         set(_env.translate(text) + ":" + ToolString.joinList(ToolString.toString(data)));
     }
     catch (Exception exc)
     {
         ToolMobile.setRuntimeMsg(exc.ToString());
     }
 }
Пример #4
0
        public virtual object set(object pData)
        {
            if (CurrentVersion.ENV.isDebugMode())
            {
                ToolMobile.setRuntimeMsg("ImplAdapterDataSet.set:beg");
            }


            object  result  = null;
            DataSet dataSet = null;

            try
            {
                dataSet = (DataSet)pData;
                changeDataStructure(dataSet);
                setNewIdAll(dataSet);
                prepareBeforeUpdate(dataSet);

                for (int i = 0; i < tableNames.Count; ++i)
                {
                    String    curTab = tableNames[i];
                    DataTable table  = dataSet.Tables[curTab];
                    correctRecordsStatus(table);
                    checkForTouch(table);

                    if (CurrentVersion.ENV.isDebugMode())
                    {
                        ToolMobile.setRuntimeMsg("dictionary[curTab].set(table)");
                    }


                    dictionary[curTab].set(table);
                }
                result = getReturnResult();
            }
            catch (Exception exc)
            {
                ToolMobile.setRuntimeMsg(exc.ToString());

                environment.rollbackBatch();

                result = exc;
            }


            if (CurrentVersion.ENV.isDebugMode())
            {
                ToolMobile.setRuntimeMsg("ImplAdapterDataSet.set:end");
            }



            return(result);
        }
Пример #5
0
 public void show()
 {
     try
     {
         ToolMobile.startForm(typeof(FormUserHandlerLog));
     }
     catch (Exception exc)
     {
         ToolMobile.setRuntimeMsg(exc.ToString());
     }
 }
Пример #6
0
 public void error(string text)
 {
     try
     {
         if (Error != null)
         {
             Error.Invoke(this, new EventArgsString(_env.translate(text)));
         }
     }
     catch (Exception exc)
     {
         ToolMobile.setRuntimeMsg(exc.ToString());
     }
 }
Пример #7
0
 public void hide()
 {
     try
     {
         if (Hide != null)
         {
             Hide.Invoke(this, EventArgs.Empty);
         }
     }
     catch (Exception exc)
     {
         ToolMobile.setRuntimeMsg(exc.ToString());
     }
 }
Пример #8
0
 public void set(string text)
 {
     try
     {
         if (NewMessage != null)
         {
             NewMessage.Invoke(this, new EventArgsString(_env.translate(text)));
         }
     }
     catch (Exception exc)
     {
         ToolMobile.setRuntimeMsg(exc.ToString());
     }
 }
Пример #9
0
 void setMsg(string msg)
 {
     this.RunOnUiThread(() =>
     {
         try
         {
             cData.Text = msg;
             cData.ScrollTo(0, int.MaxValue);
         }
         catch (Exception exc)
         {
             ToolMobile.setRuntimeMsg(exc.ToString());
         }
     });
 }
Пример #10
0
        public virtual object update()
        {
            if (CurrentVersion.ENV.isDebugMode())
            {
                ToolMobile.setRuntimeMsg("ImplAdapterUser.update:1");
            }

            prepareBeforeUpdate(localDataSet);
            DataSet ds = localDataSet.Copy();

            deleteFullColumns(ds);

            if (CurrentVersion.ENV.isDebugMode())
            {
                ToolMobile.setRuntimeMsg("ImplAdapterUser.update:3");
            }

            return(dataSetAdapter.set(ds));
        }
Пример #11
0
        static byte[] connectHttp(byte[] pPostData, string pController)
        {
            string server = CurrentVersion.ENV.getServerIp();
            int    port   = CurrentVersion.ENV.getServerPort();

            string agentNr = CurrentVersion.ENV.getAgentNr();
            string agentId = CurrentVersion.ENV.getAgentId();

            ToolMobile.setRuntimeMsg("Connection:http: agent [" + agentNr + "] to server [" + server + "] via port [" + port + "]");

            pPostData = pPostData ?? new byte[] { };
            using (var client = new System.Net.WebClient())
            {
                client.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(agentNr + ":" + agentId)));
                //System.Net.WebException
                byte[] pageData = client.UploadData("http://" + server + ":" + port + "/" + pController, "POST", pPostData);
                return(pageData);
            }
        }
Пример #12
0
        private void initCommands(DbDataAdapter pAdp, DataTable pData, ITableDescriptor pTabDesc)
        {
            if (CurrentVersion.ENV.isDebugMode())
            {
                ToolMobile.setRuntimeMsg("ImplAdapterTableExt:initCommands:beg");
            }

            DataColumn colV_ = pData.Columns[TableDUMMY.RECVERS];

            foreach (DataRow row in pData.Rows)
            {
                switch (row.RowState)
                {
                case DataRowState.Added:
                    if (pAdp.InsertCommand == null)
                    {
                        initCommandInsert(pAdp, pTabDesc);
                    }
                    break;

                case DataRowState.Deleted:
                    if (pAdp.DeleteCommand == null)
                    {
                        initCommandDelete(pAdp, pTabDesc);
                    }
                    break;

                case DataRowState.Modified:
                    if (colV_ != null)
                    {
                        short rv_ = Convert.ToInt16(ToolCell.isNull(row[colV_, DataRowVersion.Original], 0));
                        ++rv_;
                        ToolCell.set(row, colV_, rv_);
                    }
                    if (pAdp.UpdateCommand == null)
                    {
                        initCommandUpdate(pAdp, pTabDesc);
                    }
                    break;
                }
            }
        }
Пример #13
0
        void instance_Hide(object sender, EventArgs e)
        {
            canClose = true;
            this.RunOnUiThread(() =>
            {
                try
                {
                    cBtnCancel.Enabled = true;
                }
                catch (Exception exc)
                {
                    ToolMobile.setRuntimeMsg(exc.ToString());
                }
            });

            if (!error)
            {
                userRequireCancel();
            }
        }
Пример #14
0
        //protected virtual int getPort(bool pForSending)
        //{
        //    int port_ = CurrentVersion.ENV.getServerPort();

        //    //if (pForSending)
        //    //{
        //    //    int firmNr_ = environment.getSysSettings().getInt(SettingsSysMob.MOB_SYS_FIRM, 1);
        //    //    port_ = CurrentVersion.getPortByFirmNr(firmNr_);
        //    //}

        //    return port_;
        //}

        bool connect(bool pForSending)
        {
            // Activate connections
            startConnectionManager();

            //

            string server = CurrentVersion.ENV.getServerIp();   // environment.getAppSettings().getString(SettingsAvaAgent.MOB_SERVER_S);
            int    port   = CurrentVersion.ENV.getServerPort(); // getPort(pForSending);//CurrentVersion.ENV.getServerPort();// environment.getAppSettings().getInt(SettingsAvaAgent.MOB_PORT_I, 6000);


            ToolMobile.setRuntimeMsg("Connection: to server [" + server + "] via port [" + port + "]");

            IPAddress ip = IPAddress.Parse(server);

            //Thread thread = new Thread(new ThreadStart(this._close));
            //thread.Start();

            System.Threading.Tasks.Task t = client.ConnectAsync(ip, port);
            try
            {
                t.Wait(timeout);
            }
            catch (Exception exc)
            {
                ToolMobile.setExceptionInner(t.Exception);
            }

            if (!client.Client.Connected)
            {
                throw new MyExceptionError(MessageCollection.T_MSG_ERROR_CONNECTION);
            }

            //thread.Abort();
            stream = client.GetStream();

            return(true);
        }
Пример #15
0
        public void addMsg(string msg)
        {
            this.RunOnUiThread(() =>
            {
                try
                {
                    if (cData.Text == string.Empty)
                    {
                        setMsg(msg);
                    }
                    else
                    {
                        cData.Text += "\r\n" + msg;
                    }

                    cData.ScrollTo(0, int.MaxValue);
                }
                catch (Exception exc)
                {
                    ToolMobile.setRuntimeMsg(exc.ToString());
                }
            });
        }
Пример #16
0
        private void update(SqliteDataAdapter pAdapter, DataTable pDataTable)
        {
            if (CurrentVersion.ENV.isDebugMode())
            {
                ToolMobile.setRuntimeMsg("ImplAdapterTableExt:update:beg");
            }

            string CODE = null;


            foreach (DataRow row in pDataTable.Rows)
            {
                if (row.RowState != DataRowState.Unchanged)
                {
                    DbCommand cmd_ = null;
                    switch (row.RowState)
                    {
                    case DataRowState.Added:
                        cmd_ = pAdapter.InsertCommand;

                        break;

                    case DataRowState.Deleted:
                        cmd_ = pAdapter.DeleteCommand;
                        break;

                    case DataRowState.Modified:
                        cmd_ = pAdapter.UpdateCommand;
                        break;
                    }

                    if (cmd_ == null)
                    {
                        throw new MyExceptionError("Sql cmd is not generated");
                    }

                    foreach (DbParameter prm in cmd_.Parameters)
                    {
                        object val_ = row[prm.SourceColumn, prm.SourceVersion];
                        prm.Value = val_;
                    }

                    if (CurrentVersion.ENV.isDebugMode())
                    {
                        ToolMobile.setRuntimeMsg(cmd_.CommandText);

                        var list = new List <string>();

                        foreach (DbParameter prm in cmd_.Parameters)
                        {
                            object val_ = row[prm.SourceColumn, prm.SourceVersion];
                            list.Add(val_.ToString());
                        }
                    }

                    int count_ = 0;


                    if (row.RowState != DataRowState.Deleted)
                    {
                        if (row.Table.Columns.Contains("CODE"))
                        {
                            CODE = row["CODE"].ToString();
                        }
                    }


                    try
                    {
                        count_ = cmd_.ExecuteNonQuery();
                    }
                    catch (Exception exc)
                    {
                        ToolMobile.setRuntimeMsg("SQL Error: CODE: " + (CODE ?? "NULL") + ": SQL:" + cmd_.CommandText);

                        throw new Exception("SQL Error: " + (CODE ?? "NULL"), exc);
                    }

                    if (count_ == 0)
                    {
                        ToolMobile.setRuntimeMsg("DBConcurrencyException: " + (CODE ?? "NULL"));


                        throw new DBConcurrencyException("DBConcurrencyException: " + (CODE ?? "NULL"));
                    }
                }
            }
        }
Пример #17
0
        //void adapter_RowUpdating(object sender, SqliteRowUpdatingEventArgs e)
        //{

        //}

        public virtual object set(object pObj)
        {
            SqliteDataAdapter adp_ = null;

            try
            {
                if (CurrentVersion.ENV.isDebugMode())
                {
                    ToolMobile.setRuntimeMsg("ImplAdapterTableExt:set:beg");
                }


                adp_ = createAdapter();

                DataTable dataTable = (DataTable)pObj;



                ITableDescriptor desc_ = environment.getDbDescriptor().getTable(getName());
                if (desc_ == null)
                {
                    throw new MyExceptionError("Cant find table description for [" + getName() + "]");
                }

                initCommands(adp_, dataTable, desc_);



                update(adp_, dataTable);

                //adapter.Update(dataTable);


                if (CurrentVersion.ENV.isDebugMode())
                {
                    ToolMobile.setRuntimeMsg("ImplAdapterTableExt:set:end");
                }


                return(null);
            }
            catch (Exception exc)
            {
                ToolMobile.setRuntimeMsg(exc.ToString());

                throw new Exception(exc.Message, exc);
            }
            finally
            {
                if (adp_ != null && adp_.InsertCommand != null)
                {
                    adp_.InsertCommand.Dispose(); adp_.InsertCommand = null;
                }
                if (adp_ != null && adp_.UpdateCommand != null)
                {
                    adp_.UpdateCommand.Dispose(); adp_.UpdateCommand = null;
                }
                if (adp_ != null && adp_.DeleteCommand != null)
                {
                    adp_.DeleteCommand.Dispose(); adp_.DeleteCommand = null;
                }
                if (adp_ != null)
                {
                    adp_.Dispose();
                }
            }
        }
Пример #18
0
        public void import(XmlDocument doc)
        {
            XmlElement rootNode = doc[_nodeRootName];
            char       sepChar  = '\t';
            string     adpName  = _userAdapter.getAdapterDataSet().getCode();

            foreach (XmlNode itemNode in rootNode.ChildNodes)
            {
                if ((itemNode.Name == _nodeItemName) && (itemNode.Attributes[_attrRootCode].Value == adpName))
                {
                    _userAdapter.add();
                    DataSet dataSet = _userAdapter.getDataSet();
                    foreach (XmlNode itemNodeTable in itemNode.ChildNodes)
                    {
                        string    colsList  = itemNodeTable.Attributes[_attrItemTableCols].Value;
                        string[]  colsArr   = ToolString.explodeList(sepChar, colsList);
                        string    tableName = itemNodeTable.Name;
                        DataTable tableD    = dataSet.Tables[tableName];
                        if (tableD == null)
                        {
                            throw new MyException.MyExceptionError(MessageCollection.T_MSG_ERROR_INNER, new object[] { tableName });
                        }
                        tableD.Clear();
                        string data = itemNode.InnerText;
                        //
                        StringReader reader        = new StringReader(data);
                        var          lineIndx      = 0;
                        var          commitCounter = 0;

                        string line;

                        var listCode = new List <string>();

                        while ((line = reader.ReadLine()) != null)
                        {
                            ++lineIndx;

                            try
                            {
                                if (line != string.Empty)
                                {
                                    string[] arrData = ToolString.explodeList(sepChar, line); //line.Split(sepChar);

                                    if (arrData == null || arrData.Length != colsArr.Length)
                                    {
                                        throw new MyException.MyExceptionError(MessageCollection.T_MSG_ERROR_INVALID_ARGS_COUNT, new object[] { line });
                                    }


                                    //  if (lineIndx > 10)
                                    //    break;



                                    var rowDic = new Dictionary <string, string>();

                                    for (int indxColD = 0; indxColD < colsArr.Length; ++indxColD)
                                    {
                                        var col    = colsArr[indxColD];
                                        var colVal = arrData[indxColD];



                                        if (col == "CODE")
                                        {
                                            var keyCode = colVal.ToUpperInvariant();

                                            if (keyCode == "")
                                            {
                                                //throw new Exception("Record CODE is empty: index: " + lineIndx);
                                                colVal = "EMPTYCODE" + lineIndx;
                                            }
                                            else
                                            if (listCode.Contains(keyCode))
                                            {
                                                throw new Exception("Record dublicate: " + keyCode);
                                            }
                                            else
                                            {
                                                listCode.Add(keyCode);
                                            }
                                        }

                                        rowDic[col] = colVal;
                                    }

                                    switch (tableName)
                                    {
                                    //case "FIRMPARAMS":
                                    //    SqlExecute.executeNonQuery(_environment, "INSERT INTO L_FIRMPARAMS (LOGICALREF,CODE,VALUE) VALUES (@P1,@P2,@P3 )",
                                    //  new object[] { rowDic["CODE"], rowDic["CODE"], rowDic["VALUE"] });
                                    //    break;
                                    //case "CLCARD":
                                    //    SqlExecute.executeNonQuery(_environment, "INSERT INTO LG_$FIRM$_CLCARD (LOGICALREF,CODE,CLGRPCODE,CLGRPCODESUB) VALUES (@P1,@P2,@P3,@P4)",
                                    //  new object[] { rowDic["LOGICALREF"], rowDic["CODE"], rowDic["CLGRPCODE"], rowDic["CLGRPCODESUB"] });
                                    //    break;
                                    //case "ITEMS":
                                    //    SqlExecute.executeNonQuery(_environment, "INSERT INTO LG_$FIRM$_ITEMS (LOGICALREF,CODE,STGRPCODE,STGRPCODESUB) VALUES (@P1,@P2,@P3,@P4)",
                                    //  new object[] { rowDic["LOGICALREF"], rowDic["CODE"], rowDic["STGRPCODE"], rowDic["STGRPCODESUB"] });
                                    //    break;
                                    default:
                                    {
                                        DataRow newRowD = _userAdapter.addRowToTable(tableD);


                                        foreach (var pair in rowDic)
                                        {
                                            DataColumn dCol = tableD.Columns[pair.Key];
                                            if (dCol == null)
                                            {
                                                throw new MyException.MyExceptionError(MessageCollection.T_MSG_ERROR_INNER, new object[] { pair.Key });
                                            }

                                            var value_ = _formating.parse(pair.Value, dCol.DataType);

                                            newRowD[dCol] = value_;
                                        }
                                    }
                                    break;
                                    }



                                    ++commitCounter;


                                    //if (commitCounter > 1)
                                    //{

                                    //    _userAdapter.update();
                                    //    _userAdapter.clear();
                                    //    tableD.Clear();
                                    //    //
                                    //    //

                                    //    commitCounter = 0;
                                    //}
                                }
                            }
                            catch (Exception exc)
                            {
                                ToolMobile.setRuntimeMsg(line);
                                ToolMobile.setRuntimeMsg(exc.ToString());


                                throw new Exception(exc.Message, exc);
                            }
                        }
                    }



                    _userAdapter.update();
                }
            }
        }
Пример #19
0
        void doneAsync()
        {
            lock (environment)
            {
                ISettings oldSysSettings = environment.getSysSettings();

                try
                {
                    //
                    bool localDebugImport = false;

#if DEBUG
                    localDebugImport = false;
#endif


                    log.set(MessageCollection.T_MSG_OPERATION_STARTING);
                    //

                    ToolMobile.setRuntimeMsg("Data import starting");

                    if (!localDebugImport)
                    {
                        checkDataSource();
                    }

                    //
                    string fileWorkDir = Path.Combine(ToolMobile.curDir(), "data");
                    ToolMobile.createDir(fileWorkDir);
                    string fileInputZip = Path.Combine(fileWorkDir, "fromava.zip");
                    string fileInputXml = Path.Combine(fileWorkDir, "fromava.xml");
                    // bool state = false;
                    //Source
                    if (localDebugImport)//CurrentVersion.ENV.isLocalExim()
                    {
                        //!!//
                    }
                    else
                    {
                        {
                            //
                            log.set(MessageCollection.T_MSG_DATA_RECEIVING);
                            //
                            AgentData    ad = new AgentData(environment);
                            ServerResult sr;
                            ad.chackOperationResult(sr = ad.resiveData());
                            byte[] data = sr.data;
                            //
                            log.set(MessageCollection.T_MSG_DATA_WRITING);
                            //
                            ToolMobile.writeFileData(fileInputZip, data);
                            ToolZip.decompress(fileInputZip, Path.GetDirectoryName(fileInputZip));
                        }
                    }

                    //Get
                    log.set(MessageCollection.T_MSG_DATA_READING);
                    //
                    XmlDocument doc = new XmlDocument();
                    doc.Load(fileInputXml);
                    //
                    if (isSameData(doc, oldSysSettings))
                    {
                        throw new Exception(MessageCollection.T_MSG_DATA_OLD);
                    }
                    //
                    var commited = false;
                    try
                    {
                        environment.beginBatch();
                        //
                        #region delete firm prm


                        log.set(MessageCollection.T_MSG_DATA_DELETING);
                        //
                        {
                            string[] arrTables = new string[]
                            {
                                TableFIRMPARAMS.TABLE_FULL_NAME
                            };
                            string[] arrDesc = new string[]
                            {
                                environment.translate(WordCollection.T_ADDITIONAL)
                            };
                            deleteTables(arrTables, arrDesc);
                        }
                        //
                        //
                        #endregion
                        //
                        #region import firm prm

                        //
                        log.set(MessageCollection.T_MSG_DATA_IMPORT);
                        //
                        {
                            AdapterUserRecords[] arrAdapters = new AdapterUserRecords[]
                            {
                                new AdapterUserFirmParams(environment, new ImplAdapterDataSetStub(environment, new AdapterDataSetFirmParams(environment)))
                            };
                            string[] arrDesc = new string[]
                            {
                                environment.translate(WordCollection.T_ADDITIONAL)
                            };
                            importRecords(doc, arrAdapters, arrDesc);
                        }
                        #endregion
                        //
                        #region sys settings
                        environment.setSysSettings(getSysSettings());
                        //environment.getSysSettings().set(SettingsSysMob.MOB_SYS_LAST_IMPORT, DateTime.Now);
                        #endregion
                        //
                        #region delete rec


                        log.set(MessageCollection.T_MSG_DATA_DELETING);
                        //
                        {
                            string[] arrTables = new string[]
                            {
                                TableCLCARD.TABLE_FULL_NAME,
                                TableITEMS.TABLE_FULL_NAME,
                                TableWHOUSE.TABLE_FULL_NAME,
                                TableINFOFIRM.TABLE_FULL_NAME,
                                TableINFOPERIOD.TABLE_FULL_NAME,
                                TableINFODOCSAVE.TABLE_FULL_NAME
                            };
                            string[] arrDesc = new string[]
                            {
                                environment.translate(WordCollection.T_CLIENT),
                                environment.translate(WordCollection.T_MATERIAL),
                                environment.translate(WordCollection.T_WAREHOUSE),
                                environment.translate(WordCollection.T_INFO),
                                environment.translate(WordCollection.T_INFO),
                                environment.translate(WordCollection.T_INFO)
                            };
                            deleteTables(arrTables, arrDesc);
                        }
                        //
                        //
                        #endregion
                        //
                        #region docs
                        log.set(MessageCollection.T_MSG_DOCS_DELETING);
                        //
                        DateTime limDate = environment.getSysSettings().getDateTime(SettingsSysMob.MOB_SYS_CMD_DELETE_DOCS_BEFORE, new DateTime(DateTime.Now.Year, 1, 1));
                        {
                            string[][] arrTablesGroup = new string[][]
                            {
                                new string[] { TableINVOICE.TABLE_FULL_NAME, TableSTLINE.TABLE_LONG },
                                new string[] { TableORFICHE.TABLE_FULL_NAME, TableORFLINE.TABLE_LONG },
                                new string[] { TableKSLINES.TABLE_FULL_NAME }
                            };
                            string[] arrDesc = new string[]
                            {
                                environment.translate(WordCollection.T_DOC_STOCK_TRANS),
                                environment.translate(WordCollection.T_DOC_STOCK_ORDERS),
                                environment.translate(WordCollection.T_DOC_FINANCE)
                            };
                            deleteDocTables(arrTablesGroup, arrDesc, limDate);
                        }
                        #endregion
                        //
                        #region import

                        //
                        log.set(MessageCollection.T_MSG_DATA_IMPORT);
                        //
                        {
                            AdapterUserRecords[] arrAdapters = new AdapterUserRecords[]
                            {
                                new AdapterUserClient(environment, new ImplAdapterDataSetStub(environment, new AdapterDataSetClient(environment))),
                                new AdapterUserMaterial(environment, new ImplAdapterDataSetStub(environment, new AdapterDataSetMaterial(environment))),
                                new AdapterUserWarehouse(environment, new ImplAdapterDataSetStub(environment, new AdapterDataSetWarehouse(environment))),

                                new AdapterUserInfoFirm(environment, new ImplAdapterDataSetStub(environment, new AdapterDataSetInfoFirm(environment))),
                                new AdapterUserInfoPeriod(environment, new ImplAdapterDataSetStub(environment, new AdapterDataSetInfoPeriod(environment))),
                                new AdapterUserInfoDocSave(environment, new ImplAdapterDataSetStub(environment, new AdapterDataSetInfoDocSave(environment)))
                            };
                            string[] arrDesc = new string[]
                            {
                                environment.translate(WordCollection.T_CLIENT),
                                environment.translate(WordCollection.T_MATERIAL),
                                environment.translate(WordCollection.T_WAREHOUSE),
                                environment.translate(WordCollection.T_INFO),
                                environment.translate(WordCollection.T_INFO),
                                environment.translate(WordCollection.T_INFO)
                            };
                            importRecords(doc, arrAdapters, arrDesc);
                        }
                        #endregion
                        //clear



                        //
                        environment.clearStateData();
                        //

                        //ToolMobile.setRuntimeMsg("Data importded, commit started");

                        environment.commitBatch();
                        // state = true;
                        commited = true;

                        // ToolMobile.setRuntimeMsg("Data importded, commited");



                        #region files
                        {
                            try
                            {
                                var files = doc.SelectSingleNode("DATA/ITEM[@ei_code='ADP_FILES']");

                                if (files != null)
                                {
                                    foreach (var file in files)
                                    {
                                        var el = file as XmlElement;
                                        if (el != null)
                                        {
                                            var dir    = ToolXml.getAttribValue(el, "dir", null);
                                            var name   = ToolXml.getAttribValue(el, "name", null);
                                            var value_ = ToolXml.getAttribValue(el, "value", null);

                                            if (dir != null && name != null && value_ != null)
                                            {
                                                if (Path.IsPathRooted(dir))
                                                {
                                                    log.error(WordCollection.T_FILE + ": Path rooted: " + dir);
                                                }
                                                else
                                                {
                                                    if (!ToolMobile.existsDir(dir))
                                                    {
                                                        ToolMobile.createDir(dir);
                                                    }

                                                    var path = Path.Combine(dir, name);

                                                    log.set(WordCollection.T_FILE + ": " + path);

                                                    var data = Convert.FromBase64String(value_);

                                                    ToolMobile.writeFileData(path, data);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            catch (Exception exc)
                            {
                                ToolMobile.setExceptionInner(exc);


                                log.error("Files import error");

                                ToolMobile.setException(exc);
                            }
                        }
                        #endregion
                    }
                    catch (Exception exc)
                    {
                        try
                        {
                            ToolMobile.setExceptionInner(exc);
                        }
                        catch { }


                        try
                        {
                            if (!commited)
                            {
                                ToolMobile.setRuntimeMsg("Data import error, rollback started");

                                environment.rollbackBatch();

                                ToolMobile.setRuntimeMsg("Data import error, rollback ended");
                            }
                        }
                        catch { }


                        environment.setSysSettings(oldSysSettings);

                        throw new Exception(exc.Message, exc);
                    }

                    //if (commited)
                    //{
                    //    var dir = "cache";
                    //    if (ToolMobile.existsDir(dir))
                    //        ToolMobile.deleteDir(dir);
                    //}
                }
                catch (Exception exc)
                {
                    ToolMobile.setExceptionInner(exc);


                    var err = ToolException.unwrap(exc);


                    ToolMobile.setRuntimeMsg(err);



                    ToolMobile.getContextLast().RunOnUiThread(() =>
                    {
                        try
                        {
                            Android.Widget.Toast.MakeText(Android.App.Application.Context, err, Android.Widget.ToastLength.Long).Show();
                        }
                        catch { }
                    });

                    // ActivityExt.errMessageOnResume = err;


                    log.error(ToolException.unwrap(exc));
                    environment.getExceptionHandler().setException(exc);
                }
                finally
                {
                    log.set(MessageCollection.T_MSG_OPERATION_FINISHING);

                    Thread.Sleep(1000);
                    log.hide();
                }
            }
        }