【问题标题】:Epicor 10 - Changing the plant for the current sessionEpicor 10 - 为当前会话更改设备
【发布时间】:2017-02-08 14:11:31
【问题描述】:

我们开始使用 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”。

我们能想出的唯一解决方法是,按公司和工厂划分应用程序用户,这样我们就可以保证将数据保存到哪个公司和工厂。这会起作用,但并不理想。

有人对如何让系统接管新公司或新工厂有任何建议吗?

【问题讨论】:

  • 我知道这是一个基本问题,但有时它让我们很容易。您是否检查过您正在使用的用户是否具有对两家公司的访问权限?取出代码,以该用户身份登录,看看是否可以更新两家公司的记录。
  • 是的,用户确实有权访问公司和工厂。

标签: epicorerp epicor epicor10


【解决方案1】:

可以使用 SetPlant() 方法在会话中更新植物 ID。它必须在 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);

【讨论】:

    【解决方案2】:

    正如 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";
    

    【讨论】:

      【解决方案3】:

      首先要了解的是,Server Session 不是单一的 实例,而是一个 .NET 会话实例堆栈。这 ‘CallContext.Current.Session’变量只是一个指向顶部的指针 堆栈。在大多数情况下,只有一个 Session 实例 CallContext 堆栈。但是当你需要遍历 Companies 时 处理会话堆栈被推送和弹出的东西。 这就是“临时会话”的用武之地。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-31
        • 2022-07-14
        • 2015-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2016-05-11
        相关资源
        最近更新 更多