在07年11月30日,我发了一篇《关于一个对象集合的求解》的文章。可能由于我没有表述清楚,至今没有人给我回复。前一段时间,我用C#实现了这一功能,但仍有一些不足之处,给大家拿出来做个靶子。欢迎大家批评指正!
我的需求是,有主附表的结构,主表里面包含单据日期、单据编号等信息,附表里包含与此主表相关的行项目,包含物料编号、数量等信息。我想这应该建立继承的类来实现,但我还不会用。我利用泛型,暂时是解决了这个问题。
我写了两个接口:IDocuments、IDocuments_Lines。也写了与之对应的Documents、Documents_Lines两个类。这两个类分别继承了前两个接口。IDocuments和Documents中包含DocNumber、DocDate、Lines三个属性和Add()、Remove() 两个方法。IDocuments_Lines和Documents_Lines中包含ItemCode和Quantity两个属性和Add()、GetLists()方法。
在Documents类中的Lines属性的类型是IDocuments_Lines。为了访问Documents_Lines的集合,我不得在Documents_Lines中建立了一个公用的方法GetLists()。该方法返回一个List<>集合,然后在Documents类中的Add()方法,遍历这个集合,再把子表数据连同主表一起添加进去。
而在SBO的SDK中,首先是在Documents_Lines里面,没有暴露类似于GetLists()之类的方法和属性。而且在Documents_Lines里会包含一个Count属性来记录当前的总条数,并能通过SetCurrentLine()方法来指定当前行。而且,在调用时也有区别:在SDK中调用如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

而对于我所做的类,调用方法如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

//完成。
这两个调用的方法的区别在于,在添加行时,SDK中每添加一行之前,先执行一次Lines.Add()方法(第一行不用),且最后一行之后,不再需要执行Lines.Add()方法;而我所做的添加行时,在每添加一行之后,必须执行一次Lines.Add()方法,才能把数据添入行集合。不知道为什么会有这样的差别呢?请高手指点,谢谢!