WebERP viene con una API fácil de usar y flexible que permite que los programas de los clientes accedan a webERP de una manera segura. Si desea escribir una aplicación que acceda a webERP, ya sea para publicar transacciones o para extraer información, debe utilizar la API, en lugar de intentar acceder a la base de datos webERP directamente, ya que la API asegura que se mantenga la integridad de los datos. La API es una "Interfaz de Programación de Aplicaciones", que pretende exponer funcionalidad a programas externos. Actualmente hay una serie de funciones de bajo nivel que expone para permitir que las aplicaciones externas recuperen datos y actualicen o inserten datos. Sin embargo, la API se estructuró de una manera que permite utilizar otros protocolos con mucha facilidad. Todo lo que se necesitaria hacer para usar el protocolo SOAP, por ejemplo sería crear un archivo api_soap.php con las mismas funciones que el archivo api_xmlrpc.php.
La API utiliza el protocolo XML-RPC para comunicarse entre el cliente y el servidor. Esto fue elegido porque es liviano, simple y fácil de usar. La API utiliza XML-RPC para PHP - también llamada la clase phpxmlrpc de UsefuI Inc originalmente desarrollada por Edd Dumbill. Esta es una biblioteca externa que se incluye con código webERP listo para ejecutarse. Si bien la extensión PHP XML-RPC estándar podría haberse utilizado, la extensión a menudo no se instala de forma predeterminada, por lo que añadiría otra dependencia a webERP y la complejidad para la configuración e instalación de webERP.
XML-RPC es un protocolo para usar XML para realizar RPC - llamadas a procedimientos remotos.
Simplemente ponga la llamada XML-RPC es XML que contiene el método de la llamada de procedimiento remoto junto con los parámetros y sus tipos de datos y se envía a través de http como POST al servidor XML-RPC, el servidor devuelve una carga XML que contiene los resultados de la llamada. Los parámetros enviados a los métodos pueden contener matrices y matrices asociativas de datos.
Lo inteligente de XML-RPC es que es el protocolo más simple para hacer servicios web. El SOAP más nuevo y MUCHO más complejo (Procolo Simple de Acceso a Objetos) es bastante complejo. Se basa en el principio KISS (KeepIt Simple, Stupid/ Mantenlo simple tonto).
De hecho, el "Servidor" XML-RPC es sólo el comando http://www.yourdomain.com//api/api_xml-rpc.php
No hay ningún proceso de fondo de daemon que se ejecute de forma continua a las llamadas de campo al "servidor", es sólo un comando que es http enviado por la llamada XML-RPC que envía el método XML codificado para ser ejecutado junto con los parámetros necesarios a la API en el comando del servidor ejecuta las funciones php de API expuestas por los métodos xml-rpc y devuelve la respuesta XML-RPC como una carga útil XML. La clase phpxmlrpc realiza el empaquetado convirtiendo las variables y arreglos de PHP al XML requerido para la llamada XML-RPC y también tiene las funciones para convertir la respuesta XML en algo utilizable en PHP sin tener que escribir las rutinas de análisis XML.
Hay un parámetro codificado que debe ser configurado en la API antes de empezar a usarlo. El nombre de la base de datos (la base de datos de la empresa) para usar la API se define en el archivo api/api_php.php - la variable
$api_DatabaseName ="demo";
Debe establecerse antes de intentar utilizar la IPA-(API).
Vale la pena leer un tutorial sobre XML-RPC con PHP que explica con más detalle lo que está sucediendo como introducción a los conceptos.
La belleza de XML-RPC es que el cliente que llama al servidor XML-RPC y que realiza funciones nativas se puede llamar desde cualquier idioma (con enlaces XML-RPC). He utilizado Vala, Genie y Python. Python en particular ha sido muy directo, ya que tiene un xmlrpclib empaquetado con él. Por supuesto, un cliente PHP también es posible y se demuestra a continuación.
La ayuda de la API la produce una llamada xml-rpc a la API utilizando el método system.listMethods (este es un método phpxmlrpc, no un método API). Otro método del sistema xml-rpc de la clase phpxmlrpc se utiliza para devolver los detalles de los parámetros requeridos de cada método. Por lo tanto, el archivo de ayuda no sólo documenta cada uno de los métodos de la API en sí, tambien muestra cómo se puede utilizar la API.
En la narrativa a continuación, la palabra "Servidor" se utiliza para referirse a la instalación de host webERP - de hecho el "servidor" este es el comando webERP /xml-rpc/api_xmlrpc.php.
La API está configurada de forma predeterminada para usar la base de datos de la empresa weberpdemo, y está codificada en el comando api/api_php.php en la línea 6:
$api_DatabaseName ="weberpdemo";
Esta base de datos debe cambiarse manualmente antes de que se pueda utilizar la API en la base de datos de la empresa a la que desea que acceda la API. Tenga en cuenta que la API sólo puede funcionar en una empresa en una instalación webERP. Esta es una limitación del diseño.
A continuación se muestra un ejemplo sencillo de cómo utilizar la API.
Es una aplicación simple de cliente (un consumidor de la API) donde la cantidad de inventario para el artículo DVD-TOPGUN se recupera de la instalación webERP utilizando la API.
echo "Test API";
//the xmlrpc class can output some funny warnings so make sure notices are turned off error_reporting (E_ALL & ~E_NOTICE);
/* you need to include the phpxmlrpc class - see link above - copy the whole directory structure of the class over to your client application from the /xmlrpc directory */
include ("xmlrpc/lib/xmlrpc.inc");
//if your install is on a server at http://www.yourdomain.com/
$ServerURL = "http://www.yourdomain.com//api/api_xml-rpc.php";
$DebugLevel = 0; //Set to 0,1, or 2 with 2 being the highest level of debug info
$Parameters = array();
/* The trap for me was that each parameter needs to be run through xmlrpcval() - to create the necessary xml required for the rpc call if one of the parameters required is an array then it needs to be processing into xml for the rpc call through php_xmlrpc_encode()*/
$Parameters["StockID"] = new xmlrpcval("DVD-TOPGUN"); //the stockid of the item we wish to know the balance for
//assuming the demo username and password will work !
$Parameters["Username"] = new xmlrpcval("admin");
$Parameters["Password"] = new xmlrpcval("");
$Msg = new xmlrpcmsg(".xmlrpc_GetStockBalance", $Parameters);
$Client = new xmlrpc_client($ServerURL);
$Client->setDebug($DebugLevel);
$Response = $Client->send($Msg);
$Answer = php_xmlrpc_decode($Response->value());
if ($Answer[0]!=0){ //then the API returned some errors need to figure out what went wrong
//need to figure out how to return all the error descriptions associated with the codes
} else { //all went well the returned data is in $answer[1]
//answer will be an array of the locations and quantity on hand for DVD_TOPGUN so we need to run through the array to print out
for ($i=0; $i<sizeof($Answer[1]);$i++) {
echo "". $Answer[1][$i]["loccode"] . " has " . $Answer[1][$i]["quantity"]. "on hand";
}
}
Para crear facturas debe usar los siguientes métodos:
InsertOrderHeaderInsertOrderLine - potencialmente varias veces para todas las líneas del pedido, luego InvoiceSalesOrder - para facturar órdenes de venta directamente asumiendo que se entregue el pedido completo - sin embargo, no puede tratar con artículos de inventarios controlados. Sin embargo, procesa las facturas de la misma forma que las versiones estándar con actualizaciones de las cantidades de inventario despachadas, las entradas de la contabilidad general y los registros necesarios para registrar los impuestos y los registros de análisis de ventas.
Para crear una nota de crédito solo se requiere una única llamada de API:
CreateCreditNote:- para crear una nota de crédito a partir de algunos datos de encabezado base y una serie de artículos de línea (como una matriz asociativa). De la misma manera que la función InvoiceSalesOrder hace todo el mismo procesamiento que una nota de crédito estándar desde la interfaz.
Hay algunas secuencias de comandos de ejemplo en la wiki que muestran cómo se llama una serie de funciones de APIXML-RPC estos comandos deben colocarse en un servidor web fuera de una instalación; todo lo que necesita hacer es editar el archivo config.inc para dar el sistema, con su nombre de usuario, contraseña y la dirección URL de su instalación a la que desea conectarse. Como siempre jugar con los ejemplos ayuda a descubrir cómo funciona todo.