Подсчитайте различные записи и отобразите сумму в Zoho

В Zoho Creator у меня есть две формы, которые нужно связать вместе.


Форма A: представляет собой счетчик вознаграждений, где за определенные вопросы присуждаются определенные баллы, и сохраняется для каждой записи в столбце под названием «Points_Earned».

Форма B: представляет собой базу данных личности, содержащую основные сведения о лицах, такие как имя, фамилия, членство в БД и т. д.

PK между двумя формами - это идентификатор человека в формате "UID - Lastname, Firstname" (эти поля отображаются в форме B как отдельные столбцы, но в форме A отображаются как одна объединенная строка в раскрывающемся списке имя поля Reward_Member).


Цель:

В форме B есть столбец с именем Total_Points, в котором должна отображаться сумма всех Points_Earned для определенного UID.

Выражение SQL похоже на: select SUM(Points_Earned) from Form_A where Reward_Member = Form_B.UID + " - " + Form_B.Lastname + ", " + Form_B.Firstname;


Проблема:

Я не уверен, как выполнить вышеупомянутую логику в Deluge. Я пробовал метод Aggregate, но, похоже, он не считает сумму записей, и статьи базы знаний также не помогают. Результат остается пустым.

Это сценарий, который я использовал, чтобы попытаться отобразить сумму (помещенную в EDIT >> ON_LOAD):

//Variables
curpts = 0;
emp_lookup_val = input.Employee_ID + " - " + input.First_Name + ", " + input.Last_Name;

//Perform the sum aggregation function
curpts = Add_Loyalty_Entry[Reward_Member == input.Employee_ID].sum(Points_Earned);

//Set the Text Field Total_Points with the calc result
input.Total_Points = curpts;

Примеры данных:

Форма A:

+---------------+---------------+
| Reward_Member | Points_Earned |
+---------------+---------------+
| 1 - Doe, John |       3       |
| 1 - Doe, John |       2       |
| 4 - Crow, Bob |       1       |
+---------------+---------------+

Форма Б:

+-----+-----------+----------+
| UID | Firstname | Lastname |
+-----+-----------+----------+
|  1  |   John    |   Doe    |
|  4  |   Bob     |   Crow   |
+-----+-----------+----------+

ИНФОРМАЦИЯ ОБ ОТЛАДКЕ

Я использовал следующее выражение, чтобы посмотреть, как выглядят данные, хранящиеся в Reward_Member, и получил результат, показанный после выражения:

Выражение: alert input.Reward_Member.toString() + " earned " + input.Points_Earned + " Point(s)."; Результат: 3485853000000015046 earned 1 Point(s). ... Похоже на BigInt


person Johan Brink    schedule 29.03.2018    source источник


Ответы (1)


Спасибо, что разместили здесь свой вопрос о Zoho Creator

Вы почти получили свой код, его просто в критериях: вместо сравнения с Employee_ID вы должны сравнить его с input.ID, фактическим идентификатором данной записи.

Итак, ваш код должен выглядеть так.

curpts = Add_Loyalty_Entry[Reward_Member ==  input.ID].sum(Points_Earned);
input.Total_Points = curpts;

Объяснение

Потому что кажется, что вы использовали поиск формы B в форме A и назвали этот поиск Reward_Member. Поэтому, если вы регистрируете значение поиска напрямую, вы получите идентификатор записи элемента, который вы выбрали при поиске, как вы только что показали в информации об отладке.

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

Итак, если вы хотите получить все записи в форме A, относящиеся к соответствующему значению Reward_Member, вы должны сравнить это значение с идентификатором соответствующей записи Reward_Member.

Поскольку вы пишете этот код при редактировании формы B (которая, похоже, является формой Reward_Member): для доступа к идентификатору записи этой формы вы должны использовать системное поле input.ID.

(если вы будете писать этот код из этой формы, вам нужно сначала получить идентификатор, а затем сравнить его по своим критериям)

И Другой подход, который вы могли бы использовать, это

Сравните поле поиска Employee_ID of Reward_Member с вашим полем input.Employee_ID, и это уравновесит критерии и также будет работать.

curpts = Add_Loyalty_Entry[Reward_Member.Employee_ID == input.Employee_ID].sum(Points_Earned);
input.Total_Points = curpts;

Лучший подход

И лучшее место для размещения вашего кода будет при отправке (как добавлении, так и редактировании) формы A,

Потому что всякий раз, когда какой-либо Reward_Member будет вознагражден какими-либо баллами, при отправке записи в форме A он в конечном итоге вычислит новую сумму для отправленного Reward_Member и обновит свои Total_Points в форме B, что мгновенно сделает вашу систему согласованной.

Для этого при отправке формы A вы должны поместить этот код

    if(input.Reward_Member != null)
    {
        total_points_earned = Form_A[Reward_Member == input.Reward_Member].sum(Points_Earned); // calculate updated total points earned
        rm_rec = Form_B[ID==input.Reward_Member]; // fetch reward_member record
        rm_rec.Total_Points = total_points_earned; // update the calculated total points into the fetched reward members record    
    }

И тебе хорошо идти.

person zohojayesh    schedule 31.03.2018