0

为 Acumatica Web 服务建立会话 我需要使用 Web 服务建立会话,然后使用该会话执行后续操作。例如,使用以前创建的会话/令牌使用 Web 服务创建 SOOrder 和 Shipment。

SOOrder.Screen content = new SOOrder.Screen();
content.Url = InstanceUrl + “/Soap/SO301000.asmx";
content.CookieContainer = new System.Net.CookieContainer();
SOOrder.LoginResult lresult= content.Login(Username, password);

使用这个,我已经在 lresult.Session 中获得了一个会话。

现在,我想在下面的货件内容中使用此会话,而无需再次调用登录。

SOShipment.Screen shipmentcontent = new SOShipment.Screen();
shipmentcontent.Url = InstanceUrl + "(W(3))/Soap/SO302000.asmx";
shipmentcontent.CookieContainer = new System.Net.CookieContainer();
shipmentcontent.Login(Username, password);
4

2 回答 2

0

如果我完全理解您,您希望在 Acumatia 中的不同操作之间保持登录连接。为了实现这一点,我使用了以下方法:

  1. 创建图表:

    公共类进口商:PXGraph {}

  2. 内部图表创建了以下代码:

    公共字符串 GetHostUrl() { var nextIndex = HttpContext.Current.Request.Url.ToString().IndexOf("/", 7, StringComparison.Ordinal) + 1; var urlStart = HttpContext.Current.Request.Url.ToString().IndexOf("/", nextIndex + 1, StringComparison.Ordinal); var url = HttpContext.Current.Request.Url.ToString().Substring(0, urlStart); 返回网址;}

            public Screen Screen
            {
                get
                {
                    var context = new Screen
                    {
                        CookieContainer = new CookieContainer(),
                        AllowAutoRedirect = true,
                        EnableDecompression = true,
                        Timeout = 1000000
                    };
                    var nextIndex = HttpContext.Current.Request.Url.ToString().IndexOf("/", 7,        StringComparison.Ordinal) + 1;
                    var urlStart = HttpContext.Current.Request.Url.ToString().IndexOf("/", nextIndex + 1, StringComparison.Ordinal);
                    context.Url = HttpContext.Current.Request.Url.ToString().Substring(0, urlStart) + "/Soap/IMPORTET.asmx";
    
                    return context;
                }
            }
    

然后在不同的屏幕之间共享屏幕的上下文。

例如像这样:

var scr = Screen;
var userName = PXAccess.GetUserName();
var password = GetUserPassword();
var context = Screen;
var lgRes = context.Login(userName, password);

但我在不同会话之间保留了用户密码

于 2014-09-14T19:16:27.090 回答
0

通过在系统 -> 集成 -> 配置 -> Web 服务下找到的 Web 服务 (SM.20.70.40) 中打包各种屏幕,您可以为所有这些屏幕创建一个端点。在您的应用程序中使用此服务端点,只需登录一次并调用所有这些屏幕。

谢谢

于 2014-08-22T21:40:58.620 回答