|
07.09.2012, 14:49 | #1 |
Возьми свет!!!
|
EP: как прочитать данные из IISRequest
DAX 4.0
1. Есть объект IISRequest - как я понимаю данные запроса к странице есть метод binaryRead как эти данные обработать в аксапте в частности интересует нужно прочитать данные XML которые посылаются POST запросом. 2. Написал небольшой класс к которому идет ссылка по WEB меню action X++: static void main(Args _args) { IISRequest req; IISResponse res; ; res = WebSession().response(); res.contentType("text/html "); res.writeTxt(strfmt("<HTML><HEAD></HEAD><BODY><H1>НЕLLO FROM AX,%1</H1></BODY></HTML>",curuserid())); res.end(); }
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
10.09.2012, 09:30 | #2 |
Возьми свет!!!
|
Прочитал данные таким образом
X++: BinData binData; COMVariant l,buf; IISRequest request; XMLDocument xmlDocument; str s; XMLElement xmlElement; int i; XMLElement xmlValue; DictClass dictClass; ; if (!values) values = new List(Types::String); request = new IISRequest(); l = new COMVariant(); buf = new COMVariant(); l.long(request.totalBytes()); buf = request.binaryRead(l); binData = new BinData(); binData.setVariant(buf); xmlDocument = new XMLDocument(); xmlDocument.loadXml(binData.getStrData()); if (xmlDocument.getElementsByTagName("input").length() > 1) { this.addError("Неправильный запрос, количество элементов input > 1"); return; } xmlElement = xmlDocument.getElementsByTagName("input").item(0); callerId = xmlElement.getAttribute("callerId"); axCallMethod = xmlElement.getAttribute("axCallMethod"); controlType = xmlElement.getAttribute("controlType"); inputType = xmlElement.getAttribute("type"); for (i=0;i<xmlElement.childNodes().length();i++) { xmlValue = xmlElement.childNodes().item(i); values.addEnd(xmlValue.innerText()); } нужно для ajax post запросов с XML данными и ответом, просто веб-служба в этом отношении очень неудобна
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
10.09.2012, 12:30 | #3 |
Developer
|
Цитата:
В AX 2009 у urlMenuItem есть свойство RemoveNavigation, если его установить в true, параметр NONAV=1 добавляется в url автоматом. |
|
|
За это сообщение автора поблагодарили: sukhanchik (2), Murlin (1). |
11.09.2012, 13:33 | #4 |
Возьми свет!!!
|
Цитата:
сооовсем чуть чуть его изменив X++: <%@ Page Language="C#"%> <%@ Assembly Name="Microsoft.Dynamics.BusinessConnectorNet, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null" %> <%@ Assembly Name="Microsoft.Dynamics.WebParts, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null" %> <%@ Import Namespace="Microsoft.Dynamics.BusinessConnectorNet" %> <%@ Import Namespace="Microsoft.Dynamics.WebParts" %> <script runat="server"> void Page_Load(object sender, EventArgs e) { ISession session = null; try { session = SessionFactory.CreateInstance(HttpContext.Current); if (session != null) { session.InitWeb(HttpContext.Current, Page.IsPostBack); string axaptaElement = "<!--AXAPTA TYPE=\"EPAjaxService\" WebletItemName=\"EPAjaxService\" -->"; using (IWebPortalExecutionEngine engine = WebPortalExecutionEngineFactory.CreateInstance(session)) { // EPDocuGetWebLet writes directly to the output stream engine.RunWebletItem(axaptaElement, "", "", "", this.ClientID); } Response.Flush(); } } catch (Exception ex) { Response.Clear(); Response.AddHeader("content-type", "application/xml; charset=utf-8"); Response.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); Response.Write("<error id=\"1\">" + ex.Message + ex.StackTrace + "</error>"); } finally { if (session != null) { session.Release(HttpContext.Current); } } } </script> я доволен :-D Запрос в XMLHtttpRequest отправляю прямо на страницу aspx получается довольно быстро, вот только баааальшая заморочка была написать javascript с обработкой полученного ответа сервера и подменой-изменение html контролов зато теперь у меня данные в форме клиентов для адреса подтягиваются из кладра аксапты
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
|
|