Задача : упростить ввод типовых операций для пользователя.
Пример : Возможная Сделка - постоянно надо указывать поле - Прайс-Лист.
Продукты - надо указывать поле - Шт.
Оба эти поля я завел в Пользователя где выбрал для них значения.
Как я понял на прямую получить что-то кроме текстового поля я из атрибута не могу.
У меня даже есть готовый пример,оставшийся от внедренцев:
В папке 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)
может что то есть проще?