Собственно вопрос - как разрешить удаленный вызов процедур Web- сервиса? Есть простой WCF Web- сервис, на его основе получен WSDL, из которого сгенерированы прокси- классы. Эти прокси- классы использует простой консольный клиент, например, просто вернуть строку с сервера - вылетает окно:
Судя по ссылке, запрос не проходит авторизацию, хотя в Terrasoft.WebApp\Web.config указано, что:
Отличная статья, как я теперь могу вызвать метод Web- сервиса, используя AuthCookie? Должен- ли я менять код Web- сервиса, чтобы аутентифицировать внешние запросы?
Возвращаясь к началу, хочу отметить одну интересную деталь - если в Visual Studio попытаться добавить ссылку на WSDL (Add Web Reference), то получим такое вот окно:
Добрый день. После обновления до версии 7.7 возникла проблема при открытии БП в дизайнере процессов.
Бесконечно крутится загрузка, а в консоли появляется следующая ошибка:
Путём проб и ошибок выяснилось, что эта ошибка возникает после использования в элементе "Задача" и "Звонок" события "После сохранения записи"(Ошибка возникает даже если в указанное поле вписать только комментарий). Как быть с решением указанной проблемы?
И ещё один вопрос: Как обратиться к параметру в элементе Скрипт?
Обращение в виде LeadId(идентификатор Лида) - вызывает ошибку при публикации БП.
Предположим у нас есть параметр процесса Text с типом "Строка".
В версии 760 (и более ранних) значение этого параметра можно было получить следующим кодом:
var leadId = LeadId;
В версии 770 этот код будет выглядеть по другому:
var leadId = Get("LeadId");
Что Вы хотите реализовать в событии "После сохранения записи"?
Добрый день!
Подскажите, пожалуйста, можно ли с помощью стандартных инструментов в дизайнере построить бизнес-процесс, который бы вызывался кнопкой из карточки физ.лица и автоматически создавал продажу и продукт в продаже?
Общая схема такая:
1. Есть заявка на продукт с сайта, в которой уже указан продукт
2. Сотрудник call-Центра связывается с клиентом, редактирует карточку заявки и карточку физ.лица.
3. Запускает бизнес-процесс создания продажи и продукта в продаже из карточки физ.лица
4. Этот же бизнес-процесс привязывает заявку к продаже
Данную задачу можно реализовать, но не стандартными инструментами.
Вам необходимо:
1) Добавить кнопку на страницу редактирования. Подробнее
2) В обработчик кнопки добавить логику запуска процесса (за пример можно взять действие "Отправить на визирование" на странице редактирования раздела "Договоры"). В процесс необходимо передать Id открытой записи.
3) Собственно реализовать процесс
3. Настроить визуальное отображение поля [Остаток для оплаты]
Для этого нужно в свойстве diff модели представления описать конфигурационный объект с необходимыми параметрами. - Где это найти?
4. В свойство attributes модели представления добавить колонку [UsrBalance]
В конфигурационном объекте колонки [UsrBalance] указать зависимость от колонок [Amount] и [PaymentAmount], а также метод-обработчик — calculateBalance, который будет рассчитывать значение для колонки [UsrBalance]. - Где это найти?
Добрый день! Описание строения любых модулей приведено по ссылке: http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/SchemaStru…
Там вы можете почитать и про свойство diff и attributes.
В системе есть похожая логика на ту, что вы хотите: она реализована в странице активности. Там по нажатию на чекбокс "Напомнить автору" становится доступным поле "Дата напоминания автору". Думаю, вы можете там подсмотреть реализацию.
Если бы Вы писали этот код сами "с чистого листа", то для выполнения пункта 3 Вам необходимо было бы добавить следующие строки в этот модуль (секция diff):
// Визуальное отображение поля [Остаток для оплаты] на странице редактирования.
diff:/**SCHEMA_DIFF*/[{"operation":"insert",
"parentName":"Header",
"propertyName":"items",
"name":"UsrBalance",
"values":{"bindTo":"UsrBalance",
"layout":{"column":12, "row":2, "colSpan":12}}}]/**SCHEMA_DIFF*/
То что внутри внешних фигурных скобок называется конфигурационным объектом.
Для выполнения пунктов 4-6 Вам необходимо было бы добавить следующее.
В секцию attributes добавить конфигурационный объект для атрибута (свойства) UsrBalance (пункт 4):
// Название колонки модели представления."UsrBalance":{// Тип данных колонки модели представления.
dataValueType: Terrasoft.DataValueType.FLOAT,
// Массив конфигурационных объектов, определяющих зависимости колонки [UsrBalance].
dependencies:[{// Значение колонки [UsrBalance] зависит от значений колонок [Amount] // и [PaymentAmount].
columns:["Amount", "PaymentAmount"],
// Метод-обработчик, который вызывается при изменении значения одной из колонок [Amount] // и [PaymentAmount].
methodName:"calculateBalance"}]}
В секцию methods метод calculateBalance (пункт 5) :
// Метод-обработчик, который рассчитывает значение колонки [UsrBalance].
calculateBalance: function (){// Проверяем, проинициализованы ли в момент открытия страницы редактирования// колонки [Amount] и [PaymentAmount]. Если нет, то устанавливаем для// них нулевые значения.if(!this.get("Amount")){this.set("Amount", 0);}if(!this.get("PaymentAmount")){this.set("PaymentAmount", 0);}// Расчет разницы между значениями в колонках [Amount] и [PaymentAmount].
var result =this.get("Amount")-this.get("PaymentAmount");// Результат расчета присваивается в качестве значения колонке [UsrBalance].this.set("UsrBalance", result);}}
В секцию methods метод onEntityInitialized (пункт 6) :
// Переопределение базового метода Terrasoft.BasePageV2.onEntityInitialized, который // срабатывает после окончания инициализации схемы объекта страницы редактирования.
onEntityInitialized: function (){// Вызывается родительская реализация метода.this.callParent(arguments);// Вызов метода-обработчика, который рассчитывает значение колонки [UsrBalance].this.calculateBalance();}
Вам необходимо переопределить метод onSaved в секции methods схемы страницы редактирования
// Переопределение базового метода Terrasoft.BasePageV2.OnSaved.// Выполняет постобработку сохранения записи
onSaved: function(response, config){// Вызов родительской реализации.this.callParent(arguments);//Вызов Вашего метода
fir();}
"Сергей Кy6риш" написал:поскольку произойдет зачистка контента пакета, и все данные будут утеряны.
День добрый Сергей!!!
расскажите пожалуйста поподробнее на каком этапе произойдет зачистка контента в момент изменения? чтобы уже точно знать чего вообще не следует делать. спасибо!!!
Сергей, Михаил, в целом эта операция возможна.
Выполнял несколько раз, особых проблем замечено не было, если это первая фиксация пакета в хранилище. Очистки пакета не происходило.
Здравствуйте, в меня получилось добавить созданный пакет к серверу svn. По поводу потерь данных, это может произойти если пакет уже был ранние настроен на svn сервер. Так как мой пакет при создании не был настроен на svn, то в меня все работает, все сохраняется и нету потерь.
Добрый день! На протяжении примерно пары лет у нас наблюдаются зависания системы с последующей необходимостью "убивать" процесс, ранее ваши коллеги советовали чистить кэш - проблема стала проявляться реже, но все же осталась (не критично), но последнее время стала снова проявляться чаще, а так же увеличилось время обработки процессов системы именно клиентом у некоторых пользователей (прямую зависимость найти не удалось). Может ли быть связана эта проблема с переходом пользователей на Win 7 64x с Win 7 32x? Возможно у вас появились обновленные бинарные файлы после 3.3.2.307, которые могли бы помочь, или же имеются другие версии, которые объективно лучше работают на Windows 7 64x? Спасибо!
Причины возникновения проблемы могут быть самые разные. Для генерации решения нужно определить её источник (база данных, аппаратное обеспечение сервера или клиентские места). В момент возникновения замедлений проверить у всех ли пользователей это происходит одновременно. Если «да», то обратить внимание на сервер, в частности, на загрузку ЦП и оперативной памяти. Если там всё в порядке, тогда нужно моделировать ситуацию и в это время с помощью утилиты «SQL Server Profiler» пробовать отследить проблемные запросы к базе для возможности их оптимизации. Следующий этап – это проанализировать зависит ли замедление от пользователя, админ\не админ (играют ли роль права доступа). На скорость работы (время отклика системы), также, может влиять количество колонок, которые отображаются в реестре записей (желательно лишние спрятать), наличие сортировки по каким-то из полей реестра (убрать сортировку можно зажав Ctrl и кликнув по полю).
Со временем может быть нарушена структура индексов базы данных (создаются для ускорения выборки данных). Их можно перестроить при помощи скрипта Reindex.rar (во вложении). Рекомендации по выполнению скрипта – во вложении. После выполнения скрипта создаётся хранимая процедура «sp_reindex_all_tables». Её нужно запустить на выполнение. В зависимости от количества индексов, размера базы данных и ресурсов сервера выполнение данной процедуры может занять достаточно продолжительное время при этом нагружая сервер. В связи с этим, если вы будете пересоздавать индексы, рекомендую запускать процесс, когда пользователи не работают с системой. Перед этим обязательно создайте резервную копию базы данных.
Если у вас есть проектные решения стоит обратить внимание и на этот момент. Возможно есть нюансы реализации дополнительной логики.
Последние бинарные файлы версии 3.3.2.313. Для их получения Вы можете обратиться в службу поддержки.
Однако, не уверенна, что одно только обновление файлов решит проблему.
Разбираться с данной ситуацией нужно комплексно, так как причины могут быть самые разнообразные.
Алла сказала верно, что причины возникновения могут быть самые разные. Но раз вы пользуетесь Клиент-Серверным приложением, версии 3.3.2, то я бы обратил внимание в каких именно бизнес-процессах происходит зависание, в каких именно разделах происходит зависание, в каких именно деталях происходит зависание. И уже после этого стал анализировать в первую очередь SQL запросы, что работают в разделе, деталях, карточках редактирования в бизнес-процессах. ведь неправильно составленные и оптимизированный SQL запросы дают в первую очередь такой эффект. В бизнес-процессах я бы чтобы найти ошибку или зависание в первую очередь произвел бы оптимизацию, путем деления больших процессов на более мелкие, чтобы именно в каждой маленькой сущности искать уже проблемы. Если нужна помощь советом более подробно пишите, буду рад вам помочь.
Причины действительно могут быть разные, но в данной ситуации у нас следующие факты и на большинстве рабочих мест кейсы отрабатывают в два раза дольше:
При сравнении рабочего места быстрого и медленного был проведен следующий анализ:
- Запросы на сервере отрабатывают быстро
- Время обработки запросов на сервер в одних и тех же кейсах для разных рабочих мест примерно одинаковое и не зависит от конкретного времени (очень редко зависит от определенного времени в течении дня)
- Сервер мониторили - ЦП оперативки с большим запасом
- Для надежности кэш почистили на всех рабочих местах
- Проверяли под одним и тем же пользователем Terrasoft на разных рабочих местах, давали пользователю права локального админа на рабочее место, запускали Terrasoft от имени администратора.
- Проводили полную установку Terrasoft и пользовательскую.
- Рабочие места где происходит разница во времени не зависят от места расположения комнаты в офисе, сети и операционной системы (у нас либо Win 7 64 либо 32)
- Не зависит от железа компьютера, на более медленных машинках (на пример 4 гб, в место 8 Гб) наблюдались более длительное время выполнение, причем не зависело от количества запущенных в дополнении приложений.
- Самое главное, при всех сравнения и экспериментах время выполнения кейсов не менялось (на разных рабочих местах) например на одном 4 сек сохранение проекта, под другим 8 сек. И чтобы мы не делали значения там где медленее не менялось в лучшую сторону. Мы разбили даже код на куски и производили логирование по частям исполняемого кода, в результате мы не нашли конкретных проблемных мест в основном мы наблюдали пропорциональное возрастание времени исполнения кода на клиенте на разных рабочих местах, при этом сервер обрабатывал запросы одинаково.
- У нас проектное решение
А профайлер на sql сервере в самих запросах не помог выявить проблемные запросы с длительным выполнением?
Проблема то в коде скорее всего... либо тяжелые запросы, либо неаккуратные скрипты при сохранении записей, в любом случае это надо брать базу и тестировать.
Добрый день!
Проблема зависаний действительно есть и с ней я столкнулся опять совсем недавно.
Нужно было в карточке проставить связанные продажи. Попросили пользователей создавать продажи и потом выбирать их в карточке.
Значения для поля продажа в карточке фильтруются OnPrepareSelectWindow. Заполнить надо было около 800 карточек.
Так вот после 40-50 заполнений система зависала или вываливалась ошибка, не связанная с конкретным кодом. Анализ показал, что клиентское приложение так себя ведет когда начинает использовать память больше определенного значения. А занимаемая память увеличивается после открытия каждой карточки или датасета. И не освобождается.
Подчеркиваю. Проблема не с сервером, а именно на клиентских машинах. Самое смешное, что физической памяти на компах еще много в этот момент, но клиент выше определенного предела видимо использует ее некорректно. И это не зависит от x64. Я повторил такую же проблему у себя на ноуте, где x32.
Уважаемые разработчики! Можно ли это как то исправить? Это сильно мешает работать и портит впечатление от в целом неплохой системы. Могу попробовать помочь симулировать ситуацию на базовой конфигурации.
Повторюсь, но причины возникновения проблем с производительностью могут быть разнообразные и не факт, что проблема, о которой пишет автор поста, такая же, с которой столкнулись Вы.
Вероятно, Вы пользуетесь не самой последней версией приложения Terrasoft.
На сегодняшний день последней версией Terrasoft является версия 3.4.1.186.
Добрый день, Алла.
Мы как и автор темы используем конфигурацию версии 3.3.2. и насколько я знаю использовать клиента 3.4.1 несколько невозможно. Или я ошибаюсь?
Для 3.3.2. последние бинарники вчера получил.
"Гетманенко Виктор" написал:использовать клиента 3.4.1 несколько невозможно. Или я ошибаюсь?
Денежку за использование лицензий 3.4.1 заплатите и используйте просто новые бинарники, без перевода конфигурации на новую версию.
Про переполнение памяти на клиенте - либо проблема бинарников, либо что более вероятно криво написанный код в том месте, использование которого вызывает переполнение...
Как выше написал Александр, утечка памяти может происходит в коде, например, при открытии карточки редактирования мы создаем глобальный объект, который не уничтожаем по закрытию карточки редактирования.
это безобидная функция добавления записи... и вызывается она в коробке вроде только из scr_Access функции AddAccessRecord... т.е добавление прав доступа.
Внутри у нее Append, Post - вот видимо они память и жрут... ну в любом случае тут надо предметно отладкой заниматься :)
Добрый день, коллеги! Выявили одну, по нашим догадкам, из основных проблем. Проблема с сортировкой - стандартный функционал позволяет сортировать разделы, но в трейсе (преобразовав в запрос) четко видно, что основное время затрачивается на сортировку (например по типовому полю «дата начало» - 1 мин 30 сек (при этом мы закомментили из запроса большинство полей (иначе еще дольше) оставив - ID, Название , номер и дату старта). Без сортировки меньше секунды.
Подскажите, в чем может быть проблема сортировки?
Антон, судя по тексту запроса,дата начала — это не просто поле, она вычисляется отдельным подзапросом с достаточно сложным условием из EXISTS и NOT EXISTS. И при сортировке по ней запрос будет выполняться долго в любом случае, хоть его запустить из Terrasoft, хоть напрямую запустить этот код из Management Studio.
При передачи даты из поля Дата рождения с типом Terrasoft.ContentType.DATE, SelectQuery возвращает ошибку Uncaught The data types nvarchar and date are incompatible in the add operator. Как передавать дату в SelectQuery?
Есть ли примеры запроса даты в SelectQuery?
ваш вопрос был как передать "Дату" в SeleceQuery в виде параметра в фильтр запроса? если да то описывать какого типа передается параметр не требуется. просто выполняется создание фильтра и все, вот пример:
Существует- ли возможность интеграции bpm'online с внешним приложением по протоколу SOAP?
Например, в bpm'online я создаю некий Web- сервис, который читает из базы данных, далее по его WSDL создаю автономного клиента (консоль) и по RPC вызываю методы Web- сервиса bpm'online.. Такое возможно?
Возможно, для этих целей подойдет WCF Web- сервис? Разместить его в IIS, получить WSDL... дальше сгенерировать клиентские артефакты... и все.. или я не прав?
Есть некоторый конфигурационный Web- сервис, размещенный в пакете Custom.
Я хочу иметь возможность вызывать его методы из консольного приложения, для этого мне, соответственно, необходимо сгенерировать классы клиента по WSDL.
Date: 14.04.2016 16:07:28
Date (UTC): 14.04.2016 12:07:28
Exception Message: The service '/WebApp/0/ServiceModel/PaymentsRegisterService.svc' does not exist.
Exception Type: System.ServiceModel.EndpointNotFoundException
Exception Source: System.ServiceModel.Activation
Exception Stack Trace:
at System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath, EventTraceActivity eventTraceActivity)
at System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast(String relativeVirtualPath, EventTraceActivity eventTraceActivity)
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()
at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()
SessionID: k1zrorhl53nfgmtswhcohchx
Request URL:/WebApp/0/ServiceModel/PaymentsRegisterService.svc?wsdl
Request Path:/WebApp/0/ServiceModel/PaymentsRegisterService.svc
Request Type: GET
User Agent: Mozilla/5.0(Windows NT 6.1; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36
User Host Address:::1
User: Пользователь 1
Is Authenticated: True
Authentication Type: Forms
Is Secure Connection: False
Application Version: 7.7.0.2872
Application Path: C:\terrasoft\BankCustomerJourney770_Demo\
Application Virtual Path:/
Application Trust Level: Full
Machine Name: ALEKSEYBYKOV-PC
Is Local: True
Process ID:17564
Process Name: iisexpress.exe
Process Account Name: AlekseyBykov-PC\Aleksey-Bykov
Thread Account Name: AlekseyBykov-PC\Aleksey-Bykov
OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
Net Framework Version: 4.0.30319.42000
DBExecutor Type: MSSqlExecutor
Артем, спасибо большое за ответ.
Так... а что же делать? Есть- ли возможность разработки SOAP Web- сервисов? Если я хочу (нужно) из внешнего приложения обращаться к Web- сервису bpmonline, генерируя по его WSDL прокси- классы?..
Web-сервисы
Интеграция приложений bpm’online с другими системами посредством web-сервисов позволяет существенно упростить процесс и значительно сократить время синхронизации данных.
Поддержка открытых стандартов (SOAP, WSDL) и широкая сфера применения web-сервисов позволяет связывать в единую информационную среду бизнес-приложения и системы, созданные на базе различных технологий.
Платформа bpm’online позволяет запрашивать данные из сторонних систем для передачи в bpm’online , равно как и вызывать собственные web-сервисы для получения данных из bpm’online.
В папке Terrasoft.WebApp\ServiceModel создаем файл SPMSUBPService.svc с текстом:
SPMSUBPService.svc
<%@ ServiceHost Language="C#" Debug="true" Service="SPMSUBPService.SPMSUBPService" Factory="System.ServiceModel.Activation.ServiceHostFactory" %>
Добавляем в файл Terrasoft.WebApp\ServiceModel\http\services.config описание нашего сервиса:
services.config
При попытке создания прокси WCF стали появляться ошибки.
1. Если в проект консольного приложения MS Visual Studio добавить ссылку на wsdl Web- сервиса (Add service reference):
An error occured while attempting to find services at h t t p://localhost:8080/0/ServiceModel/UsrSPMSUBPService.svc?wsdl
Details
Was an error downloading ' h t t p://localhost:8080/0/ServiceModel/UsrSPMSUBPService.svc?wsdl/$metadata'.
The request failed with the error message:--<html><head><title>Object moved</title></head><body><h2>Object moved to <a href="/0/ServiceModel/UsrSPMSUBPService.svc?wsdl/$metadata">here</a>.</h2></body></html>--
Metadata contains a reference that cannot be resolved:'h t t p://localhost:8080/0/ServiceModel/UsrSPMSUBPService.svc?wsdl'.
The remote server returned an unexpected response:(302) Found.
Too many automatic redirections were attempted.
If the service is defined in the current solution, try building the solution and adding the service reference again.
2. Если для генерации прокси- классов использовать ServiceModel Metadata Utility Tool (Svcutil.exe), то следующая команда:
svcutil.exe/language:cs /out:generatedProxy.cs/config:app.config h t t p://localhost:8080/0/ServiceModel/UsrSPMSUBPService.svc?wsdl
Завершается с такой ошибкой:
WS-Metadata Exchange Error
URI: h t t p://localhost:8080/0/ServiceModel/UsrSPMSUBPService?wsdl
Метаданные содержат неразрешимую ссылку "h t t p://localhost:8080/0/ServiceModel/UsrSPMSUBPService?wsdl"
Удаленный сервер вернул неожиданный ответ:(302) Found.
Слишком много попыток автоматического перенаправления.
HTTP Get Error
URI: h t t p://localhost:8080/0/ServiceModel/UsrSPMSUBPService?wsdl
Возникла ошибка при загрузке "h t t p://localhost:8080/0/ServiceModel/UsrSPMSUBPService?wsdl"
Сбой запроса с сообщением об ошибке
<html><head><title>Object moved</title></head><body><h2>Object moved to <a href="/0/ServiceModel/UsrSPMSUBPService.svc?wsdl/$metadata">here</a>.</h2></body></html>
Чтобы протестировать эту службу, необходимо создать клиент и воспользоваться им для вызова службы. Это можно сделать, запустив программу svcutil.exe из командной строки со следующим синтаксисом:
class Test
{staticvoid Main(){
ServiceClient client =new ServiceClient();// Используйте переменную "client", чтобы вызвать операции из службы.// Всегда закройте клиент.
client.Close();}}
Visual Basic
Class Test
Shared Sub Main()
Dim client As ServiceClient = New ServiceClient()' Используйте переменную "client", чтобы вызвать операции из службы.
' Всегда закройте клиент.
client.Close()
End Sub
End Class
С ее помощью можно сгенерировать прокси- классы из сохраненного локально WSDL- файла. Далее скомпилировать эти классы в сборку и включить ссылку на сборку в проект консольного клиента, ну а дальше вызывать методы Web- сервиса из клиента, используя прокси- классы.
Добрый день!
Ошибка связана с тем, что в одном из обновлений Google отключил компонент SVG, которая использовалась в процессах.
Для решения задачи необходимо скопировать оригинальный файл, после чего заменить на новый (во вложении). Путь к файлу Terrasoft.WebApp\Resources\ui\Syncfusion\min\ej-diagram.js.
После замены остановить пул приложения и запустить. (Внимание! Именно Stop – Start, НЕ Recycle). ej-diagram.zip
Ошибка связана с тем, что в одном из обновлений Google отключил компонент SVG, которая использовалась в процессах.
Для решения задачи необходимо скопировать оригинальный файл, после чего заменить на новый (во вложении). Путь к файлу Terrasoft.WebApp\Resources\ui\Syncfusion\min\ej-diagram.js.
После замены остановить пул приложения и запустить. (Внимание! Именно Stop – Start, НЕ Recycle).