Epicor 10 - 改变当前会议的工厂

时间:2017-02-08 14:11:32

标签: epicorerp epicor epicor10

我们开始使用Epicor 10,我们希望利用DLL /服务与Epicor交流。这样我们就可以从自定义应用添加/更新信息。到目前为止,事情进展顺利,但我们想要为特定工厂添加工作时遇到问题。它似乎总是希望保存到用户最后通过客户端应用程序登录的工厂。

所以例如 - 让我们说用户的最后一棵植物是植物“A”。我希望我的自定义应用程序登录Epicor(创建会话)并为工厂“B”创建作业。我可以添加工作正常,但它会将它放在工厂“A”而不是“B”,即使我在创建会话时登录到工厂“B”。

我们正在调用SetPlant并传入我们想要的正确植物,但Epicor似乎总是覆盖哪种植物来保存它。有没有其他人遇到这种情况?我们也在公司遇到这个问题。 SetCompany似乎根本不起作用。

更多信息: - 我们正在使用net.tcp:///ERP/ICE/Lib/SessionMod.svc服务。 - 我们可以使用Login()登录并获得一个SessionId - 即使在Session对象上调用GetValues(),我们也会登录到工厂“B”,即使Epicor仍然使用工厂“A”。

我们可以提出的唯一工作,我们不想做的是按公司和工厂拥有应用程序用户,这样我们就可以保证将数据保存到哪个公司和工厂。这会有效,但它并不理想。

对于如何让系统获得新公司或工厂,任何人都有任何建议吗?

3 个答案:

答案 0 :(得分:1)

可以使用SetPlant()方法在会话中更新plantID。必须在SetCompany()之后调用它:

sessionModImpl = NetTcp_Helper.ClassAttributHelper.CreateBusObj<SessionModImpl>(Guid.Empty, SessionModImpl.UriPath, Settings);

sessionId = sessionModImpl.Login();

sessionModImpl.SessionID = sessionId;

sessionModImpl.SetCompany(epicorCompanyID, out companyName, out plantID, out plantName, out workstationID, out workstationDescription, out employeeID,
                                        out countryGroupCode, out countryCode, out tenantID);

sessionModImpl.SetPlant(newSiteID, out plantName);

答案 1 :(得分:0)

  

首先要了解的是服务器会话不是单一的   实例,而是.NET堆栈的会话实例。该   'CallContext.Current.Session'变量只是指向顶部的指针   堆栈。在大多数情况下,只有一个Session实例   CallContext堆栈。但是当你需要迭代公司时   处理会话堆栈被推送和弹出的东西。   这就是'TemporarySessions'的用武之地。

阅读: https://www.linkedin.com/pulse/snippet-epicor-change-companyplantuser-bpm-haso-keric/

答案 2 :(得分:0)

正如user463132指出的那样,您可以使用临时会话上下文包装服务连接:

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

Haso Keric Article Reference

我还要补充一点,如果您使用的是UI适配器,则可以简单地从oTrans对象实例获取会话并在此处设置用于控制oTrans与数据交互方式的属性。

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