saptechnique

Better late than never. - 郭富

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    在071130日,我发了一篇《关于一个对象集合的求解》的文章。可能由于我没有表述清楚,至今没有人给我回复。前一段时间,我用C#实现了这一功能,但仍有一些不足之处,给大家拿出来做个靶子。欢迎大家批评指正!

我的需求是,有主附表的结构,主表里面包含单据日期、单据编号等信息,附表里包含与此主表相关的行项目,包含物料编号、数量等信息。我想这应该建立继承的类来实现,但我还不会用。我利用泛型,暂时是解决了这个问题。

我写了两个接口:IDocumentsIDocuments_Lines。也写了与之对应的DocumentsDocuments_Lines两个类。这两个类分别继承了前两个接口。IDocumentsDocuments中包含DocNumberDocDateLines三个属性和Add()Remove() 两个方法。IDocuments_LinesDocuments_Lines中包含ItemCodeQuantity两个属性和Add()GetLists()方法。

Documents类中的Lines属性的类型是IDocuments_Lines。为了访问Documents_Lines的集合,我不得在Documents_Lines中建立了一个公用的方法GetLists()。该方法返回一个List<>集合,然后在Documents类中的Add()方法,遍历这个集合,再把子表数据连同主表一起添加进去。

而在SBOSDK中,首先是在Documents_Lines里面,没有暴露类似于GetLists()之类的方法和属性。而且在Documents_Lines里会包含一个Count属性来记录当前的总条数,并能通过SetCurrentLine()方法来指定当前行。而且,在调用时也有区别:在SDK中调用如下:

 1Documents myd=myCompany.GetObject(Documents);
 2
 3Myd.DocNumber=1”;
 4
 5Myd.DocDate=CDate(“2008-3-7”);
 6
 7 
 8
 9//添加行1
10
11Myd.Lines.ItemCode=”a”;
12
13Myd.Lines.Quantity=1;
14
15 
16
17//添加行2
18
19Myd.Lines.Add();
20
21Myd.Lines.ItemCode=”b”;
22
23Myd.Lines.Quantity=2;
24
25 
26
27//添加主表
28
29Myd.Add()
30
31 
32
33//完成。
34

 

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

 1Documents myd=new Documents();
 2
 3Myd.DocNumber=1”;
 4
 5Myd.DocDate=CDate(“2008-3-7”);
 6
 7 
 8
 9//添加行1
10
11Myd.Lines.ItemCode=”a”;
12
13Myd.Lines.Quantity=1;
14
15Myd.Lines.Add();
16
17 
18
19//添加行2
20
21//添加行2
22
23Myd.Lines.Add();
24
25Myd.Lines.ItemCode=”b”;
26
27Myd.Lines.Quantity=2;
28
29 
30
31//添加主表
32
33Myd.Add()
34

 

//完成。

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

posted on 2008-03-07 11:04  guofu  阅读(518)  评论(1编辑  收藏  举报