赛捷软件论坛's Archiver

lynn.yu 发表于 2020-2-14 19:54

[V12功能解说] 5天学习Sage X3 Web Services 第4天

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


[attach]5886[/attach]


[b]第4天 自.Net耗用基于X3对象的Web Services[/b]

这是整个5部分系列的第4部分,主要涉及如何为Sage X3 V12创建和耗用web services。这篇文章将着重于说明如何创建web services。在第1部分中我们探讨了[b]Sage X3 Web Services池[/b]的设置,在第2部分中我们讨论了[b]基于X3对象和子程序创建和发布web services[/b],而在在第3部分中,则讨论了运用[b]X3 web services测试器来测试和评估web services[/b]。

[b]在.NET中耗用X3 WEB SERVICES[/b]

使用来自X3的web services WSDL就能自.net耗用X3 Web Services了。以下是创建一个新的.Net项目来耗用X3 web services的步骤。

[b]创建.NET解决方案并添加X3 WSDL[/b]

使用Visual Studio,从新的.Net解决方案开始入手。在本示例中,我将用Visual Studio 2019创建一个控制台App。

1. 自X3系统获得X3 web services的wsdl。前往功能:管理→管理→Web 服务→经典版SOAP Web services。

2. 点击“CadxWebServiceXmlCC”链接。
[attach]5887[/attach]

3. 在URL上右击,并选择“复制链接地址”。
[attach]5888[/attach]

4. 在Visual Studio解决方案中,在项目上右键,并选择Add(添加)> Service Reference(服务引用)。
[attach]5889[/attach]

5. 自Add Service Reference(添加服务引用)窗体,点击“Advanced(高级)”按钮。
[attach]5890[/attach]

6. 自“Service Reference Settings(服务引用设置)”窗体,点击“Add Web Reference(添加Web引用)”按钮。
[attach]5891[/attach]

7. 在“Add Web Reference(添加Web引用)”窗体中,将X3 Web Service UR复制到URL框中,然后点击URL右侧的箭头。
[attach]5892[/attach]

8. wsdl定义会出现在框中。如果没有出现的话,那么wsdl URL错误或无法获取。
[attach]5893[/attach]

9. 将Web reference name(Web引用名称)更改为X3WebService,并点击“Add Reference(添加引用)”。
[attach]5894[/attach]

10. 现在,X3 Web Service wsdl就会出现在.Net解决方案中了,如下所示。
[attach]5895[/attach]


[b]创建身份验证类[/b]

由于X3 Web Services采用“基本身份验证”方法,所以可以创建一个所有web service调用都能使用的通用类。

1. 创建一个名为CAdxWebServiceXmlCCServiceBasicAuth.cs的类,如下所示。
[attach]5896[/attach]

2. 以下是这个类的源代码。
[attach]5897[/attach]


[b]初始化关联背景[/b]

下面是一个.net关联背景初始化的例子。
•        X3 Language——即“ENG”
•        X3 WS Pool——这是X3中设定的web service池名称。这可能与端点名称相同或不同,取决于其设置方法。
•        Context——变量属性是在此处设置的,包括返回格式(XML或JSON)。
•        Web Services Endpoint——在WSDL添加至项目时,这是默认添加至.config文件的,但是它是可以更改的。应该在这里指定它以覆盖原始定义。
•        Credentials——这是一个X3用户。必须在X3中设置这个用户才能访问web services。
•        Timeout——如果在web service调用过程中发生超时,那么可以增加这个数值。
•        Object Keys——这些是有些web service调用类型必须的,用来读取/更新特定的记录等。
[attach]5898[/attach]


[b]错误处理[/b]

1. web service resultXML会包含一个为0(失败)或为1(成功)的状态。
2. 如果状态为0,则报错消息将作为CAdxMessage类型的数组返回。这些可以与消息文本一起进行严重程度评估。
3. 如果状态为1,则表示web service成功。web service的结果可以从一个XML或JSON字符串反序列化到一个预定义的类中。
[attach]5899[/attach]


[b]调用一个X3对象WEB SERVICE来查询左列表[/b]

调用基于对象的web service来查询一个对象列表需要使用web service中的“query”方法。下面是调用我们在本系列第2天中创建的YWSSOH子程序的一个例子。

1. 第一步是初始化调用关联背景和基本身份验证属性。
2. 对于查询方法,你可以选择指定对象关键字来进一步筛选结果。在本示例中,是根据客户编号(BPCORD)来筛选结果的。
3. 需要录入列表尺寸,并指定在查询中返回的最大数或最大项。
4. 结果反序列化到的预定义类如下所示。
[attach]5900[/attach]

5. 下面是完整代码。
[attach]5904[/attach]



[b]调用一个X3对象WEB SERVICE来读取对象明细[/b]

调用基于对象的web service来读取一条记录会返回该记录的完整明细。这需要使用web service中的“read”方法。下面是调用我们在本系列第2天中创建的YWSSOH子程序的一个例子。

1. 第一步是初始化调用关联背景和基本身份验证属性。
2. 对于读取方法,你必须为需读取的记录指定对象关键字。在本示例中,使用的是销售订单编号(SOHNUM)。
3. 结果反序列化到的预定义类是基于SOH对象web service定义得到的,并且会根据交易定义而有所不同。
4. 下面是完整代码。这个功能用SOH对象读取了一个销售订单。
[attach]5901[/attach]


[b]调用一个X3对象WEB SERVICE来创建一条新记录[/b]

调用基于对象的web service来创建一条新记录。这需要使用web service中的“save”方法。下面是调用我们在本系列第2天中创建的YWSSOH子程序来创建一个新的销售订单的例子。

1. 第一步是初始化调用关联背景和基本身份验证属性。
2. 结果反序列化到的预定义类是基于SOH对象web service定义得到的,并且会根据交易定义而有所不同。
3. 在创建一条新记录时,会返回现创建记录的完整XML。
4. 尽管对象包含了很多XML节点和字段,但需要提供的只有指定的字段。这意味着不需要提供对象的完整XML。
5. 下面是完整代码。这个功能用SOH对象创建了一个新的销售订单,并返回了新创建的销售订单的编号。
[attach]5902[/attach]


[b]调用一个X3对象WEB SERVICE来修改一条现有记录[/b]

调用基于对象的web service可以用来修改一条现有记录。这需要使用web service中的“modify”方法。下面是调用我们在本系列第2天中创建的YWSSOH子程序来修改一个现有销售订单的例子。

1.        第一步是初始化调用关联背景和基本身份验证属性。
2.        在更新一条现有记录时,必须提供该记录的对象关键字。在本示例中,我们提供了SOHNUM。
3.        结果反序列化到的预定义类是基于SOH对象web service定义得到的,并且会根据交易定义而有所不同。
4.        在修改一条现有记录时,会返回所修改的创建记录的完整XML。
5.        尽管对象包含了很多XML节点和字段,但需要提供的只有正在更改的字段。这意味着不需要提供对象的完整XML。
6.        在下面提供的示例中,只对客户订单索引(CUSORDREF)和每行上的订购数量(QTY)作出了更改。
7.        下面是完整代码。这个功能用SOH对象更新了一个现有的销售订单。
[attach]5903[/attach]


[b]结论[/b]

现在,你已经学会了如何创建一个.net程序来调用基于对象的web service的查询、读取、保存和修改方法。

页: [1]

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