亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

金蝶云星空k3cloud插件開發(fā)入門:從環(huán)境搭建到事件觸發(fā)

金蝶云星空k3cloud插件開發(fā)入門:從環(huán)境搭建到事件觸發(fā) 簡介本資源是一份面向K/3 Cloud初學(xué)者的BOS插件開發(fā)入門指南聚焦企業(yè)個性化業(yè)務(wù)擴(kuò)展場景系統(tǒng)講解插件開發(fā)環(huán)境搭建、四類核心插件動態(tài)表單、服務(wù)、校驗規(guī)則、表單構(gòu)建的定位與應(yīng)用以及BOS架構(gòu)模型與開發(fā)實(shí)操要點(diǎn)。文檔內(nèi)容覆蓋VS2012開發(fā)配置、SQL Server/Oracle數(shù)據(jù)庫要求、IIS與Silverlight客戶端適配、編譯路徑設(shè)置及插件注冊調(diào)試全流程并附有Hello World級代碼示例與關(guān)鍵配置注意事項。資源為單文件Word文檔.docx共1個文件大小1.9MB格式規(guī)范、圖文結(jié)合便于邊學(xué)邊練。目前已有216人學(xué)習(xí)下載適合零基礎(chǔ)開發(fā)者快速建立BOS插件開發(fā)認(rèn)知框架掌握從環(huán)境部署到簡單功能擴(kuò)展的完整能力鏈。1. 初學(xué)者為什么一上手 k3cloud 插件開發(fā)就卡在“連不上系統(tǒng)”和“改了代碼不生效”這不是你環(huán)境沒配好而是你還沒摸清 k3cloud 插件開發(fā)的底層契約它不是寫個獨(dú)立程序扔進(jìn)去就能跑的 Web 應(yīng)用而是一套深度嵌入金蝶云·星空k3cloud服務(wù)端生命周期的事件驅(qū)動式擴(kuò)展機(jī)制。插件本質(zhì)是 .NET Framework 4.5 編譯的 DLL必須通過 k3cloud 的「插件管理」界面注冊、啟用并由其宿主進(jìn)程K3Cloud.WebApi.exe 或 K3Cloud.ServiceHost.exe動態(tài)加載——這意味著本地調(diào)試不能靠 F5 啟動編譯輸出不能直接復(fù)制粘貼連日志都得去服務(wù)器上的K3Cloud\Logs目錄翻。我見過太多某高校實(shí)訓(xùn)班學(xué)員花三天配 IIS、裝 SQL Server、調(diào) CORS結(jié)果第一行Log.Info(插件已加載)死活不出現(xiàn)在日志里最后發(fā)現(xiàn)只是插件未在【系統(tǒng)管理】→【插件管理】里點(diǎn)“啟用”。本文不講抽象概念只拆解一個初學(xué)者能當(dāng)天復(fù)現(xiàn)、當(dāng)天看到日志、當(dāng)天觸發(fā)第一個業(yè)務(wù)事件的最小閉環(huán)從新建類庫項目開始到在單據(jù)保存時彈出自定義校驗提示。所有步驟基于 k3cloud V7.5 SP2 及以上版本實(shí)測適配當(dāng)前主流部署形態(tài)IIS SQL Server避坑點(diǎn)全部來自某公司內(nèi)部插件開發(fā)規(guī)范文檔與三年線上事故回溯。2. 用 Visual Studio 2019 創(chuàng)建可被 k3cloud 識別的插件項目k3cloud 對插件項目的結(jié)構(gòu)、引用、簽名有硬性要求。常見錯誤是直接新建 ASP.NET Web 項目或 .NET Core 類庫——這兩者在 k3cloud 宿主進(jìn)程里根本無法加載。必須嚴(yán)格使用 .NET Framework 類庫Class Library且目標(biāo)框架鎖定為.NET Framework 4.5.2V7.5 默認(rèn)最低支持版本高版本如 4.8 雖可運(yùn)行但部分反射 API 行為有差異不建議新手越級。2.1 新建項目并配置基礎(chǔ)屬性打開 Visual Studio 2019VS2022 對 .NET Framework 4.5.2 支持不穩(wěn)定生產(chǎn)環(huán)境仍推薦 VS2019執(zhí)行文件 → 新建 → 項目 → 模板Visual C# → 類庫 (.NET Framework) 項目名稱K3Cloud.Plugin.Demo 目標(biāo)框架.NET Framework 4.5.2提示項目名無需帶“K3Cloud”前綴但建議按K3Cloud.Plugin.[業(yè)務(wù)域]命名便于后期在插件管理界面識別。不要勾選“創(chuàng)建解決方案目錄”避免路徑嵌套過深導(dǎo)致發(fā)布失敗。創(chuàng)建后右鍵項目 → 【屬性】→ 【應(yīng)用程序】選項卡程序集名稱K3Cloud.Plugin.Demo默認(rèn)命名空間K3Cloud.Plugin.Demo程序集版本1.0.0.0后續(xù)升級需同步修改k3cloud 按版本號判斷是否覆蓋2.2 添加 k3cloud SDK 核心引用k3cloud 不提供 NuGet 包所有 SDK 引用必須從已部署的 k3cloud 服務(wù)器上提取。登錄運(yùn)行 k3cloud 的 Windows 服務(wù)器定位到以下路徑以默認(rèn)安裝為例C:\Program Files (x86)\Kingdee\K3Cloud\Server\Bin\從中拷貝以下 4 個 DLL 到本地開發(fā)機(jī)放入項目根目錄下新建的Libs文件夾文件名作用說明Kingdee.BOS.dllBOS 平臺核心提供元數(shù)據(jù)、上下文、服務(wù)總線訪問Kingdee.BOS.Core.dllBOS 核心邏輯含實(shí)體基類、服務(wù)契約定義Kingdee.BOS.App.Data.dll數(shù)據(jù)訪問層封裝含DBUtils、SqlBuilder等常用工具Kingdee.BOS.Contracts.dll服務(wù)契約接口定義如IInteractorService在 VS 中右鍵【引用】→ 【添加引用】→ 【瀏覽】→ 選擇這 4 個 DLL。關(guān)鍵動作選中每個引用 → 右側(cè)屬性窗口 → 將【復(fù)制到輸出目錄】設(shè)為“不復(fù)制”。k3cloud 宿主進(jìn)程會從自身 Bin 目錄加載這些程序集插件 DLL 中若包含副本會導(dǎo)致類型加載沖突System.TypeLoadException。2.3 編寫最簡插件入口繼承PluginBase并重寫OnInitializek3cloud 要求插件必須實(shí)現(xiàn)Kingdee.BOS.Core.DynamicPlugin.PluginBase抽象類。新建類DemoPlugin.csusing Kingdee.BOS.Core.DynamicPlugin; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.ConvertElement; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.Core.Metadata.ViewElement; using Kingdee.BOS.Core.Metadata.BusinessElement; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement......## 1. 初學(xué)者為什么一上手 k3cloud 插件開發(fā)就卡在“連不上系統(tǒng)”和“改了代碼不生效” 這不是你環(huán)境沒配好而是你還沒摸清 k3cloud 插件開發(fā)的底層契約它不是寫個獨(dú)立程序扔進(jìn)去就能跑的 Web 應(yīng)用而是一套深度嵌入金蝶云·星空k3cloud服務(wù)端生命周期的**事件驅(qū)動式擴(kuò)展機(jī)制**。插件本質(zhì)是 .NET Framework 4.5 編譯的 DLL必須通過 k3cloud 的「插件管理」界面注冊、啟用并由其宿主進(jìn)程K3Cloud.WebApi.exe 或 K3Cloud.ServiceHost.exe動態(tài)加載——這意味著本地調(diào)試不能靠 F5 啟動編譯輸出不能直接復(fù)制粘貼連日志都得去服務(wù)器上的 K3Cloud\Logs 目錄翻。我見過太多某高校實(shí)訓(xùn)班學(xué)員花三天配 IIS、裝 SQL Server、調(diào) CORS結(jié)果第一行 Log.Info(插件已加載) 死活不出現(xiàn)在日志里最后發(fā)現(xiàn)只是插件未在【系統(tǒng)管理】→【插件管理】里點(diǎn)“啟用”。本文不講抽象概念只拆解一個初學(xué)者能當(dāng)天復(fù)現(xiàn)、當(dāng)天看到日志、當(dāng)天觸發(fā)第一個業(yè)務(wù)事件的最小閉環(huán)從新建類庫項目開始到在單據(jù)保存時彈出自定義校驗提示。所有步驟基于 k3cloud V7.5 SP2 及以上版本實(shí)測適配當(dāng)前主流部署形態(tài)IIS SQL Server避坑點(diǎn)全部來自某公司內(nèi)部插件開發(fā)規(guī)范文檔與三年線上事故回溯。 --- ## 2. 用 Visual Studio 2019 創(chuàng)建可被 k3cloud 識別的插件項目 k3cloud 對插件項目的結(jié)構(gòu)、引用、簽名有硬性要求。常見錯誤是直接新建 ASP.NET Web 項目或 .NET Core 類庫——這兩者在 k3cloud 宿主進(jìn)程里根本無法加載。必須嚴(yán)格使用 .NET Framework 類庫Class Library且目標(biāo)框架鎖定為 **.NET Framework 4.5.2**V7.5 默認(rèn)最低支持版本高版本如 4.8 雖可運(yùn)行但部分反射 API 行為有差異不建議新手越級。 ### 2.1 新建項目并配置基礎(chǔ)屬性 打開 Visual Studio 2019VS2022 對 .NET Framework 4.5.2 支持不穩(wěn)定生產(chǎn)環(huán)境仍推薦 VS2019執(zhí)行 bash 文件 → 新建 → 項目 → 模板Visual C# → 類庫 (.NET Framework) 項目名稱K3Cloud.Plugin.Demo 目標(biāo)框架.NET Framework 4.5.2提示項目名無需帶“K3Cloud”前綴但建議按K3Cloud.Plugin.[業(yè)務(wù)域]命名便于后期在插件管理界面識別。不要勾選“創(chuàng)建解決方案目錄”避免路徑嵌套過深導(dǎo)致發(fā)布失敗。創(chuàng)建后右鍵項目 → 【屬性】→ 【應(yīng)用程序】選項卡程序集名稱K3Cloud.Plugin.Demo默認(rèn)命名空間K3Cloud.Plugin.Demo程序集版本1.0.0.0后續(xù)升級需同步修改k3cloud 按版本號判斷是否覆蓋2.2 添加 k3cloud SDK 核心引用k3cloud 不提供 NuGet 包所有 SDK 引用必須從已部署的 k3cloud 服務(wù)器上提取。登錄運(yùn)行 k3cloud 的 Windows 服務(wù)器定位到以下路徑以默認(rèn)安裝為例C:\Program Files (x86)\Kingdee\K3Cloud\Server\Bin\從中拷貝以下 4 個 DLL 到本地開發(fā)機(jī)放入項目根目錄下新建的Libs文件夾文件名作用說明Kingdee.BOS.dllBOS 平臺核心提供元數(shù)據(jù)、上下文、服務(wù)總線訪問Kingdee.BOS.Core.dllBOS 核心邏輯含實(shí)體基類、服務(wù)契約定義Kingdee.BOS.App.Data.dll數(shù)據(jù)訪問層封裝含DBUtils、SqlBuilder等常用工具Kingdee.BOS.Contracts.dll服務(wù)契約接口定義如IInteractorService在 VS 中右鍵【引用】→ 【添加引用】→ 【瀏覽】→ 選擇這 4 個 DLL。關(guān)鍵動作選中每個引用 → 右側(cè)屬性窗口 → 將【復(fù)制到輸出目錄】設(shè)為“不復(fù)制”。k3cloud 宿主進(jìn)程會從自身 Bin 目錄加載這些程序集插件 DLL 中若包含副本會導(dǎo)致類型加載沖突System.TypeLoadException。2.3 編寫最簡插件入口繼承PluginBase并重寫OnInitializek3cloud 要求插件必須實(shí)現(xiàn)Kingdee.BOS.Core.DynamicPlugin.PluginBase抽象類。新建類DemoPlugin.csusing Kingdee.BOS.Core.DynamicPlugin; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.ConvertElement; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.Core.Metadata.ViewElement; using Kingdee.BOS.Core.Metadata.BusinessElement; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement...... // ← 實(shí)際開發(fā)中請用 VS 的“智能提示”自動補(bǔ)全此處為示意省略 using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; namespace K3Cloud.Plugin.Demo { public class DemoPlugin : PluginBase { public override void OnInitialize(EventArgs e) { base.OnInitialize(e); // 插件初始化時執(zhí)行僅在宿主進(jìn)程啟動時調(diào)用一次 Log.Info(DemoPlugin 已加載版本 1.0.0.0); } } }邏輯說明OnInitialize是插件生命周期第一個鉤子k3cloud 啟動時掃描所有已啟用插件并調(diào)用此方法。Log.Info會輸出到K3Cloud\Logs\BosLog\下的日期文件中如BosLog_20240520.log這是驗證插件是否被識別的最直接證據(jù)。參數(shù)說明EventArgs e暫無實(shí)際用途但必須保留簽名否則編譯失敗。2.4 設(shè)置強(qiáng)名稱簽名必需否則注冊失敗k3cloud 要求所有插件 DLL 必須帶強(qiáng)名稱Strong Name。右鍵項目 → 【屬性】→ 【簽名】選項卡勾選【為程序集簽名】選擇【新建】→ 輸入密鑰文件名K3Cloud.Plugin.Demo.snk→ 取消勾選【使用密碼保護(hù)密鑰文件】生產(chǎn)環(huán)境可加但新手易因密碼輸錯導(dǎo)致編譯失敗生成后項目根目錄下會出現(xiàn).snk文件。此步不可跳過未簽名的 DLL 在【插件管理】界面上傳時會報錯 “程序集未簽名無法注冊”。3. 在 k3cloud 管理端完成插件注冊、啟用與日志驗證本地編譯只是第一步。k3cloud 插件必須經(jīng)由其 Web 管理界面完成注冊才能被宿主進(jìn)程加載。這個過程涉及權(quán)限控制、版本校驗和熱加載機(jī)制不能通過文件復(fù)制繞過。3.1 編譯輸出并定位 DLL 文件在 VS 中將解決方案配置設(shè)為Release目標(biāo)平臺為Any CPUk3cloud 宿主進(jìn)程是 32 位或 64 位取決于 IIS 應(yīng)用池設(shè)置Any CPU 可兼容。點(diǎn)擊【生成】→ 【重新生成解決方案】。成功后DLL 位于K3Cloud.Plugin.Demo\bin\Release\K3Cloud.Plugin.Demo.dll注意該 DLL 必須是Release 版本。Debug 版本因包含調(diào)試符號和優(yōu)化禁用在 k3cloud 宿主進(jìn)程中可能觸發(fā) JIT 編譯異?;蛐阅芨婢?.2 登錄 k3cloud 管理端上傳插件使用擁有【系統(tǒng)管理】權(quán)限的賬號如 admin登錄 k3cloud Web 端http://[服務(wù)器IP]/K3Cloud導(dǎo)航至【系統(tǒng)管理】→ 【插件管理】→ 【插件注冊】點(diǎn)擊【新增】按鈕【插件名稱】輸入演示插件 - 基礎(chǔ)版【插件編碼】輸入DEMO_BASE全大寫下劃線唯一標(biāo)識后續(xù)代碼中會用到【版本號】1.0.0.0必須與項目屬性中設(shè)置的程序集版本一致【描述】初學(xué)者插件開發(fā)驗證插件【文件】點(diǎn)擊【選擇文件】上傳K3Cloud.Plugin.Demo.dll【啟用】? 勾選關(guān)鍵不勾選則不會加載點(diǎn)擊【保存】。若出現(xiàn)紅色錯誤提示常見原因見后文「避坑」章節(jié)。3.3 重啟服務(wù)并驗證日志輸出上傳成功后必須重啟 k3cloud 服務(wù)才能加載新插件k3cloud 不支持純熱加載V7.5 SP2 后仍需重啟登錄 k3cloud 服務(wù)器打開【服務(wù)】services.msc找到并重啟以下兩個服務(wù)順序無關(guān)Kingdee K3Cloud Service HostKingdee K3Cloud Web API等待 30 秒打開日志目錄C:\Program Files (x86)\Kingdee\K3Cloud\Server\Logs\BosLog\找到最新生成的BosLog_YYYYMMDD.log文件用記事本或 VS Code 打開搜索關(guān)鍵詞DemoPlugin。若看到如下內(nèi)容證明插件已成功加載2024-05-20 14:22:38,765 [INFO] DemoPlugin 已加載版本 1.0.0.0提示日志時間是服務(wù)器本地時間非瀏覽器時間若搜不到先確認(rèn)服務(wù)是否真正重啟任務(wù)管理器看進(jìn)程是否存在、DLL 是否為 Release 版本、簽名是否生效用sn -vf K3Cloud.Plugin.Demo.dll命令驗證。4. 避坑初學(xué)者插件開發(fā)的 4 個高頻翻車點(diǎn)與血淚解法插件開發(fā)不是寫完代碼就結(jié)束k3cloud 的運(yùn)行時約束極強(qiáng)。以下問題均來自某公司內(nèi)部故障庫 Top 5每一條都對應(yīng)真實(shí)線上事故。4.1 現(xiàn)象插件注冊時提示 “程序集未簽名無法注冊”原因項目未啟用強(qiáng)名稱簽名或簽名后未重新編譯。.snk文件存在但項目屬性中未勾選【為程序集簽名】。解決右鍵項目 → 【屬性】→ 【簽名】→ 確認(rèn)勾選且密鑰文件路徑正確 → 清理解決方案Build → Clean Solution→ 重新生成。用命令行驗證sn -vf bin\Release\K3Cloud.Plugin.Demo.dll返回Public key token is ...即成功。4.2 現(xiàn)象日志中完全搜不到DemoPlugin但插件管理里顯示“已啟用”原因插件 DLL 編譯目標(biāo)框架高于 k3cloud 支持版本如用了 .NET 4.7.2或引用了 k3cloud Bin 目錄外的第三方 DLL如 Newtonsoft.Json導(dǎo)致宿主進(jìn)程加載失敗并靜默跳過。解決確認(rèn)目標(biāo)框架為 .NET Framework 4.5.2檢查引用屬性中【復(fù)制到輸出目錄】均為“不復(fù)制”刪除所有非 k3cloud SDK 的引用插件內(nèi)禁止使用HttpClient、RestSharp等網(wǎng)絡(luò)庫需用BOS提供的WebApiService。4.3 現(xiàn)象修改代碼后重新生成、上傳、重啟服務(wù)日志仍是舊內(nèi)容原因插件管理界面中【啟用】狀態(tài)未重新勾選或上傳時未更換版本號k3cloud 按版本號判斷是否覆蓋同版本號不會替換文件。解決每次修改后必須在【插件管理】中① 取消勾選【啟用】→ 保存 → ② 再次編輯 → 修改【版本號】如1.0.0.1→ 重新上傳 DLL → 勾選【啟用】→ 保存 → 重啟服務(wù)。4.4 現(xiàn)象插件能加載但自定義事件如單據(jù)保存完全不觸發(fā)原因未在插件類上添加[Kingdee.BOS.Core.DynamicPlugin.DynamicPluginAttribute]特性或特性中FormId值拼寫錯誤大小寫敏感、多空格、少下劃線。解決在DemoPlugin類聲明上方添加特性示例見下一章FormId必須與 k3cloud 中實(shí)際表單 ID 完全一致可通過【系統(tǒng)管理】→ 【表單管理】中查看。5. 讓插件真正干活監(jiān)聽采購申請單PUR_PurchaseApply保存事件并彈窗校驗光有OnInitialize只能證明插件“活著”要體現(xiàn)業(yè)務(wù)價值必須綁定具體業(yè)務(wù)事件。k3cloud 提供AbstractOperationServicePlugIn和AbstractBillPlugIn兩類擴(kuò)展基類初學(xué)者推薦從AbstractBillPlugIn入手——它專為單據(jù)Bill設(shè)計封裝了DataChanged、BeforeSave、AfterSave等標(biāo)準(zhǔn)鉤子語義清晰不易出錯。5.1 繼承AbstractBillPlugIn并指定監(jiān)聽表單新建類PurchaseApplyValidator.csusing Kingdee.BOS.Core.DynamicPlugin; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.ConvertElement; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.Core.Metadata.ViewElement; using Kingdee.BOS.Core.Metadata.BusinessElement; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; using Kingdee.BOS.Core............ // 同上用 VS 智能提示補(bǔ)全 using Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; namespace K3Cloud.Plugin.Demo { [Kingdee.BOS.Core.DynamicPlugin.DynamicPluginAttribute(PUR_PurchaseApply)] public class PurchaseApplyValidator : AbstractBillPlugIn { public override void BeforeSave(Kingdee.BOS.Core.DynamicPlugin.Args.SaveArgs e) { base.BeforeSave(e); // 獲取當(dāng)前單據(jù)主表數(shù)據(jù)采購申請單頭 var head this.Model.DataObject as Kingdee.BOS.Core.Metadata.BusinessElement.BusinessObject.BusinessObject; if (head null) return; // 獲取申請日期字段值字段名需與表單實(shí)際一致 var applyDate head[FApplyDate] as DateTime?; if (!applyDate.HasValue) throw new Exception(申請日期不能為空請?zhí)顚懞蟊4?; // 獲取申請人FApplicantId并校驗是否為當(dāng)前用戶 var applicantId head[FApplicantId] as long?; var currentUserId this.Context.UserId; if (applicantId ! currentUserId) { throw new Exception(申請人必須為當(dāng)前登錄用戶請檢查單據(jù)信息); } } } }邏輯說明[DynamicPluginAttribute(PUR_PurchaseApply)]告訴 k3cloud 此插件只對采購申請單表單 IDPUR_PurchaseApply生效BeforeSave在單據(jù)點(diǎn)擊【保存】按鈕、數(shù)據(jù)寫入數(shù)據(jù)庫前觸發(fā)適合做強(qiáng)校驗。throw new Exception(...)會中斷保存流程并在 Web 端彈出紅色提示框這是 k3cloud 內(nèi)置的錯誤處理機(jī)制。參數(shù)說明SaveArgs e包含保存上下文但初學(xué)者無需深究重點(diǎn)是this.Model.DataObject它代表當(dāng)前正在操作的單據(jù)數(shù)據(jù)對象所有字段通過字符串鍵如FApplyDate訪問。5.2 表單字段名怎么查別猜用官方方式確認(rèn)k3cloud 所有字段名Field ID均以F開頭但具體拼寫必須與系統(tǒng)一致。錯誤示例把FApplyDate寫成FApplydate或F_ApplyDate會導(dǎo)致取值為null。正確查法三步登錄 k3cloud → 【系統(tǒng)管理】→ 【表單管理】搜索“采購申請單”點(diǎn)擊右側(cè)【設(shè)計】按鈕在表單設(shè)計器中選中任意字段如“申請日期”→ 右側(cè)屬性面板 → 查看【標(biāo)識】屬性值即 Field ID提示某公司內(nèi)部規(guī)范要求所有自定義字段也必須以F開頭因此FApplyDate是標(biāo)準(zhǔn)命名。若查不到該字段說明你打開的是舊版表單或權(quán)限不足。5.3 重新編譯、上傳、啟用實(shí)測校驗效果按第 3 章流程重新生成項目確保PurchaseApplyValidator.cs已加入編譯上傳新 DLL 到【插件管理】版本號改為1.0.0.1啟用插件并重啟服務(wù)登錄 Web 端 → 新建一張采購申請單 → 故意清空【申請日期】→ 點(diǎn)擊【保存】預(yù)期結(jié)果頁面不跳轉(zhuǎn)頂部彈出紅色提示框“申請日期不能為空請?zhí)顚懞蟊4妗彬炞C技巧若未彈窗先檢查日志中是否有BeforeSave相關(guān)異常堆棧再確認(rèn)DynamicPluginAttribute中的表單 ID 是否拼寫正確最后確認(rèn)該單據(jù)是否處于【編輯】狀態(tài)只讀單據(jù)不會觸發(fā)BeforeSave。6. 進(jìn)階技巧用Log記錄結(jié)構(gòu)化調(diào)試信息快速定位業(yè)務(wù)邏輯問題Log.Info是插件開發(fā)的“后悔藥”。很多初學(xué)者只在OnInitialize里打一行日志等業(yè)務(wù)邏輯出錯時才發(fā)現(xiàn)無從下手。真正的調(diào)試能力在于讓每條日志自帶上下文、可過濾、能回溯。6.1 日志分級與結(jié)構(gòu)化輸出k3cloudLog類支持Debug/Info/Warn/Error四級。初學(xué)者應(yīng)養(yǎng)成習(xí)慣Log.Debug僅開發(fā)期使用記錄變量值、分支路徑上線前應(yīng)關(guān)閉或降級Log.Info記錄關(guān)鍵節(jié)點(diǎn)如“單據(jù)保存開始”、“校驗通過”Log.Warn記錄非致命異常如“申請人ID為空跳過校驗”Log.Error記錄catch中的異常必須帶ex.ToString()public override void BeforeSave(SaveArgs e) { try { Log.Info($【PUR_PurchaseApply】BeforeSave 開始單據(jù)ID: {this.Model.DataObject[FID]}); var head this.Model.DataObject as DynamicObject; if (head null) { Log.Warn(【PUR_PurchaseApply】DataObject 為空跳過校驗); return; } var applyDate head[FApplyDate] as DateTime?; Log.Debug($【PUR_PurchaseApply】申請日期值: {applyDate?.ToString(yyyy-MM-dd) ?? null}); if (!applyDate.HasValue) { Log.Error(【PUR_PurchaseApply】申請日期校驗失敗拋出異常); throw new Exception(申請日期不能為空請?zhí)顚懞蟊4?; } } catch (Exception ex) { Log.Error($【PUR_PurchaseApply】BeforeSave 異常: {ex.ToString()}); throw; // 重新拋出保證前端可見 } }關(guān)鍵點(diǎn)每條日志開頭加【表單ID】標(biāo)簽便于用文本工具如 VS Code 的搜索批量過濾Debug日志用ToString(yyyy-MM-dd)格式化時間避免null報錯Error日志必須包含完整ex.ToString()否則堆棧丟失。6.2 日志文件管理與快速檢索k3cloud 默認(rèn)按天生成日志但BosLog_YYYYMMDD.log文件可能達(dá)百 MB。某公司內(nèi)部實(shí)踐推薦場景推薦做法日常調(diào)試用 PowerShell 實(shí)時監(jiān)控Get-Content C:\Program Files (x86)\Kingdee\K3Cloud\Server\Logs\BosLog\BosLog_$(Get-Date -Format yyyyMMdd).log -Wait -Tail 10問題回溯將日志復(fù)制到本地用 VS Code 打開 →CtrlShiftH全局搜索【PUR_PurchaseApply】生產(chǎn)環(huán)境禁用Log.Debug將Log.Info級別日志單獨(dú)輸出到PluginDemo.log需自定義Log4Net配置超出本文范圍6.3 一個血淚教訓(xùn)永遠(yuǎn)不要在BeforeSave里寫數(shù)據(jù)庫 INSERT/UPDATE曾有某開發(fā)者為記錄校驗日志在BeforeSave中直接調(diào)用DBUtils.Execute插入一條日志表。結(jié)果導(dǎo)致事務(wù)嵌套失敗——k3cloud 的單據(jù)保存本身就是一個大事務(wù)插件內(nèi)再啟事務(wù)會破壞一致性輕則報錯重則鎖表。正確做法用Log記錄如需持久化改用 k3cloud 提供的BusinessDataService提交異步任務(wù)或在AfterSave中通過this.Context.Session獲取已提交的單據(jù) ID 后再操作。我?guī)н^的某高校實(shí)訓(xùn)班學(xué)員90% 的第一版插件都在BeforeSave里手寫 SQL然后卡在事務(wù)死鎖上三天。后來我們定下鐵律插件內(nèi)禁止任何INSERT/UPDATE/DELETE所有數(shù)據(jù)操作走 BOS 服務(wù)。這看似限制實(shí)則是幫你避開金蝶底層最黑的黑匣子。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久草大香蕉| 日骚逼视频| 色网亚洲人| 久久精品一区二区三区四区五区| 亚洲综合97中文网| 91天美免费| 色图综合| 久99视频| 中欧人妻丝袜中文字幕 | 久九9精品| 国产 日韩,欧美 自拍| 男女激情黄色网址| 欧美亚洲清纯| 国产精品久久久久久片| 精品中文一区二区| 日韩Va亚洲va欧美Ⅴa久久| 色老汉色| 国产成年精品高清在线观看91| 九久9热| 亚洲天堂另类| 免費黃色視頻觀看一| 伊人991| 中文AV制服乱伦| 久久超碰爱| 亚洲一区二区三区婷婷| 五月丁香| 人人妻人人爽一区二区三区| 少妇超碰在线| 综合影院永久入口国产| 欧美精品99久久久| 精品人妻一区二区三区视频在线| 免费久久精品麻豆一区二区av| 夜夜做夜夜爽精品视频| 97久久超碰| 9久久久久| 在线女人91| 国产在线视视频有精品| 精品夜夜澡人妻无码AV| 久久久精品国产亚洲伊人| av天堂电影网| 91美乳| www.99色| 动漫av中文| 国产高清成人mv在线观看| 超碰69| 国产成人精品亚洲日本| 日韩猛交| 啊啊啊啊二区好大| 大香蕉免费中文| 亚洲成人免费电影| 狼人综合婷婷激情四射 | 白嫩妹子国产骚| 任你干在线视频| 亚洲第91页| 亚洲诱惑| 色综合 加勒比| 亚洲老司机123专区| 日韩人妻精品久久久久| 日本午夜精品理论片A级APP发布| 在线免费观看日韩一区| 亚欧高清v| 天天干天天做| 99热精品国产| 超碰是碰在线观看| 91精品人妻一区二区三区蜜桃| 屁股久久久久久| 综合网 欧美| 东北毛片| 狠狠中文字幕| 亚洲一区二区三区久久 亚洲一区二区| 久操九九九九| 久久久999国产精品| 久久久555| 亚洲天堂男人天堂| www.91理论| 亚洲操人| 欧美色图 人妻| 久久久一二三四区| a v网站在线播放| 凹凸视频特色日本特黄| 精品四五区| 九一精品牛牛一区二区| 啊啊啊操死我了| 蜜臀久久99精品久久久久久无删减 | 97亚洲国产影视| 欧亚日韩三区| 外国免费性情大片| 久久精品欧美一区二区三区不卡| 国内自拍 日韩激情 99| 亚洲麻豆精品二区三区| 天天澡天天爽日日av| 欧美青青草视频| 蜜臀久久99精品久久久久久酒店| 强奸乱伦中文字幕AV| 五月婷婷激情网| 国产欧美第五页| 亚欧美综合网。| 97aiaiai| 久久久久9| 欧美性爱一内片一区二区三区| 夜夜操一区二区| 9丨久久九九九| 少妇3P性爱自拍| 久热这里| 玖玖超碰熟| 国产老太乱伦一区| 91九色精品熟女内射| av午夜玫瑰| 亚州高清AV| 探花一区二区三| 熟女在线视频| 嗯嗯啊好爽| 国产偷拍自拍在线视频| 亚洲国男人的天堂| 又黄又硬又粗又长国产视频| 91超碰人人操| 啊啊啊啊啊啊啊啊要喷了| 操逼日批| 亚洲男人天堂网久久| 97精品一二区| 高清不卡国产| 色偷综合| 夜夜免费视频| 亚洲午夜蜜臀| 蜜桃传媒视频第一区入口在线看| 无马一区二区| 久久老女人| 午夜福利国产欧美日韩夜夜| 国产无马视频| 亚洲精品无码成人久久久99| 亚洲日韩精品一区视频在线| 国产亚洲精品玖玖玖在线观看| 国产精品麻豆视频网站| 久久久久久AV无码免费网站| 91N欧美| AAA久久| 六月丁香五月婷婷| AND人妻系列| 色老汉色| 97久久天天综合色天天综合色电影| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 中文字幕国产| 激情干在线| 久热婷婷| 久久久久ab| 超碰地址97| 久久99999| 99re在线视频这里只有精品| 大二网站亚洲| 亚洲欧美激情在线视频| 色噜噜综合在线| 97香焦色区| 今日头条成人一区二区三区四虎精品| 综合色久欲| 久草看看看| 翔田千里A片一区二区| 91AV入口| 欧美性生活综合| 国产天天骚| 亚洲精品蜜桃久久久一区二区三区| 午夜性| 蜜臀一二三区| 男人午夜天堂| 丰满人妻av一区二区三区| 五月天久久久| 无码高清操逼网址| 日本三级日本三级99| 久久人妻丝袜一区二区三| 日逼五月天| 国内毛片四区| 国产亚洲国产超碰| 精品人妻一区春色| 久9re热视频这里只有精品| 国产福利av精彩对白| 91在线视频免费中出| 日韩特一级久久| 中文字幕丰满子伦无码专区在线视频最新| 国产亚洲精品美女久久久m| 亚洲 综合 欧美| 高清肉丝中文无码| 91丨九色丨国产丨人妻在线| www.91色综合| 东京热伊久| 国产狂喷潮在线精品| 免费精品99| 久湿久久 | 3571色综合一区二区二区| 欧美另类自拍 | 日本 免费 一区二区三区 久久香蕉| 国产精品69久久久久孕妇欧美| 97在线视频免费| 中文字幕av乱伦| 伊人久久蜜月| 人妻干天天| 91oumei| 色偷综合| 精品一区二区综合熟妇| 99re9这里只有精品| 91综合网站| 99热99在线| 亚洲鸥美色图| 把腿张开老子CAO烂你| 欧美少妇性乱| WWW.操逼.COM| 99热97| 亚洲精品国产拍免费91在线| 亚洲精品三| 中文字幕一区二区三区蜜桃视频| 2019久久久久久久久福利| 99热综合| 亚洲 无码 偷拍| 色婷婷综合网站| 亚洲 欧美 综合 91| 亚洲免费成人在线高清无码视频| 视频二区熟女人妻| 全免费a敌肛交毛片免费| 欧美国产有色电影| 99re69综合| 久久超碰网| 国产一区96在线| 97欧美视频| 六月丁香啪啪啪| 水滴偷拍| 久久天天摸| 国产9区| 色穴精品| 岛国大片在线观看网站入口| 99精品丰满人妻无码| 人人操人人摸人| 久久 久久国内精品亚洲| 美女国产一区二区久久| 蜜汁欧美| 69AV女优男人的天堂| 高清国产精品福利网站| 99青青草国产视频| 白天啪啪晚上啪啪视频| 成人区人妻精品一| 熟妇视频一区二区三区在线观看| 大香蕉视频一二三区| 97bbn| 午夜精品五区| 少妇久久久久久久久| 蜜桃中文字日产乱幕4区| 大香蕉一区二区在线观看.| 亚洲吊色| 天天插天天插| 激情抓乳插进去啪啪啪日韩 | 丁香五月婷婷五月| 精品欧美А∨无码黑人大荫蒂| 97色操| 香港日本韩国人妇99www.wccm20| 日本免费中文一区二区三区四区| 老熟女乱子伦中文字幕一区二区| 欧美熟女丝袜| 日韩一区二区精品视频| 亚洲日韩电影| 校园春色宗合网| 日本精品成人无码| 岛国免费视频在线| 日天天九九天堂666| 91扒丝袜综合在线| 8050午夜少妇无码| 日韩免费在线视频观看| 精品无码秘 人妻一区二区| 亚洲图片偷拍欧美| 韩国国产欧美情侣视频在线| 爆乳免费黄网站| 日韩无码专区| 激情综合五月丁香| 久久精视频美日韩在线视频| 无码人妻精品一区二区中文| 免费人成毛片乱码| 国产精品乱码久久| 久久这里只精品| 牛牛久久国产精品视频一二三| 欧美色棕合| 欧美网站免费| 婷婷操逼| 天天干干天天干干| 亚洲图片欧美| 免费日韩黄片| 女生看匆91网站| 五十路六十路七十路熟婆| 999国产精品999| 日韩欧美丝袜诱惑| 成 人 A V免费视频在线观看| 5278欧美一区二区三区| 久草在| 午夜小电影在线插入淫高潮| 涩涩五月天| WWW美腿丝袜香蕉中文| 日韩免费在线视频观看| 97色视频在线| 青青伊人这里只有精品| 超碰久在线天天做| 人妻中文在线| 欧美色视| 欧美日韩222| 国产无码三级视频在线观看| 精品国产网站| 操人人| 欧美日韩国产男人| 福利操逼| 韩国毛片一区二区三区| 亚洲熟女中文字幕在线| 欧美激情 亚洲色图| 色婷婷五月天| 色色毛片| 亚洲日产专区婷婷| 大色综合网| 天美麻豆一区二区三区| 久草精品热视| 99精品欧美一区二区三区桃色| 性爱欧美五月| 3p国产欧美99热| 精品九区| 亚洲永久永久永久永久一级一级一级精品| 欧美另类精品xxxx| 97碰久久| 日本熟妇色熟妇在线视频播放| 久久久国产亚洲精品系列| 呦女网站| 大胆91| 97在线视频观看| av午夜玫瑰| 密乳AV免费观看| 色哟哟av网址| 天天爽天天操| 国产丝袜欧美在线视频| 国产一区二区三区久久精品太古里| 免费精品人妻一区二区三| …中文字幕亚洲乱,97人妻无码费视… | 男人天堂网址| 亚洲色悠悠久久88| 五月天婷婷色| 小日子操bb在线看| 射久久| 日日噜噜夜夜久久亚洲一区二区 | 亚洲综合五月天| 国产亚洲色停停久久99精品91| 精品无码人妻一区二区免费蜜桃| 天美传媒国产原创中文字幕亚洲欧美另类 | 欧美性爱中文字幕无线码| 青青操在线视频| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 天天射天天色成人| 91视频成人福利网站在线一区| A片 AV一级在线播放观看免费 | 日本三级日本三级三级人妇四虎| 日本在线不卡v二区| 伊人天天久久动态图| 欧美性视频二区三区| 混色激情av| 久久久久国产精品片区无码直播 | 亚洲天堂第一页| www.久久久久| 亚洲情色中文字幕一区| 欧美成年人性爱视频免费观看| 精品二区三四区五电影 | 精品视频一区二区| 综合97久久| 久操操| 91在线美女| 成人av免费观看| 欧美色性爱| 大学生口爆吞精| 欧美91精品国产自产| 天天天做天天天爱天天天爽| 亚洲色图伊人网| 亚洲精品天天影视综合网 | 色官网色综合| 国产Av超碰| 97在线免费观看视频| 美女爽到高潮91| 肉丝无码中文高清| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 婷婷五月天色网| 精品人妻一区二区三区夜夜| 亚州色图狠狠干| 熟女丰满人妻一区| 日韩二级| 亚洲综合影片| ai欧美亚洲小说| 无码视频一区二区| 2017超碰| 72av视频| 美女久久久| 蜜臀99久久精品久久久久| 老熟女91视频| 综合久久久久久久久91| 黄片无码在线制服| 色墦五月丁香| 中文字幕视频在线观看一区二区| 午夜精品久久久久久久99热影院| 蜜臀99999| 强奸熟女一区二区三区| 99re这里只有精品2| 亚洲图片 欧美电影| 熟妇人妻精品一区二区| 思思视频免费看网站| 国产91啪| 婷婷啪啪| 欧美精品91| 久久高清无码夜夜操| 欧美啪啪啪91| 操逼操逼操| 巨爆乳一区二区爆乳区| 久久露脸国产老熟女| 久久天堂婷婷网| 欧美综合第一| 97国产精品久久久久| 少妇高潮一区二区三区在线| 97在线观看免费视频| 囯戸精品高潮呻吟旡码| 国产小u女在线观看| 91网站18在线观看| 欧美精品三区| 久久久久久久性爱| 国产精品久久久久无码A√| 日韩免费看黄片| 欧美色棕合| 天天日天天屌天天操| 综合网少妇| 收看日本人日bb| 色综合网1| 九九热男人天堂| 中文字幕第23区| 天天综合-91入口| www.久久最新地址| 亚洲中文字幕有码视频一区二区三区| 97久久国产亚洲精品超碰热| 国产呦精品系列在线观看| 亚洲精品天堂久久A∨51成人漫| 精品一区二区三区蜜桃臀赵总| 绑缚麻绳人妻寝取完整版| 综合色区偷拍| 超碰成人最新最好看| 台欧久久精品视频| 另类欧美色| 人妻81p| 偷拍欧美激情| 久久精品国产亚洲粉嫩| 黄色一级视| 97精品97| 国产无码精品成人| 操狠狠| 久久久亚洲精品中文字幕人妻| 久久国产免费激情视频| 91女神在线视频| 99re黄 | 91激情国产| 日韩操p| 青青国产精品在线| 9丨久久九九九 | 久久久亚洲精品中文字幕人妻| 污污汅18禁网站在线永久免费观看| 精品精品精品| 亚洲 欧美 色图| 久久久精品国产亚洲AV无码| 九九九热精品| 亚洲第一黄色av网站| 国内操逼视频二区| 免费的黄片有限公司| 伊人97色天使| 成人免费视瓶| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 91黑人狂躁丰满熟妇| 九九内射在线| 神马麻豆福利院 | 欧美Ⅴ性爱| 神马视频久久久久久| 中文字幕三四五区| 成人女人国产| 国产久久成人| 欧美激情久久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 色阁阁AV综合网| 国产精品激情久久久久久久| 狠狠干2020| 国产伦乱91| 天天综合~91| 日本狠狠干| 91超碰在线| 精品乱子一区二区三区99| 操逼逼一区视频| 久久大陆| 人妻少妇色综合| 97久久精品| 欧美综合在线91| 免费伦费视频在线观看| 日本精品加勒比海一区| 一本一道人妻久久一区二区三区| 色波多| 神马久久69| 韩国一级做A片免费的| 狠狠中文字幕| 国产精品粉嫩福利在线| 婷婷综合视频| 久久久久亚洲AV无码专区少妇| 久久亚洲天堂| 亚洲天堂另类美腿| 十八禁的黄污污免费网站| 天天影视91看看| 亚洲综合在线高清| 无码自拍SM| 又大又大又大又粗爽高潮观看| 国产乱人妻精品入口| 无码国产精品午夜不卡(| 中文字幕欧美丝袜07资源| 亚洲欧洲色情高清| 91狠| 精品毛片久久久精品毛片| 大香蕉中文| 蜜乳av一区二区三区四区不卡| 日韩精品99999| 欧美另类精品xxxx| 麻豆久久一区二区三区| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 91M一社| 一区二区三区蜜桃成人撸久久东京热 | 日本理论在线| 久久受www免费人成| 亚洲欧美在线丝袜| 碰人碰碰人人开房人肉| 97国产天堂岛| 玖色AV| 色噜噜人妻丝袜a∨先锋影| 欧美裸体美女日麻屄| 久欲AV| 亚洲AV无码久久精品蜜桃小说| 亚洲午夜AV| 美女午夜福利免费视频| 午夜男女爽爽爽影院视频| 天美av在线| 亚洲伊人久久精品影院| 免费看污网站| 97精品国产97久久久| 欧美精品日韩一区二区| 日本操BAV| 人人艹亚洲| 欧美大香蕉久| 波多野结衣AV无码一区| 99热在线观看| 精品一区二区三区丰满熟女-亚洲欧美一区| 青青草久久在线| 97超碰免费人人性爱| 伊人色综合超碰| 美女尤物福利视频| 超碰日本97美女人妻人人玩人人爱| 动漫爆乳3D奶水一区在线观看| 国产成人亚洲精品无码古代早漏男| 国产精品久久天天干| 久久久97| 国产1024在线播放| 日本性感人妻91| 国产偷人伦激情在线观看| 极品白嫩美少妇在地板上位骑射淫水泛滥| 亚洲丝袜在线观看| 91天天综合日韩欧美| 中文字幕三四五区| 超碰午夜| 亚洲熟女精品| 亚洲中文国际强奸字幕| 综合欧美日本三级| 亚洲久热| 日韩天堂av电影在线观看| 麻豆AV一区二区| 亚洲 图片 欧美 色图| 亚洲av总站| 夜夜嗨绯色| 九一国产精品| 青娱乐黄色录像| 亚洲97| A一区片| 国产AV激情无码久久无码 | 91麻豆一二三区| 国产黑白丝在线| 欧美成97爱| 精品视频在线观看| 岛国大片国产| 中文激情网| 国产人妻精品久久久一区二区三区 | 性交一区二区在线播放| 中文字幕一二三av| 欧美18老人禁| 91人妻尻屄视频| 日本在线一二 | 激情五月天中文字幕色| 天天插夜夜操| 狠狠操狠狠爱| 啊啊啊啊二区好大| 亚洲同性aV综合| a片自拍直播视频| 成人性爱美曰韩| 加勒比大香蕉视频在线| 蜜臀99999| 麻豆一区二区三区在线看| 亚洲国产精品无码AV久久| 在线免费观看日韩一区| 欧美亚洲日韩人妻在线观看| 黄色无码高清黄色无码网站| 国产日逼视频| 好吊妞转入那个网| 精品国产久久乱码| 欧美在线91| 日韩性爱电影一区| 2019天天操天天爽天天拍| 深夜激情| 国产成人欧美一区二区三区的国产| a网站免费观看| 老熟妇综合| 亚州色综合| A片三级无码| 玖玖资源中文字幕制服丝袜| 久久99国产精品| 久干9操| 亚洲中文字幕乱码无码一区二区| 青青草原香蕉日本Ap| 日韩成人在线性爱视频| 夜夜中出国产| 男人天堂新在线| 国人欧美精品一区二区| 日日夜夜噜| V A在线| 啊啊啊好爽快点啊啊啊嗯嗯| 久草成人影片| 人人摸人人干人人拍97| 日夜干射色啊| 秋霞免费无码视频日韩A片 | 国语对白露脸XXXXXX| 九九热精品| 天天欧美97| 99热只有这里有精品| SUV一区二区在线看| 欧美熟妇成人一区二区| 色女网日韩| 色吧91| 国产av尤物| 天堂性色| 看日韩美女二区三区免费操逼视频| 日本久久久精品电影| 国产精品香蕉热久久新品| 久久久禁| 一区二区三区 日韩欧美| 97碰碰日本乱偷人妻中文的| 日韩无码三级影院| 99黄页网站| 岛国视频免费在线观看| 美女让帅哥通她小鸡鸡| 久久香蕉综合一本到3atv| 亚洲欧洲激情| 色色色色综合网| 国产91 丝袜在线播放| 人妻少妇久久久| 亚州综合色| 夜夜操夜夜爽夜夜高潮| 一区不卡在线观看av| 日韩人妻精品中文字幕| 1024人妻熟女一区二区三区| 欧美色亚洲色| 男人天堂2019亚洲| 一中国女人毛片水真多| 99抽插| 国产福利小视频高清在线观看| 9ⅰ久久久天天| 一块操欧美| 麻豆天美在线| 搡老女人老妇女老妇老熟女怎么读| 老司机福利青青草| 久久久99999久网站| 亚洲色图欧美视频| 天天肏天天干| 大香网伊人久久综合网eew| 美女国产一区二区久久| 四方色播| 最新av在线| 国产视频一区二区免费| 啪啪啪亚欧美视频| 日本一天色道久久久精品视频| www.99中文字幕| 日天天九九天堂666| 超碰久久中文| 青娱乐国产盛宴视频| 人妻少妇精品无码专区二区密桃| 日本大片日本一区二区免费高清| 日日操免费视频| 日韩欧美久久婷婷网站| 在线 亚洲 网爆 自拍| 久久精品国产亚洲AV无码电影| 97视频免费播放| 蜜臀色乳| 校园春色之综合网| 高清无码 国产精品| 久久久久久久9| 精品美女久久一二三| 1024香蕉视频| 久久一区二区高清免费| 国产深喉视频一区二区| 九9精品| 欧美色图偷拍另类| 丁香九月婷婷| 国产精品免费美女视频| 自拍内地三级在线观看| 日本Suv精品一区二区| 久污| 白丝少妇一区二区| 欧美成人9797| www.超碰在线| 亚洲成人福利电影免费| 一区操逼| 国产视频人人网| 成人无码欧美一级A片狼牙直播| 二三四区精品| 禁十八久久| 欧美午夜精品久久久久久超碰| 亚洲色图殴美色图激情乱伦| 中文字幕高清精品一区| 97久久网| 欧美色图91| 欧美综合色图片| 亚洲九九视频在线观看| 夜夜嗨绯色| 国产农村妇女精品1区二区| 97精品国产97久久久久久| 国内精品久久久久影院亚洲| 国产精品免费日韩| 国产精品一区av在线| av亚欧| 天天肏天天干| 国产日本一区二区三区蜜臀在线观看| 91蜜臀人妻中文字幕在线| 青青草久久| 蘋果手機免費看成人Av| av一区二区三区四区五区久草臀| 天天综合影院91| 国产精品九9| 91女神在线视频| 丝袜内射| 美女毛片999| 久久久久亚洲精品| 中文字幕综合人妻| 国产成人精品午夜福利| 夜夜综合| 久久AV无码网址| 婷婷91| 久久艹逼视频| 国模精品一区二区三区苹果色戒| 国产亚洲禁久一区二区| 亚洲欧洲国产综合av| 国模精品一区二区三区苹果色戒 | 狠狠操天天干| 猛交交| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 啪啪AV导航| 天天操天天干一区二区| 亚洲无吗在线视频| 欧美中文狠| 99www.bibizy香蕉资源国产一区二区三区高清 | 亚洲素人网| 人妻无码一区二区三区久久99| 狠狠操狠狠燥| 欧美日韩久久精品爱爱| 女人精品内射国产99| 中文字幕美女91| 久久美女国产| 婷婷九月色| 天天肏美女| 加勒比海成人视频网| 破处bbq| 火箭成精品视频884必出精品| 精品九九| 夜嗨影院| 麻豆 欧美 日韩| 久久国产精品熟女人妻| 日韩BBN| 天天色图| 国产精品久久久久久久毛片1| 婷婷五月天影院| 91黑丝少妇| 本道在线| 亚洲 欧美 日韩 国产一区二区| 免费超碰97在线观看| 大香蕉久久| 欧美亚洲日韩16色| 揉揉日日日日| 免费精品中文字幕| 国产11页| 日本性一区| 在线视频亚洲无码| 亚洲欧美日韩夜夜| 91成人在线| 欧美一区二区| 久草网站免费在线观看| 美女黄页| 欧美综合综合| 99久久久er直播网址| 九久9热| 久久蜜桃一区二区| 少妇无码av专区线| 无码99| 亚洲天天自拍| 亞洲久久直播| 91骚妇| 97干97色| 日本天天色| 熟妇激情| 久久久久久久伊人精品| 色蜜AV| 96国产精品| 国产精品久久久久亚洲av| 午夜激情床戏激情| 欧美日韩欧美| 九九性爱网| 日韩久草| 中文字幕日韩电影人妻| 97综合在线观看| 四虎影视精品| 五月丁香激情综合网| julia ann久久| 国产精品成人福利在线| 大香蕉啪啪啪啪在线| 无码一区免费在线不卡| 91爱综合| 另类天堂| 超碰人人乐97| 日本久久超碰| 色噜噜狠狠色综无码久久合欧美| 小电影欧美91| 视频分类 国内精品| 色亚州人久干视频在线观看免费版| 熟妇xxxxx性春色| 在线视频一区二区传媒| 搡老女人911熟妇老熟女| 97爱免费插| 精品综合久久久久久五月天| 理论久久婷婷网 8| 人妻丝袜一区二区三区在线| 人妻AV在线| 殴美色网| 91oumei| 97在线视频观看| 国产天美欧美| 国产午夜精品理论片a大结局| 神马久久久久眼| 日韩操啪| 国产精品久久久九九九| 中文字幕精品日韩中文字幕| 亚州乱码中文字幕综合久久久| 乱伦日本中文自拍| 操死我了嗯嗯嗯| 久久久精品无码亚免费| 久操免费电影| 欧美综合骚| 日韩欧美操逼xxx| 欧美精品三区| 亚洲午夜av| 99无码| 久久国产对白激情浪潮| 久久久亚洲欧美综合| 日韩无码服务区| 97香焦色区| 老司机天天操| 日本免费二区三区| 国模限制级电影| 欧美日韩黄片精品在线| 精品白丝一区| 色噜噜综合在线| 特级特黄一级毛片免费| 色偷偷综合91久久噜噜| 国模一区二区三区| 不卡av在线中文字幕| 啊啊在线| 9999伦理视频| 无码抄逼网| 亚洲欧美一区二区网址| 久操| 九九热免费在线国产视频伊人五月| 久久毛卡| 97啪啪| 干妹子| 操B久久| 亚洲成人网站在线观看| 午夜人人操| 97在线播放| 无码视频一区二区| 婷婷久久综合| 成人性爱视频在线看| 欧在线一二区| 亚洲天堂电影网| 99999精品视频| 91人妻Pr| 少妇啪啪自拍| 97精品国产| 97在线精品观看视频| 日韩无码第3页| 午夜后入| 欧洲中文字幕| 久热这里| 囯产乱伦一区二区三女| 成人五级久久| 美女诱惑一区| 一本一道久久综合久久| 神马久久啊啊| 色月天AV导航| 婷婷五月天补不补| 日韩成人大片一区二区| 国产人妖的免费的视频| 狠狠爱综合网| 青青青在线高清视频在线一二三四区| 超碰97久久国| 黄呦呦在线| 精品人妻一区二区三区-国产精品| 欧美黄色片AAAAA| 乱伦Av网| 巨爆乳一区二区爆乳区| 富女玩鸭子一级毛片| 国产丝袜啪啪| 精品少妇高潮久久| 玖玖大干人妻| 色哟哟AV| 久久久一区二区| 狠狠做深爱婷婷久久二区| 欧亚不卡| 九九久久99| 99热精品青草在线 | 神马久久久久久久| 青青草好吊色| 国产伦精品| 97精品在线视频| 91精品人妻一品二品三品| 老鸭窝成人| 91老妇女| 色淫网站优优视频| 神马麻豆福利院| 91制服丝袜中文字幕| 后入国产| 狠狠爱综合网| 熟妇综合一区二区三区| A 天堂| 翔田千里Av在线| 国产精品毛片?v一区二区三区| 亚洲成人性爱网站在线播放| 国模私拍一区二区三区神乳| 韩三级a视频在线观看| 国产精品福利视频播放| 欧美色视频在线| 国产 无码 一区二区| 人人射人人操人人摸| 欧美99热| 骚货人妻偷情自拍在线视频| 尻女朋友一夜| 亚洲大色堂| 国产精品久久久久久夜夜夜夜| 97精品视频在线播放| 97视频播放| 亚洲人妻在线精品| 天天谢天天干| 国产日韩欧美三级片| 韩日精品四区| 成人综合网 欧美| 成人精品欧洲亚洲| 欧美色97| 一区二区三区免费视频入口| 91深夜夜| 超碰99在线观看| 毛片17S| 人妻少妇久久中文| 久久精品国产亚洲av水密被窝| 五月婷亚洲精品天堂| 大香蕉视频一二三区| 国产 三级自拍| 日本久久久久久久久| 超碰人妻中文在线| 人妻夜爽夜夜爽| 97精品一区二区视频| 插日本熟女视频| 91大胆欧美| 亚洲鸥美色图| av激情亚洲五月天| 综合久久六月久久婷婷| 日韩人妻资源在线看| 今日头条成人一区二区三区四虎精品| 久久久久久免费电影| 试看日韩黄片| 婷婷亚洲五月***久久| 丰满少妇一区二区三区四区观看| 一区二三区四区视频大全套| 蜜臀久久99精品久久久| 亚洲精品啪视频| 美日韩一卡二卡三卡免费人妻精品| 97超碰总站| 国产精品人妻无码久久久互動交流 | 91女在线观看| 男人天堂无码| 黄色片一区二区三区四区五区| 五月天婷婷影院| 国产麻豆一区二三区| 91人妻人人澡人人爽人人精品| 我要看免费韩日黄片| 欧美亚洲成人在线一区二区三区| 亚洲天堂久久久久久粉红视频| 极品白嫩美女白浆成人福利在线看| 亚洲日韩青青草色月| 天天噜| 91狠狠综合久久久久久| 亚洲人码13| 以及麻豆国产入口在线观看免费| 日韩三级一区 | 长长久久88视频| 超碰在线成人电影| 国产AV精久久| 国产极品久久久| 国产精品ww久久| 五月婷婷综合网| #NAME?| 色久桃花影院在线观看| 老熟女熟妇| av黄图片在线观看| 97WW精品| 亚洲天堂男人天堂网| 色999;丁香五月| 久久久性少妇| 日韩不卡a级视频专区| 日日妻色网| 岛国免费黄色网址| 91网站18在线| 国产精品ⅴ无码大片在线看.| 嗯嗯,啊啊,国产精品| 久久久人妻| 久久久久成人蜜桃精品| 久久精品超碰| 色婷婷激情| 亚洲天堂资源在线| 九九亚洲| 999精品久久久久久久| 欧美日韩999| 日本欧美不卡| 99这里只有精品| 97天天综合| 丝袜夫妻自拍| 日本在线观看网址| 国产精品午夜成人福利| 国产亚洲精品精AV.| 少妇500双飞99| 日本日逼高清| 加勒比色综合| 乱老女人一区二区视频| 国产精选视频| 日韩av女优在线免费一区| 午夜精品久久一区二区| 欧美中文字幕一区 | 青青草在线成人视频| 三级日韩一区二区三区| 亚洲情色在线| 国产人妖视频一区在线观看| 色97综合中文字幕| 人妻AV在线| 精品九九| 亚洲涩涩| 激情看片网站| 青青色在线观看| 少妇69中文| 强奸乱伦av电影| 男女啊啊啊啊啊| 91人妻丝袜无码| 日韩图区 偷拍| 老司机福利社视频在线观看| 男人的天堂啪啪| 99亚洲国产精品色一区二区三区| 97频视在线| 色色色99| 亚洲国产成人精品久久久国产成人一区二区 | 97久久超碰日韩精品| 亚洲 中文 女同| 国产精品美女久久久久AⅤ国产馆| 区自美91| 香蕉99秘 精品一区丁香| 18禁精品网站在线看| 这里只有97精品| 97大色网| 噜噜吧,噜噜色,噜噜| 天天上日日上日韩精品| 91美女国产在线| 花野真衣| 黄色网址在线免费观看| 久久精品熟妇丰满人妻99| 亚州色图欧美| 在线 制服丝袜中出 人妻| 欧美一区二区三区四区综合| 久热大香蕉网站| 久草久热| 亚洲中文字母在线播放| 中文字幕在线观看网址| 欧美高潮| 区一在线观看| 日韩一级片| 人人艹亚洲| 亚洲91在线| 亚洲91射| 亚洲中文字幕乱码无码一区二区| 欧美精品久久久久久久久88| 国产在线观看一区二区三区| 91中出在线| 美女黑人91神马| 九九热免费国产视频婷婷伊人五月| 日韩欧美一级特黄大片| 永久电影三级在线观看| 99色热| 91/欧美| 夜夜爽妓女| 无码99| 欧美视频边做饭边橾| 国产亚洲日韩欧| 黑人综合网| 国产激情在线| 亚洲人人夜夜澡人人爽| 超碰97网址| 在线观看十八禁| 99视频在线| 91干熟女| 亚洲午夜福利视频| 黄色片,com| 粉嫩av平台| 久久超碰97| 熟女91网站| 97人人夜| 男人的天堂三级| 国产精品久久久久久夜夜夜夜| 成人色女网| 国产日韩精品一区二区三区| 超碰午夜| 伊人网高清| 久9九综合在线| 精品无码少妇| 日本亚洲嫩草影院啪啪| 麻豆区久久久久亚| 99热18这里只有精品| 九九九九九九九九九五码| 鸥美精品一区二区久久婷婷| 日韩99神马视频播放片在线播放| 99精品热| 婷婷大香蕉| 五月天激情小说| 精品久久久久久亚洲| 东京热亚洲一区二区| 91粉芽高清在线一区二区| 久久九九99| renqi久久久久久久久久久久| 婷婷色在线| 大香蕉啪啪啪| 狠狠色综合网| 综合五月天| 蜜臀av在线播放一区二区三区| 日韩欧美视频青青| 精品国产乱码久久久久久久久1 | 欧美老妇女内射网址| 久久女同性恋一二区| 亚洲天堂电影网| 玖色av| 狠狠91|