Колеги, доброе время суток всем!

У меня вопрос такого плана происходит вызов процесса из сервиса и его отработка не совсем корректно отрабатывает в разных случаях.

Ситуация следующая, когда из postman стреляю пост запросом в сервис creatio, то внутри вызывается процесс и все ок отрабатывает. Хочу заметить пользуюсь вот такой ссылкой https://адресс-приложения/0/rest/NameService/MethodService, использую базовую авторизацию - логин и пароль беру из Системные настройки.

И в этом случае все ок. Процесс все предназначенные ему действия выполняет и ничего не пропускает.

Но как только происходит вызов сервиса по системам интеграции через OData, внутри него запуск процесса происходит, а сам процесс отрабатывает так как будто ему чего-то не хватает, он часть действий выполняет, а часть пропускает(просто к ним не прикасается, допустим при переходе по DCM не создаются активности на следующем шаге).

Помогите разобраться в чем загвоздка может быть.

Вот код вызова процесса из сервиса:

#region Class : NameService

[ServiceContract]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

    public class NameService

    {

        #region Properties : Protected

        protected UserConnection UserConnection

        {

            get

            {

                return _userConnection ??

                       ((Func)

                       (() =>

                       {

                           AppConnection app = HttpContext.Current.Application["AppConnection"] as AppConnection;

                           _userConnection = app.SystemUserConnection;

                           return _userConnection;

                       }))();

            }

            set => _userConnection = value;

        }

........

#endregion

#region Methods : Public

        [OperationContract]

        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,

            ResponseFormat = WebMessageFormat.Json)]

        public BaseResponse MethodService(NameRequestModel requestModel)

        {

try

            {

                var response = NameServiceFactory.NameClassWrapper(UserConnection)

                    .Execute(requestModel);

...........

}

        #endregion

    }

    #endregion

-------------------------------------------------------------------------------------------------------------------------

#region Class : NameClassWrapper

    public class NameClassWrapper: IBaseNameIntegrationWrapper

    {      

#region Properties : Protected

....

 protected UserConnection UserConnection { get; }

        #endregion

        #region Constructor

        public NameClassWrapper(UserConnection userConnection)

        {

            this.UserConnection = userConnection;

        }

      #endregion

#region Methods : Protected

........

 protected virtual void ExecuteNameProcess(Guid caseId){

            ProcessSchema schema = UserConnection.ProcessSchemaManager.GetInstanceByName("NameProcess");

            bool canUseFlowEngine = ProcessSchemaManager.GetCanUseFlowEngine(UserConnection, schema);

            if (canUseFlowEngine)

            {

                var flowEngine = new FlowEngine(UserConnection);

                var param = new Dictionary ();

                param["CaseId"] = caseId.ToString();

                flowEngine.RunProcess(schema, param);

            }

            else

            {

                Process process = schema.CreateProcess(UserConnection);

                process.SetPropertyValue("CaseId", caseId);

                process.Execute(UserConnection);

            }

        }

......

#endregion

    }

    #endregion

----------------------------------------------------------------------------------------------------------------------

Нравится

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

Добрый день.

 

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

это не в UserConnection вопрос?

Андрей, очень может быть. Особенно часто на невозможность работы в фоновом режиме жаловались на механизмы генерации печатных форм и подобное. Например, тут и тут.

По идее, если будет null вместо UserConnection, то должно не просто пропускать, а выдать ошибку в скрипте, которая со всем стеком запишется в логи на сервере. Проверьте, что там пишется при неудачном выполнении. Может, и не UserConnection, но всё равно по стеку выяснится, чего не хватает.

в том и прикол что частично процесс отрабатывает, а частично нет, но там скриптов как таковых нету, может они генерируются под капотом.? Там есть блоки на вычитку и на запись и еще одно исключающее или, процесс не компилируемый. И если б в UserConnection был null, он бы совсем не запустился, но запуск есть и видно это в журнале процессов, но как то странно он себя ведет или это система так себя ведет по отношению к работе процесса. Самое удивительно, что два разных вызова сервиса происходит один из постмена, а второй из внешней интеграционной системы. При вызове сервиса из постмена процесс отрабатывает супер, при вызове  сервиса из внешней интеграцинной системы процесс отрабатывает частично. Адрес в урле один и тот же.

А тогда вопрос как может авторизация влиять на работу процесса? Ведь он вызывается из сервиса и если б не было прав на вызов сервиса, то сам сервис не вызвался б. Но вызов и сервиса, и так же из под него процесса происходит в двух случаях(постмен и внешняя интеграционная система).

В ошибках ещё не смотрели?

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

Есть такой элемент добавления.

есть таблица А в которую нужно вставить некоторое количество записей из таблицы Б
Нужно в А.Поле1 записать значение (Если Б.Поле1==1 то Параметр1*Б.Поле2 Иначе 0)
-------------------------------------
Также интересует как с помощью БП можно увеличить значение поля в конкретной записи(нипример контакта), например увеличить числовое поле год на 5.

Нравится

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

Виталий,
1. При работе с массивом в элементе добавление данных выполнить дополнительные арифметические действия не получится. Задачу можно решить в 2 этапа.
- Добавлять выборку из таблицы Б в таблицу А.
- Создать второй процесс по стартовому сигналу добавления записи в объекте А. Выполнять интересующие проверки, манипуляции и т.д.
2. Увеличить значение поля в определенной записи:
- элемент читать данные. По заданному условию найти интересующую запись.
- элемент изменить данные.
Если интересующее поле с типом Целое – [Читать данные. Первый элемент коллекции. Название поля] + 5
Если тип поля DateTime - [Читать данные. Первый элемент коллекции. Название поля].AddYears(5)

Получилось, спасибо

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

Добрый день!
Недавно передо мной стала задача, с которой я никогда не сталкивался, а именно обновление OLAP-куба по расписанию. Ничего сложного, как оказалось, нет, но чтобы не забыть самому, решил описать эту процедуру в блоге.
Значит так. На самом деле подобную задачу можно решить двумя способами (по крайней мере, я попробовал два способа): через SSIS (SQL Server Integration Services) и через обычные job-ы.
Опишу самый простой второй способ, т.к. с первым у меня "не срослось" (точнее, он получился, но мне он не понравился).
Итак, у нас есть OLAP-куб (назовем MyCube), который "крутится" на Analysis Services. Наша задача - обновлять его в автоматическом режиме каждые 2 часа.
1. Запускаем SQL Server Management Studio.
2. Подключаемся к Database Engine (не Analysis Services).
3. Ищем ветку SQL Server Agent - Jobs.
4. Создаем новый job.
5. На закладке General задаем ему имя MyJob.
6. Переходим на закладку Steps и создаем новый шаг MyStep.
7. В поле Type выбираем SQL Server Analysis Services Command.
8. В поле Server указываем наш сервер.
9. И самое интересное: указываем в поле Command

xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
  >
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      >
        >My_Database_Name>
      >
      >ProcessFull>
      >UseExisting>
    >
  >
>

Причем в качестве My_Database_Name выступает не имя куба, а именно имя базы, развернутой на Analysis Services.
10. Сохраняем шаг.
11. Ну а дальше на закладке Schedules добавляем расписание, по которому будет выполняться обновление куба (не забудьте об occurs every 2 hours), и сохраняем job.

Как видите, вроде бы ничего сложного. На этом все.

Нравится

Поделиться

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