Lo primero de todo es crear un atributo personalizado en la entidad del formulario donde queremos poner el botón. El atributo tiene que ser de tipo nvarchar (texto) y establecer la propiedad Búsqueda en No.
Publicamos el cambio y creamos el workflow (tiene que ser a petición) que vamos a lanzar cuando se pulse el botón.
Editamos el evento onload del formulario de dicha entidad y este código es el que crea (transforma el atributo) en un botón:
function CrearBoton(fieldname, buttontext, buttonwidth,clickevent)
{
functiontocall=clickevent;
crmForm.all.new_button.DataValue = buttontext;
crmForm.all.new_button.style.borderRight="#3366cc 1px solid";
crmForm.all.new_button.style.paddingRight="5px";
crmForm.all.new_button.style.borderTop="#3366cc 1px solid";
crmForm.all.new_button.style.paddingLeft="5px";
crmForm.all.new_button.style.fontSize="11px";
crmForm.all.new_button.style.backgroundImage="url(/_imgs/btn_rest.gif)";
crmForm.all.new_button.style.borderLeft="#3366cc 1px solid";
crmForm.all.new_button.style.width=buttonwidth;
crmForm.all.new_button.style.cursor="pointer";
crmForm.all.new_button.style.lineHeight="18px";
crmForm.all.new_button.style.borderBottom="#3366cc 1px solid";
crmForm.all.new_button.style.backgroundRepeat="repeat-x";
crmForm.all.new_button.style.fontFamily="Tahoma";
crmForm.all.new_button.style.height="20px";
crmForm.all.new_button.style.backgroundColor="#cee7ff";
crmForm.all.new_button.style.textAlign="center";
crmForm.all.new_button.style.overflow="hidden";
crmForm.all.new_button.attachEvent("onmousedown",push_button);
crmForm.all.new_button.attachEvent("onmouseup",release_button);
crmForm.all.new_button.attachEvent("onclick",testfunction);
}
function push_button(){
window.event.srcElement.style.marginLeft="1px";
window.event.srcElement.style.marginTop="1px";
}
function release_button(){
window.event.srcElement.style.marginLeft="0px";
window.event.srcElement.style.marginTop="0px";
}
Función que ejecutará el workflow:
ExecuteWorkflow = function(entityId, workflowId)
{
var xml = "" +
"" +
"<envelope xmlns:soap="\"http://schemas.xmlsoap.org/soap/envelope/\"" xmlns:xsd="\"http://www.w3.org/2001/XMLSchema\"" xmlns:xsi="\"http://www.w3.org/2001/XMLSchema-instance\"">" +
GenerateAuthenticationHeader() +
" " +
" <execute xmlns="\"http://schemas.microsoft.com/crm/2007/WebServices\"">" +
" <request xsi:type="\"ExecuteWorkflowRequest\"">" +
" <entityid>" + entityId + "</entityid>" +
" <workflowid>" + workflowId + "</workflowid>" +
" </request>" +
" </execute>" +
" " +
"</envelope>" +
"";
var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Execute");
xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
xmlHttpRequest.send(xml);
var resultXml = xmlHttpRequest.responseXML;
return(resultXml.xml);
}
Función del evento OnClick del botón que llamará al la que ejecuta el workflow pasándole el id del de la entidad y el del wf.
function testfunction()
{
var theWorkflowId = "5F63397D-2868-4B74-9E6E-A5C6012981F3"; //change to your workflow Id
ExecuteWorkflow(crmForm.ObjectId, theWorkflowId);
}
create_button_from_textattribute('new_button', 'email','184px',testfunction);

