Tools

Estefan Civera

CRM Solutions

Vtiger CRM - Tutorial

WSClient.java ver. 1.5 with doUpdate function

// Source File Name:   WSClient.java v. 1.5 with doUpdate function

package com.vtiger.vtwsclib;

import com.vtiger.vtwsclib.helpers.HTTP_Client;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.*;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

public class WSClient
{

    public WSClient(String url)
    {
        _servicebase = "webservice.php";
        _serviceurl = getWebServiceURL(url);
        _client = new HTTP_Client(_serviceurl);
    }

    public void reinitailize()
    {
        _client = new HTTP_Client(_serviceurl);
    }

    protected String getWebServiceURL(String url)
    {
        if(!url.endsWith("/"))
            url = (new StringBuilder(String.valueOf(url))).append("/").toString();
        return (new StringBuilder(String.valueOf(url))).append(_servicebase).toString();
    }

    public Object getId(String id)
    {
        String splits[] = id.split("x");
        return splits[1];
    }

    public boolean hasError(Object result)
    {
        boolean isError = false;
        try
        {
            if(result == null)
                isError = true;
            else
            if(result instanceof Exception)
            {
                _lasterror = ((Exception)result).getMessage();
                isError = true;
            } else
            if(result instanceof JSONObject)
            {
                JSONObject resultObject = (JSONObject)result;
                if(resultObject.get("success").toString() == "false")
                {
                    _lasterror = resultObject.get("error");
                    isError = true;
                }
            }
        }
        catch(Exception exception) { }
        return isError;
    }

    public Object lastError()
    {
        return _lasterror;
    }

    protected boolean __doChallenge(String username)
    {
        Map getdata = new HashMap();
        getdata.put("operation", "getchallenge");
        getdata.put("username", username);
        Object response = _client.doGet(getdata, true);
        if(hasError(response))
        {
            return false;
        } else
        {
            JSONObject result = (JSONObject)((JSONObject)response).get("result");
            _servertime = result.get("serverTime").toString();
            _expiretime = result.get("expireTime").toString();
            _servicetoken = result.get("token").toString();
            return true;
        }
    }

    protected void checkLogin()
    {
    }

    protected String md5Hex(String input)
        throws Exception
    {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte hash[] = md.digest(input.getBytes());
        return (new BigInteger(1, hash)).toString(16);
    }

    public Object toJSON(String input)
    {
        return _client.__jsondecode(input);
    }

    public String toJSONString(Object input)
    {
        return _client.__jsonencode(input);
    }

    public boolean doLogin(String username, String vtigerUserAccessKey)
    {
        if(!__doChallenge(username))
            return false;
        Object response;
        Map postdata = new HashMap();
        postdata.put("operation", "login");
        postdata.put("username", username);
        postdata.put("accessKey", md5Hex((new StringBuilder(String.valueOf(_servicetoken))).append(vtigerUserAccessKey).toString()));
        response = _client.doPost(postdata, true);
        if(hasError(response))
            return false;
        try
        {
            JSONObject result = (JSONObject)((JSONObject)response).get("result");
            _serviceuser = username;
            _servicekey = vtigerUserAccessKey;
            _sessionid = result.get("sessionName").toString();
            _userid = result.get("userId").toString();
        }
        catch(Exception ex)
        {
            hasError(ex);
            return false;
        }
        return true;
    }

    public JSONArray doQuery(String query)
    {
        checkLogin();
        if(!query.trim().endsWith(";"))
            query = (new StringBuilder(String.valueOf(query))).append(";").toString();
        Map getdata = new HashMap();
        getdata.put("operation", "query");
        getdata.put("sessionName", _sessionid);
        getdata.put("query", query);
        Object response = _client.doGet(getdata, true);
        if(hasError(response))
        {
            return null;
        } else
        {
            JSONArray result = (JSONArray)((JSONObject)response).get("result");
            return result;
        }
    }

    public List getResultColumns(JSONArray result)
    {
        List columns = new ArrayList();
        if(!result.isEmpty())
        {
            JSONObject row = (JSONObject)result.get(0);
            for(Iterator iterator = row.keySet().iterator(); iterator.hasNext(); columns.add(iterator.next().toString()));
        }
        return columns;
    }

    public Map doListTypes()
    {
        checkLogin();
        Map getdata = new HashMap();
        getdata.put("operation", "listtypes");
        getdata.put("sessionName", _sessionid);
        Object response = _client.doGet(getdata, true);
        if(hasError(response))
            return null;
        JSONObject result = (JSONObject)((JSONObject)response).get("result");
        JSONArray resultTypes = (JSONArray)result.get("types");
        Map returnvalue = new HashMap();
        Object value;
        Map returnpart;
        for(Iterator iterator = resultTypes.iterator(); iterator.hasNext(); returnvalue.put(value, returnpart))
        {
            value = iterator.next();
            returnpart = new HashMap();
            returnpart.put("name", value.toString());
        }

        return returnvalue;
    }

    public JSONObject doDescribe(String module)
    {
        checkLogin();
        Map getdata = new HashMap();
        getdata.put("operation", "describe");
        getdata.put("sessionName", _sessionid);
        getdata.put("elementType", module);
        Object response = _client.doGet(getdata, true);
        if(hasError(response))
        {
            return null;
        } else
        {
            JSONObject result = (JSONObject)((JSONObject)response).get("result");
            return result;
        }
    }

    public JSONObject doRetrieve(Object record)
    {
        checkLogin();
        Map getdata = new HashMap();
        getdata.put("operation", "retrieve");
        getdata.put("sessionName", _sessionid);
        getdata.put("id", record);
        Object response = _client.doGet(getdata, true);
        if(hasError(response))
        {
            return null;
        } else
        {
            JSONObject result = (JSONObject)((JSONObject)response).get("result");
            return result;
        }
    }

    public JSONObject doCreate(String module, Map valueMap)
    {
        checkLogin();
        if(!valueMap.containsKey("assigned_user_id"))
            valueMap.put("assigned_user_id", _userid);
        Map postdata = new HashMap();
        postdata.put("operation", "create");
        postdata.put("sessionName", _sessionid);
        postdata.put("elementType", module);
        postdata.put("element", toJSONString(valueMap));
        Object response = _client.doPost(postdata, true);
        if(hasError(response))
        {
            return null;
        } else
        {
            JSONObject result = (JSONObject)((JSONObject)response).get("result");
            return result;
        }
    }

public JSONObject doUpdate(String module, Map valueMap)
    {
        checkLogin();
        if(!valueMap.containsKey("assigned_user_id"))
            valueMap.put("assigned_user_id", _userid);
        Map postdata = new HashMap();
        postdata.put("operation", "update");
        postdata.put("sessionName", _sessionid);
        postdata.put("elementType", module);
        postdata.put("element", toJSONString(valueMap));
        Object response = _client.doPost(postdata, true);
        if(hasError(response))
        {
            return null;
        } else
        {
            JSONObject result = (JSONObject)((JSONObject)response).get("result");
            return result;
        }
    }


    public Object doInvoke(String method, Object params)
    {
        return doInvoke(method, params, "GET");
    }

    public Object doInvoke(String method, Object params, String type)
    {
        checkLogin();
        Map senddata = new HashMap();
        senddata.put("operation", method);
        senddata.put("sessionName", _sessionid);
        if(params != null)
        {
            Map valueMap = (Map)params;
            if(!valueMap.isEmpty())
            {
                for(Iterator iterator = valueMap.keySet().iterator(); iterator.hasNext();)
                {
                    Object key = iterator.next();
                    if(!senddata.containsKey(key))
                        senddata.put(key, valueMap.get(key));
                }

            }
        }
        Object response = null;
        if(type.toUpperCase() == "POST")
            response = _client.doPost(senddata, true);
        else
            response = _client.doGet(senddata, true);
        if(hasError(response))
        {
            return null;
        } else
        {
            Object result = ((JSONObject)response).get("result");
            return result;
        }
    }

    String _servicebase;
    HTTP_Client _client;
    String _serviceurl;
    String _serviceuser;
    String _servicekey;
    String _servertime;
    String _expiretime;
    String _servicetoken;
    String _sessionid;
    Object _userid;
    Object _lasterror;
}

Vtiger 6 Importing Invoice - Quote - SalesOrder via web services

In questo articolo viene mostrato un esempio di come importare un ordine di vendita (fattura o preventivo)
Ricordo sempre di usare la funzione dodescribe per verificare il formato e i campi di un modulo prima di operare su di esso

 

<?php
#https://wiki.vtiger.com/index.php/ServerAPI_reference_manual#Inventory_Record_Create
include_once('vtwsclib/Vtiger/WSClient.php');
 $url = 'http://localhost/virgin6';
  $client = new Vtiger_WSClient($url);
 
$login = $client->doLogin('admin', 'fffffffffffffffffff');
  if(!$login)
      die('Login Failed');
if(!$login) 
echo 'Login Failed';
else {


        $data = array (
               'subject' => 'SO',
               'sostatus' => 'Created',
               'invoicestatus' => 'AutoCreated',
               'account_id'=> '11x07',
               'assigned_user_id' => '19x1', 
               'bill_street'=>'Commercial Street',
               'ship_street'=>'Bangalore',
               'currency_id'=>'21x1',
               'hdnTaxType' => 'group',
               'conversion_rate' => 1,
               'productid'=>'14x8',
               'hdnDiscountAmount'=>'2',// sconto
'hdnTaxType' => 'group', // Tassazione individuale o di gruppo
//'hdnSubTotal' => 50*2, // totale/sommatoria degli articoli
'hdnS_H_Amount' => 10, // Spese di spedizione
//'pre_tax_total' => 10 + (50*2),  // totale/sommatoria degli articoli + spese sped + commissioni.....
'hdnS_H_Percent' => 22, // aliquiota iva
//'hdnGrandTotal' => (10 + (50*2)) *1.22,*/
               'LineItems'=>array(
array('productid'=>'14x8','listprice'=>'2000','quantity'=>'1'),
array('productid'=>'14x75','listprice'=>'1000','quantity'=>'1')
),
       );
$recordInfo = $client->doCreate('SalesOrder', $data);

if($recordInfo) {
echo "<pre>";
print_r($recordInfo);
echo "</pre>";
}
else
print_r($client->lasterror());
}
?>

 

Vtiger 6 - Override intelligente della lingua

Vtiger 6 - Override intelligente della linguaNella personalizzazione di un modulo esistente di Vtiger o nella creazione di uno nuovo, capita spesso di dover cambiare il testo di un campo oppure di aggiungere una nuova voce per un nuovo campo.

Solitamente si entra nella cartella language si individua il file e si modifica/inserisce il campo interessato.
Questa soluzione però presenta lo svantaggio che a seguito di un aggiornamento della lingua le modifiche devono essere gestite manualmente.

 

 

Pagina 2 di 3

Richiedi la Demo di Vtiger CRM

Vuoi una demo gratuita di VTiger CRM?

Non esitare a contarmi! Per info info@estefancivera.net - 3207728697 oppure visita la pagina della demo

joomla templates

INFORMATIVA CIRCA L'UTILIZZO DEI COOKIES
Questo sito utilizza cookie, anche di terze parti. Cliccando su "Ok" acconsenti all’uso dei cookie. Puoi prendere visione dell’informativa estesa sull’uso dei cookie cliccando QUI.

Accetto i cookies provenienti da questo sito.