資源簡介
如何使用VC#.net 開發BOS插件
技術支持看到這個問題http://dev.kingdee.com/ask/question.php?qid=4086 ,稍稍研究了一下,然后有這篇總結。
這里的BOS插件是指傳統的、VB的、GUI版本的BOS,不是指eBOS。VB能否開發eBOS的插件,我不清楚;不過VC#.net肯定是可以開發BOS插件的。
以下以BOS單據插件為例講解。我使用的開發環境是VS2005 SP1英文版,其他版本設置可能稍有不同,可摹擬得之。步驟如下:
1、 新建VC# Class Library 工程:
2、 添加相關引用
添加COM組件K3ClassEvents,會自動引用它所依賴的KFO和ADODB。然后再手工添加System.Windows.Forms。 在程序開頭加上:
using System.Runtime.InteropServices; //for com interop using System.Windows.Forms; //for MessageBox
3、 然后修改類屬性:
[ClassInterface(ClassInterfaceType.AutoDual)] public class BillPlugin
{ }
4、 在用VB開發BOS插件時,我們必須在類模塊中添加一個成員變量 m_oBillInterface,用于保存插件接口
對象;必須在類模塊中添加一個公開的成員函數Show,供BOS初始化插件調用。在C#.net中開發插件時,要做同樣的處理。代碼如下:
[ClassInterface(ClassInterfaceType.AutoDual)] public class BillPlugin {
public void Show(object o) { try {
m_BillInterface = (K3ClassEvents.BillEvent)o; MessageBox.Show(\); }
catch(Exception e) {
MessageBox.Show(\); } }
K3ClassEvents.BillEvent m_BillInterface;
}
上述代碼一看就懂,就不解釋了。
5、 下一步我們要讓插件響應BOS單據的事件。添加如下代碼:
上面響應了菜單點擊事件(MenuBarClick)與單元格值更改事件(Change)。跟.net對系統事件的處理完全一樣。 在_MenuBarClick事件中,如果檢測到點擊的菜單項是“計算器”,就彈出一個對話框。 在_Change事件中,顯示字段名稱、修改的行號、字段保存值。 你可以在這里加入其他事件處理過程,項目中需要什么就加什么。
VS2005非常智能,當我輸入m_BillInterface.MenuBarClick = new K3ClassEvents. 并選中事件之后,按兩次Tab鍵就會跳出后面的事件處理器名稱與參數列表,并給出相應的函數聲明。這樣連我這個.net菜鳥都能快速寫出上面的代碼來!什么時候VC也有這樣的功能啊,可憐我總是要一行行手寫接口啊。
6、 然后修改工程屬性。要修改的地方有兩處:
一是Build 下面的 Register for COM interop,要打上勾;
二是Application的Assembly Information…中的 Make assembly COM-Visible選項,要打上勾。
這一步很重要,如果不做這個設置的話,VB就無法調用.net的類庫。保存設置以后,就可以編譯生成.dll了。
7、 現在大功即將告成,不過行百里者半九十,我們立即測試一下。打開BOS IDE,新建單據,添加字段,
指定插件為NetPluginTest.BillPlugin(我的工程名稱為NetPluginTest,類名為BillPlugin),保存模板,F5運行,點工具欄的“計算器”,或修改任何字段的值,應該就可以看到效果了。
如果不能,嘿嘿嘿嘿嘿,我也不知道為啥,問我沒用,自己研究吧!
8、 其他事項: 首先,上面的插件在我的機器上運行是很慢的,尤其是調試的時候。 其次,.net的程序需要.net framework runtime 支持,如果目標機器上沒有裝正確版本的.net運行時的話,插件當然是跑不起來的。而且上面也沒有研究部署的問題,我的意思是,安裝插件到客戶機器上的時候,是否要注冊到GAC什么的,這個問題需要你自己搞定。另外,這樣生成的代碼對K3ClassEvents的版本是否有依賴?K3ClassEvents升級后,本插件是否仍然可用?這個需要測試。因為我不懂.net,所以無法給你答案。上面的示例,目前來說僅供研究,風險自負。 最后,.net實在是方便、好用、夠強大,連我這個從來沒摸過.net的人,都可以花1.5小時研究出插件寫法、編出代碼并測試過,聰明的、精通.net的你肯定更不在話下啦!
代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.Runtime.InteropServices;???//for?com?interop
using?System.Windows.Forms;?????????????//for?MessageBox
namespace?NetPlugInTest
{
????[ClassInterface(ClassInterfaceType.AutoDual)]
????public?class?BillPlugin
????{
????????public?void?Show(object?o)
????????{
????????????try?{
????????????????m_BillInterface?=?(K3ClassEvents.BillEvent)o;
????????????????m_BillInterface.MenuBarClick?+=?new?
????????????????????K3ClassEvents.__BillEvent_MenuBarClickEventHandler(m_BillInterface_MenuBarClick);
????????????????m_BillInterface.Change?+=?new?
????????????????????K3ClassEvents.__BillEvent_ChangeEventHandler(m_BillInterface_Change);
????????????????MessageBox.Show(“I‘m?in.“);
????????????}
????????????catch(Exception?e)
????????????{
????????????????MessageBox.Show(“Invalid?interface.“);
????????????}
????????}
????????void?m_BillInterface_Change(KFO.Dictionary?dct?
??????????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2009-09-23?16:23??NetPlugInTest\
?????目錄???????????0??2009-09-23?16:23??NetPlugInTest\NetPlugInTest\
?????目錄???????????0??2009-09-23?16:23??NetPlugInTest\NetPlugInTest\Properties\
?????文件????????1396??2009-09-23?16:31??NetPlugInTest\NetPlugInTest\Properties\AssemblyInfo.cs
?????文件????????1945??2009-09-24?10:13??NetPlugInTest\NetPlugInTest\Class1.cs
?????文件????????3609??2009-09-23?17:01??NetPlugInTest\NetPlugInTest\NetPlugInTest.csproj
?????目錄???????????0??2009-09-23?16:23??NetPlugInTest\NetPlugInTest\bin\
?????目錄???????????0??2009-09-23?16:23??NetPlugInTest\NetPlugInTest\bin\Debug\
?????文件???????16384??2009-09-23?17:46??NetPlugInTest\NetPlugInTest\bin\Debug\NetPlugInTest.dll
?????文件???????13824??2009-09-23?17:46??NetPlugInTest\NetPlugInTest\bin\Debug\NetPlugInTest.pdb
?????文件???????73728??2009-09-23?16:27??NetPlugInTest\NetPlugInTest\bin\Debug\Interop.ActiveBarLibrary.dll
?????文件??????901120??2009-09-23?16:27??NetPlugInTest\NetPlugInTest\bin\Debug\Interop.K3ClassEvents.dll
?????文件???????40960??2009-09-23?16:27??NetPlugInTest\NetPlugInTest\bin\Debug\Interop.KFO.dll
?????文件????????2280??2009-09-23?17:46??NetPlugInTest\NetPlugInTest\bin\Debug\NetPlugInTest.tlb
?????目錄???????????0??2009-09-23?16:23??NetPlugInTest\NetPlugInTest\obj\
?????目錄???????????0??2009-09-23?16:23??NetPlugInTest\NetPlugInTest\obj\Debug\
?????目錄???????????0??2009-09-23?16:23??NetPlugInTest\NetPlugInTest\obj\Debug\TempPE\
?????文件???????40960??2009-09-23?16:27??NetPlugInTest\NetPlugInTest\obj\Debug\Interop.KFO.dll
?????文件???????73728??2009-09-23?16:27??NetPlugInTest\NetPlugInTest\obj\Debug\Interop.ActiveBarLibrary.dll
?????文件???????49152??2009-09-23?16:27??NetPlugInTest\NetPlugInTest\obj\Debug\Interop.VBRUN.dll
?????文件???????10752??2009-09-23?16:27??NetPlugInTest\NetPlugInTest\obj\Debug\Interop.VBA.dll
?????文件??????901120??2009-09-23?16:27??NetPlugInTest\NetPlugInTest\obj\Debug\Interop.K3ClassEvents.dll
?????文件?????????966??2009-09-23?16:27??NetPlugInTest\NetPlugInTest\obj\Debug\NetPlugInTest.csproj.ResolveComReference.cache
?????文件???????16384??2009-09-23?17:46??NetPlugInTest\NetPlugInTest\obj\Debug\NetPlugInTest.dll
?????文件???????13824??2009-09-23?17:46??NetPlugInTest\NetPlugInTest\obj\Debug\NetPlugInTest.pdb
?????文件????????1025??2009-09-23?17:46??NetPlugInTest\NetPlugInTest\obj\NetPlugInTest.csproj.FileListAbsolute.txt
?????文件?????????544??2009-09-23?17:46??NetPlugInTest\NetPlugInTest\obj\NetPlugInTest.csproj.UnmanagedRegistration.cache
?????文件?????????313??2009-09-23?17:19??NetPlugInTest\NetPlugInTest\NetPlugInTest.csproj.user
?????文件?????????928??2009-09-23?16:23??NetPlugInTest\NetPlugInTest.sln
?????文件???????14336??2009-09-24?10:14??NetPlugInTest\NetPlugInTest.suo
?????文件??????117760??2009-09-24?12:09??使用VCSharp.net開發BOS插件.doc
............此處省略0個文件信息
評論
共有 條評論