2016-02-22 75 views
0

我們有一個文件夾,其中包含許多繼承自相同基類的類。它們的名稱格式如下:根據指定項目文件夾中的類文件動態創建對象

  • firsttypesubclass_1.cls
  • firsttypesubclass_2.cls
  • firsttypesubclass_3.cls
  • secondtypesubclass_1.cls
  • secondtypesubclass_2.cls

程序應掃描這個類文件夾並使用類名稱前綴和計數創建一個臨時表(f.ex「firsttypesubclass」和count = 3):

DEFINE PUBLIC TEMP-TABLE TT_AllSubClasses NO-UNDO 
    FIELD Name AS INT /* f.ex "firsttypesubclass" */ 
    FIELD Name AS INT /* f.ex "firsttypesubclass" */ 
. 

然後,我們需要創建新實例動態地根據在這樣的循環中發現的類:

DEF VAR newInstance AS CLASS myBaseClass NO-UNDO. 
newInstance = DYNAMIC-NEW TT_AllSubClasses.Name + "_" + STRING(1)(123123) NO-ERROR. 

有任何方便的方式列出文件夾中的類名?或者是否有可能獲得從基類繼承的所有類?我正在考慮使用文件系統來檢查文件。

回答

0

您將不得不聯繫文件系統並列出相關文件夾中的所有類文件。如果在運行時源代碼不可用,則應該將代碼基於R代碼。 INPUT FROM OS-DIR是你的朋友。

如果混合程序和基於類的R-代碼在這些相關的文件夾,你還必須驗證,如果R-代碼是從過程或類:

RCODE-INFO:FILE-NAME = cFileName .
IF RCODE-INFO:IS-CLASS THEN ...

OpenEdge 11.6具有更多的反射功能。但沒有列出給定基類的所有子類的功能。由於ABL沒有固定的類庫方案(如C#),因此Progress可能也很難實現。

+0

我會試試這個。似乎在Progress網站上還有一個關於使用INPUT FROM OS-DIR在特定文件夾中列出文件的好教程:http://knowledgebase.progress.com/articles/Article/P21640 – W0lfw00ds

相關問題