Подтвердить что ты не робот

Epicor 10 - Изменение установки для текущего сеанса

Мы начинаем использовать Epicor 10, и мы хотим использовать DLL/службы для общения с Epicor. Таким образом мы можем добавлять/обновлять информацию из пользовательского приложения. Пока все идет хорошо, но мы столкнулись с проблемой, когда хотели, допустим, добавить работу для конкретного завода. Кажется, что всегда хочется сохранить на заводе, с которого пользователь вступил в систему через клиентское приложение.

Итак, например - Допустим, что последним растением было завод "А". Я хочу, чтобы мое пользовательское приложение регистрировалось в Epicor (создавая сеанс) и создавало работу для завода "B". Я могу добавить работу отлично, но она будет помещена под растение "А", а не "В", хотя я вошел в завод "В", когда я создал сеанс.

Мы вызываем SetPlant и передаем нужное растение, которое мы хотим, но Epicor, похоже, всегда переопределяет, какое растение сохраняет его. Кто-нибудь еще сталкивается с этим делом? У нас также есть эта проблема с Компанией. SetCompany не работает вообще.

Дополнительная информация: - Мы используем службу net.tcp:///ERP/ICE/Lib/SessionMod.svc. - Мы можем войти в систему с Login() и получить SessionId обратно. Даже вызов GetValues ​​() в объекте Session говорит, что мы вошли в завод "B", хотя Epicor все равно будет использовать завод "A".

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

У кого-нибудь есть предложения о том, как заставить систему принять новую компанию или завод?

4b9b3361

Ответ 1

Первое, что нужно понять, это то, что серверный сеанс - это не отдельный экземпляр, а стек экземпляров .NET. Переменная CallContext.Current.Session - это просто указатель на вершину стека. В большинстве случаев в стеке CallContext есть только один экземпляр Session. Но когда вам нужно перебирать компании, чтобы что-то обработать, стек сессий переносится и всплывает. Вот где приходит TemporarySessions.

Прочтите об этом по адресу: https://www.linkedin.com/pulse/snippet-epicor-change-companyplantuser-bpm-haso-keric/

Ответ 2

Как указывает user463132, вы можете заключить соединение со службой во временный контекст сеанса:

using (CallContext.Current.TemporarySessionCreator.SetCompanyID("YourCompanyHere").SetPlantID("B").Create())
{
}

Haso Keric Ссылка на статью

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

Ice.Core.Session s1 = (Ice.Core.Session)this.oTrans.Session;
s1.CompanyID = "YourCompanyHere";
s1.PlantID = "B";