Migrating Functions

If you are using functions inside Marketplace, you need to migrate those existing functions to Sigma before publishing any of your extensions on the Sigma website to support multiDC. You can migrate easily, as both the Marketplace and Sigma use Deluge for code scripting.

This migration process involves three changes, that are to

 

Get domains dynamically  

You need to get the domains dynamically by using extra keys such as service_domain and sigma_domain.

Function inside Marketplace


deskurl = "https://desk.zoho.com";
sigmaurl = "https://sigma.zoho.com"

Function inside Sigma


deskurl =  data.get("service_domain"); // desk.zoho.com
sigmaurl =  data.get("sigma_domain"); // sigma.zoho.com
 

Invoke an API from functions  

Simply invoke the API directly with the required parameters as shown in the following snippet, unlike Marketplace function where you need to construct form data, headerMap, hash, and more.

Function inside Marketplace


deskurl = "https://desk.zoho.com";
connectionLinkName = "connectionLinkName";
secret = "*******";
orgId = data.get("queryParams").get("orgId");
securityContext = data.get("queryParams").get("securityContext");

formdata = Map();
formdata.put("requestType", "get");
formdata.put("connectionLinkName", connectionLinkName);
formdata.put("requestURL", deskurl + "/api/v1/installedExtensions/{{installationId}}/storage?orgId
=" + orgId + "&queriableValue=apps&limit=99"
reqUrl = formdata.get("requestURL");
tobehashed = "requestURL="+ reqUrl + "&requestType=get&connectionLinkName=" + connectionLinkName;
hash = zoho.encryption.hmacsha256(secret, tobehashed, "hex");
headersMap = Map();
logsMap = Map();
logsMap.put("title", "Fetch apps");
headersMap.put("logs", logsMap.toString());
headersMap.put("HASH", hash.toString());

storageRes = invokeurl
[
    url : deskurl + "/api/v1/invoke?orgId=" + orgId + "&securityContext=" + securityContext
    type: POST
    parameters: formdata
    headers: headersMap
];




Function inside Sigma

 
deskurl = data.get("service_domain");
installationId = data.get("service_app_id");
storageRes = invokeurl
[
    url : deskurl + "/api/v1/installedExtensions/" + installationId + "/storage?queriableValue=apps&limit=99"
    type: GET
    connection: "connectionLinkName"
];

Note: For functions inside Marketplace, there is no need to make a separate API call for extension logging. During this migration, you have to make separate API calls.

 

Fetch API Response directly  

The response for the corresponding API is fetched directly in a single iteration for functions inside Sigma, whereas in Marketplace it involves nested iterations.


Function inside Marketplace


dbObject = storageRes.get("response").get("statusMessage");
apps = dbObject.get("data");

Function inside Sigma


apps = storageRes.get("data");