AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.11.2009, 18:46   #1  
e.pasechny is offline
e.pasechny
Участник
 
42 / 10 (1) +
Регистрация: 10.12.2007
Извлечение значения полей из атрибута на форме
Задача : упростить ввод типовых операций для пользователя.
Пример : Возможная Сделка - постоянно надо указывать поле - Прайс-Лист.
Продукты - надо указывать поле - Шт.

Оба эти поля я завел в Пользователя где выбрал для них значения.

Как я понял на прямую получить что-то кроме текстового поля я из атрибута не могу.

У меня даже есть готовый пример,оставшийся от внедренцев:

В папке 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)
может что то есть проще?
Старый 09.11.2009, 18:56   #2  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
А почему на онлоаде не прописать Прайс-Лист, Шт.? узнаете GUID обоих записей а дальше подставляете в лукап

//Create an array to set as the DataValue for the lookup control.
var lookupData = new Array();
//Create an Object add to the array.
var lookupItem= new Object();
//Set the id, typename, and name properties to the object.
lookupItem.id = '{1AAC1363-01A1-DB11-8432-0003FF9CE217}';
lookupItem.typename = 'account';
lookupItem.name = 'A Bike Store';
// Add the object to the array.
lookupData[0] = lookupItem;
// Set the value of the lookup field to the value of the array.
crmForm.all.parentaccountid.DataValue = lookupData;
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
За это сообщение автора поблагодарили: e.pasechny (1).
Старый 09.11.2009, 23:26   #3  
Bondonello is offline
Bondonello
Kostya Afendikov
Аватар для Bondonello
MCBMSS
Лучший по профессии 2009
 
510 / 106 (5) +++++
Регистрация: 06.06.2008
Адрес: Украина
Почитайте официальный SDK , это вам сэкономит кучу времени, чем разбираться в чужом коде
Плюс воспользуйтесь советом от slivka_83, он, кстати, привел пример из SDK
Старый 10.11.2009, 12:34   #4  
e.pasechny is offline
e.pasechny
Участник
 
42 / 10 (1) +
Регистрация: 10.12.2007
рецепт slivka_83 - помог в одном случае. прайс лист один.. а вот для штук оказалось есть тонкость оно не одно по умолчанию а разное.

SDK я скачал, вот проблема что искать - как правильно сформулировать мысль ....
Старый 10.11.2009, 12:41   #5  
Bondonello is offline
Bondonello
Kostya Afendikov
Аватар для Bondonello
MCBMSS
Лучший по профессии 2009
 
510 / 106 (5) +++++
Регистрация: 06.06.2008
Адрес: Украина
Цитата:
Сообщение от e.pasechny Посмотреть сообщение
рецепт slivka_83 - помог в одном случае. прайс лист один.. а вот для штук оказалось есть тонкость оно не одно по умолчанию а разное.

SDK я скачал, вот проблема что искать - как правильно сформулировать мысль ....
Сущность: "Продукты для возможной сделки"
Поле: "Продукт"
Событие: "OnChange", вставите следующий код

X++:
if (crmForm.all.productid.DataValue != null) 
{

var resultXml;
var result;
var xml;

var id = crmForm.all.productid.DataValue[0].id;
id = id.replace("{", "");
id = id.replace("}", "");

var xml = "" + 
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" + 
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" + 
"  <soap:Body>" + 
"    <entityName xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">product</entityName>" + 
"    <id xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">" + id + "</id>" + 
"    <columnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\" xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\">" + 
"      <q1:Attributes>" + 
"        <q1:Attribute>defaultuomid</q1:Attribute>" + 
"      </q1:Attributes>" + 
"    </columnSet>" + 
"  </soap:Body>" + 
"</soap:Envelope>" + 
"";

var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

xmlHttpRequest.Open("POST", "/mscrmservices/2006/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2006/WebServices/Retrieve");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml);

resultXml = xmlHttpRequest.responseXML;

result = ReadXml(xmlHttpRequest.responseXML);
try
{

defaultvalueid = result.Envelope.Body.RetrieveResult.defaultuomid;

if (isdefined(defaultvalueid))
{
  var lookupData = new Array();
  var lookupItem= new Object();
  lookupItem.id = defaultvalueid.value;
  lookupItem.typename = 'uom';
  lookupItem.name = defaultvalueid.xmlAttributes.name;
  lookupData[0] = lookupItem;
}
else
{
 lookupData = null;
}

  crmForm.all.uomid.DataValue = lookupData;
}
catch(e)
{
crmForm.all.uomid.DataValue = null;
}

}

else
{
}



if(crmForm.all.quantity.DataValue == null)
{
//crmForm.all.quantity = new Object();
crmForm.all.quantity.DataValue = 0.0;
}

if((crmForm.all.productid != null) && (crmForm.all.uomid != null))
{
crmForm.Save();
}

function ReadXml(oXml)
{
var oReturnValue = new Object();

if (IsNull(oXml))
{
return oReturnValue;
}
var childNodes = oXml.childNodes;
for (var i = 0; i < childNodes.length; i++)
{
var oChildNode = childNodes.item(i);
switch (oChildNode.nodeType)
{
case 1:
var oChildObject = ReadXml(oChildNode);

if (IsNull(oReturnValue[oChildNode.baseName]))
{
oReturnValue[oChildNode.baseName] = oChildObject;
}
else
{
if (!isArray(oReturnValue[oChildNode.baseName]))
{
var property = oReturnValue[oChildNode.baseName];
oReturnValue[oChildNode.baseName] = new Array();
oReturnValue[oChildNode.baseName].push(property);
}

oReturnValue[oChildNode.baseName].push(oChildObject);
}
break;
case 3:



oReturnValue["value"] = fromString(oChildNode.nodeValue);
break;
case 4:
return oChildNode.text;
default:
break;
}
}

if (IsNull(oReturnValue.xmlAttributes))
{
var attributes = oXml.attributes;

if (!IsNull(attributes)) 
{
if (attributes.length > 0)
{
oReturnValue.xmlAttributes = new Object();
for (var i = 0; i < attributes.length; i++)
{
oReturnValue.xmlAttributes[attributes.item(i).baseName] = fromString(attributes.item(i).nodeValue);
}
}
}
}

return oReturnValue;
}

function fromString(sValue)
{

if (sValue.toLowerCase() == "true")
{
return true;
}
else if (sValue.toLowerCase() == "false")
{
return false;
}

var intValue = parseInt(sValue, 10);
if (!isNaN(intValue) && intValue.toString() == sValue)
{

return intValue;
}

var floatValue = parseFloat(sValue);
if (!isNaN(floatValue) && floatValue.toString() == sValue)
{

return floatValue;
}

var dateValue = new Date(sValue);
if (!isNaN(dateValue))
{
return dateValue;
}

return sValue;
}

function isdefined( variable)
{
    return (typeof(variable) == "undefined")?  false: true;
}
Теперь после выбора продукта в единицы измерения будет подставляться единица по умолчанию
За это сообщение автора поблагодарили: e.pasechny (1), Elka (1).
Старый 10.11.2009, 13:02   #6  
Elka is offline
Elka
Участник
Аватар для Elka
 
431 / 22 (1) +++
Регистрация: 02.12.2008
Адрес: г. Ростов-на-Дону
[QUOTE=Bondonello;212425]Сущность: "Продукты для возможной сделки"
Поле: "Продукт"
Событие: "OnChange", вставите следующий код


А для продуктов для предложения все аналогично?
Старый 10.11.2009, 13:07   #7  
Elka is offline
Elka
Участник
Аватар для Elka
 
431 / 22 (1) +++
Регистрация: 02.12.2008
Адрес: г. Ростов-на-Дону
Здорово! Работает . Спасибо!
Старый 10.11.2009, 13:29   #8  
e.pasechny is offline
e.pasechny
Участник
 
42 / 10 (1) +
Регистрация: 10.12.2007
Да, действительно супер все работает.
Но последний вопрос остаеться открытым как или точнее что надо было искать в SDK , для подобной ситуации.
Ведь в правильно заданном вопросе уже содержится до 90% ответа =).
Старый 10.11.2009, 13:44   #9  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
в SDK вы редко найдете готовоый код идеально подходящий под Вашу ситуацию там представлены различые примеры, разобравшись в которых можно состаить нужный код
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 10.11.2009, 13:44   #10  
Bondonello is offline
Bondonello
Kostya Afendikov
Аватар для Bondonello
MCBMSS
Лучший по профессии 2009
 
510 / 106 (5) +++++
Регистрация: 06.06.2008
Адрес: Украина
Цитата:
Сообщение от e.pasechny Посмотреть сообщение
Да, действительно супер все работает.
Но последний вопрос остаеться открытым как или точнее что надо было искать в SDK , для подобной ситуации.
Ведь в правильно заданном вопросе уже содержится до 90% ответа =).
Это странный вопрос немного. Начинайте для начала его читать, ознакомьтесь с разделами и содержанием, в голове уже что-то будет откладываться. Со временем и опытом будете знать, что предположительно найти и как. По-другому, наверно, не получится

По сути это же обычная справка и искать надо по ключевым словам конечно же + на форумах люди обычно не жадные, помогают, но все таки пытайтесь осилить вначале сами.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Присвоение одного атрибута сущности значения другого атрибута связанной сущности vital.mih Dynamics CRM: Функционал 38 08.09.2010 10:53
Мелкомягкий CRM: Отображение в Lookup’е произвольного поля вместо основного атрибута Blog bot Dynamics CRM: Blogs 3 26.04.2010 19:10
не сохраняются значения новых полей zhenek Dynamics CRM: Разработка 18 05.06.2009 18:28
пустые значения при перегонки данных через migration Manager valk Dynamics CRM: Функционал 2 02.09.2008 19:52
Как сделать две одинаковые ссылки на одной форме? tatra Dynamics CRM: Разработка 5 21.09.2007 18:26

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:10.