09.11.2009, 18:46 | #1 |
Участник
|
Извлечение значения полей из атрибута на форме
Задача : упростить ввод типовых операций для пользователя.
Пример : Возможная Сделка - постоянно надо указывать поле - Прайс-Лист. Продукты - надо указывать поле - Шт. Оба эти поля я завел в Пользователя где выбрал для них значения. Как я понял на прямую получить что-то кроме текстового поля я из атрибута не могу. У меня даже есть готовый пример,оставшийся от внедренцев: В папке C:\Inetpub\wwwroot\ISV\GetFirmAndWarehouse лежит handler.ashx Код: <%@ WebHandler Language="C#" Class="Handler" %> using System; using System.Web; using System.Xml; using Crm.Sdk; public class Handler : IHttpHandler { public void ProcessRequest(HttpContext context) { XmlDocument doc = new XmlDocument(); string fecth = String.Format(@"<fetch mapping='logical'> <entity name='systemuser'> <filter type='and'> <condition attribute='systemuserid' operator='eq' value='{0}'/> </filter> <link-entity name='hr_user1c' from='hr_user1cid' to='hr_user1cid' link-type='inner'> <attribute name='hr_firmid'/> <attribute name='hr_warehouseid'/> </link-entity> </entity> </fetch>", context.Request.Params["userid"]); CrmAuthenticationToken token = new CrmAuthenticationToken(); token.AuthenticationType = 0; token.OrganizationName = context.Request.Params["orgname"]; CrmService crmservice = new CrmService(); crmservice.CrmAuthenticationTokenValue = token; crmservice.Credentials = System.Net.CredentialCache.DefaultCredentials; string resultfetch = crmservice.Fetch(fecth); doc.LoadXml(resultfetch); XmlNode hr_firmid_node = doc.SelectSingleNode("//hr_user1cid.hr_firmid"); XmlNode hr_warehouseid_node = doc.SelectSingleNode("//hr_user1cid.hr_warehouseid"); string hr_firmid = string.Empty; string hr_firmidname = string.Empty; string hr_warehouseid = string.Empty; string hr_warehouseidname = string.Empty; string xmlstr = string.Empty; if (hr_firmid_node != null) { hr_firmid = hr_firmid_node.InnerText; hr_firmidname = hr_firmid_node.Attributes["name"].Value; xmlstr+="<hr_firmid name='"+hr_firmidname+"'>"+hr_firmid+"</hr_firmid>"; } if (hr_warehouseid_node != null) { hr_warehouseid = hr_warehouseid_node.InnerText; hr_warehouseidname = hr_warehouseid_node.Attributes["name"].Value; xmlstr += "<hr_warehouseid name='" + hr_warehouseidname + "'>" + hr_warehouseid + "</hr_warehouseid>"; } /*context.Response.ContentType = "text/plain";*/ context.Response.Write("<root>" + xmlstr + "</root>"); } public bool IsReusable { get { return false; } } } и в форме на OnLoad прописано как его вызвать: Код: FillFields() function FillFields() { var req=createRequestObject(); var url ='/ISV/GetFirmAndWarehouse/Handler.ashx?orgname='+ORG_UNIQUE_NAME+'&userid='+crmForm.all.ownerid.DataValue[0].id; req.open('GET', url, false); req.onreadystatechange = function() { if (req.readyState == 4) { if(req.status == 200) { var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); xmldoc.async = false; xmldoc.loadXML(req.responseText); var rootElement = xmldoc.documentElement; var firmNode=rootElement.selectSingleNode('//hr_firmid'); var if(firmNode!=null && crmForm.all.hr_firmid.DataValue==null) { var lookupData = new Array(); var lookupItem= new Object(); lookupItem.id = firmNode.text; lookupItem.typename = 'hr_firm'; lookupItem.name =firmNode.attributes.getNamedItem("name").text; lookupData[0] = lookupItem; crmForm.all.hr_firmid.DataValue=lookupData; } } } } req.send(null); } function createRequestObject() { if (window.XMLHttpRequest) { try { return new XMLHttpRequest(); } catch (e) { } } else if (window.ActiveXObject) { try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) {} try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {} } return null; } попытался сделать по аналогии ,но у меня не получилось не проходит вот это условие Код: if(req.status == 200) |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|