第一篇:《C#項目開發》教學大綱
《C#項目開發》教學大綱
一、課程的性質和任務
1.課程的性質和地位 本課程是高職計算機專業的一門專業課程。2.課程的任務 主要任務是介紹C#項目開發的基本方法,使學生掌握一門高級程序設計語言,能夠開發小型項目,并為后續的專業課程奠定程序設計基礎。
二、課程的基本要求 1.課程總體目標 本課程總體目標是使學生掌握一門高級程序設計語言,熟悉C#語言的基本語法,掌握ADO.NET基本概念,熟悉項目開發的方法,能夠開發小型項目。2.知識要求(1)熟悉C#語言的基本語法。(2)熟悉C#項目開發的方法。3.能力要求 通過對本課程的理論和實踐教學,應能使本專業的學生掌握面向對象程序設計的理論知識和應用技能,鍛煉學生進行項目開發的能力。通過教學應使學生獲得以下面的知識和能力。(1)能正確安裝和配置.NET的運行環境,能獨立完成教學基本要求規定的實驗。(2)能熟練使用軟件集成開發環境Visual Studio.NET,會使用調試工具調試應用程序。
(3)能開發基于C#的小型項目。4.實訓要求 每人一臺微機系統、Visual Studio 2010、Access 2003數據庫管理系統、SQL Server 2008及以上版本數據庫管理系統。5.課外作業要求 要求學生課外完成,記入考核成績。6.考核要求
學生能獨立或者以小組形式完成C#項目開發。
三、課程內容
項目1 用戶登錄程序 【學習目的】、了解.NET框架及C#語言了解Visual Studio 2010的集成開發環境的安裝、掌握Visual Studio 2010的集成開發環境的基本使用、掌握Windows窗體應用程序的創建步驟、掌握窗體、標簽、文本框、按鈕的基本屬性、方法和事件。【教學內容】 1.Visual Studio 2010編程環境。2.Windows窗體應用程序設計流程。3.窗體和基本控件的使用。4.設計用戶登錄程序。項目2 四則運算計算器 【學習目的】 掌握變量的使用方法、熟悉Visual C#語言的數據類型、掌握運算符和表達式的使用方法、。掌握流程控制語句使用方法、掌握方法的使用方法【教學內容】 1.常量與變量。2.數據類型及轉換。3.運算符與表達式。4.條件判斷語句。5.循環控制語句。6.異常處理。7.設計簡單四則運算計算器。8.設計復雜四則運算計算器。項目3 客戶問卷調查程序 【學習目的】 掌握RadioButton控件的使用方法、掌握CheckBox控件的使用方法、掌握ListBox控件的使。用方法、掌握ComboBox控件的使用方法、掌握GroupBox 控件的使用方法【教學內容】 1.。RadioButton控件2.。CheckBox控件3.ListBox控件。4.ComboBox控件。5.GroupBox 控件。項目4 酒店客房管理系統
【學習目的】、掌握Windows窗體應用程序的創建的方法掌握應用系統數據庫設計方法、掌握ADO.NET。的應用方法、掌握類的設計方法、掌握應用系統的設計方法【教學內容】 1.系統功能總體設計。2.建立系統數據庫。3.創建公共類DBHelper。4.系統詳細設計。項目5 軟件項目實訓 【學習目的】。熟悉系統開發的過程、掌握系統開發的方法、掌握系統開發中的程序調試方法【教學內容】 1.選題。2.軟件項目開發。
四、教學方法 教-練-考緊密結合的教學方法,多媒體教學、上機實踐、課程設計、網上自學等方法。
五、教學時數分配 序號 教學內容 合計課時 講課課時 實驗課時 4 2 2 1 項目1用戶登錄程序 8 4 4 2 項目2四則運算計算器 4 2 2 3 項目3客戶問卷調查程序 32 16 16 4 項目4酒店客房管理系統* 16 2 14 5 項目5軟件項目實訓* 64 26 38 合 計
六、教材及參考書 教材: 《isual C#程序設計與軟件項目實訓》,鄭偉 譚恒松編著,2015年1月,電子V工業出版社。(注:教育部“十二五”職業教育國家規劃教材)參考書:《C#程序設計與開發(第2版)》,譚恒松主編,2014年7月,清華大學出版社。(注:高職高專精品教材)
七、說明
1、根據學生的不同情況,帶*內容:可以適當增加課時。
第二篇:C#項目開發實訓總結
C#項目開發實訓總結
設計人:張**
班級和班內序號:
項目選題意義:
選這個題目的原因:隨著科學技術的進步,促進了管理水平的提高,人力資源管理系統(Human Resource Management,HRMS)作為人力資源管理的一個計算機工具,可以將企業中的人員的基本信息和工資管理用數據庫統一管理起來,使企業內人力資源的管理得以走向標準化、科學化、數字化和網絡化。發揮網絡效能,提高勞動生產率。制定人力資源管理系統,都能勝任該崗位。職責;各部門負責制定本部門人員的培訓計劃。綜合辦公室匯總各部門的培訓計劃后制定出檢測公司的培訓計劃。負責組織培訓計劃的實施和記錄,盡力檢測公司技術人員檔案并妥善保管。項目名稱:人力資源管理系統 自我評價:優秀
項目設計情況:
項目的設計使用工具有Microsoft Visual Studio 2008和SQL Server Management StudioR2,技術有C#項目開發技術。
系統管理功能、修改密碼功能、注銷用戶功能等功能。
項目的設計已完成預期目標!
項目的優勢和缺陷:
優勢:
本項目采用C#項目開發技術,C#項目開發代表的是一種前沿技術。C#項目開發建立在己取得極大成功的C#程序設計的語言基礎之上,采用C#項目開發規范能有效地進
行軟件復用,提高開發人員的效率,降低軟件的開發和維護成本,提高軟件的質量,控制所構建系統的復雜性。
C#項目開發規范將使得C#在企業計算中的地位得到加強,為基于C#的應用系統提供了一個框架,和目前的許多系統和模型相比,C#項目開發具有許多優越性。種種跡象表明,C#項目開發有可能成為系統設計的首要選擇。
缺陷:
1、現在提供給用戶的界面還很單調,需要進一步美化。而且系統現在提供的功能還很有限,以后隨著需要可以添加功能。添加相應的功能組件,然后把它們發布到服務器上去。
2、對于人力資源管理系統來說,還有許多的功能需要進一步的完善,以提高該系統的整體效果。功能的完善還需進一步討論。
意見和建議:
無
第三篇:U8API開發手冊(C#版)
U8API開發手冊
作者:商平鋒
版權所有:用友軟件股份有限公司 1.簡介
U8API是為U8客戶化應用開發提供的一套標準化的U8ERP業務編程接口。是U8UAP二次開發體系的重要組成部分。它包括一整套涵蓋U8ERP采購、銷售、庫存、制造(規劃中)、財務(規劃中)、基本檔案(規劃中)等業務模塊的API接口資源。U8API的推出為U8標準產品更好的適應用戶的個性化需求,更好的實現客戶化交付提供了有力支持。
U8API按照U8ERP業務產品模塊進行分類,并以U8主要業務實體(單據、檔案、憑證)作為操作對象,提供了常用的基本操作。比如:對于庫存的收發單據,提供“新增”、“審核”、“棄審”、“刪除”、“裝載”、“修改”六個API接口。目前,U8API提供了供應鏈采購、銷售、庫存三個產品的所有單據的增刪改、審核/棄審等API接口,后續版本會逐步將制造、財務、基本檔案等模塊的API納入進來。
U8API通過“U8API資源管理器”對U8范圍內所有API進行集中統一分類管理,形成了一套完整的U8API資源庫。U8API的使用者可以使用“U8API資源管理器”瀏覽、查看API及其接口定義,并可輔助進行代碼生成(目前支持C#和VB語言);API的開發者可以通過此工具發布、注冊API,所有業務API都必須在“U8API資源管理器”中進行注冊。
U8API還提供了一套運行時調用框架——U8APIBroker。它是所有U8API的調用代理,用戶要使用某個API只需調用U8APIBroker即可,無需直接訪問真正的API。U8APIBroker作為一個服務代理中間件,起到了隔離API的提供者與使用者的作用,降低了耦合依賴關系。
U8API與U8EAI接口從功能上看比較相識,但它們的特性有差別。U8API采用傳統的編程模型,更靠近底層,業務邏輯粒度更細,而且還需要或依賴一些特定的上下文環境,比如:login、事務等;而U8EAI接口則是完全松耦合的,采用XML和請求/響應的消息傳遞模式,且業務粒度比較粗放。這些特性的差別決定了它們的應用領域不同,U8API更適合于U8內部的功能擴展和客戶個性化開發,而U8EAI則適合外部系統與U8之間以業務數據交換為特征的應用集成開發。
2.API應用
2.1.API總體應用過程
2.1.1 API瀏覽查找
在“開始”->“程序”->“用友ERP-U8”->“UAP”目錄下找到“U8API資源管理器”,單擊,登錄,進入“U8API資源管理器”。在左側 “U8API” 樹形節點下,找到某某模塊,如“庫存管理”模塊(可以看到下面列有很多個單據,如盤點單、采購入庫單等),展開要操作的單據,分兩個子節點:“事件”和“服務接口”,在“服務接口”下可以看到該單據提供的API接口,如“添加新單據”、“審核單據”等。雙擊這些節點出現該API的詳細描述,如下圖2.1所示。在節點上右鍵單擊彈出“上下文菜單”,在“代碼示例”菜單項上彈出下一級子菜單,單擊它們,如單擊“C#代碼示例”則可以看到調用該API的C#示例代碼,如下圖2.2所示。直接拷貝這些代碼,然后在集成開發環境(IDE)中編輯和編譯這些代碼,即能實現調用U8標準API。利用這些代碼示例時,請按照其中每一步驟的提示說明正確操作,如添加必要的引用、按照自動生成的代碼填入正確的參數等。正確使用則可以調用成功,否則會返回詳細的錯誤信息。
以下代碼中均以C#為例,VB語言請具體查看對應的VB代碼示例部分。
圖2.1 接口描述
圖 2.2 代碼示例 2.1.2 API調用過程 ? 組件引用
針對兩種語言,需要引用不同的組件。(1)C#:
%U8SOFT%InteropInterop.U8Login.dll、%U8SOFT%InteropInterop.MSXML2.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8APIFramework.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.MomServiceCommon.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8MOMAPIFramework.dll 如下圖2.3、2.4、2.5所示。
(2)VB:
%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8APIFramework.tlb、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.MomServiceCommon.tlb、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8MOMAPIFramework.tlb、添加Microsoft XML v3.0引用 如下圖2.6、2.7所示。
其中,%U8SOFT%表示U8-872的安裝目錄。
圖 2.3 添加對U8Login.dll引用
圖 2.4 添加對Interop.MSXML2.dll引用
圖 2.5 添加對U8API框架類庫引用(.dll)
圖2.6 添加對U8API框架類庫引用(.tlb)
圖2.7 添加Microsoft XML v3.0引用 ? API調用
添加必要的引用后,可以直接利用自動生成的代碼示例(支持C#和VB兩種語言),結合API接口詳細描述,填入必要的參數值,就可以調用U8 API。
總體上,對U8 API的調用分成七個步驟: 1)構造u8login對象并登陸;
2)構造環境上下文對象,傳入login,并按需設置其它上下文參數; 3)設置API地址標識(Url)參數; 4)構造APIBroker; 5)API參數賦值; 6)調用API;
7)獲取返回結果。
詳細的API調用過程請看下文“API內容”中各個模塊中介紹的“開發步驟”。
下面重點介紹幾個關鍵要點和步驟:環境上下文、API地址、APIBroker、普通參數賦值、BO參數賦值。
? 環境上下文
環境上下文指在調用U8API時需要初始化的調用環境,包括Login、事務、特殊的業務參數等。環境上下文被初始化后,相關的環境參數會被業務API使用。
U8EnvContext envContext = new U8EnvContext();? Login 需要將U8Login對象傳遞給環境上下文,U8Login對象必須已經登錄過。envContext.U8Login = u8Login;? 事務
如果需要由外部發起事務,則可以發起事務的ADOConnection對象傳遞給環境上下文: ADODB.ConnectionClass conn = new ConnectionClass();envContext.BizDbConnection = conn;同時需要設置一個外部事務標記:
envContext.IsIndependenceTransaction = true;
? 特殊業務參數
特殊業務參數指調用某些API需要設置的特定上下文參數,比如:銷售的API必須要設置如VoucherType上下文參數,設置方法為: envContext.SetApiContext(“VoucherType”, 23);
? API地址
API地址是指API在U8API系統中的唯一標識,也叫API的URI,調用API時,需要通過API地址構建一個代表此API的Broker對象:
U8ApiAddress myApiAddress = new U8ApiAddress(“U8API/PurchaseOrder/VoucherSave”);
? APIBroker APIBroker是所有U8API的調用代理接口。使用U8所有API都必須通過APIBroker間接調用。APIBroker作為一個服務代理中間件,起到了隔離API的提供者與使用者的作用,降低了耦合依賴關系。創建APIBroker必須傳入API地址和環境上下文:
U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
? 普通參數賦值
API參數分兩種類型:BO參數和普通參數。普通參數是指非單據表頭表體類型的參數,包括基本類型參數(String、Integer等)、知名對象參數(Connection、DOMDocument等)。普通參數的賦值采用如下方式:
broker.AssignNormalValue(“voucherState”, 2);
? BO參數賦值
BO參數即單據表頭或表體類型的參數。對BO參數,支持兩種方式傳入,一種傳BO對象,另一種傳DOM對象。以下分別介紹: ? 傳BO對象
給BO表頭參數或表體參數賦值,推薦使用BO對象(BussinessObject)。例如:
BusinessObject DomHead = broker.GetBoParam(“DomHead”);
/***************************** 以下是非必輸字段****************************/ DomHead[0][“ipresent”] = “";//現存量,string類型 DomHead[0][”cmaketime“] = ”“;//制單時間,DateTime類型 DomHead[0][”cmodifytime“] = ”“;//修改時間,DateTime類型 /****************************** 以下是必輸字段****************************/ DomHead[0][”poid“] = ”“;//主關鍵字段,int類型 DomHead[0][”dpodate“] = ”“;//日期,DateTime類型 DomHead[0][”cpoid“] = ”“;//訂單編號,string類型 DomHead.RowCount = 10;//設置行數,不設置也可
//給BO對象的字段賦值,值可以是真實類型,也可以是無類型字符串 //以下代碼示例只設置第一行值。各字段定義詳見API服務接口定義
??
??
在此種情況下U8 API框架會對BO對象各字段進行參數校驗。對字段進行賦值時,值可以是真實類型,也可以是無類型字符串。? 傳DOM對象
給BO表頭參數或表體參數賦值,也支持直接傳入DOM對象(DOMDocument)。例如:
MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);但是,在此種情況下U8 API框架不會對DOM對象進行參數驗證。請在使用該方法之前,確保DOM對象的正確性。2.1.3 API典型應用場景 ? 執行單一操作
單一操作指一項任務只需要一個API完成,比如:單據新增、審核/棄審、刪除等單一操作。這是API調用最常見的場景,只需按照API的接口規范構造參數直接調用即可。
? 執行復合操作
復合操作,即一項任務由多個API的協作來完成。比如,自定義的單據維護界面的主要邏輯,一般由以下四個步驟構成:
1)加載單據;
2)在編輯界面上顯示; 3)用戶修改單據字段; 4)提交保存。
以上步驟需要進行兩次API調用: 1)加載單據時候調用“加載API”,以獲取單據BO對象(或原始DOM對象)并在界面上展現;
2)用戶在修改單據時其實就是在修改BO對象,用戶保存單據時調用“保存API”,此時要將此BO對象傳給“保存API”(而不用構造新的BO對象)。
代碼示例:
首先,登陸;
//構造u8login對象并登陸
U8Login.clsLogin u8Login = new U8Login.clsLogin();String sSubId = ”AS“;String sAccID = ”(default)@001“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;String sSerial = ”“;if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)){
} Console.WriteLine(”登陸失敗,原因:“ + u8Login.ShareString);Marshal.FinalReleaseComObject(u8Login);return;然后,通過LOAD接口獲取BO對象;
//構造環境上下文對象,傳入login,并按需設置其它上下文參數 U8EnvContext envContext = new U8EnvContext();envContext.U8Login = u8Login;//設置上下文參數
??
//設置API地址標識(Url)
U8ApiAddress myApiAddress = new U8ApiAddress(“裝載單據的地址標識”);//構造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);//API參數賦值
broker.AssignNormalValue(”參數名“, ”參數值“);??
//調用LOAD接口API if(!broker.Invoke()){
} //獲取表頭或表體的BO對象,如果要取原始的XMLDOM對象結果,請使用GetResult(參數名)BusinessObject DomRet = broker.GetBoParam(”表頭或表體參數名“);//錯誤處理
Exception apiEx = broker.GetException();if(apiEx!= null){
} //結束本次調用,釋放API資源 broker.Release();return;if(apiEx is MomSysException){
} else if(apiEx is MomBizException){
} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API異常:“ + bizEx.Message);//todo:異常處理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系統異常:“ + sysEx.Message);//todo:異常處理
接著,BO對象經用戶修改重新賦值,并傳遞給UPDATE接口提交保存;
//修改獲取的BO對象,對需要更改的字段重新賦值 DomRet[0][”字段名“] = 新的字段值;??
//重新構造“新增或修改”API的地址標識
myApiAddress = new U8ApiAddress(”新增或修改”API的地址標識“);//重新構造APIBroker broker = new U8ApiBroker(myApiAddress, envContext);//表頭或表體參數賦值
broker.SetBoParam(”表頭或表體參數名“, DomRet);//API參數賦值
broker.AssignNormalValue(”參數名“, ”參數值“);??
//調用UPDATE接口API if(!broker.Invoke()){ } ??
最后,獲取返回結果。
//獲取普通返回值
System.String result = broker.GetReturnValue()as System.String;//獲取out/inout參數值 ??
//結束本次調用,釋放API資源 broker.Release();
2.2.API內容 2.2.1 采購管理
? 功能介紹
為了支持U8二次開發對業務單據的開發,本功能提供了實現采購業務單據各種操作功能的編程接口。使用采購管理的API開發接口,可以對庫存管理中的采購到貨單、采購普通發票、采購專用發票、采購訂單、請購單、采購運費發票等單據進行審核、棄審、獲取(或裝載)、新增、修改、刪除。
? 使用環境
必須安裝.NET FrameWork 2.0; 必須安裝U8-872版本的采購管理產品; 必須安裝API適配器組件PUAPIConcrete.dll ? 接口說明
采購管理二次開發接口說明:
? 審核單據-ConfirmPO方法
參數:
domHead
—— 單據表頭,DOM對象,必輸 API上下文:
VoucherType —— 單據類型,具體類型參看API上下文描述 bPositive —— 紅藍標識:True,藍字 ;False,紅字 sBillType —— 為空串
sBusType —— 業務類型:普通采購,直運采購,受托代銷
? 棄審單據-CancelconfirmPO方法
參數:
domHead
—— 單據表頭,DOM對象,必輸 API上下文:
VoucherType —— 單據類型,具體類型參看API上下文描述 bPositive —— 紅藍標識:True,藍字 ;False,紅字 sBillType —— 為空串
sBusType —— 業務類型:普通采購,直運采購,受托代銷
? 裝載單據-Load方法 參數:
DomHead
—— 表頭DOM對象 domBody
—— 表體DOM對象 strWhere —— 過濾條件串 varVoucherID —— 單據主表ID strLocateWhere —— 定位條件串 API上下文:
VoucherType —— 單據類型,具體類型參看API上下文描述 bPositive —— 紅藍標識:True,藍字 ;False,紅字 sBillType —— 為空串
sBusType —— 業務類型:普通采購,直運采購,受托代銷
? 刪除單據-Delete方法
參數:
DomHead
—— 表頭DOM對象 domBody
—— 表體DOM對象
CurDom —— 返回DOM格式錯誤信息 API上下文:
VoucherType —— 單據類型,具體類型參看API上下文描述 bPositive —— 紅藍標識:True,藍字 ;False,紅字 sBillType —— 為空串
sBusType —— 業務類型:普通采購,直運采購,受托代銷
? 新增或修改新單據-VoucherSave方法
參數:
DomHead
—— 單據表頭,DOM對象,必輸 domBody
—— 單據表體,DOM對象,必輸
VoucherState —— 保存狀態,必輸。2增加;1修改 ;0非編輯 curID
—— 返回單據頭ID CurDom —— 返回DOM格式錯誤信息 UserMode —— 使用模式,0:CS;1:BS API上下文:
VoucherType —— 單據類型,具體類型參看API上下文描述 bPositive —— 紅藍標識:True,藍字 ;False,紅字 sBillType —— 為空串
sBusType —— 業務類型:普通采購,直運采購,受托代銷
? 開發步驟
實現采購單據某一功能,主要有以下七個步驟: 1. 構造u8login對象并登陸
聲明和創建u8login類對象前應該先引用U8API類庫中的Interop.U8Login.dll,代碼示例如下:
U8Login.clsLogin u8Login = new U8Login.clsLogin();//聲明u8login對象 String sSubId = ”AS“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;String sSerial = ”“;if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)){
} Console.WriteLine(”登陸失敗,原因:“ + u8Login.ShareString);Marshal.FinalReleaseComObject(u8Login);return;
//登陸
String sAccID = ”(default)@001“;如果當前環境中有login對象則可以省去第一步。
2. 構造環境上下文對象,傳入login,并按需設置其它上下文參數
U8EnvContext envContext = new U8EnvContext();
envContext.U8Login = u8Login;//設置上下文參數
envContext.SetApiContext(”VoucherType“, new int());//上下文數據類型:int,含義:單據類型 envContext.SetApiContext(”bPositive“, new bool());//上下文數據類型:bool,含義:紅藍標
識:True,藍字
envContext.SetApiContext(”sBillType“, new string());//上下文數據類型:string,含義:為空
串
envContext.SetApiContext(”sBusType“, new string());//上下文數據類型:string,含義:業務
類型:普通采購,直運采購,受托代銷
//構造環境上下文對象 //傳入login 如果是外部事務,則需要傳遞ADO.Connection對象,并將IsIndependenceTransaction設置為true:
envContext.BizDbConnection = new ADO.Connection();envContext.IsIndependenceTransaction = true;3. 設置API地址標識(Url)參數
//如當前API“新增或修改”的地址標識為:U8API/PurchaseOrder/VoucherSave
U8ApiAddress myApiAddress = new U8ApiAddress(”U8API/PurchaseOrder/VoucherSave“);4. 構造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
5. API對象參數賦值
1)給BO表頭參數DomHead和表體參數domBody賦值有兩種方法,如下: 方法一是直接傳入MSXML2.DOMDocumentClass對象,代碼如下
MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);
方法二是構造BusinessObject對象,具體方法如下:
//首先通過GetBoParam方法獲取表頭表體參數
注意:設置行數為某個值,行數并不限定為該最大值,可以一直順序添加至任意行,但有一個規則:例如當設置為10時,可以對第0、1、??9行賦值,當對第10行賦值時候,則會順序添加一個新行,但此時是不能對第11行賦值的,當添加一個新行(第10行)后,又可以對第11行進行賦值。
/****************************** 以下是必輸字段 ****************************/ DomHead[0][”poid“] = ”“;//主關鍵字段,int類型 DomHead[0][”dpodate“] = ”“;//日期,DateTime類型 DomHead[0][”cpoid“] = ”“;//訂單編號,string類型 DomHead[0][”cvenabbname“] = ”“;//供貨單位,string類型 DomHead[0][”cexch_name“] = ”“;//幣種,string類型 DomHead[0][”nflat“] = ”“;//匯率,double類型 ??
/***************************** 以下是非必輸字段 ****************************/ DomHead[0][”ipresent“] = ”“;//現存量,string類型 DomHead[0][”cmaketime“] = ”“;//制單時間,DateTime類型 DomHead[0][”cmodifytime“] = ”“;//修改時間,DateTime類型 DomHead[0][”caudittime“] = ”“;//審核時間,DateTime類型 DomHead[0][”cauditdate“] = ”“;//審核日期,DateTime類型 DomHead[0][”cmodifydate“] = ”“;//修改日期,DateTime類型 BusinessObject DomHead = broker.GetBoParam(”DomHead“);DomHead.RowCount = 10;//設置行數
//其中,給BO對象的字段賦值,值可以是真實類型,也可以是無類型字符串 //以下代碼示例只設置第一行值。各字段定義詳見API服務接口定義
??
2)給普通參數賦值 例如,//給普通參數VoucherState(參數名)賦值。此參數的數據類型為int,此參數按值傳遞,具體請參考服務接口定義
broker.AssignNormalValue(”VoucherState“, new int());注意:所有參數名不限大小寫。
3)給“OUT型”參數賦值
為方便用戶使用U8API,如果參數數據類型為一般值類型,如String、Integer、Long、Single、Double、Boolean、Date,則不必傳入一個參數變量(傳入也可);否則,則必須一個參數變量。
如: ??
//該參數curID為OUT型參數,由于其數據類型為string,為一般值類型,因此不必傳入一個參數變量。在API調用返回時,可以通過GetResult(”curID“)獲取其值
//該參數CurDom為OUT型參數,由于其數據類型為MSXML2.IXMLDOMDocument2,非一般值類型,因此必須傳入一個參數變量。在API調用返回時,可以直接使用該參數
MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.IXMLDOMDocument2();broker.AssignNormalValue(”CurDom“, CurDom);??
當不傳入一個參數變量時,在API調用返回時,可以通過GetResult(參數名)獲取其值;當不必傳入一個參數變量時,在API調用返回時,可以直接引用該參數。
4)給“INOUT型”參數賦值 對“INOUT型”型參數,則不論是否是一般值類型,都需要傳入參數變量。其他與“OUT型”參數一樣。
6. 調用API //示例調用如下:
if(!broker.Invoke())
{
//錯誤處理
Exception apiEx = broker.GetException();if(apiEx!= null){
if(apiEx is MomSysException){
} else if(apiEx is MomBizException){
} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API異常:“ + bizEx.Message);//todo:異常處理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系統異常:“ + sysEx.Message);//todo:異常處理
} } //結束本次調用,釋放API資源 broker.Release();return;注意:對調用失敗,可以獲取出錯信息,如果是API框架的原因,則報告MomSysException異常,如果是業務組件的原因,則報告MomBizException異常。
7. 獲取返回結果
1)獲取BO對象
在“裝載單據”時,通過GetBoParam方法獲取表頭或表體參數
BusinessObject DomHeadRet = broker.GetBoParam(”DomHead“);Console.WriteLine(”BO對象行數為:“ + DomHeadRet.RowCount);//獲取BO對象的行數 如果要取原始的XMLDOM對象結果,請使用GetResult(”DomHead“)as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker.GetResult(”DomHead“)as MSXML2.DOMDocument;以上獲取的行數是BO對象的實際行數。
//獲取BO對象各字段的值。以下代碼示例只取第一行。字段定義詳見API服務接口定義
/****************************** 以下是必輸字段 ****************************/ int poid = Convert.ToInt32(DomHeadRet[0][”poid“]);//主關鍵字段,int類型
DateTime dpodate = Convert.ToDateTime(DomHeadRet[0][”dpodate“]);//日期,DateTime類型 string cpoid = Convert.ToString(DomHeadRet[0][”cpoid“]);//訂單編號,string類型 ??
/***************************** 以下是非必輸字段 ****************************/ string ipresent = Convert.ToString(DomHeadRet[0][”ipresent“]);//現存量,string類型 DateTime cmaketime = Convert.ToDateTime(DomHeadRet[0][”cmaketime“]);//制單時間,DateTime類型 ?? 注意:
2)獲取普通返回值
代碼如下:
//獲取普通返回值。此返回值數據類型為System.String,此參數按值傳遞,具體請參考服務接口定義 System.String result = broker.GetReturnValue()as System.String;3)獲取普通“OUT型”或“INOUT型”返回值
如前所述,對普通“OUT型”或“INOUT型”參數,如果是一般值類型,則通過GetResult方法獲取其返回值,否則直接使用該引用。
如,//獲取普通OUT參數curID。此返回值數據類型為string,在使用該參數之前,請判斷是否為空 string curIDRet = broker.GetResult(”curID“)as string;
//獲取普通OUT參數CurDom。此返回值數據類型為MSXML2.IXMLDOMDocument2,前面已定義該參數,請直接使用 ??
2.2.2 銷售管理
? 功能介紹
為了支持U8二次開發對業務單據的開發,本功能提供了實現銷售業務單據各種操作功能的編程接口。使用銷售管理API開發接口,可以完成銷售管理的銷售報價單、銷售訂單、銷售發貨單、銷售退貨單、銷售普通發票、銷售專用發票、委托代銷發貨單、委托代銷結算單、銷售調撥單等單據的審核、棄審、獲取、新增、修改、刪除。
? 使用環境
必須安裝.NET FrameWork 2.0; 必須安裝U8-872版本的銷售管理產品; 必須安裝API適配器組件SAAPIConcrete.dll;
? 接口說明
銷售管理二次開發接口及參數說明: ? 審核或棄審單據-Audit方法
參數:
domHead
—— 單據表頭,DOM對象,必輸 bVerify
—— 審核/棄審標志,必輸。true表審核;false表棄審
API上下文:
VoucherType —— 單據類型,必輸。具體類型參看API上下文描述
? 刪除單據-Delete方法
參數:
domHead —— 單據表頭,DOM對象,必輸 API上下文:
VoucherType —— 單據類型,必輸。具體類型參看API上下文描述
? 裝載單據-Load方法
參數:
domHead
—— 單據表頭,DOM對象,必輸 domBody
—— 單據表體,DOM對象,必輸 VouchID
—— 需要裝載的單據號,可選 blnAuth
—— 是否控制權限:true
API上下文:
VoucherType —— 單據類型,必輸。具體類型參看API上下文描述
? 新增或修改單據-Save方法
參數:
domHead
—— 單據表頭,DOM對象,必輸 domBody
—— 單據表體,DOM對象,必輸 VoucherState —— 保存狀態,必輸。0增加;1修改 VNewID
—— 單據的id,可選 DomConfig
—— ATO,PTO選配配置,必輸,可設置為nothing API上下文:
VoucherType —— 單據類型,必輸。具體類型參看API上下文描述
? 開發步驟
實現銷售單據某一功能,主要有以下七個步驟: 1. 構造u8login對象并登陸
聲明和創建u8login類對象前應該先引用U8API類庫中的Interop.U8Login.dll,代碼示例如下:
U8Login.clsLogin u8Login = new U8Login.clsLogin();//聲明u8login對象 String sSubId = ”AS“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;String sSerial = ”“;if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)){
} Console.WriteLine(”登陸失敗,原因:“ + u8Login.ShareString);Marshal.FinalReleaseComObject(u8Login);return;
//登陸
String sAccID = ”(default)@001“;如果當前環境中有login對象則可以省去第一步。
2. 構造環境上下文對象,傳入login,并按需設置其它上下文參數
U8EnvContext envContext = new U8EnvContext();
envContext.U8Login = u8Login;//設置上下文參數
envContext.SetApiContext(”VoucherType“, new int());//上下文數據類型:int,含義:單據類型
//構造環境上下文對象 //傳入login
如果是外部事務,則需要傳遞ADO.Connection對象,并將IsIndependenceTransaction設置為true:
envContext.BizDbConnection = new ADO.Connection();envContext.IsIndependenceTransaction = true;3. 設置API地址標識(Url)參數
//如當前API“新增或修改”的地址標識為:U8API/SaleOrder/Save
U8ApiAddress myApiAddress = new U8ApiAddress(”U8API/SaleOrder/Save“);4. 構造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
5. API對象參數賦值
1)給BO表頭參數DomHead和表體參數domBody賦值有兩種方法,如下: 方法一是直接傳入MSXML2.DOMDocumentClass對象,代碼如下
MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);
方法二是構造BusinessObject對象,具體方法如下:
//首先通過GetBoParam方法獲取表頭表體參數
注意:設置行數為某個值,行數并不限定為該最大值,可以一直順序添加至任意行,但有一個規則:例如當設置為10時,可以對第0、1、??9行賦值,當對第10行賦值時候,則會順序添加一個新行,但此時是不能對第11行賦值的,當添加一個新行(第10行)后,又可以對第11行進行賦值。
/****************************** 以下是必輸字段 ****************************/ domHead[0][”id“] = ”“;//主關鍵字段,int類型 domHead[0][”csocode“] = ”“;//訂 單 號,string類型 domHead[0][”ddate“] = ”“;//訂單日期,DateTime類型 domHead[0][”cbustype“] = ”“;//業務類型,string類型
??
/***************************** 以下是非必輸字段 ****************************/ domHead[0][”fstockquanO“] = ”“;//現存件數,double類型 BusinessObject DomHead = broker.GetBoParam(”DomHead“);DomHead.RowCount = 10;//設置行數
//其中,給BO對象的字段賦值,值可以是真實類型,也可以是無類型字符串 //以下代碼示例只設置第一行值。各字段定義詳見API服務接口定義
domHead[0][”fcanusequanO“] = ”“;//可用件數,double類型 domHead[0][”dpredatebt“] = ”“;//預發貨日期,DateTime類型 domHead[0][”dpremodatebt“] = ”“;//預完工日期,DateTime類型 domHead[0][”dpredatebt“] = ”“;//預發貨日期,DateTime類型
??
2)給普通參數賦值 例如,//給普通參數VoucherState(參數名)賦值。此參數的數據類型為int,此參數按值傳遞,具體請參考服務接口定義
broker.AssignNormalValue(”VoucherState“, new int());注意:所有參數名不限大小寫。
3)給“OUT型”參數賦值
為方便用戶使用U8API,如果參數數據類型為一般值類型,如String、Integer、Long、Single、Double、Boolean、Date,則不必傳入一個參數變量(傳入也可);否則,則必須一個參數變量。
如: ??
//該參數curID為OUT型參數,由于其數據類型為string,為一般值類型,因此不必傳入一個參數變量。在API調用返回時,可以通過GetResult(”curID“)獲取其值
//該參數CurDom為OUT型參數,由于其數據類型為MSXML2.IXMLDOMDocument2,非一般值類型,因此必須傳入一個參數變量。在API調用返回時,可以直接使用該參數
MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.IXMLDOMDocument2();broker.AssignNormalValue(”CurDom“, CurDom);??
當不傳入一個參數變量時,在API調用返回時,可以通過GetResult(參數名)獲取其值;當不必傳入一個參數變量時,在API調用返回時,可以直接引用該參數。
4)給“INOUT型”參數賦值 對“INOUT型”型參數,則不論是否是一般值類型,都需要傳入參數變量。其他與“OUT型”參數一樣。
6. 調用API //示例調用如下:
if(!broker.Invoke())
{
//錯誤處理
Exception apiEx = broker.GetException();if(apiEx!= null){ if(apiEx is MomSysException)
}
} {
} else if(apiEx is MomBizException){
} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API異常:“ + bizEx.Message);//todo:異常處理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系統異常:“ + sysEx.Message);//todo:異常處理
//結束本次調用,釋放API資源 broker.Release();return;注意:對調用失敗,可以獲取出錯信息,如果是API框架的原因,則報告MomSysException異常,如果是業務組件的原因,則報告MomBizException異常。
7. 獲取返回結果
1)獲取BO對象
在“裝載單據”時,通過GetBoParam方法獲取表頭或表體參數
BusinessObject DomHeadRet = broker.GetBoParam(”DomHead“);Console.WriteLine(”BO對象行數為:“ + DomHeadRet.RowCount);//獲取BO對象的行數 如果要取原始的XMLDOM對象結果,請使用GetResult(”DomHead“)as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker.GetResult(”DomHead“)as MSXML2.DOMDocument;以上獲取的行數是BO對象的實際行數。
//獲取BO對象各字段的值。以下代碼示例只取第一行。字段定義詳見API服務接口定義
/****************************** 以下是必輸字段 ****************************/ int id = Convert.ToInt32(domHeadRet[0][”id“]);//主關鍵字段,int類型
string ccode = Convert.ToString(domHeadRet[0][”ccode“]);//單據號,string類型 DateTime ddate = Convert.ToDateTime(domHeadRet[0][”ddate“]);//日期,DateTime類型 string cbustype = Convert.ToString(domHeadRet[0][”cbustype“]);//業務類型,string類型 ??
/***************************** 以下是非必輸字段 ****************************/ string cpayname = Convert.ToString(domHeadRet[0][”cpayname“]);//付款條件,string類型 string cpersonname = Convert.ToString(domHeadRet[0][”cpersonname“]);//業 務 員,string類型 double itaxrate = Convert.ToDouble(domHeadRet[0][”itaxrate“]);//稅率,double類型 string cexch_name = Convert.ToString(domHeadRet[0][”cexch_name“]);//幣種,string類型 ?? 注意:
2)獲取普通返回值
代碼如下:
//獲取普通返回值。此返回值數據類型為System.String,此參數按值傳遞,具體請參考服務接口定義 System.String result = broker.GetReturnValue()as System.String;3)獲取普通“OUT型”或“INOUT型”返回值
如前所述,對普通“OUT型”或“INOUT型”參數,如果是一般值類型,則通過GetResult方法獲取其返回值,否則直接使用該引用。
如,//獲取普通OUT參數curID。此返回值數據類型為string,在使用該參數之前,請判斷是否為空 string curIDRet = broker.GetResult(”curID“)as string;
//獲取普通OUT參數CurDom。此返回值數據類型為MSXML2.IXMLDOMDocument2,前面已定義該參數,請直接使用 ??
2.2.3 庫存管理
? 功能介紹
為了支持U8二次開發對業務單據的開發,本功能提供了實現庫存業務單據各種操作功能的編程接口。使用庫存管理的API開發接口,可以對庫存管理中的采購入庫單、其他入庫單、其他出庫單、產成品入庫單、材料出庫單、調撥單、組裝單、拆卸單、形態轉換單、盤點單、貨位調整單、銷售出庫單、期初結存、不合格品記錄單、不合格品處理單、期初不合格品、調撥申請單等單據進行審核、棄審、獲取(或裝載)、新增、修改、刪除。
? 使用環境
必須安裝.NET FrameWork 2.0; 必須安裝U8-872版本的庫存管理產品; 必須安裝API適配器組件STAPIConcrete.dll ? 接口說明
庫存管理二次開發接口說明:
? 審核單據-Audit方法
參數:
sVoucherType —— 單據類型:01 VoucherId
—— 單據ID errMsg
—— 錯誤信息
cnnFrom —— 連接對象(調用方控制事務時需要傳入連接對象)TimeStamp
—— 單據時間戳(用于檢查單據是否修改,空串時不檢查)domMsg
—— 返回DOM格式的信息:主要是可用量信息 bCheck
—— 是否進行業務檢查(是否控制可用量)bBeforCheckStock —— 是否檢查可用量 bList —— 傳入false MakeWheres —— 傳空 sWebXml —— 傳入空串
oGenVouchIds —— 獲取單據ID列表(返回審核時自動生成的單據的id
列表,傳空)
? 棄審單據-CancelAudit方法
參數:
sVoucherType —— 單據類型:01 VoucherId
—— 單據ID errMsg
—— 錯誤信息 cnnFrom —— 連接對象(由調用方控制事務時必須傳入)TimeStamp
—— 單據時間戳(用于檢查單據是否修改,空串時不檢查)domMsg
—— 超可用量提示信息DOM對象(返回DOM格式的信息)bCheck
—— 是否進行業務檢查 bBeforCheckStock —— 是否檢查可用量 bList —— 傳入false
? 裝載單據-Load方法
參數:
sVoucherType —— 單據類型:01 sWhere —— 條件串
DomHead
—— 表頭DOM對象 domBody
—— 表體DOM對象 domPos
—— 貨位DOM對象 errMsg
—— 錯誤信息
bGetBlank
—— 是否獲取空白單據 sBodyWhere_Order —— 表體排序方式字段
注意:其中sWhere設計為:
如果按單據號加載,則語法為ccode=N'要加載的單據號',例如broker.AssignNormalValue(”sWhere“, ”ccode = N'0000000001'“);
如果按單據ID加載,則語法為id=XXX,例如broker.AssignNormalValue(”sWhere“, ”id = 1“)。
? 刪除單據-Delete方法
參數:
sVoucherType —— 單據類型:01 VoucherId
—— 單據ID errMsg
—— 錯誤信息 cnnFrom —— 連接對象(由調用方控制事務時需要傳入連接對象)TimeStamp
—— 單據時間戳
domMsg —— 返回DOM格式的信息:主要是檢查可用量和控制可
用量信息
bCheck
—— 是否進行業務檢查 BeforCheckStock —— 是否檢查可用量 bList
—— 傳入false
? 添加新單據-Add方法
參數:
sVoucherType —— 單據類型:01 DomHead —— 表頭DOM對象 domBody
—— 表體DOM對象
domPosition —— 貨位DOM對象:傳空 errMsg
—— 返回錯誤信息 cnnFrom —— 連接對象,如果由調用方控制事務,則需要設置
此連接對象,否則傳空
VoucherId
—— 返回單據ID domMsg —— 返回DOM格式的信息:主要返回可用量和現存量的錯誤信息
bCheck
—— 是否進行業務檢查(是否控制可用量)bBeforCheckStock —— 是否檢查可用量(檢查可用量)bIsRedVouch —— 是否紅字單據 sAddedState —— 傳空字符串 bReMote
—— 是否遠程
? 修改單據-Update方法
參數:
sVoucherType —— 單據類型:01 DomHead —— 表頭DOM對象 domBody
—— 表體DOM對象 domPosition —— 貨位DOM對象 errMsg
—— 錯誤信息 cnnFrom —— 連接對象
domMsg
—— 超可用量提示信息DOM對象(返回DOM格式的信息)bCheck
—— 是否進行業務檢查 bBeforCheckStock —— 是否檢查可用量 bIsRedVouch —— 是否紅字單據 sAddedState —— 修改狀態 bUpdateNeedEas —— 傳true ? 開發步驟
實現庫存單據某一功能,主要有以下七個步驟: 1. 構造u8login對象并登陸
聲明和創建u8login類對象前應該先引用U8API類庫中的Interop.U8Login.dll,代碼示例如下:
U8Login.clsLogin u8Login = new U8Login.clsLogin();//聲明u8login對象 String sSubId = ”AS“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;
//登陸
String sAccID = ”(default)@001“;String sSerial = ”“;if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)){
} Console.WriteLine(”登陸失敗,原因:“ + u8Login.ShareString);Marshal.FinalReleaseComObject(u8Login);return;如果當前環境中有login對象則可以省去第一步。2. 構造環境上下文對象,傳入login U8EnvContext envContext = new U8EnvContext();
envContext.U8Login = u8Login;
//構造環境上下文對象 //傳入login 3. 設置API地址標識(Url)參數
//如當前API“新增或修改”的地址標識為:U8API/SaleOrder/Save
U8ApiAddress myApiAddress = new U8ApiAddress(”U8API/SaleOrder/Save“);4. 構造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
5. API對象參數賦值
1)給BO表頭參數DomHead和表體參數domBody賦值有兩種方法,如下: 方法一是直接傳入MSXML2.DOMDocumentClass對象,代碼如下
MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);
方法二是構造BusinessObject對象,具體方法如下:
//首先通過GetBoParam方法獲取表頭表體參數
注意:設置行數為某個值,行數并不限定為該最大值,可以一直順序添加至任意行,但有一個規則:例如當設置為10時,可以對第0、1、??9行賦值,當對第10行賦值時候,則會順序添加一個新行,但此時是不能對第11行賦值的,當添加一個新行(第10行)后,又可以對第11行進行賦值。
/****************************** 以下是必輸字段 ****************************/ BusinessObject DomHead = broker.GetBoParam(”DomHead“);DomHead.RowCount = 10;//設置行數
//其中,給BO對象的字段賦值,值可以是真實類型,也可以是無類型字符串 //以下代碼示例只設置第一行值。各字段定義詳見API服務接口定義
DomHead[0][”id“] = ”“;//主關鍵字段,int類型 DomHead[0][”ccvcode“] = ”“;//盤點單號,string類型 DomHead[0][”dcvdate“] = ”“;//盤點日期,DateTime類型 DomHead[0][”dacdate“] = ”“;//賬面日期,DateTime類型
DomHead[0][”cwhname“] = ”“;//盤點倉庫,string類型
??
/***************************** 以下是非必輸字段 ****************************/ DomHead[0][”cmodifyperson“] = ”“;//修改人,string類型 DomHead[0][”dmodifydate“] = ”“;//修改日期,DateTime類型 DomHead[0][”dnmaketime“] = ”“;//制單時間,DateTime類型 DomHead[0][”dnmodifytime“] = ”“;//修改時間,DateTime類型 DomHead[0][”dnverifytime“] = ”“;//審核時間,DateTime類型
??
2)給普通參數賦值
例如,給普通參數sVouchType(參數名)賦值:
broker.AssignNormalValue(”sVouchType“, new System.String());
注意:所有參數名不限大小寫。
3)給“OUT型”參數賦值
為方便用戶使用U8API,如果參數數據類型為一般值類型,如String、Integer、Long、Single、Double、Boolean、Date,則不必傳入一個參數變量(傳入也可);否則,則必須一個參數變量。
如: ??
// 該參數errMsg為OUT型參數,由于其數據類型為System.String,為一般值類型,因此不必傳入一個參數變量。在API調用返回時,可以通過GetResult(”errMsg“)獲取其值
//該參數domMsg為OUT型參數,由于其數據類型為MSXML2.IXMLDOMDocument2,非一般值類型,因此必須傳入一個參數變量。在API調用返回時,可以直接使用該參數 MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.IXMLDOMDocument2();broker.AssignNormalValue(”domMsg“, domMsg);??
注意:當不傳入一個參數變量時,在API調用返回時,可以通過GetResult(參數名)獲取其值;當不必傳入一個參數變量時,在API調用返回時,可以直接引用該參數。
4)給“INOUT型”參數賦值
對“INOUT型”型參數,則不論是否是一般值類型,都需要傳入參數變量。其他與“OUT型”參數一樣。
6. 調用API //示例調用如下: if(!broker.Invoke())
{
} 注意:對調用失敗,可以獲取出錯信息,如果是API框架的原因,則報告MomSysException異常,如果是業務組件的原因,則報告MomBizException異常。
//錯誤處理
Exception apiEx = broker.GetException();if(apiEx!= null){
} //結束本次調用,釋放API資源 broker.Release();return;if(apiEx is MomSysException){
} else if(apiEx is MomBizException){
} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API異常:“ + bizEx.Message);//todo:異常處理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系統異常:“ + sysEx.Message);//todo:異常處理
7. 獲取返回結果
1)獲取BO對象
在“裝載單據”時,通過GetBoParam方法獲取表頭或表體參數
BusinessObject DomHeadRet = broker.GetBoParam(”DomHead“);Console.WriteLine(”BO對象行數為:“ + DomHeadRet.RowCount);//獲取BO對象的行數 如果要取原始的XMLDOM對象結果,請使用GetResult(”DomHead“)as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker.GetResult(”DomHead“)as MSXML2.DOMDocument;以上獲取的行數是BO對象的實際行數。
//獲取BO對象各字段的值。以下代碼示例只取第一行。字段定義詳見API服務接口定義
/****************************** 以下是必輸字段 ****************************/ int id = Convert.ToInt32(DomHeadRet[0][”id“]);//主關鍵字段,int類型
string ccvcode = Convert.ToString(DomHeadRet[0][”ccvcode“]);//盤點單號,string類型 DateTime dcvdate = Convert.ToDateTime(DomHeadRet[0][”dcvdate“]);//盤點日期,DateTime類型 DateTime dacdate = Convert.ToDateTime(DomHeadRet[0][”dacdate“]);//賬面日期,DateTime類型 string cwhname = Convert.ToString(DomHeadRet[0][”cwhname“]);//盤點倉庫,string類型 注意: ??
/***************************** 以下是非必輸字段 ****************************/ string cmodifyperson = Convert.ToString(DomHeadRet[0][”cmodifyperson“]);//修改人,string類型 DateTime dmodifydate = Convert.ToDateTime(DomHeadRet[0][”dmodifydate“]);//修改日期,DateTime類型
DateTime dnmaketime = Convert.ToDateTime(DomHeadRet[0][”dnmaketime“]);//制單時間,DateTime類型
DateTime dnmodifytime = Convert.ToDateTime(DomHeadRet[0][”dnmodifytime“]);//修改時間,DateTime類型
DateTime dnverifytime = Convert.ToDateTime(DomHeadRet[0][”dnverifytime“]);//審核時間,DateTime類型 ??
2)獲取普通返回值
代碼如下:
//獲取普通返回值。此返回值數據類型為System.String,此參數按值傳遞,具體請參考服務接口定義 System.String result = broker.GetReturnValue()as System.String;3)獲取普通“OUT型”或“INOUT型”返回值
如前所述,對普通“OUT型”或“INOUT型”參數,如果是一般值類型,則通過GetResult方法獲取其返回值,否則直接使用該引用。
如,//獲取普通OUT參數domPos。此返回值數據類型為MSXML2.IXMLDOMDocument2,前面已定義該參數,請直接使用
//獲取普通OUT參數errMsg。此返回值數據類型為System.String,在使用該參數之前,請判斷是否為空 System.String errMsgRet = broker.GetResult(”errMsg")as System.String;??
第四篇:Java項目開發實驗教學大綱
Java項目開發實驗教學大綱 課程代碼 制訂人 制訂日期 修訂人 修訂日期 審定人(組)審定日期 《Java項目開發》實驗教學大綱 課程名稱:
Java項目開發 課程編碼: 010228A 學 時: 84 其中必做: 84 學 分: 1.5 開課學期: 第3學期 適用專業: 計算機軟件技術 課程類別: 選修 課程性質: 專業課
先修課程: C語言程序設計、Java程序設計
一、課程性質及任務 本實訓是計算機軟件技術專業Java方向的實踐性環節。通過本次實訓,可以系統掌握Java語言程序設計、數據庫原理級應用、Struts2企業級應用、Spring和Hibernate開源框架的使用,并鍛煉學生的實踐動手能力。整個實訓要求及環境,全面模擬企業實際開發環境以及項目管理規范和流程,使學生在實訓中掌握企業開發的實際運作流程,提高學生進入企業的適應能力。
二、課程基本要求(1)掌握Java編程基本知識的實際運用;(2)掌握SQL Server數據庫的設計與操作,備份與恢復;(3)掌握Struts2的數據類型轉換、數據校驗、國際化、OGNL表達式、攔截器、文件上傳與下載以及Struts2集成Spring等;(4)掌握Spring IOC的配置與運用、Hibernate ORM的配置與運用; 將上述知識運用到具體項目中,以學生熟悉的“學生選課系統”為實訓項目,由學生自己理解需求,業務邏輯,完成系統的需求分析、概要設計、詳細設計、編碼、測試等工作,并提交需求分析報告、系統可運行代碼以及數據庫設計備份文件(.sql文件)并由此評定成績。
三、實訓內容與學時分配(84學時)序項目
內容提要 學時 性質 要求 號 需求分析 1.數據庫設計 2.超市管理系統公共類設計 1.12 綜合 必做 3.(Swing+SQL Server 2005實現)模塊設計(登錄模塊、主窗體、采4.購訂貨模塊、人員管理模塊)第 1 頁
Java項目開發實驗教學大綱 在Eclipse中實現程序打包 5.需求分析 1.數據庫設計 2.使用CVS進行團隊開發 3.物資管理系統公共模塊 4.綜合
必做 2.24(Swing+Spring+Hibernat模塊設計(系統登錄模塊、主窗體5.e+SQL Server 實現)模塊、部門管理模塊、人員管理模塊、物品管理模塊、出借信息模塊、歸還信息模塊)需求分析 1.數據庫設計 2.使用CVS進行團隊開發 3.網上商城系統綜合 必做 公共模塊 4.3.24(Struts2+Hibernate+Spri ng 實現)模塊設計(注冊模塊、前臺商品信5.息查詢模塊、購物車模塊、后臺商 品管理模塊)需求分析 1.系統數據庫設計 2.進銷存管理系統系統設計 3.綜合 必做 4.24(Java+SQL Server 2005系統功能實現(基礎信息模塊設4.實現)計、查詢統計模塊設計、庫存管理 模塊設計)需求分析 1.英漢雙語詞典系統數據庫設計 2.綜合 選做 5.(Swing+MySQL 5.5實系統設計 3.現)系統功能實現 4.需求分析 1.學生成績管理系統系統數據庫設計 2.綜合 選做 6.(Swing+SQL Server 系統設計 3.2005實現)系統功能實現 4.需求分析 1.系統數據庫設計 2.彩票預測系統綜合 選做 7.(Swing+MySQL 實現)系統設計 3.系統功能實現 4.需求分析 1.圖書館管理系統系統數據庫設計 2.綜合 選做 8.(Java+SQL Server 2005系統設計 3.實現)系統功能實現 4.第 2 頁
第五篇:C#開發機戰游戲實習報告
實習報告
5月28至6月20日,我們網絡工程專業分三個地點進行生產實習,包括主要講c#方向的足下,講java方向的NTT data還有C++和Andorid方向的達內。我綜合分析自身三年的學習,選擇了位于西永的足下科技有限公司,進行c#方向的實習。
足下科技有限公司,主要從事服務外包軟件開發和與大學聯合開展實訓工作;公司面積逾20000平方米、電腦設備1000多臺、多媒體教室30多間、專業服務器20多臺、專業圖書近萬本,致力于為社會培養更多、更實用、更優秀的專業人才。
本次實習,我們的主要任務是在項目經理的帶領下,先回顧編程語言及面向對象的基本知識點,再從簡單的打字游戲練起,一步一步,最終開發出一個具有可玩性的機戰游戲,并以小組為單位在公司進行綜合展示,將自己的團隊自己的產品推銷了去。
按時間的劃分,可以將本次實習分為實習正式開始前的準備階段、正式實習階段,準備階段從5月28日到29日上午,這一階段先由項目經理給我們簡要介紹了足下,讓大家對足下,對所謂的IT的職場有一定的認識,然后進行團隊劃分,每個團隊取出自己的團隊名、團隊口號、團隊隊歌并確定自己團隊在接下來近一個月的實習期間的實習目標。讓每一個人都清楚自己的努力方向,然后嚴格要求自己,努力實現自己既定的目標。所有這些準備工作的就緒了,就開始了我們的正式實習。我們的團隊取名心之力,引用毛主席當年的同名文章《心之力》之名,里面說到:“天之力莫大于日,地之力莫大于電,人之力莫大于心。陽氣發處,金石亦透,精神一到,何事不成?”其中的精神,就是指心力,必力一到,何事不成?同時,我們來到足下,公司的總監也一直在強調,學習的第一條件是用心,用心了,沒有辦不成的事。所以,我們取名心之力。我們的口號是:“發我心力,一往無前”。隊歌是改編版的《團結就是力量》——團結就是力量,團結就是力量。這技術是鐵,這心力是鋼,比鐵還硬,比鋼還強,向著飛行大戰開火,把一切技術難題全部滅亡。向著勝利,向著太陽,向著重理工發出萬丈光芒。
實習正式開始后,又可根據實習內容的不同分為三個階段。
第一階段從5月29日下午到6月1日,這一階段主要是對編程語言基本語法及數據庫相關基礎的一些回顧,主要目的是為之后的項目開發作基礎知識的準備,大部分同學都很久沒有編程了,很多基本的語法都忘記了,這個階段對某些同學可能是浪費時間,但對整體而言,確實有利于后期項目的開發。
周末休息兩天后,開始了第二階段的任務,從6月4日到6月7日,這一階段主要是對面向對象理論的講解然后開發一個打字游戲用以充分理解面向對象編程。對于面向對象,第一個要解決的就是什么是面向對象,將“面向對象”按語義劃分,可分“面向”和“對象”,什么是對象,事間的萬事萬物都是對象,一臺電腦是一個對象,一個人是對象;將一臺電腦進一步劃分,電腦的主機、顯示器、鼠標、鍵盤又是一個一個分別的對象。對于這些對象而言,都有一個抽象的描述,包括這樣的對象有什么樣的屬性,能完成什么要的任務等。這個抽象概念讓為們明白這是什么,但它不能等同于一個具的實際存在的事物。如我們描述人,就是一個抽象的概念,人有膚色、年齡、出身地點、國籍等屬性,人又可以發生吃、喝、睡等動作,人這個抽象概念就讓我們明白了人到底是什么,卻不指某一個具體的人,小張、小李,這樣具體的某一個人,是人這個抽象概念的具體化的一個實體。“對象”,就是小張、小李這樣的具體化的實體,用來描述某個對象的屬性、行為等就要用到用于描述這些的抽象概念。“面向”可理解為面對、朝向,加在一起,“面向對象”就可以理解為面對著以上所講述的“對象”一種描述事間萬事萬物的一種方式。接著,對于學習IT的我們,就要理解什么是面向對象編程,通俗一點,面向對象編程,就是使用以上所認識到的面向對象的思維,用于計算機程序的開發。第一個問題所說的描述對象的那種抽象概念,在面向對象編程中就是“類”,類可以用成員變量來描述一種對象的屬性,用方法、事件等來描述該對象的行為。類并不是一個實體,不開辟內存空間,將類進行實例化就形成了實體、開辟了內存空間。解決了以上兩個問題,就要進一步認識面向對象編程,包括變量類型、變量數據類型、封裝、多態、繼承等,有了對前兩個問題的認識,這些問題的掌握,我們變得更為簡單。將面向對象的理論知道學習后,我們在項目總監的帶領下,開發了一個打字游戲,用實踐來更進一步理解面向對象,在6月7日結束前,所有人都單獨實現了這個打字游戲。之后,大家回學校考了《毛澤東思想及中國特色社會主義理論體系》,等待第三個階段的開始。
第三個階段從6月11日至6月20日,中途周末大家回校考英語四、六級。在前兩階段的基礎上,大家基本都能進行面向對象編程的開發了,接下來的任務都非常明確——機戰。項目總監只花了兩個上午給大家講機戰的幾個核心技術,其他時間就由大家自由發揮了。機戰的核心技術其實只有一個,GUI+,用timer控件每0.33秒刷新一次畫面,用GUI+技術在每一次刷新中重繪Form窗體中的圖形。技術掌握清楚后,更多時候靠的就是細心的設計、開發、調試及錯誤的測試及解決。相比于以前,因為來到了公司,大家都更為認真,可能還有是開發游戲的緣故,大家都比較感興趣,所以我們去的每一個人都認認真真地完成著自己的任務。
實習階段的最后一天,大家都作好了準備,等待項目的驗收,即實習過程的答辯。答辯最終是以團隊為單位進行,答辯只講解一份作品。我們團隊每個人都完整實現了機戰的各項功能,當中各有特色。我們采用的方式是將每個人作品中優秀的部分截取出來,組何到一個項目當中,成為全隊共同的作品進行展示。雖然我們的作品相對于其他組,可能畫面沒那么絢麗,但憑借團隊內大家攜手努力,功能的大力擴展以及答辯過程的充分發揮,我們團隊取得了本次作品同答辯第一名的成績。
通過本次實習,對個人而言,最大的收獲莫過于對面向對象編程的進一步學習理解,以及實習項目開發中對于面向對象思想的應用,讓面向對象編程的思維在自己的腦海里扎根。以前雖然也知道面向對象,知道面向對象編程,但大多數時候更理解為用面向對象編程語言進行程序開發,只要是用到C#,用到java,那就叫面向對象。也知道面向對象編程的核心思想如封裝、繼承、多態等,但真正開發的時候用到的很少,不管什么東西,能在一個類里寫完絕對不會多用另一個類,導致程序的可讀性、擴展性都非常差。而通過本次實習,項目經理先再次講解面向對象的思想,再在程序的開前教給大家,程序的開發過程中嚴格要求大家做到用面向對象的思維來實現程序的開發。通過這樣理論和實際的相互結合,大家在開發程序過程中真正學會了如何劃分功能模塊進行封裝、如何使用繼承,如何使用多態。
對于實習的全過程,除開編程方面的理論與實踐,最大的收獲應該是一種體驗。這不僅僅是學習兩個字就能收獲到的。包括公司的作息習慣,工作任務的完成方法,人際關系的處理等等。總的說來,感覺公司比學校里實際多了,學校里你可以我行我素,出了問題老師會幫你想法解決,同學朋友會包容你安慰你,但在公司里不再如此,出了問題,那就會直接跟工資、職務的進升掛勾,個人不得不謹小慎微。另外,還聽項目經理助理說了一些工作中老板面前、同事面前的不同,如一個任務,老板面前,正常需要五分鐘能完成的,一定要三分鐘完成,而在同事面前,能五分鐘完成的一定會邊耍邊做10分鐘完成。因為老板面前要掙表現,以便得到賞識;同事面前沒那必要,而且自己做完了余下的時間還要幫別人處理,同樣辛苦,還不如一邊把節奏放慢點,讓自己輕松點。當老板問到任務是否艱巨時,想方設法都要夸大一點任務的難度,讓老板知道你的辛苦,還是為了得到賞識。只有老板賞識才會有加工資,才會有職務的上升。寫下他說的這些,并不是我會按他這樣做,只是通過這些,讓我深刻地感受到職場跟學校的不同,覺得曾經的自己太單純了。
完成了實習,有了職場的體驗,內心有向往,但我不會立即工作。我下定決心考研,因為對于人生的領悟還不夠,進入職場只會讓我變得現實,被里面同化,忘記自己的夢想。我有我的夢,現在還有猶豫,進入研究生再深造幾年,學得越深,才會越堅定!對于實習的意見,我覺得實習的任務還是輕松了點,可能對于某些基礎相對不那么好的同學而言任務確實比較適中,但這對于基礎好的同學相當不公平。剛進大學時,對于計算機,大家的基礎是相當的,經過三年的學習,有的人學得比較好,有的人學得比較差。這并不是覺得好的人比學得差的人聰明,而是學得好的人比學得不那么好的人更用心。這可能跟家庭因素,跟個人對人生的目標有關。有的人覺得人生平平淡淡有份穩定收入就好,有的人想要創造更高的人生價值。這些到現在,就是進實習公司時大家的基礎,基礎差的人對于計算機的迷戀肯定遠不及基礎好的人,但學校卻硬要讓基礎好的人去等差的人,還是那句話,相當不公平。實習的第一個周,說好聽點叫鞏固基礎,說難聽點就叫浪費時間。一個周,就學for循環、學if、else,大一就該熟得不能再熟的東西大三時總共三周實習要花一個周來學。希望學校、老師能綜合考慮,讓每一個人都能有自己想要的更多的收獲。