Возник вот такой вопрос: есть ли возможность пользователям ondemand продуктов получить копию своего продукта onsite (пусть, даже с какими-то ограничениями - по количеству записей, по количеству пользователей и т.д.) для локальной разработки и дальнейшего переноса изменений на ondemand?

Согласитесь, вести разработку на onsite, мягко говоря, не совсем удобно. Один кэш Redis чего стоит! - раз в 10-15 минут в CSP писать запрос на очистку кэша, согласитесь, не реально... да, и реакция техподдержки не мгновенная. Опять же, с отладкой решения на ondemand все плохо.

Нравится

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

"Байбородин Николай" написал:раз в 10-15 минут

Быстро вы пишете, да много всякого, что сессии чистите :cool:

А я вот не знаю, что в 7.7 поменялось. Вносишь элементарное изменение (поле добавить), а протестировать его - целая проблема: В пользовательском интерфейсе изменений не видно, сколько кэш браузера не сбрасывай. Помогает только заход с другого браузера. Три браузера + режим Инкогнито. Шесть раз я могу протестировать сделанные изменения. А потом - всё. Только Redis.
Ну, и опять же, не в кэше одном дело... ведь есть же еще скорость сохранения изменений (которая ниже плинтуса), невозможность отладки, невозможность использовать нормальный редактор кода.
Все это в комплексе - то еще удовольствие.

"Байбородин Николай" написал:В пользовательском интерфейсе изменений не видно

Вроде хватает рефреша страницы... правда иногда клиентские схемы приходится по два раза сохранять - не применяется :)
в 7.7 главное избавились от сильверлайта

Александр, давайте не будем спорить :) Не на пустом же месте этот пост появился. Могу видео заскринить и выложить.

"Байбородин Николай" написал:

Александр, давайте не будем спорить :) Не на пустом же месте этот пост появился. Могу видео заскринить и выложить.


А я не спорю. Просто клиентскую часть правлю и не видел таких эффектов, но верю что бывает :) И стабильности тоже не ощущаю от так сказать среды разработки. А видео в суппорт, они оценят

Копию базы вроде дают с хостинга на опыты, по подписанному разрешению от клиента, если ваша система, так вообще проблем быть не должно

Кстати, про клиентские схемы...
Замечал и такое. Через мастер вносишь изменение. Сохраняешь. Проверяешь - ничего в UI не поменялось. Обновляешь страницу раз, два, три раза обновляешь. Нет результата. Чистишь кэш браузера - нет результата. Открываешь снова в мастере, а изменений то и нет (как я понимаю, то что вы описываете). НО! Если открыть схему через управление конфигурацией, а вот они изменения - живы здоровы. Запускаешь второй браузер - все видно, все ОК. В общем, Ад и Израиль.

"Байбородин Николай" написал:Открываешь снова в мастере, а изменений то и нет

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

"Байбородин Николай" написал: ведь есть же еще скорость сохранения изменений (которая ниже плинтуса)

а в on-site не намного лучше

Здравствуйте.
В On-Site у Вас, просто, больше рычагов влияния на ситуацию. Можно управлять ресурсами сервера БД, приложения сессий. Нивелируется такая составляющая, как канал связи и т. д..

Мда. Как оказалось, это - привилегия за отдельные деньги. Было бы справедливо, если бы были нормальные условия для разработки на ondemand. А так, подъем бабла на пустом месте, так же как и в случае с ежегодной оплатой "техподдержки" для onsite.

Здравствуйте, Николай!

Для ведения разработки и переноса изменений на On-Demand необязательно иметь доступ к серверам. Вы можете вести разработку локально у себя, при этом Ваш локальный сайт должен быть настроен для работы с SVN. По результату выполненных изменений с помощью SVN Вы можете перенести доработки на сайт On-Demand.

Непосредственно предоставление доступа к серверам On-Demand конкретного сайта подразумевает выделение дополнительной изолированной среды и за исключением выполнения отладки серверного кода и профайлинга SQL-запросов уже выполненных залитых доработок не требуется для разработки.
Всю необходимую отладку корректности работы проводите на локальной среде и после того, как убедитесь в корректности работы - переносите на On-Demand.

О процессе разработки и нюансах настройки есть статья в Academy, блок "С чего начать разработку":
http://academy.terrasoft.ru/documents/?product=SDK&ver=7.7.0

"Безродный Андрей" написал:Вы можете вести разработку локально у себя

Андрей, вот этот пункт и вызывает вопрос. Клиент купил On-Demand продукт. Где он возьмет бандл, аналогичный тому, который у него развернут On-Demand для локальной разработки?

Николай,

если клиент (без участия партнера) планирует вести полномасштабную разработку, то клиент может согласовать On-Site лицензии с менеджером. По завершению разработки можно согласовать переход в On-Demand и соответствующую смену лицензий.

Вот об этом я и говорю. За то, что для On-Demand продуктов у вендора нет адекватных инструментов разработки (это при том, что Terrasoft активно пропагандирует именно On-Demand), в конечном счете платит клиент.

Николай,

On-Demand в большинстве своем предпочитают клиенты, которые хотят получить готовую систему и оперативно начать с ней работу, не вникая в нюансы развертывания среды и всех организационных моментов и пользуясь встроенными инструментами кастомизации - мастером раздела, мастером деталей, дизайнером бизнес-процессов. Безусловно, с этой точки зрения On-Demand удобнее.
Т.к. полноценная разработка влечет за собой выделение большего количества ресурсов сервера и, как я говорил ранее, выделение и настройку изолированной среды, то предоставление доступа к площадке является дополнительной услугой.

Показать все комментарии
Технические вопросы
7.x

Здраствуйте! Хочу сделать autoLogin для bpmonline 7.6. То есть, чтобы при переходе на сайт сразу открывался сайт, а не окно авторизации. Для этого хочу в модуле LoginModule, который находится в папке ..Terrasoft.WebApp\Resources\ui\Terrasoft\amd переписать метод onLoginButtonClick, передав логін, пароль Supervisor. Но проблема в том, что после изменения LoginModule.js в етой папке и после полной перезагрузки страницы изменения не вступает в роботу. Подскажите пожалуйста как зделать чтобы bpmonline увидел изменения етого файла. Или какойто альтернативный способ ришения проблемы?

Нравится

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

Здравствуйте.
В прикреплённом файле - рекомендации по настройке сквозной авторизации. Также обращаю Ваше внимание на то, что сайт должен быть не в "корне" IIS, а, как минимум, на уровень ниже.

Спасибо! Но всьоже, почемо после изменения LoginModule.js изменения не вступает в роботу?

Здравствуйте.
Очистите кэш браузера, поскольку дескриптор модуля LoginModule.js динамически не изменяется, а его предыдущая редакция хранится в кэше.

Показать все комментарии
Лид
Технические вопросы
7.x

Добрый день!

Настроил БП, который по входящему email создает лид. Все прекрасно работает за исключением одной детали: не получается привязать email активность к лиду. В карточке активности БП заполняет поле Лид, это видно из карточки активности. Но, в карточке лида, на детали Email данная активность не отображается. Во вложении - скрины.

Что я не учел? Подскажите, пожалуйста.

Нравится

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

К отображению в этой детали применяются два фильтра Activity.TypeId = ConfigurationConstants.Activity.Type.Email (это Id = "e2831dec-cfc0-df11-b00f-001d60e938c6") и Activity.LeadId = Lead.Id
соотвественно проверьте эти два поля для вашей активности email

И еще нюанс - если руками создать в деталь запись - все видно? тогда предложил бы запросом вытащить обе записи (ручную и созданную в бп) и посмотреть в чем разница
SQLExecuterPage в помощь если облако

Кстати еще предположение на основании рисунка детали - а если там колонок побольше вытащить? Может пуст этот заголовок с датой

Показать все комментарии
less css стили
Технические вопросы
7.x

Добрый день коллеги! Подскажите пожалуйста, какими способами можно динамически добавлять/удалять css-классы для сгенерированной и отрисованой страницы?
Например, были добавлены следующие дифы для контейнера, и кнопки, которую он будет содержать:

        {
                "operation": "insert",
                "name": "SignButtonsContainer",
                "parentName": "HeaderContainer",
                "propertyName": "items",
                "values": {
                        "itemType": Terrasoft.ViewItemType.CONTAINER,
                        "visible": true,
                        "wrapClass": ["sign-container"],
                        "items": []
                }
        },
        {
                "operation": "insert",
                "parentName": "SignButtonsContainer",
                "propertyName": "items",
                "name": "SignBtnInsurance",
                "values": {
                        "itemType": Terrasoft.ViewItemType.BUTTON,
                        "caption": {"bindTo": "sign_insurance"},
                        "hint": {"bindTo": "Resources.Strings.sign_insurance"},
                        "imageConfig": {"bindTo": "Resources.Images.sign_insurance_image"},
                        classes: {
                                wrapperClass : "sign-btn",
                                imageClass   : "sign-img",
                        },
                        "visible": true
                }
        },

в итоге, для кнопки были сгенерированы стандартные классы: t-btn-wrapper, t-btn, t-btn-style-default и кастомный, описанный в дифе - sign-btn.

Вопрос : как можно динамически (при отрисованной странице) добавить свой кастомный класс, описанный в LESS, или удалить существующий?
Заранее спасибо!

Нравится

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

Javascript-ом:
document.getElementById('YourElement').className += ' class_two' //add or anything
или JQuery
$('#YourElement').addClass('class_two'); //add
$('#YourElement').removeClass('class_one'); //remove

Спасибо за оперативный ответ! Подскажите пожалуйста, глобальный объект JQuery всегда доступен, или его надо подключать на страницу специальным образом?

JQuery нужно прописать каждый раз, где он необходим.

Не могли бы Вы сбросить пример подключения на страницу JQuery?

попробуйте просто подключить его в зависимости схемы:
к примеру:

define("LeadPageV2", ["BusinessRuleModule", "jQuery"],
  function(BusinessRuleModule) {

Спасибо!

Подскажите пожалуйста, где посмотреть, какая версия Jquery используется?

В пакете NUI, в самой схеме jQuery посмотрите, там написано.

спасибо!

Показать все комментарии
7.5
обратные связи
фильтрация
Технические вопросы
7.x

Доброго времени суток!
Возможно ли присоединить схему по обратным связям к схему, которая в свою очередь тоже была присоединена по обратным связям?
К примеру: необходимо отфильтровать справочное поле Контакт, и вывести туда все контакты, входящие в определенную группу пользователей. Т.е. присоединить SysAdminUnit, а к ней SysUserInRole.
Конечно можно вместо справочника Контакт использовать Объект администрирования, и проблема отпадет. Данная фильтрация приведена для примера. Интересует возможность построения таких связей.

Нравится

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

Здравствуйте, Олег.

Предложенным Вами способом решить данную задачу не получится. Вот здесь Вы можете посмотреть решение похожей задачи.

Спасибо

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

В карточке лида необходимо, чтобы при выборе "Компьютерная техника" поле "Контакт" лочилось. Вставляю это:

rules: {
                "QualifiedContact": {
                    QualifiedContactEnabled: {
                        ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
                        property: BusinessRuleModule.enums.Property.ENABLED,
                        conditions: [{
                            leftExpression: {
                                type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                attribute: "LeadType"
                            },
                            comparisonType: Terrasoft.ComparisonType.NOT_EQUAL,
                            rightExpression: {
                                type: BusinessRuleModule.enums.ValueType.CONSTANT,
                                value: "4EB933C2-D7BB-4711-8D57-3E59C2BCDC0F"
                            }
                        }]
                    }
                }
            }

Вроде все как в примере из SDK, однако поле не блокируется. Причем при изменении параметра ComparisonType на EQUAL поле блокируется (т.е. кусок кода работает). В чем может быть проблема?

Нравится

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

Добрый день!

Укажите Id записи из справочника "LeadType" в нижнем регистре, все символы с маленькой.

"Зарицкий Олег Васильевич" написал:

Добрый день!

Укажите Id записи из справочника "LeadType" в нижнем регистре, все символы с маленькой.


Блин.. Пол дня голову ломал) Спасибо огромное!

Показать все комментарии
7.7
Технические вопросы
7.x

Здравствуйте! Использую версию BPMOnline 7.7.
Подскажите пожалуйста, как можно объяснить, а главное исправить странное поведение webSockets:
При запуске BPM устанавливается подключение, в консоли, как положено, появляется сообщение

WebSocket-connection opened for url:ws://myServer:MyPort/0/Nui/ViewModule.aspx.ashx

Буквально через несколько секунд простоя появляется следующее сообщение:
 
Tue Mar 01 2016 21:07:43 GMT+0300 (RTZ 2 (зима)) Channel closed. Reconnect..

После этого следующая страница открывается значительное время - примерно от 10 секунд. Как раз после повторного подключения сокетов.
Причем при постоянном переключении между страниц такого не происходит.

Подскажите, в какую сторону копать? В текущем режиме работать с системой невозможно.

Нравится

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

Здравствуйте, Александр!

В данной ситуации необходимо проверить настройки WebSocket на сервере и в файлах Web.config. Также рекоммендую проверить, нет ли на этом порту других приложений, которые мешают поддержанию соединения.

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

Здравствуйте, Павел!
На сервере развернуто не одно приложение. Для каждого в TerrasoftWebAPP в конфиге указан свой сокет.

"Павел Баштовой" написал:В данной ситуации необходимо проверить настройки WebSocket на сервере и в файлах Web.config.

Сейчас настройки выглядят следующим образом:

<wsService type="Terrasoft.Messaging.SuperWSService.SuperWSService, Terrasoft.Messaging.SuperWSService" defaultPort="21850" encrypted="false" portForClientConnection="44310" maxConnectionNumber="100" clearIdleSession="false" clearIdleSessionInterval="120" />

Параметр defaultPort для всех сайтов разный, а portForClientConnection одинаковый.
Если возможно, предоставьте, пожалуйста, пример правильной настройки.

Александр, данном случае помимо этих строк есть еще некоторые параметры, которые необходимо указать. Добавляю во вложение инструкцию по настройке Websocket в системе, пожалуйста проверьте, все ли указано верно.

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

Здравствуйте.
Так, на вскидку сложно ответить. Попробуйте остановить проблемные приложения и "просканить" порты, которые используются их web-соккетами на предмет доступности.

Всем спасибо за помощь. Проблема была в ограничении выделенной памяти под пул.
Решилось снятием ограничения. Память приложение использует адекватно.

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

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

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

При этом, добавление и изменение городов, областей и районов для других стран должно быть разрешено.

Используем справочники (Country, City, Rgion, Distinct).

Нравится

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

Добавление города страны - это выбор страны в карточке города. Поэтому тут нужно использовать фильтрацию поля Страна.

Редактирование/удаление можно решить на уровне прав доступа к записям - раздача их в БП после создания записи. Думаю, что администратор системы всё равно должен иметь эту возможность

Здравствуйте, Владимир. Спасибо за ответ. По поводу изменения прав по событию "после добавления записи" - понятно.
Поясните подробнее про фильтрацию в карточке города. Конкретно где именно ставить фильтр. В каком файле? Справочники вызываются при добавлении адресов. Лукап "город" => кнопка добавить.

Уточните, пожалуйста, Вы хотите реализовать невозможность привязки города к стране непосредственно в самом справочнике (например, при добавлении нового значения), или в карточке "Листинга", "Объекта", "Контрагента" и т.д. при выборе города, чтоб не выбиралась определенная страна?

Здравствуйте, Валерий.

В карточке контрагента или контакта, при добавлении адреса вручную, в деталь "Адреса". Приложил 6 скриншотов. С 1- по 6. На 6-ом выбор страны для города, вот тут не должно быть отфильтрованной страны.

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

Аналогичный вопрос уже рассматривается в теме:

http://www.community.terrasoft.ru/forum/topic/15497#comment-59669

И рассматривается в SDK:

http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/LookupFilt…

Спасибо!

Показать все комментарии
Quartz
Технические вопросы
7.x

никак не можем понять в каком формате Quartz хранит свои отметки времени. В документации по нему вроде бы используется long timestamp (1342049220104), но в базе хранится в непонятном виде (635923508479220853).

подскажите, плз, очень надо для отладки

7,5 Pharma

Нравится

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

Дмитрий,

Вроде бы это ticks, т.е. через new DateTime(635923508479220853)
или

http://tickstodatetime.com/

Дмитрий,

Преобразовать время планировщика в привычный DateTime можно с помощью скрипта:
SELECT [SCHED_NAME],
[TRIGGER_NAME]
,[TRIGGER_GROUP]
,[JOB_NAME]
,[JOB_GROUP]
--,[DESCRIPTION]
,CAST([NEXT_FIRE_TIME]/864000000000.0 -693595.0 AS DATETIME) [NEXT_FIRE_TIME]
,CAST([PREV_FIRE_TIME]/864000000000.0 -693595.0 AS DATETIME) [PREV_FIRE_TIME]
,[PRIORITY]
,[TRIGGER_STATE]
,[TRIGGER_TYPE]
,CAST([START_TIME]/864000000000.0 -693595.0 AS DATETIME) [START_TIME]
,CAST([END_TIME]/864000000000.0 -693595.0 AS DATETIME) [END_TIME]
,[CALENDAR_NAME]
,[MISFIRE_INSTR]
,[JOB_DATA]
FROM[QRTZ_TRIGGERS]

спасибо, Дмитрий

спасибо, Олег)

Показать все комментарии
CanExportGrid
Технические вопросы
7.x

Добрый день!

А можно разделить права на выгрузку в Excel по разделам? Сейчас права CanExportGrid даются сразу на все разделы.

Нравится

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

Да, но это потребует некоторых доработок
Наиболее простой вариант - переопределить в нужных разделах canExportGrid на другие операции, созданные для каждого нужного раздела отдельно

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