// 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 CRM - Tutorial
WSClient.java ver. 1.5 with doUpdate function
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
Nella 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