Показать сообщение отдельно
Старый 18.05.2010, 11:22   #32  
NatK is offline
NatK
Участник
Аватар для NatK
 
48 / 13 (1) ++
Регистрация: 16.06.2009
Адрес: Иркутск
В результате мы пришли к письмам, поскольку со всплывающими сообщениями были проблемы (RSS периодически перестает работать по непонятным причинам)

По сути дела:
На форму обращения добавляем текстовое поле, которое хранит наименование текущей очереди.
WF настраиваем на событие "назначение записи" (можно попробовать и на изменение нашего атрибута): создаем письмо и отправляем, адрес устанавливаем в зависимости от значения поля "Текущая очередь".

Про изменение значения поля с именем очереди:
На онанлоад функции добавляем скрипт, который проверяет, изменилась ли очередь и сохраняет изменения.

window.onunload = function() {
foronunload();
crmForm.detachCloseAlert();//поскольку сохраняем принудительно, то вопрос не задаем
crmForm.Save(); //ну это необходимость, чтобы сохранилось наше поле
}

/*===============================================================*/
сама функция проверки:
window.foronunload = function() {
try{
try{
_guid = getQueue(crmForm.ObjectId);
}
catch(ex){}

if (_guid !="" && _guid!=null && _guid!="undefined"){
var q="";
if(_guid!=null)
{
q = GetAttributeValueFromID("queue",_guid, "name");
//проверяем, если очередь изменилась - меняем new_currentqueue
if (q!=crmForm.all.new_currentqueue.DataValue)
{
crmForm.all.new_currentqueue.DataValue =q;
}
}
}
}
catch(ex){}
}
// скобки проверьте!!!!!!!!!!!!!!!!

/*===============================================================*/
для получения guid очереди и ее наименования используем:
function getQueue(accountguid)
{
var result= "";
var authenticationHeader = GenerateAuthenticationHeader();
// Prepare the SOAP message.
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'>"+ authenticationHeader+
"<soap:Body>"+
"<RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
"<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query'"+
" xsi:type='q1:QueryExpression'>"+
"<q1:EntityName>queueitem</q1:EntityName>"+
"<q1:ColumnSet xsi:type='q1:ColumnSet'>"+
"<q1:Attributes>"+
"<q1:Attribute>queueid</q1:Attribute>"+
"</q1:Attributes>"+
"</q1:ColumnSet>"+
"<q1istinct>false</q1istinct>"+
"<q1:Criteria>"+
"<q1:FilterOperator>And</q1:FilterOperator>"+
"<q1:Conditions>"+
"<q1:Condition>"+
"<q1:AttributeName>objectid</q1:AttributeName>"+
"<q1:Operator>Like</q1:Operator>"+
"<q1:Values>"+
"<q1:Value xsi:type='xsd:string'>"+accountguid+"</q1:Value>"+
"</q1:Values>"+
"</q1:Condition>"+
"</q1:Conditions>"+
"</q1:Criteria>"+
"</query>"+
"</RetrieveMultiple>"+
"</soap:Body>"+
"</soap:Envelope>";
// Prepare the xmlHttpObject and send the request.
var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xHReq.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xHReq.setRequestHeader("Content-Length", xml.length);
xHReq.send(xml);
// Capture the result.
var resultXml = xHReq.responseXML;

// Check for errors.
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0)
{
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
// alert(msg);
}

// Display the retrieved value.
else
{
var results = resultXml.getElementsByTagName('BusinessEntity');
var msg = "";
if (results.length == 0)
{
msg = "Nothing was found ";
//alert(msg);
return;
}
else
{
for (i=0;i < 1;i++)
{
var idValue = results[i].selectSingleNode('./q1:queueid').nodeTypedValue;
result = idValue.toString();
}
}
return result;
}
}


/*===============================================================*/
//спасибо тому, кто написал эту функцию (откуда скопирована - не помню, но кажется это был mmcrm.ru )
function GetAttributeValueFromID(sEntityName, GUID, sAttributeName)
{
var authenticationHeader = GenerateAuthenticationHeader();
// Prepare the SOAP message.
var xml = "";
xml = 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'>"+
authenticationHeader+
"<soap:Body>"+
"<Retrieve xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+
"<entityName>"+sEntityName+"</entityName>"+
"<id>"+GUID+"</id>"+
"<columnSet xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:ColumnSet'>"+
"<q1:Attributes>"+
"<q1:Attribute>"+sAttributeName+"</q1:Attribute>"+
"</q1:Attributes>"+
"</columnSet>"+
"</Retrieve>"+
"</soap:Body>"+
"</soap:Envelope>";
// Prepare the xmlHttpObject and send the request.
var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xHReq.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");
xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xHReq.setRequestHeader("Content-Length", xml.length);
xHReq.send(xml);
// Capture the result.
var resultXml = xHReq.responseXML;

// Check for errors.
var errorCount = resultXml.selectNodes('//error').length;

var result = resultXml.selectSingleNode("//q1:" + sAttributeName).nodeTypedValue;
if (errorCount != 0)
{
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
result = " ";
//alert(msg);
}
// Display the retrieved value.
else
{
return result;
}
}

Вот и все, надеюсь, заработает и кому-то еще пригодиться.

P.S. если есть более оптимальные варианты - с удовольствием воспользуюсь
За это сообщение автора поблагодарили: Elka (1), Hjvfirf (1).