...

пятница, 4 декабря 2015 г.

[Из песочницы] Знакомство с языком программирования Deluge. Создание произвольной функции в системе Zoho CRM

В начале 2015 года мною была опубликована статья про Zoho CRM, в которой я описал функционал данной системы, но не рассматривал вопросы ее доработки. Сейчас я решил рассказать о доработках подробнее, так как на практике это оказалось очень актуальным. С системой я работаю уже больше года, и ее часто приходится дорабатывать под те или иные запросы пользователей.

Доработки системы Zoho CRM производятся на языке Deluge, разработанном самой компанией Zoho. Deluge интегрирован также в продукт Zoho Creator, но в данной статье мы рассмотрим использование языка именно в Zoho CRM.

Что такое Deluge?


Определение с сайта (перевод с сайта).

Deluge (Data Enriched Language for the Universal Grid Environment ) — это online язык программирования, который помогает добавлять различные типы бизнес-логики в произвольные функции и делать их более мощными.


Deluge и ZOHO CRM


В Zoho CRM язык Deluge используется при написании так называемой Custom function.

Custom function — это произвольная функция, которая позволяет дорабатывать поведение системы в соответствии с пожеланиями пользователей, не завязываясь на какие-то предустановленные настройки.


С чего я предлагаю начать знакомство с этим языком? На сайте компании Zoho есть много примеров его использования, но я решил привести реальный пример из своей практики. Очень простой и наглядный пример, в котором будут видны основные моменты работы с языком и демонстрация его возможностей.

Описание примера


Мы рассмотри, как создается функция, которая была реализована на одном из проектов. Функция называется Contacts Phone Validate. Задача функции состоит в том, чтобы проверять правильность заполнения пользователями номера телефона контактного лица в Zoho CRM.

Функция должна работать следующим образом:

  • пользователь вводит номер телефона контактного лица в Zoho CRM
  • если телефон введен в неверном формате, то система сообщает об ошибке посредством отправки электронного письма
  • если ошибки в формате ввода нет — номер телефона добавляется в систему

Телефон может быть неправильным по нескольким причинам:
  • Если он введен в неверном формате
  • Если такой номер уже имеется в системе

Итак, рассмотрим на этом примере, как происходит создание произвольной функции в системе Zoho CRM посредством языка Deluge.

Настройка функции производится непосредственно в учетной записи пользователя Zoho CRM и доступна пользователям с правами управления рабочим процессом Workflow.

Сразу хочу обратить ваше внимание на то, что ввиду неидеальной локализации системы Zoho CRM мы будем рассматривать настройку функции на английском языке.

Добавление произвольной функции


Добавление произвольной функции включает в себя этапы:
  • Программирование функции
  • Связывание функции с правилом рабочего процесса Workflow Rules

Рассмотрим подробно каждый из этапов.

1. Программирование функции


Для того, чтобы запрограммировать произвольную функцию выполните следующие действия:

1. Зайдите в Setup > Automation > Workflow > Custom Function
2. На странице Custom Functions нажмите Configure Custom Function
3. Далее нажмите Write your own

4. В открывшемся окне выполните следующие действия:

  • Укажите имя функции. Наша функция будет называться ContactsPhoneValidate. Далее нажмите на ссылку Edit Arguments.
  • Выберите модуль системы, в котором будет действовать функция. В нашем случае это модуль Contacts. Соотнесите данные функции с именем поля или с необходимым значением в модуле CRM. В нашем примере параметром функции является contactPhone, который соответствует полю Phone в модуле Contacts.

  • Нажмите Done

5. Напишите требуемую функцию в конструкторе Deluge Script.

В нашем примере функция выглядела следующим образом. Объявляем переменные:

mapVariable=map();// Создаем переменную типа   Map ( http://ift.tt/1lBomiv )
errorType=""; // В переменной храним текст ошибки


Проверяем корректность формата ввода и территориальную принадлежность:
if(input.contactPhone.startsWith(("+7"))) // Проверяем на +7, номер должен быть без +
{
        errorType="Формат Российского номера должен быть 7XXXXXXXXXX!";
}
else if(input.contactPhone.startsWith(("+89"))) // Проверяем на начало +89 
{
        errorType=("Префикс +89 запрещен в ZOHO CRM!");
}
else if(input.contactPhone.startsWith(("+84"))) // Проверяем на начало +84 
{
        errorType=("Префикс +84 запрещен в ZOHO CRM!"); // Сохраняем ошибку
}
else if(input.contactPhone.startsWith("7")) // Если начинается с 7 без плюса
{
        if(input.contactPhone.length()  !=  11) // но длина не равна 11 символам
        {
                errorType=("Длина российского номера должна быть равна 11 символам!"); 
        }
        else
        {
                phoneType="RUSSIA"; // Телефон российский
        }
}
else if(input.contactPhone.startsWith(("+"))) // Если имеется символ +, но без цифры 7, то номер международный
{
        phoneType="INTERNATIONAL";
}
else
{
        errorType="Номер телефона некорректный"; 
}


Проверяем на наличие ошибок:
if(errorType  !=  "") // Если переменная не пустая - ошибки есть
{
        mapVariable.put("Phone error","Неверный формат телефона");
        mapVariable.put("Phone","-");
        sendmail // отсылаем сообщение об ошибке на email пользователя
        [
                from:zoho.loginuserid  
                to:zoho.loginuserid    
                subject:"Phone format error | Неверный формат телефона"
                message:"Неверный формат телефона! См. инструкцию по CRM!<br>Phone format is not correct! Look through the CRM manual!<br>Error message for phone number <b>" + input.contactPhone + "</b> is: " + errorType + "!"
                content type:HTML
        ]
        updateAccount = zoho.crm.updateRecord("Contacts",input.contactId.toString(),mapVariable); // и вносим в базу данных CRM
}


Если с номером все в порядке, то проверяем на наличие дубликатов:
else // Если на данном этапе ошибки нет 
{
        contactPhone=input.contactPhone.replaceAll("\D",""); // Удаляем все не цифры
        if(phoneType  ==  "INTERNATIONAL")
        {
                contactPhone="+" + input.contactPhone;
        }
        mapVariable.put("Phone",input.contactPhone); 
        prevRecord = zoho.crm.searchRecords("Contacts","(Phone|=|" + input.contactPhone + ")",1); // Проверяем на наличие номера в базе данных

        if(prevRecord.size()  >  0) // если номер существует
        {
                i=0;
                for each account in prevRecord // проверяем принадлежит ли номер текущему контакту
                {
                        if((((account).get("CONTACTID")).toLong()  !=  input.contactId)  &&  (i  ==  0))  // если номер не принадлежит текущему контакту
                        {
                                i=1;
                                mapVariable.put("Phone error","В контакте задвоен телефон!"); 
                                mapVariable.put("Phone","-");
                                sendmail // Высылаем информацию о том что контакт с таким телефоном существует
                                [
                                        from:zoho.loginuserid
                                        to:zoho.loginuserid
                                        subject:"Duplicate Phone | Задвоен телефон"
                                        message:((((((("В контакте задвоен телефон<br>Phone in Contact(" + (account).get("CONTACTID")) + ") is duplicated<br>Phone ") + (account).get("Phone")) + "<br>Owner: <a href='http://ift.tt/1XFxXGr") + (account).get("SMOWNERID")) + "'>") + (account).get("Contact Owner")) + "</a><br>Свяжитесь с владельцем контакта"
                                        content type:HTML
                                ]
                        }
                }
        }
        else
        {
                mapVariable.put("Phone error",""); 
        }
        updateAccount = zoho.crm.updateRecord("Contacts",input.contactId.toString(),mapVariable); // Обновляем  данные контакта.
}


6. После написания функции необходимо проверить код. Нажмите Save and Execute Script желаете проверить работу скрипта введя значения аргументов в всплывающем окне. Если ошибок нет, ваш скрипт готов к ассоциированию с правилом рабочего процесса Workflow.

7. Нажмите Save для сохранения скрипта.

2. Связывание функции с правилом рабочего процесса Workflow Rules


Чтобы связать пользовательскую функцию с правилом рабочего процесса зайдите в Setup > Automation > Workflow Rules, далее нажмите Create Rule.

Выполните следующие действия:

1. Выберите необходимый модуль из раскрывающегося списка (в нашем случае это модуль Contacts), задайте название и описание правила.

2. В разделе Rule Trigger выберите пункт Create or Edit

3. В разделе Rule Criteria устанавливаем критерии
4. В разделе Actions выберите Call Custom Function

  • Нажимите +

  • На странице Configure Custom Function перейдите по ссылке Customized Functions

  • Выберите необходимую ранее созданную функцию. Мы выбираем функцию СontactsPhoneValidate

5. Нажмите Save

Теперь наша функция связана с правилом рабочего процесса Workflow, и при вводе неверного формата телефона, или при дублировании номера пользователь получает сообщение об ошибке.

Заключение


Мы увидели, как с помощью языка Deluge создать в Zoho CRM функцию и как эта функция работает внутри системы. Создание функции на языке Deluge — не сложная вещь, которая позволяет дорабатывать поведение системы Zoho CRM в соответствии с вашими пожеланиями и значительно расширяет возможности программы.

Об использовании Deluge в другом продукте компании Zoho — Zoho Creator я расскажу уже в следующей статье.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Комментариев нет:

Отправить комментарий