Botón para RE-Abrir una acitvidad en Microsoft CRM 4.0

Ya han pasado muchas lunas desde que empecé a trabajar con Microsoft Dynamics CRM, pero aun hoy en día me sigue sorprendiendo de vez en cuando. La verdad, hay que reconocer que es un producto prácticamente sinfín dónde existen tantas posibilidades de personalizar y extender como imaginación. De hecho, como algunos saben, cuando me preguntan “es esto posible en CRM?”, mi respuestas es prácticamente siempre si [ahora mismo no consigo recordar ningún no, pero por si acaso :o) ] el caso es encontrar la forma de hacerlo.

Sin embargo, a veces las sorpresas son para mal cuando descubres que algo que dabas por supuesto que estaba ahí no está. Hace ya tiempo me pasó esto con las actividades. Como sabéis todas todas las entidades en CRM puedes tener varios estados, normalmente activo o inactivo (por aquello de evitar borrar datos valiosos), las actividades no son una excepción. Además casi todas ellas pueden pasarse de un estado a otro, por ejemplo de activo a inactivo o de abierta a cerrada. La sorpresa aparece cuando por casualidades de la vida das con un requerimiento de un cliente que te pide poder re-abrir actividades cerradas y piensas sin problema, para luego darte cuenta de que esa opción no aparece por ningún lado en la interfaz de usuario. Sus razones habrá, estoy seguro, pero es algo que se echa de menos.

Lo bueno, es que como siempre (al menos que recuerde) todo puede solucionarse en CRM. A veces de formas complejas otras de formas más sencillas. En este caso revisando el SDK vemos que es posible cambiar el estado de una actividad utilizando el mensaje SetState, y añadiedo a la mezcla a nuestro viejo amigo JavaScript y el fichero ISV.config obtenemos rápidamente una solución en forma de un botón que nos permitirá añadir la opción perdida de reabrir una actividad cerrada.

Aquí está el código que añadido al ISV.config permite reabrir una llamada telefónica cerrada, como véis va incluido dentro de la definición de un botón listo para ser añadido a nuestro ISV.config Este código puede ser modificado fácilmente para aplicarse a otro tipo de actividades, basta con substituir toda las apariciones de “phonecall” por el nombre de esquema del tipo de actividad que queráis i.e. “task”.

   1: <Entity name="phonecall">
   2:                     <ToolBar ValidForCreate="0" ValidForUpdate="1">
   3:                         <Button Icon="/_imgs/ico_16_exportCustomizations.gif" JavaScript=" if(crmForm.FormType==4){ var xml = &apos;&apos; + &apos;&lt;?xml version=&apos;1.0&apos; encoding=&apos;utf-8&apos;?&gt;&apos; + &apos;&lt;soap:Envelope xmlns:soap=&apos;http://schemas.xmlsoap.org/soap/envelope/&apos; xmlns:xsi=&apos;http://www.w3.org/2001/XMLSchema-instance&apos; xmlns:xsd=&apos;http://www.w3.org/2001/XMLSchema&apos;&gt;&apos; + GenerateAuthenticationHeader() + &apos;  &lt;soap:Body&gt;&apos; + &apos;    &lt;Execute xmlns=&apos;http://schemas.microsoft.com/crm/2007/WebServices&apos;&gt;&apos; + &apos;      &lt;Request xsi:type=&apos;SetStatePhoneCallRequest&apos;&gt;&apos; + &apos;        &lt;EntityId&gt;&apos;+crmForm.ObjectId+&apos;&lt;/EntityId&gt;&apos; + &apos;        &lt;PhoneCallState&gt;Open&lt;/PhoneCallState&gt;&apos; + &apos;        &lt;PhoneCallStatus&gt;-1&lt;/PhoneCallStatus&gt;&apos; + &apos;      &lt;/Request&gt;&apos; + &apos;    &lt;/Execute&gt;&apos; + &apos;  &lt;/soap:Body&gt;&apos; + &apos;&lt;/soap:Envelope&gt;&apos; + &apos;&apos;; var xmlHttpRequest = new ActiveXObject(&apos;Msxml2.XMLHTTP&apos;); xmlHttpRequest.Open(&apos;POST&apos;,&apos;/mscrmservices/2007/CrmService.asmx&apos;, false); xmlHttpRequest.setRequestHeader(&apos;SOAPAction&apos;,&apos;http://schemas.microsoft.com/crm/2007/WebServices/Execute&apos;); xmlHttpRequest.setRequestHeader(&apos;Content-Type&apos;, &apos;text/xml; charset=utf-8&apos;);  xmlHttpRequest.setRequestHeader(&apos;Content-Length&apos;, xml.length); xmlHttpRequest.send(xml); var resultXml = xmlHttpRequest.responseXML; window.location.reload();}">
   4:                             <Titles>
   5:                                 <Title LCID="1033" Text="Re-Open Activity" />
   6:                             </Titles>
   7:                             <ToolTips>
   8:                                 <ToolTip LCID="1033" Text="Re-Opens the activity if it is closed." />
   9:                             </ToolTips>
  10:                         </Button>
  11:                     </ToolBar>
  12:                 </Entity>

Espero que os sea de utilidad,

 

Un saludo.

Marco