vault backup: 2026-02-04 16:09:34
This commit is contained in:
51
Работа/BPMSoft - ELMA/Интеграция CRM и ELMA.md
Normal file
51
Работа/BPMSoft - ELMA/Интеграция CRM и ELMA.md
Normal file
@@ -0,0 +1,51 @@
|
||||
## Внутренние вопросы
|
||||
|
||||
### Отправка комментария - в рамках MVP не будет
|
||||
|
||||
- К чему относится комментарий (какой объект)
|
||||
- Нужно ли будет что-то делать после получения комментария (отправлять Email, создавать напоминание, задачу или что-то другое)
|
||||
- Логирование происходит на стороне ELMA или BPMSoft
|
||||
- Данные в поле `approver` (я так понимаю это Контакт в CRM) в каком формате будут
|
||||
Это будет Id контакта из CRM?
|
||||
|
||||
### Отправка данных по сделке
|
||||
|
||||
- Какой триггер у срабатывания данного метода со стороны BPMSoft - переработать логику кнопки "Отправить на согласование"
|
||||
- Нужно ли как-то сохранять информацию об отправке данных в ELMA
|
||||
- Если мы получаем не успешный ответ (!= 200 код), то какие сообщения на каждый код ответа показываем пользователю
|
||||
|
||||
### Итоговая цепочка согласований
|
||||
|
||||
- Это будет новый объект в системе CRM или будет просто текстовое поле в объекте Сделка
|
||||
- Формат поля `chain_of_approval` в данном методе
|
||||
|
||||
### Отправка комментария из BPMSoft - в рамках MVP не будет
|
||||
|
||||
- Какой триггер у срабатывания данного метода со стороны BPMSoft
|
||||
- В каком объекте будут происходить изменения
|
||||
- Формат данных в поле `initiator` (это просто Id контакта из CRM)
|
||||
|
||||
### Отправка результата согласования
|
||||
|
||||
- Формат данных в поле `resolution`
|
||||
Если это справочное поле, то нужно будет синхронизировать справочники, чтобы я мог по Id искать значение в справочнике
|
||||
|
||||
### Отмена сделки
|
||||
|
||||
- Какой триггер у данного события
|
||||
На данный момент не существует отмены сделки, есть только `Lost` статус
|
||||
|
||||
## Вопросы к ELMA
|
||||
|
||||
### Отправка данных по сделке
|
||||
|
||||
- Хотелось бы увидеть полный пример формата данных в JSON
|
||||
(Набор полей, их параметры и типы)
|
||||
- Какие бывают коды ответов (200, 500, 401 и т. д.)
|
||||
- Формат ответа после получения данных от CRM в формате JSON
|
||||
```json
|
||||
{
|
||||
"status": 200,
|
||||
"errorMessage": ""
|
||||
}
|
||||
```
|
||||
200
Работа/BPMSoft - ELMA/Интеграция со стороны ELMA в BPMSoft.md
Normal file
200
Работа/BPMSoft - ELMA/Интеграция со стороны ELMA в BPMSoft.md
Normal file
@@ -0,0 +1,200 @@
|
||||
## Отправка цепочки согласований
|
||||
|
||||
### Основные моменты
|
||||
|
||||
1. URI для запроса
|
||||
1. Dev `https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/CreateChainOfApproval`
|
||||
2. Prod `https://crm.adsw.io/ServiceModel/ElmaService.svc/CreateChainOfApproval`
|
||||
2. Header для запроса `X-Elma-Service`
|
||||
3. Значение Header должно храниться в системе ELMA и быть зашифрованным (для dev и prod стендов разные значения). Будут переданы позднее
|
||||
4. Перед выполнением запроса необходимо расшифровать значение Header и добавить его в запрос
|
||||
5. В поле `chain_of_approval` отправляются `email` по порядку, исходя из цепочки согласований
|
||||
### Примеры
|
||||
|
||||
```
|
||||
curl --location 'https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/CreateChainOfApproval' \
|
||||
--header 'X-Elma-Service: 123' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"id_crm": "123-123",
|
||||
"chain_of_approval": "test1@mail.com"
|
||||
}'
|
||||
```
|
||||
|
||||
### Специальные условия
|
||||
|
||||
1. По матрице согласования нет подходящих условий
|
||||
- Согласование происходит автоматически в системе ELMA
|
||||
- ELMA отправляет запрос в формате
|
||||
```json
|
||||
{
|
||||
"id_crm": "035e0f7b-18d2-4f24-87d8-59f107110a01",
|
||||
"chain_of_approval": "Согласовано"
|
||||
}
|
||||
```
|
||||
- BPMSoft при получении такого ответа автоматически согласовывает условие
|
||||
|
||||
### Примеры ответов
|
||||
|
||||
Успешный ответ
|
||||
```json
|
||||
{
|
||||
"status": 200,
|
||||
"error_message": ""
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует заголовок авторизации или он неверный
|
||||
```json
|
||||
{
|
||||
"status": 403,
|
||||
"error_message": "Выполнение запрещено. Проверьте все необходимые данные"
|
||||
}
|
||||
```
|
||||
|
||||
Пустое тело
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля id_crm не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `id_crm` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля id_crm не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `chain_of_approval` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля chain_of_approval не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Согласование с Id из поля `id_crm` не найдено в BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Согласование с Id {0} не найдено в системе BPMSoft. Проверьте корректность запроса"
|
||||
}
|
||||
```
|
||||
|
||||
Контакт с email из поля `chain_of_approval` не найден в BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Контакт с email {0} не найден в системе. Проверьте корректность запроса"
|
||||
}
|
||||
```
|
||||
|
||||
Внутренняя ошибка BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 500,
|
||||
"error_message": "Ошибка в процессе обработки"
|
||||
}
|
||||
```
|
||||
## Отправка результата согласования
|
||||
|
||||
### Основные моменты
|
||||
|
||||
1. URI для запроса
|
||||
1. Dev `https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/ChangeApproverResolution`
|
||||
2. Prod `https://crm.adsw.io/ServiceModel/ElmaService.svc/ChangeApproverResolution`
|
||||
2. Header для запроса `X-Elma-Service`
|
||||
3. Значение Header должно храниться в системе ELMA и быть зашифрованным (для dev и prod стендов разные значения). Будут переданы позднее
|
||||
4. Перед выполнением запроса необходимо расшифровать значение Header и добавить его в запрос
|
||||
5. В поле `approver` отправляется `email` согласующего
|
||||
6. В поле `resolution` отправляется строка, один из вариантов ("Согласовано" или "Отклонено")
|
||||
### Примеры
|
||||
|
||||
```
|
||||
curl --location 'https://crm-dev.itdev.adsw.io/ServiceModel/ElmaService.svc/ChangeApproverResolution' \
|
||||
--header 'X-Elma-Service: 123' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
"id_crm": "123-123",
|
||||
"approver": "test@mail.com",
|
||||
"resolution": "Согласовано"
|
||||
}'
|
||||
```
|
||||
|
||||
###
|
||||
### Примеры ответов
|
||||
|
||||
Успешный ответ
|
||||
```json
|
||||
{
|
||||
"status": 200,
|
||||
"error_message": ""
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует заголовок авторизации или он неверный
|
||||
```json
|
||||
{
|
||||
"status": 403,
|
||||
"error_message": "Выполнение запрещено. Проверьте все необходимые данные"
|
||||
}
|
||||
```
|
||||
|
||||
Пустое тело
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля id_crm не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `id_crm` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля id_crm не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `approver` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля approver не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Отсутствует поле `resolution` или его значение пустое
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Значение поля resolution не может быть пустым"
|
||||
}
|
||||
```
|
||||
|
||||
Согласование с Id из поля `id_crm` не найдено в BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Согласование с Id {0} не найдено в системе BPMSoft. Проверьте корректность запроса"
|
||||
}
|
||||
```
|
||||
|
||||
Контакт с email из поля `approver` не найден в BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 400,
|
||||
"error_message": "Контакт с email {0} не найден в системе. Проверьте корректность запроса"
|
||||
}
|
||||
```
|
||||
|
||||
Внутренняя ошибка BPMSoft
|
||||
```json
|
||||
{
|
||||
"status": 500,
|
||||
"error_message": "Ошибка в процессе обработки"
|
||||
}
|
||||
```
|
||||
36
Работа/BPMSoft - ELMA/Методы для общения с CRM от ELMA.md
Normal file
36
Работа/BPMSoft - ELMA/Методы для общения с CRM от ELMA.md
Normal file
@@ -0,0 +1,36 @@
|
||||
|
||||
1. Добавить в `appsettings.json`
|
||||
1. ```json
|
||||
"BPMSoft.Configuration.ElmaService.ElmaService": [
|
||||
"/ServiceModel/ElmaService.svc"
|
||||
],
|
||||
```
|
||||
2. Добавить в `BPMSoft.WebHost.dll.config`
|
||||
1. `<add key="AllowedLocations" value="ServiceModel/ElmaService.svc;...`
|
||||
3. Добавить логи
|
||||
|
||||
```json
|
||||
<logger name="ElmaSyncHelper" writeTo="ElmaSyncHelperAppender" minlevel="Debug" final="true" />
|
||||
<logger name="ElmaService" writeTo="ElmaServiceAppender" minlevel="Debug" final="true" />
|
||||
```
|
||||
|
||||
```js
|
||||
callElmaService: function () {
|
||||
const request = {
|
||||
Id_crm: this.get("Id"),
|
||||
chain_of_approval: "test1, test2"
|
||||
};
|
||||
|
||||
const config = {
|
||||
serviceName: "ElmaService",
|
||||
methodName: "CreateOrderApproval",
|
||||
data: {
|
||||
request: request
|
||||
}
|
||||
};
|
||||
|
||||
this.callService(config, function(response) {
|
||||
debugger;
|
||||
}, this)
|
||||
},
|
||||
```
|
||||
57
Работа/BPMSoft - ELMA/Новые объекты и поля.md
Normal file
57
Работа/BPMSoft - ELMA/Новые объекты и поля.md
Normal file
@@ -0,0 +1,57 @@
|
||||
## Получение данных о сделке из BPMSoft
|
||||
|
||||
- Отправляем один большой запрос со всеми необходимыми данными после срабатывания триггера на стороне BPMSoft
|
||||
- По полям из объекта `test` в запросе необходимо будет создавать новую запись в приложении `Продукты спецификации ()`
|
||||
-
|
||||
|
||||
| Объект CRM | Поле CRM | Код поля CRM | Тип поля | Объект ELMA | Код ELMA | Тип поля | Новое в CRM | Новое в ELMA |
|
||||
| ------------------ | ------------------------------ | ---------------------- | ----------------------- | ----------------- | ----------------------------------- | -------- | :---------: | :----------: |
|
||||
| NrbApproval | | | | transaction_terms | | | | |
|
||||
| | Id согласования | Id | uuid | | | | - | |
|
||||
| | Id сделки | NrbOrderId | uuid | | | | - | |
|
||||
| | Номер сделки | NrbNumber | string | | number | string | | - |
|
||||
| | Создал | CreatedById | uuid | | | | - | |
|
||||
| | Статус | NrbStateDeal | uuid | | state_deal | | - | |
|
||||
| | Клиент | NrbClient | uuid | | | | - | |
|
||||
| | Партнер Арены | NrbPartner | uuid | | | | - | |
|
||||
| | Дистрибьютор | NrbDistributor | uuid | | | | - | |
|
||||
| | Сумма сделки | NrbAmountDeal | decimal | | amount_deal | money | - | - |
|
||||
| | Общая скидка | NrbAverageDiscount | decimal | | discount | decimal | - | - |
|
||||
| | Отсрочка | | integer | | deadment | integer | + | - |
|
||||
| | Рассрочка | NrbInstallment | uuid | | | | + | |
|
||||
| | Стоимость поддержки | | decimal | | the_cost_of_support | decimal | + | - |
|
||||
| | Лицензии без поддержки | | bool | | license_without_support | bool | + | - |
|
||||
| | Отложенная поддержка | NrbDeferredSupport | uuid | | | | + | |
|
||||
| | Гарантийная поддержка | NrbWarrantySupport | uuid | | | | + | |
|
||||
| | Поддержка в виде | | uuid | | | | + | |
|
||||
| | PriceHold Лицензий | NrbLicensePriceHold | uuid | | | | + | |
|
||||
| | PriceHold Поддержка | NrbSupportPriceHold | uuid | | | | + | |
|
||||
| | PriceHold Консалтинг | NrbConsultingPriceHold | uuid | | | | + | |
|
||||
| | Другие значимые условия сделки | | string | | other_significant_transaction_terms | string | + | - |
|
||||
| | | | | | | | | |
|
||||
| NrbApprovalProduct | | | | product_approval | | | | |
|
||||
| | Продукт | NrbProductId | uuid | | | | | |
|
||||
| | Количество | Quantity | int | | | | | |
|
||||
| | Стоимость с учетом скидки | TotalAmount | decimal | | | | | |
|
||||
| | Цена за период | Price | decimal | | | | | |
|
||||
| | Форма контрактования | NrbContractForm | uuid (NrbContractForm) | | | | | |
|
||||
| | Дата старта | NrbStartDate | date | | | | | |
|
||||
| | Дата завершения | NrbEndDate | date | | | | | |
|
||||
| | Период | NrbPeriod | uuid (NrbProductPeriod) | | | | | |
|
||||
| | | | | | | | | |
|
||||
|
||||
Пример запроса от BPMSoft в ELMA
|
||||
|
||||
```json
|
||||
|
||||
```
|
||||
|
||||
## Доработки на стороне ELMA
|
||||
|
||||
id_approval - удалить
|
||||
|
||||
| Что нужно сделать | Ответственный | | | |
|
||||
| ----------------- | ------------- | --- | --- | --- |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
Reference in New Issue
Block a user