/// <summary> /// Формирует XML тело сообщения на основе структуры GisDataPack. /// </summary> /// <param name="gisRequest">Структура типа GisDataPack</param> /// <returns>Строковое представление сформированного XML</returns> private static string GetBodyXML(DataPack gisRequest) { var soapFormatter = new GisSoapFormatter { Template = PathHelper.ToAppAbsolutePath(gisRequest.TemplatePath), SchemaVersion = gisRequest.SchemaVersion, AddOrgPPAGuid = gisRequest.AddOrgPPAGUID, ValuesDictionary = gisRequest.Xpath2Values, OrgPPAGuid = gisRequest.OrgPPAGUID, Config = gisRequest.SoapConfig }; var soapString = soapFormatter.GetSoapRequest(gisRequest.RequesterMessageGuid); #if DEBUG Notificator.Write(soapString); #endif if (gisRequest.AddSignature && gisRequest.Action != "urn:getState") { var soapXml = XmlDocumentHelper.Create(soapString); soapString = SignNode(soapXml, Constants.SoapContentXpath, gisRequest.CertificateThumbprint, gisRequest.SignPasswd, gisRequest.RequesterMessageGuid); #if DEBUG Notificator.Write(soapString); #endif return(soapString); } return(soapString); }
/// <summary> /// Поставляет данные задачи из базы Oracle в <see cref="taskOracleData"/> /// </summary> protected override void ProvideTaskOracleData() { Contract.Requires(Regex.IsMatch(TaskDataPack.ServiceId, @"^\d+$")); Contract.Requires(Regex.IsMatch(TaskDataPack.MethodId, @"^\d+$")); Contract.Requires(Regex.IsMatch(TaskDataPack.TaskId, @"^\d+$")); Contract.Requires(Regex.IsMatch(TaskDataPack.LastStartDate, @"^(\d+\.){2}\d+\s(\d+\:){2}\d+.+$")); Contract.Requires(!string.IsNullOrEmpty(TaskDataPack.MethodVersion)); /// Заполняются параметры модели из <see cref="OriginTask.TaskDataPack"/>. Oracle.ExportDataProviderNsiItemParameters exportDataProviderNsiItemParameters = new Oracle.ExportDataProviderNsiItemParameters { task_id = TaskDataPack.TaskId, connectSettings = "" }; // Создаётся экземпляр класса ExportNsiItemModel и в него передаются параметры. Oracle.ExportDataProviderNsiItemModel exportDataProviderNsiItemmodel = new Oracle.ExportDataProviderNsiItemModel(exportDataProviderNsiItemParameters); exportDataProviderNsiItemmodel.Select(); // Поле класса заполняется данными из Oracle. taskOracleData = exportDataProviderNsiItemmodel.ResultData; #if DEBUG Notificator.Write("ExportDataProviderNsiItemTask, параметры задачи: " + exportDataProviderNsiItemmodel.ResultData.Rows[0].Field <string>("REQUESTER_MESSAGE_GUID") + " " + exportDataProviderNsiItemmodel.ResultData.Rows[0].Field <string>("REGISTRY_NUMBER") + " " + exportDataProviderNsiItemmodel.ResultData.Rows[0].Field <string>("MODIFIED_AFTER") ); #endif }
/// <summary> /// Заполняет поле <see cref="exportToOracle"/> данными кортежа. /// </summary> private void ConvertTupleToDataTable() { #if DEBUG Notificator.Write("ExportDataProviderNsiItemModel XMLBody: " + TupleElementValue("XMLstring")); #endif // Получаем строковое представление XML от ГИС ЖКХ. var bodyXML = TupleElementValue("XMLstring"); // Создаём объект класса-обработчика XML документа. XML.XmlDataNSI1 xmlDataNSI1 = new XML.XmlDataNSI1(bodyXML); // Результат обработки XML файла заносим в поле класса-модели. exportToOracle = xmlDataNSI1.BuildDataTable(); }
/// <summary> /// Заполняет поле <see cref="exportToOracle"/> данными кортежа. /// </summary> private void ConvertTupleToDataTable() { #if DEBUG Notificator.Write("ExportNsiItemModel XMLBody: " + TupleElementValue("XMLstring")); #endif // Получаем строковое представление XML от ГИС ЖКХ. var XMLBody = TupleElementValue("XMLstring"); // Создаём объект класса-маршрутизатора, который по входящему параметру номеру справочника возвращает // специализированный класс-обработчик XML документа. XML.BuilderCreator builder = new XML.BuilderCreator(ResultData, XMLBody); // Получаем конкретный объект который из XML будет возвращать DataTable. var dataTableCreator = builder.GetBuilder(); // Результат обработки XML файла заносим в поле класса-модели. exportToOracle = dataTableCreator.BuildDataTable(); }
/// <summary> /// Возвращает данные о задаче в рамках выполнения запроса к сервисам ГИС ЖКХ. /// А именно: /// <see cref="DataPack.Path"/>, /// <see cref="DataPack.AddOrgPpaGuid"/>, /// <see cref="DataPack.AddSignature"/>, /// <see cref="DataPack.TemplatePath"/>, /// <see cref="DataPack.Action"/>, /// <see cref="DataPack.TemplateResponsePath"/>, /// <see cref="DataPack.ActionResponce"/>, /// <see cref="DataPack.MethodVersion"/>. /// </summary> protected void ProvideTaskInfo() { // Создаем параметры модели. OriginTaskParameters originTaskParameters = new OriginTaskParameters { taskId = taskDataPack.TaskId, connectSettings = string.Empty, operationsSelect = OriginTaskParameters.selectOperation.ProvideTaskInfo }; // Скармливаем конструктору. OriginTaskModel originTaskModel = new OriginTaskModel(originTaskParameters); // Выполняем выборку данных. originTaskModel.Select(); // Заполняем параметры задачи полученными из БД данными. taskDataPack.Path = originTaskModel.ResultData.Rows[0].Field <string>("PATH"); taskDataPack.TemplatePath = originTaskModel.ResultData.Rows[0].Field <string>("REQUEST_PATH"); taskDataPack.Action = originTaskModel.ResultData.Rows[0].Field <string>("REQUEST_ACTION"); taskDataPack.TemplateResponsePath = originTaskModel.ResultData.Rows[0].Field <string>("RESPONSE_PATH"); taskDataPack.ActionResponce = originTaskModel.ResultData.Rows[0].Field <string>("RESPONSE_ACTION"); taskDataPack.MethodVersion = originTaskModel.ResultData.Rows[0].Field <string>("VERSION"); taskDataPack.OrgPPAGUID = originTaskModel.ResultData.Rows[0].Field <string>("ORG_PPAGUID"); taskDataPack.AddOrgPpaGuid = Convert.ToBoolean(originTaskModel.ResultData.Rows[0].Field <System.Int16>("ADD_ORG_PPA_GUID")); taskDataPack.AddSignature = Convert.ToBoolean(originTaskModel.ResultData.Rows[0].Field <System.Int16>("ADD_SIGNATURE")); #if DEBUG Notificator.Write("PATH: " + taskDataPack.Path + " " + "REQUEST_PATH: " + taskDataPack.TemplatePath + " " + "REQUEST_ACTION: " + taskDataPack.Action + " " + "RESPONSE_PATH: " + taskDataPack.TemplateResponsePath + " " + "RESPONSE_ACTION: " + taskDataPack.ActionResponce + " " + "VERSION: " + taskDataPack.MethodVersion + " " + "ORG_PPAGUID: " + taskDataPack.OrgPPAGUID + " " + "ADD_ORG_PPA_GUID: " + taskDataPack.AddOrgPpaGuid.ToString() + " " + "ADD_SIGNATURE: " + taskDataPack.AddSignature.ToString() ); #endif }
private void ExecuteSubtask(object item) { try { // Извлекаем кадр - подзадачу. DataTable oracleData = GetSubtaskData(item.ToString()); // Просим фабрику сгенерить нам нужный объект var creator = new SubtaskCreator(TaskDataPack); // Создаем подзадачу на запрос в ГИС. var subtask = creator.GetSubtask(); // Скармливаем данные подзадачи subtask.OracleData = oracleData; // Формируем набор данных для выполнения запроса в ГИС. subtask.InitGisDataPack(item.ToString()); // Выполняем запрос к сервису ГИС ЖКХ. subtask.PerformGisRequest(); // Формируем набор данных для получения результатов запроса в ГИС ЖКХ. subtask.InitGisResultDataPack(); // Получаем результат работы сервиса ГИС ЖКХ. subtask.PerformGisRequestForResults(); // Записываем результаты работы сервиса в Oracle. subtask.WriteGisResultsToOracle(); } catch (Exception ex) { Notificator.Write("Ошибка. Task_id = " + TaskDataPack.TaskId + ", REQUESTER_MESSAGE_GUID = " + item.ToString() + ". OriginTask. ExecuteSubtask(). Сообщение об ошибке: " + ex.Message + "Stack Trace: " + ex.StackTrace, EventLogEntryType.Error); } }
/// <summary> /// Поставляет данные задачи из базы Oracle в <see cref="taskOracleData"/> /// </summary> protected override void ProvideTaskOracleData() { Contract.Requires(Regex.IsMatch(TaskDataPack.ServiceId, @"^\d+$")); Contract.Requires(Regex.IsMatch(TaskDataPack.MethodId, @"^\d+$")); Contract.Requires(Regex.IsMatch(TaskDataPack.TaskId, @"^\d+$")); Contract.Requires(Regex.IsMatch(TaskDataPack.LastStartDate, @"^(\d+\.){2}\d+\s(\d+\:){2}\d+.+$")); /// Заполняются параметры модели из <see cref="OriginTask.TaskDataPack"/>. Oracle.ExportNsiListParameters exportNsiListParameters = new Oracle.ExportNsiListParameters { task_id = TaskDataPack.TaskId, connectSettings = "" }; // Создаётся экземпляр класса ExportNsiListModel и в него передаются параметры. Oracle.ExportNsiListModel exportNsiListModel = new Oracle.ExportNsiListModel(exportNsiListParameters); exportNsiListModel.Select(); // Поле класса заполняется данными из Oracle. taskOracleData = exportNsiListModel.ResultData; #if DEBUG Notificator.Write("ExportNsiListTask, параметры задачи: " + exportNsiListModel.ResultData.Rows[0][0].ToString() + " " + exportNsiListModel.ResultData.Rows[0][1].ToString()); #endif }