/// <summary> /// Установка данных запросов /// </summary> /// <param name="sourceXmlDocument">xmlDocument от которого отправляется запрос</param> /// <param name="templateElement">xmlElement с входящими настройками запроса</param> /// <param name="request">экземпляр запроса</param> private void SetRequestData(xmlDocument sourceXmlDocument, xmlElement templateElement, Request request) { string RequestFormat = templateElement.GetAttribute("RequestFormat"); string dataContent = ""; if (templateElement.GetAttribute("MethodQuery") != "") { dataContent = sourceXmlDocument.Root.XQuery(templateElement.GetAttribute("MethodQuery")); } if (request.ContentType == "multipart/form-data") { //Устанавливаем данные для multipart/form-data-запросов request.DataContent = request.SetMultipartFormData(); } if (string.IsNullOrEmpty(RequestFormat) || RequestFormat == "XML" || RequestFormat == "Without conversion") { //Устанавливаем данные для POST-запросов request.SetData(dataContent); } else { if (!string.IsNullOrEmpty(dataContent)) { XmlDocument doc = new XmlDocument(); doc.LoadXml(dataContent); dataContent = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, true); request.SetData(dataContent.Replace(",null", "")); } } }
/// <summary> /// Создает екземпляры Запросов от контекста каждого объекта в Индексе /// </summary> /// <param name="templateElement">Метод с параметрами</param> private bool MakeRequestsFromObjIndex(xmlElement templateElement) { string XqueryForObjects = templateElement.GetAttribute("XqueryForObjects"); var objcs = Class.XQuery(XqueryForObjects); xmlDocument objs = new xmlDocument(objcs); if (objs.Root == null) { return(false); } foreach (var node in objs.Root.ChildElements) { Object sourceObject = GetSourceTargetObject(node); xmlDocument sourceXmlDocument = new xmlDocument(sourceObject.Root.XML); UpdateTemplateObject(sourceXmlDocument); if (sourceXmlDocument.Root.XQuery(templateElement.GetAttribute("NeedWork")) == "False") { continue; } // Формируем запрос к сторонней БД if (CreateAndFillRequest(sourceObject, sourceXmlDocument, templateElement)) { sourceObject.Save(sourceXmlDocument.Root.XML); } } return(true); }
/// <summary> /// Запись Данных в екземпляр запроса /// </summary> /// <param name="obj">Объект от которого отправляется запрос</param> /// <param name="sourceElement">xmlElement с входящими настройками запроса</param> /// <param name="request">екземпляр запроса</param> private void SetRequestData(Object obj, xmlElement sourceElement, Request request) { string RequestFormat = sourceElement.GetAttribute("RequestFormat"); string dataString = ""; if (sourceElement.GetAttribute("MethodQuery") != "") { dataString = obj.XQuery(sourceElement.GetAttribute("MethodQuery")); } if (string.IsNullOrEmpty(RequestFormat) || RequestFormat == "XML" || RequestFormat == "Without conversion") { //Устанавливаем данные для POST-запросов request.SetData(dataString); } else { if (!string.IsNullOrEmpty(dataString)) { XmlDocument doc = new XmlDocument(); doc.LoadXml(dataString); dataString = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, true); request.SetData(dataString.Replace(",null", "")); } } }
/// <summary> /// Создает екземпляры Запросов от контекста каждого объекта в Индексе /// </summary> /// <param name="sourceElement">Метод с параметрами</param> void MakeRequestsFromObjIndex(xmlElement sourceElement) { string XqueryForObjects = sourceElement.GetAttribute("XqueryForObjects"); var objcs = Class.XQuery(XqueryForObjects); xmlDocument objs = new xmlDocument(objcs); if (objs.Root == null) { return; } foreach (var i in objs.Root.ChildElements) { Object CurrentObj = GetCurrentTargetObject(i); UpdateSourceObject(CurrentObj); if (CurrentObj.XQuery(sourceElement.GetAttribute("NeedWork")) == "False") { continue; } Request request = new Request(SourceObject, CurrentObj, sourceElement) { TargetClass = Class }; SetRequestData(CurrentObj, sourceElement, request); Session.ExecuteQuery(request); } }
/// <summary> /// /// </summary> /// <param name="sourceObject">Объект от которого отправляется запрос</param> /// <param name="sourceXmlDocument">xmlDocument от которого отправляется запрос</param> /// <param name="templateElement">xmlElement с входящими настройками запроса</param> /// <returns></returns> private bool MakeSimpleRequests(Object sourceObject, xmlDocument sourceXmlDocument, xmlElement templateElement) { if (sourceXmlDocument.Root.XQuery(templateElement.GetAttribute("NeedWork")) == "False") { Messages.showMessage("АпиКоннектор: NeedWork = false. XQ - " + templateElement.GetAttribute("NeedWork")); return(false); } Messages.showMessage("АпиКоннектор: Выполнение запроса NeedWork. XQ - " + templateElement.GetAttribute("NeedWork")); if (!string.IsNullOrEmpty(TemplateObject.GetAttrValue("XquryObj"))) { UpdateTemplateObject(sourceXmlDocument); } // Формируем запрос к сторонней БД return(CreateAndFillRequest(sourceObject, sourceXmlDocument, templateElement)); }
internal Request(Object sourceObject, Object templateObject, xmlDocument sourceXmlDocument, xmlElement templateElem) { clientHendler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return(true); }; httpClient = new HttpClient(clientHendler); TemplateObject = templateObject; SourceObject = sourceObject; SourceXmlDocument = sourceXmlDocument; TemplateElement = templateElem; ContentType = TemplateElement.GetAttribute("ContentType"); MethodType = TemplateElement.GetAttribute("MethodDispatch"); SetHeaders(); }
/// <summary> /// Поиск файла типа (File) /// </summary> /// <param name="fileElement">XML елемент с входными данными</param> /// <returns>Найденый файл</returns> private File GetFileFromObject(xmlElement fileElement) { string fileName; string fileLink = fileElement.GetAttribute("link"); if (string.IsNullOrEmpty(fileLink)) { fileName = fileElement.GetAttribute("file"); } else { fileName = fileLink.Remove(0, fileLink.IndexOf("/") + 1); } if (string.IsNullOrEmpty(fileName)) { throw new Exception("АпиКоннектор: Не указанно имя файла для отправки"); } return(sourceObject.Dir.Files.getFile(fileName)); }
/// <summary> /// Запись Лога об успешном выполнении /// </summary> /// <param name="SourceObj">Объект ApiConnector`a c параметрами REST запроса</param> /// <param name="SourceElement">Елемент объекта ApiConnector`a c параметрами REST запроса</param> /// <param name="xDoc">xmlDocument ответа</param> /// <param name="RequestURL">URL Запроса</param> /// <param name="RequestData">Данные Запроса</param> internal static void Log(Object SourceObj, xmlElement SourceElement, xmlDocument xDoc, string RequestURL, string RequestData) { // Выполняем поиск объекта для ведения логов Class cls = SourceObj.Class.Domain.FindClass(SourceObj.Root.XQuery("string(LogClass/@link)")); string Xqury = SourceElement.GetAttribute("LogXqury"); string LogXml = xDoc.XQuery(Xqury); if (cls != null) { if (!String.IsNullOrEmpty(LogXml)) { CreateLog(cls, RequestURL, RequestData, LogXml); } else { CreateLog(cls, RequestURL, RequestData, xDoc); } } }
/// <summary> /// Отправка одиночного запроса /// </summary> /// <param name="obj">Объект от которого отправляется запрос</param> /// <param name="sourceElement">xmlElement с входящими настройками запроса</param> void MakeSimpleRequests(Object obj, xmlElement sourceElement) { if (obj.XQuery(sourceElement.GetAttribute("NeedWork")) == "False") { return; } if (!string.IsNullOrEmpty(SourceObject.GetAttrValue("XquryObj"))) { UpdateSourceObject(obj); } // Формируем запрос к сторонней БД Request request = new Request(SourceObject, obj, sourceElement) { TargetClass = Class }; SetRequestData(obj, sourceElement, request); // Выполняем запрос к сторонней БД Session.ExecuteQuery(request); }
private string GetParamKey(xmlElement textParam) { return(textParam.GetAttribute("Key")); }
private string GetParamValue(xmlElement textParam) { return(sourceObject.XQuery(textParam.GetAttribute("ValueXQ"))); }