Колеги, доброе время суток всем!
У меня вопрос такого плана происходит вызов процесса из сервиса и его отработка не совсем корректно отрабатывает в разных случаях.
Ситуация следующая, когда из 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
----------------------------------------------------------------------------------------------------------------------
Нравится
Добрый день.
Попробуйте отладить процесс и посмотреть, что происходит на каждом из этапов, особенно, на тех шагах, которые пропускаются.
Андрей, очень может быть. Особенно часто на невозможность работы в фоновом режиме жаловались на механизмы генерации печатных форм и подобное. Например, тут и тут.
По идее, если будет null вместо UserConnection, то должно не просто пропускать, а выдать ошибку в скрипте, которая со всем стеком запишется в логи на сервере. Проверьте, что там пишется при неудачном выполнении. Может, и не UserConnection, но всё равно по стеку выяснится, чего не хватает.
в том и прикол что частично процесс отрабатывает, а частично нет, но там скриптов как таковых нету, может они генерируются под капотом.? Там есть блоки на вычитку и на запись и еще одно исключающее или, процесс не компилируемый. И если б в UserConnection был null, он бы совсем не запустился, но запуск есть и видно это в журнале процессов, но как то странно он себя ведет или это система так себя ведет по отношению к работе процесса. Самое удивительно, что два разных вызова сервиса происходит один из постмена, а второй из внешней интеграционной системы. При вызове сервиса из постмена процесс отрабатывает супер, при вызове сервиса из внешней интеграцинной системы процесс отрабатывает частично. Адрес в урле один и тот же.
А тогда вопрос как может авторизация влиять на работу процесса? Ведь он вызывается из сервиса и если б не было прав на вызов сервиса, то сам сервис не вызвался б. Но вызов и сервиса, и так же из под него процесса происходит в двух случаях(постмен и внешняя интеграционная система).