Коллеги, приветствую.

Собственно вопрос - как разрешить удаленный вызов процедур Web- сервиса? Есть простой WCF Web- сервис, на его основе получен WSDL, из которого сгенерированы прокси- классы. Эти прокси- классы использует простой консольный клиент, например, просто вернуть строку с сервера - вылетает окно:

Судя по ссылке, запрос не проходит авторизацию, хотя в Terrasoft.WebApp\Web.config указано, что:

 
   
     
       
     

   
 

Как отключить авторизацию для RPC?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Переехали решать задачу в рамках технической поддержки:smile:

Здравствуйте, Алексей! Спасибо! :smile:

Вот некоторые подробности.

1. В \Terrasoft.WebApp\ServiceModel добавил UsrService.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="Terrasoft.WebApp.ServiceModel.UsrService" CodeBehind="UsrService.svc.cs" %>

2. В \Terrasoft.WebApp\Web.config добавил:

  <appSettings>
    ...
    <add key="AllowedLocations" value="...;ServiceModel/UsrService.svc"/>
   ...
  </appSettings>
 
  ...
 
  <location path="ServiceModel/UsrService.svc">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
   ...

Контракт Web- сервиса в конфигурации (UsrIService.svc):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
 
namespace SimpleCustomService
{
    [ServiceContract]
    public interface UsrIService
    {
        [OperationContract]
        string SPMClientInfo();
    }
}

Реализация Web- сервиса в конфигурации (UsrService.svc):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
 
namespace SimpleCustomService
{
    public class UsrService : UsrIService
    {
        public string SPMClientInfo()
        {
            return "test string";
        }
    }
}

В \Terrasoft.WebApp\ServiceModel\http\services.config добавил:

...
 	<service behaviorConfiguration="BaseServiceBehavior" name="SimpleCustomService.UsrService">
        	<endpoint name="UsrServiceEndPoint"
           		binding="webHttpBinding"
           		behaviorConfiguration="RestServiceBehavior"
           		bindingNamespace="http://Terrasoft.WebApp.ServiceModel"
           		contract="SimpleCustomService.UsrIService" />
	        <endpoint address="soap" binding="basicHttpBinding" contract="SimpleCustomService.UsrIService"/>
	        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    	</service>
...

Нашел вот статью, попробую сделать как там описано. Аутентификация внешних запросов к веб-сервисам bpm'online

Отличная статья, как я теперь могу вызвать метод Web- сервиса, используя AuthCookie? Должен- ли я менять код Web- сервиса, чтобы аутентифицировать внешние запросы?

Здравствуйте.
Обратите внимание на ресурс: http://stackoverflow.com/questions/16028014/how-can-i-pass-a-username-p…

Здравствуйте, Александр! Спасибо большое за ответ, попробую сделать так.

Возвращаясь к началу, хочу отметить одну интересную деталь - если в Visual Studio попытаться добавить ссылку на WSDL (Add Web Reference), то получим такое вот окно:

URL тот же самый, что и в консоли:

http://localhost:8080/NuiLogin.aspx?ReturnUrl=%2f0%2fServiceModel%2fSimpleCustomService.svc

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

Даже если сделать так?

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

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

Путём проб и ошибок выяснилось, что эта ошибка возникает после использования в элементе "Задача" и "Звонок" события "После сохранения записи"(Ошибка возникает даже если в указанное поле вписать только комментарий). Как быть с решением указанной проблемы?

И ещё один вопрос: Как обратиться к параметру в элементе Скрипт?
Обращение в виде LeadId(идентификатор Лида) - вызывает ошибку при публикации БП.

Нравится

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

Предположим у нас есть параметр процесса Text с типом "Строка".
В версии 760 (и более ранних) значение этого параметра можно было получить следующим кодом:
var leadId = LeadId;
В версии 770 этот код будет выглядеть по другому:
var leadId = Get("LeadId");

Что Вы хотите реализовать в событии "После сохранения записи"?

"Демьяник Алексей" написал:В версии 770 этот код будет выглядеть по другому:
var leadId = Get("LeadId");

"Демьяник Алексей" написал:В версии 770 этот код будет выглядеть по другому:
var leadId = Get("LeadId");

А как передать значение параметру? В документации информации не нашёл.

"Демьяник Алексей" написал:Что Вы хотите реализовать в событии "После сохранения записи"?

Обновление поля. Но на данный момент даже наличие комментария в этом поле вызывает ошибку.

"Коновалов Игорь" написал:

А как передать значение параметру? В документации информации не нашёл.

Топики:

http://www.community.terrasoft.ru/forum/topic/16294
http://www.community.terrasoft.ru/forum/topic/16335
http://www.community.terrasoft.ru/forum/topic/16361
http://www.community.terrasoft.ru/forum/topic/11784
http://www.community.terrasoft.ru/forum/topic/13848
http://www.community.terrasoft.ru/forum/topic/12023
http://www.community.terrasoft.ru/forum/topic/9477

Академия:
http://academy.terrasoft.ru/documents/docs/technic/BPMS/7.7.0/BPMonline…
http://academy.terrasoft.ru/documents/docs/technic/BPMS/7.7.0/BPMonline…
http://academy.terrasoft.ru/documents/?product=BPMS&ver=7.7.0

"Коновалов Игорь" написал:

Обновление поля. Но на данный момент даже наличие комментария в этом поле вызывает ошибку.

Насколько мне известно это исправлено в последних версиях 7.7 (для sales enterprise это 7.7.0.2875).

Спасибо за информацию.

Добрый день!
Подскажите, пожалуйста, можно ли с помощью стандартных инструментов в дизайнере построить бизнес-процесс, который бы вызывался кнопкой из карточки физ.лица и автоматически создавал продажу и продукт в продаже?
Общая схема такая:
1. Есть заявка на продукт с сайта, в которой уже указан продукт
2. Сотрудник call-Центра связывается с клиентом, редактирует карточку заявки и карточку физ.лица.
3. Запускает бизнес-процесс создания продажи и продукта в продаже из карточки физ.лица
4. Этот же бизнес-процесс привязывает заявку к продаже

Здравствуйте, Дарья!

Данную задачу можно реализовать, но не стандартными инструментами.
Вам необходимо:
1) Добавить кнопку на страницу редактирования. Подробнее
2) В обработчик кнопки добавить логику запуска процесса (за пример можно взять действие "Отправить на визирование" на странице редактирования раздела "Договоры"). В процесс необходимо передать Id открытой записи.
3) Собственно реализовать процесс

Алексей, спасибо за ответ!
Не отображается страница по ссылке "Подробнее" (ошибка 404, страница не найдена).

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

Поправил.

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

Добрый день!

Подскажите, пожалуйста.
Читаю сей мануал http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/CalculatedF...
Моя задача добавить чекбокс и по нажатию на него делать что-то с другим полем.
Пока не понятны пункты 3 и 4.

3. Настроить визуальное отображение поля [Остаток для оплаты]

Для этого нужно в свойстве diff модели представления описать конфигурационный объект с необходимыми параметрами. - Где это найти?

4. В свойство attributes модели представления добавить колонку [UsrBalance]

В конфигурационном объекте колонки [UsrBalance] указать зависимость от колонок [Amount] и [PaymentAmount], а также метод-обработчик — calculateBalance, который будет рассчитывать значение для колонки [UsrBalance]. - Где это найти?

Пожалуйста, тыкните носом. Спасибо.

Нравится

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

Добрый день! Описание строения любых модулей приведено по ссылке: http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/SchemaStru…
Там вы можете почитать и про свойство diff и attributes.
В системе есть похожая логика на ту, что вы хотите: она реализована в странице активности. Там по нажатию на чекбокс "Напомнить автору" становится доступным поле "Дата напоминания автору". Думаю, вы можете там подсмотреть реализацию.

Здравствуйте!
В конце пункта 6 статьи http://academy.terrasoft.ru/documents/docs/technic/SDK/7.6.0/CalculatedFields.html
приведен результирующий исходный код модуля OrderPageV2 как результат выполнения пунктов 2...6.

Если бы Вы писали этот код сами "с чистого листа", то для выполнения пункта 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();
                }
Показать все комментарии

Здравствуйте! Подскажите, пожалуйста, как добавить JS событие при сохранении контрагента/контакта?
Вот кусок кода на странцие:

methods: {
fir: function()
{
if (this.get("UsrKey").checked)
{
this.set("UsrLoyaltyOfContact", "Лояльно");
}
else
{
this.set("UsrLoyaltyOfContact", "Не определено");
}
}

}

UsrKey - Boolen Checkbox, UsrLoyaltyOfContact - Справочник.

Не могу разобраться, куда подвесить событие?

Нравится

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

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

Что-то похожее ранее обсуждалось здесь.

Вам необходимо переопределить метод onSaved в секции methods схемы страницы редактирования

                        // Переопределение базового метода Terrasoft.BasePageV2.OnSaved.
			// Выполняет постобработку сохранения записи
			onSaved: function(response, config) {
				// Вызов родительской реализации.
				this.callParent(arguments);
                                //Вызов Вашего метода
                                fir();
			}
Показать все комментарии

Добрый день.
Подскажите как добавить адрес хранилища SVN в уже созданный пакет.

Нравится

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

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

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

"Сергей Кy6риш" написал:поскольку произойдет зачистка контента пакета, и все данные будут утеряны.

День добрый Сергей!!!

расскажите пожалуйста поподробнее на каком этапе произойдет зачистка контента в момент изменения? чтобы уже точно знать чего вообще не следует делать. спасибо!!!

Здравствуйте, Михаил!

Проблемы могут возникнут при commit'е (синхронизации с сервером) или обновлении.
Также, могут возникнуть сложности с сохранением или удалением схем.

Сергей, Михаил, в целом эта операция возможна.
Выполнял несколько раз, особых проблем замечено не было, если это первая фиксация пакета в хранилище. Очистки пакета не происходило.

"Пащенко Александр Сергеевич" написал:

Сергей, Михаил, в целом эта операция возможна.

Выполнял несколько раз, особых проблем замечено не было, если это первая фиксация пакета в хранилище. Очистки пакета не происходило.


Александр, у меня не получается зафиксировать пакет, выдает ошибку. Что я делаю не так?

Сергей,
причин может быть множество , а последствия могут быть разными. Лучше в саппорт обратитесь.

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

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

Добрый день! На протяжении примерно пары лет у нас наблюдаются зависания системы с последующей необходимостью "убивать" процесс, ранее ваши коллеги советовали чистить кэш - проблема стала проявляться реже, но все же осталась (не критично), но последнее время стала снова проявляться чаще, а так же увеличилось время обработки процессов системы именно клиентом у некоторых пользователей (прямую зависимость найти не удалось). Может ли быть связана эта проблема с переходом пользователей на Win 7 64x с Win 7 32x? Возможно у вас появились обновленные бинарные файлы после 3.3.2.307, которые могли бы помочь, или же имеются другие версии, которые объективно лучше работают на Windows 7 64x?
Спасибо!

Нравится

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

Добрый день, Антон!

Причины возникновения проблемы могут быть самые разные. Для генерации решения нужно определить её источник (база данных, аппаратное обеспечение сервера или клиентские места). В момент возникновения замедлений проверить у всех ли пользователей это происходит одновременно. Если «да», то обратить внимание на сервер, в частности, на загрузку ЦП и оперативной памяти. Если там всё в порядке, тогда нужно моделировать ситуацию и в это время с помощью утилиты «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 заплатите и используйте просто новые бинарники, без перевода конфигурации на новую версию.

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

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

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

В версии 3.4.1 не наблюдал утечки памяти.

"Александр Кудряшов" написал:без перевода конфигурации на новую версию

ну с 3.5 это точно не прокатит. А вот про 3.4 не проверял.
"Александр Кудряшов" написал:либо что более вероятно криво написанный код в том месте, использование которого вызывает переполнение

этот "криво написанный код" обычно является стандартной функцией scr_DB и называется AppendRecordInDataset

"Гетманенко Виктор" написал:AppendRecordInDataset

это безобидная функция добавления записи... и вызывается она в коробке вроде только из scr_Access функции AddAccessRecord... т.е добавление прав доступа.
Внутри у нее Append, Post - вот видимо они память и жрут... ну в любом случае тут надо предметно отладкой заниматься :)

Добрый день, Павел.

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

Я пробовал уничтожать объекты. Эффекта нет. Возможно, конечно, неправильно это делаю.
Присваиваю объекту null и делаю delete для ActiveX объектов?

А какие ActiveX объекты используете в окне редактирования?

Добрый день, коллеги! Выявили одну, по нашим догадкам, из основных проблем. Проблема с сортировкой - стандартный функционал позволяет сортировать разделы, но в трейсе (преобразовав в запрос) четко видно, что основное время затрачивается на сортировку (например по типовому полю «дата начало» - 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?

Нравится

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

Посмотрел в конфигурации и не нашел такого типа. Возможно его нет и поэтому возникает ошибка.

Попопробуйте испольозвать Terrasoft.DataValueType.DATE_TIME или Terrasoft.DataValueType.DATE.
А также ESQ - http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/UsingEntit…

День добрый Роман!!!

ваш вопрос был как передать "Дату" в SeleceQuery в виде параметра в фильтр запроса? если да то описывать какого типа передается параметр не требуется. просто выполняется создание фильтра и все, вот пример:

     esq.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
          this.Terrasoft.ComparisonType.EQUAL, "StartDate", this.get("StartDate")));

если у вас в другом проблема, то прошу более подробно пояснить в чем у вас проблема. спасибо!!!

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

Коллеги, приветствую.

Существует- ли возможность интеграции bpm'online с внешним приложением по протоколу SOAP?
Например, в bpm'online я создаю некий Web- сервис, который читает из базы данных, далее по его WSDL создаю автономного клиента (консоль) и по RPC вызываю методы Web- сервиса bpm'online.. Такое возможно?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением Алексей Быков.

Нравится

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

Возможно, для этих целей подойдет WCF Web- сервис? Разместить его в IIS, получить WSDL... дальше сгенерировать клиентские артефакты... и все.. или я не прав?

Добрый день!

Посмотрите пост https://community.terrasoft.ru/node/16393#comment-62259

Отлично, спасибо!

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

Коллеги, приветствую.

Есть некоторый конфигурационный Web- сервис, размещенный в пакете Custom.

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

Как получить доступ к WSDL моего сервиса?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Или же SOAP Web- сервисы и клиенты полностью разрабатываются в MS Visual Studio, а затем код Web- сервиса переносится (копируется) в конфигурационный?

Добрый день.
WSDL можно получить, например, так:
https://my_site/0/ServiceModel/my_web_service.svc?wsdl

Здравствуйте, Артем! Спасибо. Про параметр wsdl я знаю.. Не могли бы Вы проконсультировать
относительно пути до Web- сервиса -

ttps://my_site/0/ServiceModel/my_web_service.svc?wsdl

my_site - ? (в принципе, понятно...)
ServiceModel - ?

Требуется- ли какая- либо дополнительная настройка?

Ой, сорри, немного ошибся. Это не совсем конфигурационные web-сервисы.

Путь складывается так:
https://имя_сайта/0/rest/имя_сервиса
(это можно увидеть в модуле ServiceHelper)

Далее, что касается wsdl. По конфигурационным сервисам не получится получить wsdl. С ними нужно работать как с REST - простимы Post/Get запросами

При таких запросах:

http://localhost:8080/WebApp/0/ServiceModel/PaymentsRegisterService.svc?wsdl
http://localhost:8080/0/ServiceModel/PaymentsRegisterService.svc?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 прокси- классы?..

К вопросу об интеграции..

https://www.terrasoft.ru/products/bpmonline/integration

Web-сервисы
Интеграция приложений bpm’online с другими системами посредством web-сервисов позволяет существенно упростить процесс и значительно сократить время синхронизации данных.

Поддержка открытых стандартов (SOAP, WSDL) и широкая сфера применения web-сервисов позволяет связывать в единую информационную среду бизнес-приложения и системы, созданные на базе различных технологий.

Платформа bpm’online позволяет запрашивать данные из сторонних систем для передачи в bpm’online , равно как и вызывать собственные web-сервисы для получения данных из bpm’online.

Вполне вероятно, что мне подойдет WCF Web- сервис. DLL можно разместить в IIS и получить WSDL.

Добрый день!
Собственно то, о чем я говорил в самом первом ответе :), но для этого нужно дополнительные настройки (только если у Вас on-site)

В конфигурации создаем схему исходного кода c контрактом сервиса:
SPMSUBPServiceContract

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
 
namespace SPMSUBPService
{
    [ServiceContract]
    public interface IService
    {
        [OperationContract]
        SPMClientInfoResponse SPMClientInfo(string Login);
    }
 
    [DataContract]
    public class SPMClientInfoResponse
    {
        bool success = true;
        string errorText = "";
 
        [DataMember]
        public bool Success
        {
            get { return success; }
            set { success = value; }
        }
 
        [DataMember]
        public string ErrorText
        {
            get { return errorText; }
            set { errorText = value; }
        }
    }
}

и схему исходного кода c реализацие сервиса:
SPMSUBPService

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
 
namespace SPMSUBPService
{
    public class SPMSUBPService : IService
    {
        public SPMClientInfoResponse SPMClientInfo(string Login)
        {
            return new SPMClientInfoResponse();
        }
    }
}

В папке 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

<services>
    ...
    <service behaviorConfiguration="BaseServiceBehavior" name="SPMSUBPService.SPMSUBPService">
        <endpoint name="SPMSUBPServiceEndPoint"
            binding="webHttpBinding"
            behaviorConfiguration="RestServiceBehavior"
            bindingNamespace="http://Terrasoft.WebApp.ServiceModel"
            contract="SPMSUBPService.IService" />
        <endpoint address="soap" binding="basicHttpBinding" contract="SPMSUBPService.IService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
    ...
</services>

Модифицируем Terrasoft.WebApp\Web.config
Web.config

...
<location path="ServiceModel/SPMSUBPService.svc">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
</location>
...

Готово!
Сервис доступен по адресу: /0/ServiceModel/SPMSUBPService.svc
WSDL тоже есть: /0/ServiceModel/SPMSUBPService.svc?singleWsdl

Артем, спасибо большое за ответ, попробую сделать.

Отлично, все получилось. Спасибо!

При попытке создания прокси 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>

Сам сервис и WSDL доступны:

--

UsrSPMSUBPService Служба

Служба создана.

Чтобы протестировать эту службу, необходимо создать клиент и воспользоваться им для вызова службы. Это можно сделать, запустив программу svcutil.exe из командной строки со следующим синтаксисом:

svcutil.exe http://localhost:8080/0/ServiceModel/UsrSPMSUBPService.svc?wsdl
Доступ к описанию службы также можно получить как к одному файлу:

http://localhost:8080/0/ServiceModel/UsrSPMSUBPService.svc?singleWsdl
Это ведет к созданию файла конфигурации и файла кода, содержащего класс клиента. Добавьте эти два файла в клиентское приложение и используйте сгенерированный класс клиента для вызова службы. Например:

C#

class Test
{
    static void 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

Почему не удается сгенерировать прокси- классы?

C ?FlatWsdl я удаляю все ссылки xsd:import, но это не помогает.

Артем, не могли бы Вы подсказать, как теперь сгенерировать прокси- классы для клиента?

Получилось примерно таким образом.

Есть утилита wsdl.exe

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\wsdl.exe

С ее помощью можно сгенерировать прокси- классы из сохраненного локально WSDL- файла. Далее скомпилировать эти классы в сборку и включить ссылку на сборку в проект консольного клиента, ну а дальше вызывать методы Web- сервиса из клиента, используя прокси- классы.

На этом тему можно считать закрытой.

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

Когда запускаю бизнес процесс "Визирование заказа" в конфигураторе, появляется такая ошибка в консоли браузера. Как ее можно решить?

Нравится

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

Решение on-site или on-demand?

Добрый день!
Ошибка связана с тем, что в одном из обновлений Google отключил компонент SVG, которая использовалась в процессах.
Для решения задачи необходимо скопировать оригинальный файл, после чего заменить на новый (во вложении). Путь к файлу Terrasoft.WebApp\Resources\ui\Syncfusion\min\ej-diagram.js.
После замены остановить пул приложения и запустить. (Внимание! Именно Stop – Start, НЕ Recycle).
ej-diagram.zip

"Демьяник Алексей" написал:

Решение on-site или on-demand?


on-site

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

Добрый день!

Ошибка связана с тем, что в одном из обновлений Google отключил компонент SVG, которая использовалась в процессах.

Для решения задачи необходимо скопировать оригинальный файл, после чего заменить на новый (во вложении). Путь к файлу Terrasoft.WebApp\Resources\ui\Syncfusion\min\ej-diagram.js.

После замены остановить пул приложения и запустить. (Внимание! Именно Stop – Start, НЕ Recycle).

ej-diagram.zip


Спасибо, помогло

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