예제 #1
0
파일: F1Model.cs 프로젝트: q4472/FarmSib
        public static String SaveTableV2(RequestPackage rqp)
        {
            // сюда заходим с пакетом в параметрах которого представлены строки таблицы
            // в формате [row_index][column_name]
            String msg = "MvcApplication2.Areas.Order.Models.F1Model.SaveTableV2(): \n";

            if (rqp == null) { throw new NullReferenceException(); }
            if (rqp.Parameters == null || rqp.Parameters.Length == 0) { return msg + "\tНет параметров для разбора.\n"; }

            // надо сформировать запросы на сохранение для каждой строки
            // начинаем со строки с индексом 0
            // заканчиваем когда не найдётся параметра со следующим индексом строки
            Int32 ri = 0;
            for (; ; ri++)
            {

                // создаём новый пакет для очередной строки (пока пустой)
                RequestPackage rqpR = new RequestPackage
                {
                    SessionId = rqp.SessionId,
                    Command = "[Pharm-Sib].[dbo].[спецификации_таблица_строка_исполнить]",
                    Parameters = new RequestParameter[0]
                };

                // среди всех параметров исходного пакета ищем праметры для этой строки
                // и копируем их в новый пакет
                Regex re = new Regex(String.Format(@"\[{0}\]\[(\w+)\]", ri));

                foreach (RequestParameter p in rqp.Parameters)
                {
                    GroupCollection groups = re.Match(p.Name).Groups;
                    if (groups.Count == 2)
                    {
                        Array.Resize<RequestParameter>(ref rqpR.Parameters, rqpR.Parameters.Length + 1);
                        rqpR.Parameters[rqpR.Parameters.Length - 1] = new RequestParameter { Name = groups[1].Value, Value = p.Value };
                    }
                }

                // если ничего не нашли, то заканчиваем цикл
                if (rqpR.Parameters.Length == 0) { break; }
                // если что-то есть - исполнить
                else
                {
                    rqpR.AddSessionIdToParameters();
                    rqpR.ConvertParametersToSqlCompatibleType(specTableRowStoredProcFields);
                    ResponsePackage rsp = rqpR.GetResponse("http://" + NskdEnv.DATA_SERVICE_HOST + ":" + NskdEnv.DATA_SERVICE_HOST_SQL_PORT_V12 + "/");
                    msg += rsp.Status;
                }
            }
            return msg;
        }