赛捷软件论坛's Archiver

lynn.yu 发表于 2019-5-29 10:31

[V6功能解说] 5天学习Sage ERP X3 Web Services(第5天)

[b]* 本文由赛捷软件(上海)有限公司翻译完成,未经授权不得转载。如需转载,请先联系相应版块的版主取得授权。[/b]

[attach]5083[/attach]

[b]自ASP.NET调用一个Sage X3子程序[/b]

这是整个5部分系列的第5部分,主要涉及如何为Sage ERP X3创建和耗用web services。这篇文章将着重于说明如何调用一个已作为web service发布的X3子程序。

如需浏览该系列中的其他文章,请参见以下主题:

第1天——设置X3 Web Services
第2天——创建X3 Web Services
第3天——测试X3 Web Services
第4天——自ASP.NET调用一个Sage X3对象

现在,回归我们当前的主题[b]自ASP.NET调用一个Sage X3子程序[/b] …

X3 web services的wsdl如下,其中x3v6prmp23.rkldev.local是托管web services的服务器名称。

[url]http://x3v6prmp23.rkldev.local:28880/adxwsvc/services/CAdxWebServiceXmlCC?wsdl[/url]


[b]借助Sage ERP X3 Web Services调用子程序[/b]

[b]创建调用Context(关联背景)[/b]

有关创建Context(关联背景)的说明,请参考文章第4天——自ASP.NET调用一个Sage X3对象。

[b]调用Web Service[/b]

以下这个示例基于调用一个自定制化子程序生成的Sage ERP X3 Web Service。有关创建定制子程序并将其发布为一项web service的说明,请参见文章《第2天——创建X3 Web Services》。

1.        第一步是构造用来调用web service的XML参数列表。这根据定制化web service中设定的参数会有所不同。下面的示例基于web service ZWSCUSTLIS。如下所示,传递到web service中的参数是UPDDAYS和CUSTID。结果将包括一个多达2000个客户的数组。
[attach]5084[/attach]

2.        XML参数字符串的构造如下所示,以匹配子程序调用所需的参数。
<PARAM>
    <FLD NAME=”UPDDAYS” >30</FLD>
    <FLD NAME=”CUSTID” > </FLD>
</PARAM>

3.        调用Web Service

下面是一段调用web service所需的.net代码。web service将返回一个包含调用结果的xml字符串。这个字符串可以被解析,从而提取调用的明细。

public
List<X3_Account_List> GetAccounts(int iUpdateDays, string sAcctId)
{
  List<X3_Account_List> lsAccts = new
List<X3_Account_List>();
// Initialize Connection Values
X3DataAccessConn.CallContextClass oCallContext = _connDetails.GetCallContext();

// Complete call context
oCallContext.CallContext.requestConfig = “adxwss.trace.on=off&adxwss.trace.size=16384&adonix.trace.on=off&adonix.trace.level=3&adonix.trace.size=8”;
// Build Input XML with Parameters
  StringBuilder xmlInput = new
StringBuilder(“”);
  xmlInput.Append(“<PARAM>”);
xmlInput.AppendFormat(“<FLD NAME=”{0}”>{1}</FLD>”, “UPDDAYS”, iUpdateDays.ToString());
xmlInput.AppendFormat(“<FLD NAME=”{0}”>{1}</FLD>”, “CUSTID”, sAcctId);
xmlInput.Append(“</PARAM>”);

// Call web service
oCallContext.ResultXML = oCallContext.WebService.run(oCallContext.CallContext, “ZWSCUSTLIS”, xmlInput.ToString());
  string result = “”;
  foreach (X3WebService.CAdxMessage msg in oCallContext.ResultXML.messages)
{
result += msg.message.ToString() + “^”;
}

// Success
if (result.Length == 0)
{
string xml = oCallContext.ResultXML.resultXml.ToString();
   lsAccts = ExtractAccts(xml);
}

return lsAccts;
}
  public
CallContextClass GetCallContext()
{
  // Initialize connection values
  CAdxCallContext callContext = new
CAdxCallContext();
  CAdxWebServiceXmlCCService webService = new
  CAdxWebServiceXmlCCService();
  CAdxParamKeyValue[] paramKey = new
  CAdxParamKeyValue[1];
  CAdxResultXml resultXML = new
  CAdxResultXml();
callContext.codeLang = _x3Language; // Connection language
callContext.codeUser = _x3User; // X3 user
callContext.password = _x3Pwd; // X3 password
callContext.poolAlias = _x3WSPool; // Connection pool name

CallContextClass context = new
CallContextClass(callContext, webService, paramKey, resultXML);
return context;
}

这是第五篇也是最后一篇关于Sage ERP X3如何创建和耗用web services的文章。

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.