Zoho FSM | Create a Work Order in Zoho FSM from a Task in Zoho Desk

Create a Work Order in Zoho FSM from a Task in Zoho Desk

Usecase: Create a Work order in Zoho FSM whenever a Task is added in Zoho desk.
 
Step 1: Create a connection for Zoho FSM in Zoho Desk
Step 2: Create a custom function
Step 3: Create a workflow rule

Step 1: Create a connection for Zoho FSM in Zoho Desk

To create a connection for Zoho FSM that can be used in Zoho Desk for invoking the Zoho FSM APIs, do the following:
  1. Navigate to Setup > Developer Space > Connections and click Create Connection.



  2. In the Create Connection page, select the Custom Services tab and click Create New Service.



  3. In the Create Service page, enter the following details and click Create Service.
    1. Service Name: Zoho FSM
      The Service Link Name will be automatically populated.
    2. Authentication Type: OAuth2
    3. Parameter Type: Header
    4. Generated Client IDClient Secret
    5. Authorize URL: https://accounts.zoho.com/oauth/v2/auth?access_type=offline&prompt=consent
    6. Access Token URL: https://accounts.zoho.com/oauth/v2/token
    7. Refresh Token URL: https://accounts.zoho.com/oauth/v2/token
    8. Scope: ZohoFSM.modules.all
      Provide values for Scope Display Name.



  4. Click Create Connection.



  5. Do the following and click Create And Connect:
    1. Connection Name: FSMConnection
    2. Select the Scopes ZohoFSM.modules.all



  6. Click Connect in the authentication page.



  7. Click Accept in the authorization page.


In the custom function, where FSM APIs are used via the invokeURL task, use this Connection Link Name.
 

Step 2: Create a custom function

In Zoho Desk, create a custom function that will create a Work Order in Zoho FSM from a Task in Zoho Desk.
  1. Navigate to Setup > Automation > Workflows > Custom Functions and click New Custom Function.



  2. In the Configure Custom Function page, click Write your own.



  3. In the Add New Custom Function, do the following:
    1. Select the module Tasks
    2. Enter the Name as CreateWOInFSM
    3. Click Edit Arguments



  4. In the Edit Arguments overlay, enter the following and click Done:
    1. Method Name: CreateWOInFSM
    2. Name: task_id
    3. Value: Task Id



  5. Add the script below and click Save.

    try 
    {
    resp = zoho.desk.getRecordById("<OrgId>","tasks",task_id);
    ticket_id = resp.get("ticketId");
    ticket_resp = zoho.desk.getRecordById("<OrgId>","tickets",ticket_id);
    description = resp.get("subject");
    customer_email = ticket_resp.get("email");
    search_resp = invokeurl
    [
    type :GET
    connection:"fsmconnection"
    ];
    if(search_resp == "" || search_resp == null)
    {
    desk_contact_search_resp = zoho.desk.searchRecords("<OrgId>","Contacts",{"email":customer_email});
    desk_contact_search_data = desk_contact_search_resp.get("data").toMap();
    contact_create_Map = Map();
    contact_create_Map.put("Salutation","Mr.");
    contact_create_Map.put("First_Name",desk_contact_search_data.get("firstName"));
    contact_create_Map.put("Last_Name",desk_contact_search_data.get("lastName"));
    contact_create_Map.put("Email",desk_contact_search_data.get("email"));
    contact_create_Map.put("Phone",desk_contact_search_data.get("phone"));
    contact_create_Map.put("Mobile",desk_contact_search_data.get("mobile"));
    contact_Service_Address_Map = Map();
    contact_Service_Address_Map.put("Address_Name",desk_contact_search_data.get("lastName") + " Shipping Address");
    contact_Service_Address_Map.put("Street_1",desk_contact_search_data.get("street"));
    contact_Service_Address_Map.put("City",desk_contact_search_data.get("city"));
    contact_Service_Address_Map.put("State",desk_contact_search_data.get("state"));
    contact_Service_Address_Map.put("Zip_Code",desk_contact_search_data.get("zip"));
    contact_Service_Address_Map.put("Country",desk_contact_search_data.get("country"));
    contact_Billing_Address_Map = Map();
    contact_Billing_Address_Map.put("Address_Name",desk_contact_search_data.get("lastName") + " Billing Address");
    contact_Billing_Address_Map.put("Street_1",desk_contact_search_data.get("street"));
    contact_Billing_Address_Map.put("City",desk_contact_search_data.get("city"));
    contact_Billing_Address_Map.put("State",desk_contact_search_data.get("state"));
    contact_Billing_Address_Map.put("Zip_Code",desk_contact_search_data.get("zip"));
    contact_Billing_Address_Map.put("Country",desk_contact_search_data.get("country"));
    contact_create_Map.put("Service_Address",contact_Service_Address_Map);
    contact_create_Map.put("Billing_Address",contact_Billing_Address_Map);
    cr_resp = zoho.fsm.createRecord("Contacts",contact_create_Map);
    customer_id = cr_resp.get("data").toMap().get("Contacts").toMap().get("id");
    }
    else
    {
    customer_id = search_resp.get("data").toMap().get("id");
    }
    customer_resp = zoho.fsm.getRecordById("Contacts",customer_id);
    customer_data = customer_resp.get("data").toMap();
    Billing_Address_Map = customer_data.get("Billing_Address").toMap();
    if(Billing_Address_Map != null)
    {
    billing_Address_map = Map();
    billing_Address_map.put("id",Billing_Address_Map.get("id"));
    billing_Address_map.put("Billing_Street_1",Billing_Address_Map.get("Street_1"));
    billing_Address_map.put("Billing_Street_2",Billing_Address_Map.get("Street_2"));
    billing_Address_map.put("Billing_City",Billing_Address_Map.get("City"));
    billing_Address_map.put("Billing_State",Billing_Address_Map.get("State"));
    billing_Address_map.put("Billing_Country",Billing_Address_Map.get("Country"));
    billing_Address_map.put("Billing_Zip_Code",Billing_Address_Map.get("Zip_Code"));
    }
    Service_Address_Map = customer_data.get("Service_Address").toMap();
    if(Service_Address_Map != null)
    {
    service_Address_map = Map();
    service_Address_map.put("id",Service_Address_Map.get("id"));
    service_Address_map.put("Service_Street_1",Service_Address_Map.get("Street_1"));
    service_Address_map.put("Service_Street_2",Service_Address_Map.get("Street_2"));
    service_Address_map.put("Service_City",Service_Address_Map.get("City"));
    service_Address_map.put("Service_State",Service_Address_Map.get("State"));
    service_Address_map.put("Service_Country",Service_Address_Map.get("Country"));
    service_Address_map.put("Service_Zip_Code",Service_Address_Map.get("Zip_Code"));
    }
    Service_Line_Items_List = list();
    Service_Line_Items_Map = Map();
    servResp = zoho.fsm.searchRecordsByField("Service_And_Parts","Type","Service",Map(),"fsmconnection");
    service_id = servResp.get("data").toMap().get("id");
    Service_Line_Items_Map.put("Service",service_id);
    Service_Line_Items_Map.put("Quantity",1);
    Service_Line_Items_Map.put("Sequence",1);
    Service_Line_Items_Map.put("Contact",customer_id);
    Service_Line_Items_List.add(Service_Line_Items_Map);
    terrResp = zoho.fsm.getRecords("Territories");
    terrId = terrResp.get("data").toMap().get("id");
    createMap = Map();
    createMap.put("Summary",description);
    createMap.put("Contact",customer_id);
    createMap.put("Type","Service");
    createMap.put("Billing_Address",billing_Address_map);
    createMap.put("Service_Address",service_Address_map);
    createMap.put("Territory",terrId);
    createMap.put("Service_Line_Items",Service_Line_Items_List);
    response = zoho.fsm.createRecord("Work_Orders",createMap);
    info response;
    }
    catch (err)
    {
    sendmail
    [
    from :zoho.adminuserid
    to :zoho.adminuserid
    subject :"Error creating work order from task"
    message :err
    ]
    }
Replace <OrgId> with the actual value. To find the OrgId, in Zoho Desk, navigate to Setup > Developer Space > API. You will find the value under the heading Zoho Service Communication (ZSC) Key.
 

Step 3: Create a workflow rule

Create a workflow rule in Zoho Desk to create a Work order in Zoho FSM whenever a Task is added in Zoho desk.
  1. Navigate to Setup > Automation > Workflows and click Create Rule.



  2. In the New Workflow page, enter the following details and click Next.
    1. Module: Tasks
    2. Rule Name: CreateWOFromTask



  3. For Execute on, select Create and click Next.



  4. Skip Criteria and click Next.
  5. For Actions, select Custom Functions and click Existing.



  6. In the Associate Existing Custom Functions, select CreateWOInFSM.



  7. Click Save.

Testing the use case

Select a ticket in Zoho Desk and add a task under it.

 

 
A Work Order will be created in FSM.