Существует ли возможность передавать с сигналом параметры, которые у последнего будут собственно входящими, как Id записи в сигналах на изменение и т.д. ?

Нравится

1 комментарий

Здравствуйте!

Илья, к сожалению такой возможности нет. Для решения подобных задач в процессе, который ожидает сигнал, генериремый другим процессом, вторым элементом используется элемент "Чтение данных" с сортировкой записей по дате изменения desc. Таким образом считывается запись, измененная процессом, который сгенерировал сигнал.

Альтернативный вариант - использование элемента "Задание-сценарий", который запустит другой процесс, передав в него нужные параметры. Подобная тема обсуждалась здесь.

Показать все комментарии

Добрый день, коллеги!

Являюсь новичком на форуме, хотя уже достаточно перелопатил по теме SVN, но так и не понял.

Возможно ли загрузить каким-то средствами и зафиксировать уже имеющийся код(из пакета Custom) в хранилище SVN?
С новыми пакетами проблем нет. При попытке зафиксировать пакет Custom всплывает такое сообщение.

"Пользовательский пакет не может быть зафиксирован в хранилище".

Насколько я понимаю логику, этот пакет(Custom) вообще нельзя фиксировать в хранилище.
Но не буду забегать вперед.

Подскажите, пожалуйста, кто что знает по данной теме.

Нравится

8 комментариев

Здравствуйте!

Пакет Custom не предназначен для работы с SVN. Перенесите доработки в свой пакет, затем уже выполняйте фиксацию в хранилище.

Илья, спасибо за ответ.

Продолжу вопрос :smile:

На данный момент (досталось в наследство) в пакете "Custom" находится около 400 элементов и разнести их по отдельным пакетам будет делом всей моей жизни. Есть идея, что эти элементы можно скопировать в новый пакет, который уже будет синхронизирован с SVN. Но есть один момент.

Была найдена информация про пакет Custom.

В процессе своей работы мастер разделов или мастер деталей не только создает различные схемы, но и привязывает данные к текущему пакету. Однако, если текущим пакетом является пакет [Custom], то перенести привязанные данные в другой пользовательский пакет практически невозможно. Поэтому рекомендуется в качестве текущего пакета использовать любой пользовательский пакет, но не [Custom].

Как вы думаете можно ли скопировать элементы в новый пакет, который уже будет синхронизирован с SVN? Может есть ещё варианты?

Ох, как я вас понимаю...
А особенно если с "выездом" в отдельные пакеты паралельно вам надо будет разрабатывать в своих пакетах расширяя то что в Custom это боль.
Предлагаю грязный трюк:
Создаете пустой пакет между Custom и редакционнымSoftKey_RUS
Потом прям на уровне бд в SysSchema - все схемы которые дочерние для Custom, апдейтите для них колонку SysPackageId на значение нового созданного вами пакета.
В теории - всё...
Дальше фиксируете его в SVN ну и собственно сможете вклинить любые ваши пакеты доработок между ним и Custom-ом если надо будет что-то расширять.

Отпишитесь пожалуйста - вышел каменный цветок или нет.
По идее все делается за 15 мин :)

Илья, спасибо за совет. Грязный трюк сработал и конфа компилировалась удачно.
Единственно, что пришлось исправить ещё кое-какие зависимости пакета(внешние сборки, sql-сценарии, данные). Скрипт выглядит примерно так.

update SysSchema set SysPackageId = '42C32F84-0E99-4A7B-8CEF-0A2BD30CF8F7' -- newPackage
where SysPackageId = 'AC5A5588-77FF-4CD0-B5D6-9561546E3D22' -- Custom
 
update SysPackageSchemaData set SysPackageId = '42C32F84-0E99-4A7B-8CEF-0A2BD30CF8F7' -- newPackage
where SysPackageId = 'AC5A5588-77FF-4CD0-B5D6-9561546E3D22' -- Custom
 
update SysPackageReferenceAssembly set SysPackageId = '42C32F84-0E99-4A7B-8CEF-0A2BD30CF8F7' -- newPackage
where SysPackageId = 'AC5A5588-77FF-4CD0-B5D6-9561546E3D22' -- Custom
 
update SysPackageSqlScript set SysPackageId = '42C32F84-0E99-4A7B-8CEF-0A2BD30CF8F7' -- newPackage
where SysPackageId = 'AC5A5588-77FF-4CD0-B5D6-9561546E3D22' -- Custom

Отразится ли это на последующей работе конфигурации неизвестно, буду тестировать.

Ну да я как-то забыл про "Данные" и "Скрипты" но вы по аналогии сделали все верно.
Последствий быть не должно...
Фактически вы можете произвести по базе поиск ID-ника пакета Custom и собственно посмотреть где он там еще задействован, но скорее всего со схемами и модулями он уже никак связан не будет.
Нет связи - нет проблем... остальные Id и UId остались без изменений.

Теперь вы можете при необходимости спокойно расширять/замещать логику и объекты объявленные ранее в Custom и размещать это в обособленных пакетах между Custom и пакетов в который переехали.

Да и схемы в самом пакете куда переехали - вы можете потихоньку переносить в обособленные пакеты просто создавая их - выстраивая их зависимость от "пакета с переездом", и просто в конфигураторе, открывая "Все" свойства, схем и объектов - просто меняйте пакет.

И таким образом "дело всей вашей жизни", окажется делом нескольких недель или максимум месяцев, и у Вас останется еще целая жизнь на разработку нового функционала :)
Приятной работы.

Илья, благодарю за помощь!

Надеюсь новый функционал уже не за горами!:smile:

"Шумков Виталий" написал:Отразится ли это на последующей работе конфигурации неизвестно, буду тестировать.


подскажите, пожалуйста, безболезненно ли прошла данная манипуляция? в метаданных не пришлось править отдельно? указанных запросов достаточно?

Всё прошло нормально, могут возникнуть какие-то мелкие вопросы, но всё решаемо. К метаданным даже не пришлось обращаться. Сделайте бэкап и наслаждайтесь свободным полётом по бд.

Показать все комментарии

Зачастую при взаимодействии пользователя с элементом кейсов, перед тем как сменить статус (сохранив значение) необходимо проводить дополнительные проверки.
По факту смены можно сделать зависимость на колонку.
Но вот как идеологически корректно "вклинивать" проверку до смены статуса, прерывая ее в случае необходимости)
Я конечно нашел методы в схемах дашборда, замещая которые можно вклиниваться... но мне как-то кажется такой подход как минимум не "каноничным" и не очень элегантным, для такой типовой задачи ?

Нравится

17 комментариев

А зачем прерывать? Просто не давать сохранить, если при определенном статусе не проходит валидация.

Илья, здравствуйте!

Уточните, пожалуйста, эта задача может быть решена бизнес-правилами? Также в объекте раздела/страницы редактирования можно задать процесс на событие "Перед сохранением записи". В результате перед сохранением записи будет выполняться проверка разработанной логики.

Суть:
Согласно тех.заданию в статусных моделях зачастую, условия строятся таким образом:
При переходе со статуса A на статус B:
Должны выполняться некоторые условия, заполненность полей, принадлежность пользователя осуществляющего переход к функц.роли и т.д.
Т.е. все эти проверки должны производиться до того как стадия будет изменена и в случае несоответствия условиям - переход осуществляться не должен, возможно даже выполнятся какая-то дополнительная логика, открыть lookup для выбора незаполненных полей, показать некое информационное сообщение, редиректнуть на карточку и т.д.
Ну и само собой есть логика которую необходимо выполнять уже после перехода, с эти проблем нет - вешаемся на изменение колонки.

Вот...
Ранее для этого я замещал схему "SectionActionsDashboard" а в ней в свою очередь, приходилось расширять метод onActionChanged, ну и вообще все это конечно работает но выглядит сущим "костылем".

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

"Демьяник Алексей" написал:задать процесс на событие "Перед сохранением записи".

В таком случае можно задать только Бизнес-процесс, мне же требуется выполнить довольно сложный код клиентской части приложения.
Кстати может быть в событийной модели есть какое-то событие "Перед сохранением записи", на которое я мог бы зацепить свой JS-код.
Может быть из БП можно как-то вызвать событие на которое подпишется JS-код карточки ?
Вообщем суть я думаю понятна.

В бизнес-процессе "Перед сохранением записи" у меня нет никакой информации с какого на какой статус переходят, что сводит на нет смысл его внедрения.
PS: почему для БП из списка событий объекта открывается какой-то отдельный мастер БП

Вроде по функционалу то же самое, но главный вопрос - "зачем?".
Далее не ясно какие входящие параметры вызова такого процесса.

Боже... что это вообще за редактор Бизнес-процессов такой, как там работать в принципе не ясно.
А можно как-то перейти в типовой интерфейс редактора ? я в упор не пойму как мне у элемента "Читать данные" просто произвести настройку откуда и какие колонки...
Жесть.

"Севостьянов Илья Сергеевич" написал:"Читать данные" просто произвести настройку откуда и какие колонки

А в событийном БП:
https://academy.terrasoft.ua/documents/technic-sdk/7-4-1/sobytiya-obekta
и нельзя использовать обычные элементы процессов. По сути там можно только использовать события и скрип-таски. Грубо говоря c# код. И используется там старый редактор БП. И перейти на новый редактор тоже нет возможности.
В будущем и вовсе планируется уход от событийных БП.
Для понимания как и что пишут в них, можете почитать базовые событийные БП базовых объектов в базовых пакетах.

Что касается вашего вопроса про переход со стадии на стадию:
Посмотрите в объект Activity в пакете Base, метод SetRemindDatesOnSaving
Там в момент сохранения как раз читают как старое значение колонки:

var oldStartDate = Entity.GetTypedOldColumnValue<DateTime>("StartDate");

Так и новое:

var newStartDate = Entity.GetTypedColumnValue<DateTime>("StartDate");

И дальше строят логику на основании того что изменилось ;)

"Максим Шевченко" написал:и нельзя использовать обычные элементы процессов.

Т.е. "Читать данные" и прочие типовые элементы - использовать просто нельзя в этих БП?

"Севостьянов Илья Сергеевич" написал:Т.е. "Читать данные" и прочие типовые элементы - использовать просто нельзя в этих БП?

Нельзя.

Так... хорошо.
Значит внедрить свою логику "честно" на смену статусов:
В JavaScript схемах - нельзя, так как логика будет не честной в случае если статус будет меняться например бизнес-процессом, или ESQ-запросом из другой карточки и т.д.
Событийные бизнес-процессы - не имеют возможности работы с типовыми элементами БП, там только суровые C# скрипты.
(А кстати вызвать подпроцесс (созданный в нормальном редакторе) с параметрами, может так?)
Обычные БП которые например вешаются на событие смены значения в колонке со статусом - абсолютно лишены возможности получить предшествующий статус, т.к. срабатывают после изменения.
(Как грязный трюк - реализовывать скрытое поле которое будет содержать предыдущий статус)

Как-то все прям сурово... учитывая сколько бизнес логики обычно приходится на смену статусов всяких бизнес-сущностей

"Севостьянов Илья Сергеевич" написал:в случае если статус будет меняться например бизнес-процессом, или ESQ-запросом из другой карточки и т.д.

А как пользователь должен реагировать на такие случаи?

Ну во первых у него должны отрисоваться изменения как минимум :)
Но я говорю в общем про бизнес логику смены статуса.
При смене из статуса A на статус B
необходимо в поле X поместить значение Z + R, создать активность такую-то и установить ответвенного на такого-то если то или это и т.д.
Если это все реализовывать на уровне JS кода клиентской схемы (Это можно).
Но работать сие будет только если Статус/Стадия меняются из карточки непосредственно.
Если по условиям например другой задачи в другой карточки, другого объекта необходимо при смене его статуса, так же менять статус объекта связанного например справочным полем. То JS логика смены стадии там должна быть и тут продублирована (причем со всеми причудами контекста, которого тут не будет), да и в конце концов может статься и так что стадия вообще будет меняться ESQ запросом или бизнес-процессом.

А реакции пользователя можно придумать какие угодно.

"Севостьянов Илья Сергеевич" написал:При смене из статуса A на статус B
необходимо в поле X поместить значение Z + R, создать активность такую-то и установить ответвенного на такого-то если то или это и т.д.

Это выглядит на обычный процесс за исключением последнего значения.
С другой стороны, для статусов мы всегда делаем деталь Status history, откуда и можно считать предпоследний статус.

"Владимир Соколов" написал:С другой стороны, для статусов мы всегда делаем деталь Status history

Ну т.е. вы самостоятельно заботитесь о сохранении хронологии, а стало быть и описываете бизнес-логику которая эту хронологию контролирует и ведет,
Так же вы имеете в таком случае весьма витьеватые БП в которых вам надо будет получать данные из связанной детали.
Вообщем "полный оверхед" как говорится :)
Когда изначально сама архитектура и идеология статуса/стадии сущности просто обязывает имплементацию предоставлять событийные средства реагирования на "до" и "после", в том числе обеспечивающая предоставление значения стадии сменяемой и стадии целевой в событийные обработчики, будь то callback события в JS или Бизнес процес запущенный по сигналу.
Даже мастер кейсов сделали - прям "годный"...
Но для разработчиков опять "костыли"... как говаривает небезызвестный Umputun: "как будто писали чужие для хищников..."

Ну ведь это же просто очевидно, что надо иметь возможность валидировать переход на стадию до ее осуществления, особенно если сам факт перехода является инициатором сопряженной бизнес-логики.


PS:
Для обработки смены статуса в обычном БП есть 2 большие проблемы:
1) В случае если валидация не пройдена - вам потребуется делать откат. Т.е. роизойдет аш 2 сохранения в БД вместо того чтобы при потенциально правильной архитектуре - не сохранять вовсе.
2) Откат это тоже изменение стадии - т.е. бизнес процесс становится рекурсивным, в случае невалидного состояния - вызывается 2 раза как минимум, вместо того чтобы не вызываться вовсе, в случае невалидности (например проверяемой обособленным БП).
Почему: потому что на старте БП, на сигнале вы никак не сможете провести проверку на предмет рекурсивной сработки по откату - только в теле БП.
3) Пользователь открывший карточку сущности стадия которой поменялась - ни сном ни духом... вот это прям совсем трабла, даже не костыльнуть никак (ну только если вебсокеты крутить с событиями в C#, и повсеместной подпиской в JS на перерендер).

Вообщем оверхед просто сумашедший...

Илья, здравствуйте!

Зафиксировали ваше пожелание по настройке валидации при изменении стадии/состояния записи через DCM.

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

Показать все комментарии

Здравствуйте, возникла необходимость добавить свою страницу в мобильное приложение.
Всё вроде сделал, но возникла проблема, не могу понять, как сделать.

Отнаследовался от BasePage контроллера и представления.

Ext.define("MobileEmptyPage.View", {
        extend: "Terrasoft.view.BasePage",
        xtype: "mobileemptypageview",

        config: {

                id: "MobileEmptyPage",

                scrollable: "vertical",

                navigationPanel: {
                        menuButton: true,
                        showMenuOnSwipe: true
                },

                pageType: Terrasoft.PageTypes.Custom,
                pageId: "MobileEmptyPage",
                menuList: true,
                items: [
                        {
                                xtype: "container",
                                cls: "x-login-form",
                                id: "LoginPageForm",
                                items: [
                                        {
                                                id: "LoginPage_logoImage",
                                                xtype: "image",
                                                cls: "x-settings-logo"
                                        }
                                ]
                        }
                ]
        }
});

и контроллер
Ext.define("MobileEmptyPage.Controller", {
        extend: "Terrasoft.controller.BasePage",       
        config: {
                pageId: null,
                refs: {
                        view: "#MobileEmptyPage"
                }
        },

        launch: function() {
                this.callParent(arguments);
        },

        pageLoadComplete: function() {
        },
       
        pageUnloadComplete: function() {}
});

вызов данной страницы происходит кодом
var pageData = {
                        controllerName: "MobileEmptyPage.Controller",
                        pageSchemaName: "MobileEmptyPage.View",
                        viewXType: "mobileemptypageview"
                };
                var pageName = "MobileEmptyPage";
                Terrasoft.PageCache.addItem(pageName, pageData);
                var pageConfig = {
                        pageSchemaName: pageName
                };
                var mainPageController = Terrasoft.util.getMainController();
                setTimeout(function () {
                        Terrasoft.Router.route("record", mainPageController, [pageConfig]);
                }.bind(this), 1000);

Переход на страницу переходит чудесно! НО потом страница блокируется индикатором загрузки и невозможно его убрать!
Пробовал и Terrasoft.Mask.hide(); и вызывал метод view.setMasked(false);
Подскажите, как завершить процесс загрузки страницы?

Нравится

2 комментария

Павел, по-моему дело не в маске, а в том, что "предположительно" есть свал в пользовательском коде. Отладчиком проходились? Можно ли весь код посмотреть?

Илья, прошу прощения за долгий ответ. Действительно, свал был в другом участке кода.

Показать все комментарии

Доброго времени суток!
Существует ли возможность с помощью esq запроса добавить данные в таблицу?
Например, создать активность с типом E-mail.
Если да, то каким образом это можно реализовать при использовании задания сценария?

Нравится

1 комментарий

Добрый день!

Подскажите, пожалуйста, как переносить между приложениями

  1. настройки колонок реестра у разделов, справочников, деталей
  2. сами справочники. Объект переносится решением, но сам справочник нет

также возникла проблема с настройкой колонок справочника в рамках одного приложения:

  1. пользователь1 настроил колонки кастомного справочника
  2. нажал на кнопку "Сохранить для всех пользователей"
  3. Пользователь2 очистил кеш и перезашел в систему.
  4. Настройка пользователя1 у него не отобразилась.

почему настройки первого пользователя не отобразились у второго?

Используем BPM'Online 7.10.0.1742

Нравится

5 комментариев

"Zaitova Liubov" написал:настройки колонок реестра у разделов, справочников, деталей

переносом данных таблицы SysProfileData
"Zaitova Liubov" написал:сами справочники. Объект переносится решением, но сам справочник нет

переносом данных таблицы Lookup

"Zaitova Liubov" написал:почему настройки первого пользователя не отобразились у второго?

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

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

"Максим Шевченко" написал:
Zaitova Liubov пишет:

настройки колонок реестра у разделов, справочников, деталей

переносом данных таблицы SysProfileData

Zaitova Liubov пишет:

сами справочники. Объект переносится решением, но сам справочник нет

переносом данных таблицы Lookup

Zaitova Liubov пишет:

почему настройки первого пользователя не отобразились у второго?

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


Спасибо!

"Максим Шевченко" написал:
Zaitova Liubov пишет:

настройки колонок реестра у разделов, справочников, деталей

переносом данных таблицы SysProfileData

Zaitova Liubov пишет:

сами справочники. Объект переносится решением, но сам справочник нет

переносом данных таблицы Lookup

Zaitova Liubov пишет:

почему настройки первого пользователя не отобразились у второго?

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


Спасибо!

"Севостьянов Илья Сергеевич" написал:

вот тут

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


спасибо!

Показать все комментарии

Добрый день, возникла необходимость создания лукапа для выбора колонки из указанного справочника. Выбор справочника удалось организовать. Выбор колонки - открывается модальное окно выбора колонки их справочника, но после закрытия(выбора колонки) модального кона в консоли ошибка и атрибут не пуст, но на странице не отображается выбранное значение:
user: Администратор 1/7143f917-c81d-4f98-a35b-94ccb205a576
file: undefined
line: undefined
column: undefined
message: Несуществующий или пустой аргумент
date: Mon Apr 17 2017 12:45:01 GMT+0300 (RTZ 2 (зима))
moduleId: ext-window
moduleName: undefined

Прикрепляю файл с кодом страницы.
Можете подсказать в чём может быть дело?
С уважением,
Вячеслав.



Нравится

4 комментария

Добрый день, Вячеслав.

Сложно сказать, что именно вызывает ошибку без возможности точно воспроизвести Ваш код. Вам стоит провести отладку:

1) Установить значение SeparatedJsFiles в true во внутреннем Web.config (это отключит минификацию для all-combined.js).
2) Посмотреть где именно возникает ошибка и что является её причиной.

Более подробно о SeparatedJsFiles, Вы можете почитать по следующей ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/razvernut-pril…

Решил проблему:
мешал метод getLinkUrl из базовых модулей. его переопределил в getLinkUrl: function(columnName) {return {};},

Просто видимо оно ищет ссылку на сущность. но тут нет id.

"Мотков Илья" написал:Установить значение SeparatedJsFiles в true во внутреннем Web.config

Я правильно понимаю, что в 7.7 такой возможности не предоставлено? Или я не там ищу?

Такая возможность есть. Данная строка может отсутствовать, если её нет - необходимо добавить. Более подробно, Вы можете почитать в SDK

Показать все комментарии

Вот уже версия 7.10 - поддержка отписалась что в этом релизе будет решен баг с "Данными"
7.9.1 - 7.9.2 не работал тип "Первичная установка", приходилось у всех данных просто "Установку" выставлять, как впрочем делал и мастер встроенный :)

Но ситуация с данными стала еще туманнее:
Вот я веду разработку на конфигурации "A" - а тестирую, в т.ч. и установку на идентичной конфигурации "B"
Если я создал данные например своих зарегистрированных "Справочников" (Lookup)
Тип установки: "Первичная установка" или "Просто установка"
Установил эти данные впервые - все встало норм.
Потом я на конфигурации A добавляю в данные еще один справочник например, фиксирую изменения - конфигурацию B обновляем, изменения видны и применяются - объект данных требует установки, даже внутри в "Привязанных данных" список данных корректен.
Но ничего по факту не ставится... вот то что было при первой установке данных - все изменения дальнейшие не применяются.
Пункт принудительной установки на объекте данных в конфигураторе - заблокирован.
А самое занятное что если ты удалишь все данные из установленного пакета и запросишь обновления из репозитория - то "Изменений не обнаружено" (не смотря на то что ты все данные поудалял)

Ну и как это трактовать, что я на этапе разработки уже должен создавать данные с типом "Обновление существующих" на каждый свой чих с данными?

Какой-то бардак... я вот сколько уже маюсь и просто не могу вразумить как работает этот механизм, может кто ни будь мне, неразумному, объяснить как нормально с этими данными работать ?

Нравится

4 комментария

Блин... у меня даже через "Обновление существующих" ничего не выходит...


Вот...
Справочник "Инкотермс" - был создан первым и добавлен в данные.
Потом пакет в тестовом режиме засетапили,
Потом в эти данные добавились еще справочники - но они просто не устанавливаются ну никак, я уже и удалял данные сами, и тип установки менял на любой.
Вот "На чисто" ставятся - а обновить ну никак...

Итого... Мастер при создании раздела - генерирует данные которые, просто не проходят проверку, судя по всему их исправление - решает проблему с установкой обновлений, хотя результат как-то неоднозначен, тяжело проверить т.к. приходится все равно заново разворачивать, т.е. "первая установка"

Здравствуйте!

Какой именно вы используете тип установки?
Какой тип у второй привязки которая не ставится?

Полезная инфа по теме:

Существует три типа привязки данных к пакету:
«Первичная установка» - при первой установке пакета данные, которые привязаны к пакету, будут добавлены в соответствующие таблицы. Работает только если пакет устанавливается с помощью WorkspaceConsole.
«Установка» - при установке уже существующего пакета записи, которые уже существуют, будут обновлены данными, которые поставляются с пакетом. Если записей нет, то они буду добавлены в соответствующие таблицы из данных, привязанных к пакету.
«Обновление существующих» - при установке уже существующего пакета записи, которые, уже есть в таблице, будут обновлены данными из пакета. Данный тип установки сработает только с ForceUpdate (признак "Обязательно для заполнения").

П.С. Более детально по привязки данных к пакету описано в статье
https://academy.terrasoft.ru/documents/technic-sdkmp/7-9/privyazka-dann…

Показать все комментарии

Доброго времени суток Всем!
Итак начну с описания задачи.
В разделе Контрагенты есть действие (Сменить ответственного), которое доступно при множественном выборе. Как только мы выбираем несколько контрагентов и кликаем на данное действие, то открывается лукап со списком контактов, которых можно указать новым ответственным, по выбранным контрагентам.
Необходимо сделать рассылку писем как новому ответственному так и старым, о том что ответственные сменились.
Письмо для нового ответственного готово, как и процесс его отправки.
Вопрос в том, может кто знает как лучше сделать, как реализовать отправку писем старым ответственным? Дело в том что каждому из них должно приходить письмо в формате:
"ФИО Автора действия> передал контрагента - Наименование контрагента> другому сотруднику".

Проблема в том, что не смог найти реализации отправки письма через задание-сценарий.
Те примеры которые есть в ранних версиях не подходят, так как тело письма создается по шаблону.
В моем же случае тело письма должно, например, храниться в параметре БП или же в некой переменной в задании-сценарии.

Нравится

1 комментарий

Пример реализации Вы можете посмотреть в продукте customer center (service enterprise), процесс SendEmailToCaseContactProcess (Отправка email сообщения контакту обращения), элемент SendMailScriptTask (Отправить письмо). Там используется метод SendMail, так же вот были примеры реализации собственного:
http://www.community.terrasoft.ua/forum/topic/24964
В любом случае, используется шарпный SmtpClient.

Показать все комментарии

Изза того что у нас клиентский код не асинхронный, нужно использовать chain.
И есть задача сделать следующую логику

methonMain: function() {
Terrasoft.chain(
                                        var value = this.method1();
                                        if (value != null )
                                        {
                                                value2 = this.method2();
                                        }
                                        else {
                                                value2 = this.method3()
                                        }
);
},
method1: function() {
        //код обращение в БД
        return value;
},
method2: function() {
        //код обращение в БД
        return value2;
},
method2: function() {
        //код обращение в БД
        return value2;
},

Правильно ли будет отрабатывать chain мою логику ?

Нравится

1 комментарий

Не правильно. Чейн должен реализовывать переход к след. методу.

Правильно:

obj = {a: 2, b: 3}

Terrasoft.chain(
function(next) {
console.log(this.a);
next();
}, function(next){
console.log(this.b)
next();
}, function(){
console.log("end");
}, obj
);

Показать все комментарии