




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
K/3產(chǎn)品部K/3Cloud技術(shù)開發(fā)培訓
----BOS業(yè)務插件開發(fā)課程簡介:
本課程介紹K/3
CloudBOS業(yè)務插件的開發(fā)及配置,以功能講解輔之案例演練幫助學員快速掌握K/3
Cloud
BOS平臺的核心功能。
課程說明:概述業(yè)務插件概覽如何開發(fā)插件案例演練目錄概述業(yè)務插件概覽如何開發(fā)插件案例演練目錄K/3Cloud分層架構(gòu)圖展示層SilverlightWeb客戶端WPF桌面客戶端服務層動態(tài)表單UI生成服務內(nèi)核層表單動態(tài)生成引擎動態(tài)表單控制服務Web服務器動態(tài)表單視圖模型動態(tài)表單控制器動態(tài)表單數(shù)據(jù)模型擴展邏輯層動態(tài)表單編程接口表單生成插件表單邏輯服務表單操作缺省值計算函數(shù)業(yè)務插件動態(tài)表單元數(shù)據(jù)應用服務器動態(tài)表單邏輯組件動態(tài)表單服務端插件動態(tài)表單服務端編程接口數(shù)據(jù)庫服務器元數(shù)據(jù)業(yè)務數(shù)據(jù)校驗規(guī)則客戶端公共編程模型+客戶端插件+第三方設(shè)備集成接口移動客戶端Office客戶端HttpHttp業(yè)務服務概述業(yè)務插件概覽如何開發(fā)插件案例演練目錄BOS業(yè)務插件用以解決什么問題?標準業(yè)務對象的的業(yè)務邏輯應用:標準業(yè)務對象沒有實現(xiàn)的控制;已有操作和服務未支持的功能;更靈活的控制方式和客戶化定制;客戶二次開發(fā)的需求;快速開發(fā)、快速實施、快速應用;可配置,可測試,快速部署;有哪些插件?Web層表單插件列表插件表單構(gòu)建插件App層服務插件BOS業(yè)務插件開發(fā)概覽插件接口特性使用C#4.0支持繼承和擴展已封裝業(yè)務插件;組織控制;基礎(chǔ)資料分配………支持插件順序支持動態(tài)語言IronPython2.6.1BOS業(yè)務插件開發(fā)概覽BOS業(yè)務插件開發(fā)概覽—插件分類表單插件用于單個表單編輯界面運行于Web層列表插件用于列表
運行于Web層BOS業(yè)務插件開發(fā)概覽–插件分類服務插件掛在操作上的服務插件,對于操作進行擴展和校驗器配合使用運行于App層插件配置入口
操作列表–編輯操作BOS業(yè)務插件開發(fā)概覽–插件分類表單構(gòu)建插件對于表單界面進行自定義的插件運行于Web層自定義菜單、控件BOS業(yè)務插件開發(fā)概覽動態(tài)表單元數(shù)據(jù)結(jié)構(gòu)BOS業(yè)務插件開發(fā)概覽動態(tài)表單元數(shù)據(jù)結(jié)構(gòu)概述業(yè)務插件概覽如何開發(fā)插件接口結(jié)構(gòu)插件中常用的對象說明具體的代碼示例案例演練目錄概述業(yè)務插件概覽如何開發(fā)插件接口結(jié)構(gòu)插件中常用的對象說明具體的代碼示例案例演練目錄如何開發(fā)插件–接口結(jié)構(gòu)表單插件和列表插件繼承層次表單單據(jù)單據(jù)列表基礎(chǔ)資料插件針對對象動態(tài)表單單據(jù)基礎(chǔ)資料如何開發(fā)插件–接口結(jié)構(gòu)AbstractBillPlugIn接口動態(tài)表單視圖插件編程模型接口定義了視圖模型擴展允許通過接口處理視圖,實現(xiàn)特定業(yè)務需求如何開發(fā)插件–接口結(jié)構(gòu)OnInitialize請求加載頁面時觸發(fā)初始化事件此時Model還沒初始化,還是個空對象,但View已基本完成初始化;可初始化當前插件的一些全局屬性,也可修改當前頁面的控件屬性值,如控件大小、字段標題、表單標題等等。OnBillInitialize視圖模型初始化事件,在OnInitialize事件之后AfterBindData綁定數(shù)據(jù)后事件處理接口在控件綁定數(shù)據(jù)之后,通常需要根據(jù)其他條件設(shè)置控件的可見性、可用性、背景顏色等樣式。BeforeF7Select基礎(chǔ)資料彈出前事件查詢選擇基礎(chǔ)資料時,希望列表或模糊查詢結(jié)果中顯示滿足條件的基礎(chǔ)資料,此時可以通過該事件在加載基礎(chǔ)資料數(shù)據(jù)前添加過濾條件。BeforeClosed窗口關(guān)閉前事件AbstractBillPlugIn的ViewPlugin插件接口如何開發(fā)插件–接口結(jié)構(gòu)BarItemClick
菜單單擊事件處理擴展接口:點擊事件前進行權(quán)限驗證、數(shù)據(jù)檢查等等,用戶也可以在該事件中通過添加e.Cancel=true取消平臺內(nèi)置功能,完全自定義處理邏輯.AfterBarItemClick
菜單單擊事件后:指定跳轉(zhuǎn)頁面、指定刷新頁面、指定關(guān)閉頁面等等BeforeDoOperation
操作調(diào)用前事件:根據(jù)操作類型設(shè)置操作參數(shù)、傳遞變量AfterDoOperation
操作調(diào)用完成后事件:根據(jù)操作結(jié)果設(shè)置返回值ButtonClick
按鈕單擊事件AfterButtonClick
按鈕單擊后事件AbstractBillPlugIn的ViewPlugin插件接口如何開發(fā)插件–接口結(jié)構(gòu)ListViewClick
列表項目單擊事件TreeNodeClick
樹控件單擊事件TreeDragDrop
樹控件拖拽EntityRowClick
分錄行單擊事件:在單擊分錄行時設(shè)置菜單是否可用、刷新代理字段、重新計算等。AbstractBillPlugIn的ViewPlugin插件接口如何開發(fā)插件–接口結(jié)構(gòu)AbstractBillPlugIn的ModelPlugIn接口動態(tài)表單數(shù)據(jù)模型插件編程接口定義了數(shù)據(jù)模型擴展允許通過接口處理數(shù)據(jù),以實現(xiàn)特定業(yè)務需求如何開發(fā)插件–接口結(jié)構(gòu)CreateNewData
數(shù)據(jù)模型創(chuàng)建實體對象事件:插件自定義Model.DataObject數(shù)據(jù)包AfterCreateNewData
數(shù)據(jù)模型創(chuàng)建實體對象完成后事件:自定義設(shè)置字段默認值。BeforeUpdateValue
字段值更新前事件:需要在IDE選中“即時觸發(fā)值更新事件”屬性,對即將錄入的值做檢查DataChanged
數(shù)據(jù)改變后事件:需要在IDE選中“即時觸發(fā)值更新事件”屬性,字段值更新之后可能需要級聯(lián)觸發(fā)修改其他字段AbstractBillPlugIn插件方法如何開發(fā)插件–接口結(jié)構(gòu)CreateNewEntryRow
創(chuàng)建分錄行事件:插件自定義新增行數(shù)據(jù)包BeforeDeleteRow
刪除分錄行事件:校驗是否允許刪除AfterDeleteRow
刪除分錄后事件AbstractBillPlugIn插件方法如何開發(fā)插件–接口結(jié)構(gòu)列表插件接口繼承AbstractListPlugInIListViewPlugInIListModelPlugIn如何開發(fā)插件–接口結(jié)構(gòu)AbstractListPlugIn的ViewPlugIn接口序時簿視圖插件編程模型接口定義了序時簿視圖模型擴展允許通過接口處理視圖,實現(xiàn)特定業(yè)務需求如何開發(fā)插件–接口結(jié)構(gòu)ListInitialize
視圖模型初始化事件AfterGetData
完成取數(shù)后事件:在數(shù)據(jù)發(fā)送到前端之前觸發(fā),可對數(shù)據(jù)進行修改FormatCellValue
列表格式化接口:列表顯示,在獲取數(shù)據(jù)之后,數(shù)據(jù)發(fā)送到前端之前觸發(fā),用來格式化列表上的單元格數(shù)據(jù)AbstractListPlugIn的ViewPlugIn接口如何開發(fā)插件–接口結(jié)構(gòu)ButtonClick
按鈕和菜單單擊前事件AfterButtonClick
按鈕和菜單單擊后事件:按鈕點擊之后,實現(xiàn)按鈕點擊功能之后對界面進行控制,如:設(shè)置控件可用性、可見性,設(shè)置分錄焦點行等。CellDbButtonClick
單元格雙擊事件AbstractListPlugIn的ViewPlugIn接口如何開發(fā)插件–接口結(jié)構(gòu)AbstractListPlugIn的ModelPlugIn接口序時簿數(shù)據(jù)模型插件編程接口定義了序時簿數(shù)據(jù)模型擴展允許通過接口處理數(shù)據(jù),以實現(xiàn)特定業(yè)務需求如何開發(fā)插件–接口結(jié)構(gòu)PrepareFilterParameter
準備過濾條件:開單據(jù)列表之前,插件直接修改過濾條件及排序子句等內(nèi)容,篩選、處理數(shù)據(jù),列表顯示的時候顯示這些被篩選、處理過的數(shù)據(jù)CreateFilterEditorControl
觸發(fā)創(chuàng)建過濾條件控件事件BatchCopyData
復制單據(jù)事件:批量復制單據(jù)時,調(diào)整復制的單據(jù)主鍵或自定義復制的目標數(shù)據(jù)包。如果僅調(diào)整主鍵,那么平臺會根據(jù)新的主鍵值去加載目標數(shù)據(jù)包;如果定義了目標數(shù)據(jù)包,則平臺會直接使用。AfterBatchCopyData
復制單據(jù)完畢事件:插件對平臺加載的目標數(shù)據(jù)包再做修改、調(diào)整AbstractListPlugIn插件方法如何開發(fā)插件–接口結(jié)構(gòu)服務插件插件特性IOperationServicePlugin一般會附加校驗器運行于App層事務保護插件針對對象操作如何開發(fā)插件–接口結(jié)構(gòu)服務插件接口服務插件AbstractOperationServicePlugIn應用服務器插件與業(yè)務數(shù)據(jù)更新操作在一個事務執(zhí)行校驗器插件AbstractValidator在服務插件的OnAddValidators加入如何開發(fā)插件–接口結(jié)構(gòu)AbstractOperationServicePlugIn插件方法OnPreparePropertys
可以定制加載指定字段到實體里:在操作初始化之后,加載待處理的單據(jù)數(shù)據(jù)之前觸發(fā)。用于指定在加載單據(jù)數(shù)據(jù)時,需加載的字段。平臺將按需加載數(shù)據(jù)。OnAddValidators
添加自定義數(shù)據(jù)校驗器:在單據(jù)數(shù)據(jù)加載后,數(shù)據(jù)校驗前觸發(fā);用于注冊自定義的操作校驗器,增加校驗;或者移除預置的校驗器,避開校驗;如何開發(fā)插件–接口結(jié)構(gòu)AbstractOperationServicePlugIn插件方法BeforeExecuteOperationTransaction
執(zhí)行操作事務前事件:操作執(zhí)行前(事務外)事件,在數(shù)據(jù)檢查完畢,正式開始執(zhí)行操作前觸發(fā)。此事件在事務外,不受事務保護。通常將一些與數(shù)據(jù)更新無關(guān)的前期數(shù)據(jù)準備、修正,放在本事件中進行,以減少事務占用時間。BeginOperationTransaction
調(diào)用操作事件前觸發(fā)(支持事務):此事件在事務內(nèi),在此事件對數(shù)據(jù)庫進行更新,受事務保護。此事件適用于需要在操作前,基于原始數(shù)據(jù),對數(shù)據(jù)庫進行更新,并與操作保持在一個事務中的需求。比如刪除數(shù)據(jù)前級聯(lián)刪除相關(guān)記錄。EndOperationTransaction
調(diào)用操作事件完畢(支持事務):此事件在事務內(nèi),對數(shù)據(jù)庫進行的更新,受事務保護。此事件適合于在操作執(zhí)行完畢,單據(jù)數(shù)據(jù)已經(jīng)更改,需要基于更改后的數(shù)據(jù),進行其他關(guān)聯(lián)數(shù)據(jù)的處理。AfterExecuteOperationTransaction
執(zhí)行操作事務后事件:通常用于在操作完畢后,進行后續(xù)的處理,但因為操作的事務已經(jīng)提交,不能夠撤銷操作。如操作完畢后,給出提示信息。如何開發(fā)插件–接口結(jié)構(gòu)表單構(gòu)建插件繼承層次表單單據(jù)敘事簿基礎(chǔ)資料插件針對對象動態(tài)表單單據(jù)基礎(chǔ)資料如何開發(fā)插件–接口結(jié)構(gòu)AbstractDynamicWebFormBuilderPlugIn插件方法CreateControl
構(gòu)建界面元素事件AfterCreateControl
構(gòu)建界面元素后事件CreateMainMenu
構(gòu)建菜單事件AfterCreateMainMenu
構(gòu)建菜單后事件如何開發(fā)插件–接口結(jié)構(gòu)表單插件調(diào)用過程由控制器創(chuàng)建視圖、模型、插件代理初始化視圖、模型由插件服務注冊到插件代理插件代理初始化插件加載數(shù)據(jù),通知插件創(chuàng)建數(shù)據(jù),創(chuàng)建表單數(shù)據(jù)包表單操作插件服務調(diào)用代理,發(fā)送事件通知插件代理調(diào)用插件,執(zhí)行事件返回執(zhí)行結(jié)果業(yè)務插件插件調(diào)用過程業(yè)務插件插件調(diào)用過程如何開發(fā)插件–接口結(jié)構(gòu)動態(tài)語言支持IronPython腳本語言支持和C#交互調(diào)用事件接口和C#完全一致更加簡練明白概述業(yè)務插件概覽如何開發(fā)插件接口結(jié)構(gòu)插件中常用的對象說明具體的代碼示例案例演練目錄如何開發(fā)插件–常用對象View對象屬性this.View(View接口)this.View的常用屬性BillBusinessInfo(界面業(yè)務對象元數(shù)據(jù))LayoutInfo(布局元數(shù)據(jù))Model(動態(tài)表單模型接口)OpenParameter(頁面調(diào)用時傳入的參數(shù))方法GetFieldEditor(獲取界面控件對象)ShowMessage(顯示信息)如何開發(fā)插件–常用對象View對象更改界面控件狀態(tài)this.View.GetFieldEditor示例:
///
<summary>
///
設(shè)置金額列精度
///
</summary>
///
<paramname="iScale"></param>
///
<paramname="strField"></param>
private
voidSetColumnScale(shortiScale,stringstrField){
this.View.GetFieldEditor<DecimalFieldEditor>(strField,-1).Scale=iScale;}如何開發(fā)插件–常用對象View對象顯示信息this.View.ShowMessage示例:
if(e.CurParentId=="0"){
this.View.ShowMessage(“請先選擇頂層組織?!?;return;}如何開發(fā)插件–常用對象Model對象屬性this.View.Model(動態(tài)表單模型接口)This.View.Model的常用屬性DataObject當前對象的數(shù)據(jù)實體方法GetEntryCurrentRowIndex(獲取分錄當前行索引)GetEntryRowCount(獲取分錄行數(shù)量)CreateNewEntryRow(新建分錄行)GetValue(獲取字段(對象)值)SetValue(設(shè)置字段(對象)值)如何開發(fā)插件–常用對象Model對象獲取單據(jù)屬性:例如分錄集合this.View.Model.DataObject示例:
///
<summary>
///
獲取分錄集合
///
</summary>
DynamicObjectCollectionentrys=(DynamicObjectCollection)this.View.Model.DataObject["POOrderEntry"];如何開發(fā)插件–常用對象Model對象新增單據(jù)體分錄行this.View.Model.CreateNewEntryRow示例:
///
<summary>
///
單據(jù)復制完成事件
///
</summary>
///
<paramname="e"></param>
public
override
void
AfterCopyData(CopyDataEventArgse){
base.AfterCopyData(e);
//單據(jù)復制完,處理單據(jù)體
_billFormID=“”;
this.View.Model.CreateNewEntryRow(“FFieldControl”);
UpdateFieldControlRowLock();}如何開發(fā)插件–常用對象Model對象獲取字段值this.View.Model.GetValue示例:
//獲取根節(jié)點組織復制到目標節(jié)點
Organizationorg=(DynamicObject)
this.View.Model.GetValue("FRootORGID");targetRoot.id=rootOrgId;
targetRoot.text=org.Name.ToString();
targetRoot.children=new
List<TreeNode>();
ctl=this.View.GetControl<TreeView>("FOrgTree");
ctl.SetRootNode(targetRoot);如何開發(fā)插件–常用對象Model對象設(shè)置字段值this.View.Model.SetValue示例:///
<summary>///
字段修改事件函數(shù)重載
///
</summary>public
override
void
DataChanged(DataChangedEventArgse){
switch(e.Key.ToUpper()){
case
"FPARENTDEPTID":
//組織隸屬方案和上級部門變化,重新生成部門全稱
this.View.Model.SetValue(“FFullName”,GetFullName(e.Key));
break;}}概述業(yè)務插件概覽如何開發(fā)插件接口結(jié)構(gòu)插件中常用的對象說明具體的代碼示例案例演練目錄如何開發(fā)插件–代碼示例表單插件OnBillInitialize初始化事件BillInitializeEventArgs示例:
publicoverridevoidOnBillInitialize(BillInitializeEventArgse)
{
base.OnBillInitialize(e);
msgType=this.View.OpenParameter.GetCustomParameter("MessageType");
}如何開發(fā)插件–代碼示例表單插件AfterBindData綁定數(shù)據(jù)后事件示例:
publicoverridevoidAfterBindData(EventArgse)
{
base.AfterBindData(e);
DynamicObjectdy=this.View.Model.GetValue("FAccountBookID")asDynamicObject;
if(dy!=null&&!string.IsNullOrWhiteSpace(dy["Id"].ToString()))
{
DynamicObjectorg=dy["AccountOrgID"]asDynamicObject;
if(org!=null&&!string.IsNullOrWhiteSpace(org["Id"].ToString()))
{
this.View.Model.SetValue("FACCBOOKORGID",org);
}
}
}如何開發(fā)插件–代碼示例表單插件BeforeClosed綁定數(shù)據(jù)后事件BeforeClosedEventArgs示例:publicoverridevoidBeforeClosed(BeforeClosedEventArgse)
{ReturnData();
base.BeforeClosed(e);
}如何開發(fā)插件–代碼示例表單插件BeforeF7SelectBeforeF7SelectEventArgs示例:
publicoverridevoidBeforeF7Select(BeforeF7SelectEventArgse)
{
base.BeforeF7Select(e);boolsuccess=true;switch(e.FieldKey)
{case"FAccountOrg":e.ListFilterParameter.Filter=this.GetAccountOrgFilter(e.ListFilterParameter.Filter,outsuccess);break;case"FAccountBook":e.ListFilterParameter.Filter=this.GetAccountBookFilter(e.ListFilterParameter.Filter,outsuccess);break;
}e.Cancel=!success;
}如何開發(fā)插件–代碼示例表單插件ButtonClickButtonClickEventArgs示例:
publicoverridevoidButtonClick(ButtonClickEventArgse)
{
base.ButtonClick(e);switch(e.Key)
{case"FBtOK":
this.StartDeposit();break;default:break;
}
}如何開發(fā)插件–代碼示例表單插件DataChangedDataChangedEventArgs示例:
publicoverridevoidDataChanged(DataChangedEventArgse)
{
switch(e.Key)
{case"fdiffadjusttype":
case"fexpuniontype":SetEnableAndValue();
break;default:break;
}base.DataChanged(e);
}如何開發(fā)插件–代碼示例動態(tài)語言支持IronPython示例:from
System
import
StringComparison
def
DataChanged(e):
if
e.Field.Key.Equals("FIsTrans",StringComparison.OrdinalIgnoreCase):
#isTrans=clr.Reference[bool]()
isTrans=e.NewValue
if
isTrans==
False
:
this.View.Model.SetValue("FPriority",
0)
如何開發(fā)插件–代碼示例服務插件OnPreparePropertysPreparePropertysEventArgs示例:
public
override
voidOnPreparePropertys(PreparePropertysEventArgse)
{e.FieldKeys.Add("FAccountSystemEntry");e.FieldKeys.Add("FMainOrgId");e.FieldKeys.Add("FAcctPolicy");e.FieldKeys.Add("FDefAcctPolicy");
base.OnPreparePropertys(e);
}如何開發(fā)插件–代碼示例服務插件OnAddValidatorsAddValidatorsEventArgs示例:
public
override
voidOnAddValidators(AddValidatorsEventArgse)
{
SaveValidatorsaveValid=new
SaveValidator();saveValid.EntityKey="FBillHead";e.Validators.Add(saveValid);
SaveAuditValidatorsaveAcctValid=new
SaveAuditValidator();saveAcctValid.option=this.Option;saveAcctValid.EntityKey="FBillHead";e.Validators.Add(saveAcctValid);
}如何開發(fā)插件–代碼示例
privateclassSaveValidator:AbstractValidator
{publicoverridevoidValidate(ExtendedDataEntity[]dataEntities,ValidateContextvalidateContext,Contextctx)
{foreach(varacctindataEntities)
{AccountSystemdEntity=(AccountSystem)acct.DataEntity;if(dEntity==null)continue;foreach(varacctSysindEntity.AccountSystemEntrys)
{if(acctSys==null||acctSys.MainOrgId<=0)continue;if(!acctSys.AccountSystemDetails.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度養(yǎng)老護理機構(gòu)勞動合同終止及護理服務協(xié)議
- 2025年度施工現(xiàn)場安全責任認定協(xié)議
- 二零二五年度機關(guān)單位食堂員工激勵與保障合同
- 母公司對子公司2025年度管理費用審核及支付合同
- Unit 3 Writing Home Lesson 17 Danny's Email 同步練習(含答案含聽力原文無音頻)
- 2025年度餐廳員工勞務及餐飲企業(yè)員工績效管理合同
- 二零二五年度酒店培訓投資入股合同
- 2025年度綜合性托育園入托服務與營養(yǎng)膳食管理合同
- 恒豐銀行總行金融科技部2023年社會招聘7人參考題庫附答案解析
- 2025年曲靖年貨運從業(yè)資格證考試答案
- 2025年黑龍江職業(yè)學院單招職業(yè)適應性測試題庫附答案
- 《多樣的中國民間美術(shù)》課件 2024-2025學年人美版(2024)初中美術(shù)七年級下冊
- 家政講師培訓課件
- 2025年中國春節(jié)檔市場報告-拓普數(shù)據(jù)-
- 2025年山西省太原市衛(wèi)健委直屬單位招聘522人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 勞務合同協(xié)議書書
- 2024年西安電力高等專科學校高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 2024年牡丹江大學單招職業(yè)適應性測試題庫帶答案
- 統(tǒng)編版(2024新版)七年級下冊道德與法治期末復習背誦知識點提綱
- GB/T 44679-2024叉車禁用與報廢技術(shù)規(guī)范
- 人教版新起點(一年級起)二年級英語下冊教案全冊
評論
0/150
提交評論