Conectando Business One y 3cx

Hola que tal, espero que no juzgueis demasiado mi primer artículo en mi blog. Hace bastante tiempo por hobby y en mis horas libres inicie un proyecto , en el que uniria dos de mis grandes pasiones el mundo de Sap Business One y mi vertiente más de sistemas, en este caso con la centralita virtual 3cx.

Estos son dos productos que utilizamos en la empresa donde trabajo. De hecho le he cogido tanto cariño al software de 3cx con el que me siento muy comodo que lo utilizo a nivel personal con su versión gratuita para tener el número fijo de toda la vida (en casa no se quieren desprender de él)

En la actualidad esto que surgio como un juego acabó convirtiendose en un específico mucho más grande y potente. Esta es la versión inicial pero completamente funcional.

Si nos ponemos a investigar sobre la conectividad de Business One a la telefonia no encuentramos demasiada información ,almenos cuando yo lo hice. Y lo que encuentra es para conectar otras marcas de mas renombre (no de mas prestaciones).

Este artículo lo voy a separar en tres partes.

  • La primera parte es este articulo. Donde prepararemos el entorno para poder ejecutar y depurar nuestro plugin comodamente. Además de preparar las referencias necesarias.
  • En la segunda parte crearemos toda la funcionalidad necesaria para poder reaccionar a los eventos de llamada y poder pasarsela a cualquier addon o aplicación que quiera conectarse a nuestro plugin.
  • En la tercera parte implementaremos un addon que reaccione a las llamadas abriendo la ficha del interlocutor comercial en caso de reconocer el telefono del cliente o proveedor. Creando una actividad con la llamada. Y en caso de no existir nos preguntara si queremos darlo de alta. Además habilitaremos una forma sencilla para indicar que campos tienen vinculado un telefono en cualquier formulario dandonos la opción de llamar haciendo doble click.

Requisitos para la primera parte.

  1. Visual Studio Community o versiones superiores.
  2. Acceso a un servidor 3cx con una licencia Profesional. La versión gratuita no funciona.
  3. Cliente 3cx instalado y funcionando

Configurando el proyecto.

El primer paso sera crear proyecto de .net con el que vamos a trabajar. Para ello crearemos un proyecto de tipo Biblioteca de Clases (.NET FRAMEWORK).

Proyecto Biblioteca de Clases

Ahora tenemos que darle un nombre al proyecto e indicarle la versión del framework de .net. Este punto es realmente importante , si no coincide con la versión utilizada por el cliente nuestro plugin no va a funcionar. En ningún momento mostrará errores pero no hará nada y nos podemos pasar horas buscando el problema.

Como aún no sabemos que version hemos de indicar , dejaremos la que nos proponga Visual Studio.

Nombre Proyecto

Ahora renombraremos la Class1 y le daremos el nombre que queramos en mi caso SkolPhonePlugin

Nombre Proyecto

Preparando el entorno para depurar.

Muchos de los fanaticos de las metodologias agiles os hablaran pestes de la depuración , diciendo que con las pruebas unitarias no es necesario. Pero bueno , soy de la vieja escuela y no se vivir sin depurar. Sobretodo cuando estamos montando extensiones sobre otro software que no controlamos porque no lo hemos realizado nosotros y no sabemos como se va a comportar.

Así que vamos a preparara el entorno para depurar. En este caso como es una DLL necesitaremos un exe que la cargue y la ejecute y como es es un plugin del cliente de la 3cx usaremos el exe de esta aplicación.

Normalmente esta en C:\ProgramData\3CXPhone for Windows\PhoneApp , si tienes dudas o no lo encuentras en esta carpeta miralo consultandolo con las Propiedades el fichero en el acceso directo

Ahora en nuestro proyecto iremos a sus propiedades haciendo doble-click.

Propiedades Proyecto

Ahora dentro de la pestaña depurar indicaremos que usaremos un programa externo de inicio e indicaremos el exe 3CXWin8Phone.exe que encontraremos en la carpeta que antes hemos indicado (o donde se encotrase, según donde lo haya instalado su administrador de sistemas).

Propiedades Depurar

Guardaremos y saldremos de propiedades. Dentro de poco volveremos.

Referencias necesarias y versión del framework.

Para poder programar nuestro plugin sera necesario añadir dos referencias , estas referencias corresponden a 2 DLLS que podemos encontrar en el directorio donde esta el exe del cliente.

  • MyPhoneCrmIntegration.dll
  • CRMPluginUtils.dll

Ahora hemos de encontrar el framework minimo valido para nuestra dll. Framework que indicaremos luego en las prodiedades de nuestro proyeco.

Tenemos dos opciones , sencillamente miraremos la versión del runtime de las dll’s que acabamos de referenciar.

Net  Framework version 1

O usaremos alguna aplicacion como la de Jetbrains dotPeek

Net  Framework version 2

Finalizando la primera parte.

Ya casi hemos terminado de configurar el entorno. Ahora solo falta decirle al cliente de 3cx que ha de cargar nuestro plugin y decirle a nuestro proyecto donde tiene que dejar nuestra dll.

Entramos en propiedades e indicaremos en la pestaña compilación que la ruta de Salida es el path donde esta el cliente de la 3cx.

Ruta de salida

Ahora editaremos el fichero 3CXWin8Phone.user.config.

<?xml version="1.0" encoding="utf-8"?>
<appSettings>
  <add key="version" value="3.0.0" />
  <add key="ClientSettingsProvider.ServiceUri" value="" />
  <add key="CRMPlugin" value="CallTriggerCmdPlugin,DotNetScriptPlugin" />
  <add key="MakeCallTimeout" value="10000" />
  <add key="MakeCallTimeoutCTIUnsupported" value="200000" />
  <add key="EnableVCELogging" value="true" />
  <add key="MaxLogFileSizeMb" value="5" />
  <add key="RequestTimeout" value="60" />
  <add key="MaxUploadSizeKb" value="2048" />
</appSettings>

Añadiremos a la linea CRMPlugin el nombre de nuestra dll.

<?xml version="1.0" encoding="utf-8"?>
<appSettings>
  <add key="version" value="3.0.0" />
  <add key="ClientSettingsProvider.ServiceUri" value="" />
  <add key="CRMPlugin" value="CallTriggerCmdPlugin,DotNetScriptPlugin,SkolPhone3" />
  <add key="MakeCallTimeout" value="10000" />
  <add key="MakeCallTimeoutCTIUnsupported" value="200000" />
  <add key="EnableVCELogging" value="true" />
  <add key="MaxLogFileSizeMb" value="5" />
  <add key="RequestTimeout" value="60" />
  <add key="MaxUploadSizeKb" value="2048" />
</appSettings>

Aunque compilemos no sabremos si realmente funciona, eso lo veremos en la parte 2. Creando un plugin para 3cx.