1. 程式人生 > >EAS開發問題解決方案彙總

EAS開發問題解決方案彙總

做了快5年的EAS開發,遇到過的問題數不勝數,最近在幫新同事處理問題時發現好多問題是似曾相識的 ,現將這些問題及解決方法彙總下來,並不斷維護吧。

1.開發過程中往往會遇到某些欄位或表不存在的提示,而這些屬性確不是我們開發的,故不知道是那個表少屬性。

解決方案:

第一步:通過在com.kingdee.bos.sql.shell.KDPreparedStatement類裡的建構函式方法設定斷點,來抓出ksql、dialect_sql變數裡的sql語句。

第二步:將得到的語句在查詢分析器裡執行 看下 是否存在缺少的欄位,並看是哪個表少的欄位

2.新增一個物業管理的模組,在建立ui基類的時候發現一個問題,需要將序時簿中的引數通過上下文傳遞到editui中(例如:左樹右表的樹節點),實現方案如下:

重構listUI的prepareUIContext()方法,給上下文傳參即可

例如:

    protected void prepareUIContext(UIContext uiContext, ActionEvent e) {
    super.prepareUIContext(uiContext, e);
    uiContext.put(UIContext.PARENTNODE, SaleUnit);
    }

注:在editUI中需要在介面載入後才可獲得引數。

3.服務端提示:ShowInfo格式的友好提示
NumericExceptionSubItem interfaceException = new NumericExceptionSubItem(
     "", "不允許編制同一個物料XXXXXX");
throw new InterfaceDataBaseException(interfaceException);

4.儲存過程的執行參考案例:
       Connection conn = this.getConnection(ctx);
//呼叫XX儲存過程
    String sql="{call P_Archive_Demo_Exp(?,?,?)}"; 
CallableStatement cs = conn.prepareCall(sql);
cs.setString(1, projectid);
//改為根據單頭採購組織取數(問題清單2要求修改--需求人員餘潺)
cs.setString(2, purOrgUnitId);
cs.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
      Object rowSet=(Object) cs.getObject(3);
      if(rowSet instanceof OracleResultSet) {
        OracleResultSet rs = (OracleResultSet)rowSet;
        while(rs.next()) {
        String fmid=rs.getString("fmid");//物料ID
        String fcarno=rs.getString("fcarno");//跟蹤號
        BigDecimal fqty = rs.getBigDecimal("fqty");//定額
        }
        }

5.彈框控制邏輯:
UIContext uiContext = new UIContext();
    uiContext.put("id", id);
    uiContext.put("purOrgUnitId", purOrgUnitId);
    String uiClass = "com.kingdee.eas.industry.emm.scm.sm.client.FilePartBillDetailListUI";
    IUIWindow popUI = UIFactory.createUIFactory(UIFactoryName.MODEL).create(uiClass, uiContext, null, OprtState.VIEW);
    popUI.show();
    其中,如果彈出的ui介面不需要工具欄及最大化等按鈕,用UIFactoryName.MODEL引數
    目標介面中通過getUIContext().get("id") 獲取引數值

6.新增單據分錄按鈕新增框架方法,在開發一個單據中分錄的新增行刪除行按鈕簡便處理方式:
第一步,定義變數:
protected com.kingdee.eas.framework.client.multiDetail.DetailPanel kdtEntry_detailPanel = null;
第二部,新增DetailPanel到panel容器中,並重構initUIContentLayout()方法實現具體邏輯:
public void initUIContentLayout() {
super.initUIContentLayout();
kdtEntry_detailPanel = (com.kingdee.eas.framework.client.multiDetail.DetailPanel)com.kingdee.eas.framework.client.multiDetail.HMDUtils.buildDetail(this,dataBinder,kdtEntry,new com.kingdee.eas.scm.supmanager.supmanager_manager.supmana_mana04.QualityProblemNoticeEntryInfo(),null,false);
kDPanel1.add(kdtEntry_detailPanel, new KDLayout.Constraints(5, 15, 963, 218, KDLayout.Constraints.ANCHOR_TOP | KDLayout.Constraints.ANCHOR_BOTTOM | KDLayout.Constraints.ANCHOR_LEFT | KDLayout.Constraints.ANCHOR_RIGHT));
}

7.設定大文字控制元件(KDTextArea)滾動條的簡易方法,避免使用多語言的大文字控制元件:
第一步:定義KDScrollPane變數

protected com.kingdee.bos.ctrl.swing.KDScrollPane scrollPaneType;
第二步:重構  initUIContentLayout() 方法並實現給大文字新增滾動Pane的程式碼

public void initUIContentLayout() {
    super.initUIContentLayout();
scrollPaneType = new com.kingdee.bos.ctrl.swing.KDScrollPane();
conttype.setBoundEditor(scrollPaneType);
scrollPaneType.getViewport().add(txttype, null);
}

8.序時簿中獲取選中行中某單元格的值方法,例如獲取啟用狀態欄位來判斷是否可修改:
//String strid =getSelectedKeyValue();
int selectRows[] = KDTableUtil.getSelectedRows(tblMain);
String strStatus =ListUiHelper.getSelectedKeyValue(selectRows, tblMain, "deletedStatus");

9.序時簿 單據單頭行合併,重構 getMergeColumnKeys方法
public String[] getMergeColumnKeys()
{
return new String[] {"id","number""};
}

10.單據編輯介面修改,需要重新載入介面控制元件值(例如稽核時反寫後),此時不需要提示單據修改的提示
setOprtState(OprtState.VIEW);
setDataObject(editData);
loadFields();
setSave(true);
setSaved(true);

11.eas中editui設定出滾動條的方法:

第一步:在editui程式碼類中重構一下三個方法

public boolean useScrollPane() {
return true;
}

public int getVerticalScrollPolicy() {
return 20;
}


public int getHorizontalScrollPolicy() {
return 30;
}

第二部:在editui元資料中設定介面屬性:

設定CoreUI(panel)的preferredSize屬性的高寬等同於介面高寬

12.// 初始化預設過濾條件,true為開啟過濾框,false為預設不開啟過濾框
protected boolean initDefaultFilter() {
if (getUIContext().get("MyFilter") instanceof FilterInfo) {
return false;
} else
return true;
}

13.表格kdtable新增滑鼠右鍵顯示的excel匯出功能(元資料釋出的預設有,但是程式碼建立的表格需要呼叫下面方法):
coreUI類裡的addCommonMenusToTable(table)方法

14.服務端新增單據進工作流,(介面同步場景用)

案例程式碼如下:

WfEventListenerStateManager.getInstance().enableEventListener();  
ProjectDocBillFactory.getLocalInstance(ctx)
.submit(projectDocBillInfo);
 WfEventListenerStateManager.getInstance().disableEventListener();

15.根據單據id找到單據的相關資訊(實體,表,ui等)

BOSUuid id = BOSUuid.read(billId);
BOSObjectType type = id.getType();
IMetaDataLoader loader = MetaDataLoaderFactory.getRemoteMetaDataLoader();
EntityObjectInfo vo = loader.getEntity(type);
String editUi = vo.getExtendedProperty("editUI");

16.checkBox控制元件值改變時,如需要改為選擇前的值方法:

if(e.getStateChange()==2){
ObjOldValue =e.getItem();
}

int res = MsgBox.showConfirm2(this, "XXXXXXXX,請確認!");
if(res==0){
kdtFeeEntry.removeRows();
}else{
combApplyType.setSelectedItem(ObjOldValue,false);
combApplyType.setModel(comboPromGroup.getModel());
return;
}

獲取上下文中的資訊(當前登入人、當前公司等)

客戶端:SysContext.getSysContext().getCurrentUserInfo();

服務端:ContextUtil.getCurrentUserInfo(ctx);

17.程式碼中根據編碼規則獲取編碼的簡單實現

protected void recycleNumberByOrg(IObjectValue editData,String orgType,String number) {
        if (!StringUtils.isEmpty(number))
        {
            try {
            String companyID = null;            
            com.kingdee.eas.base.codingrule.ICodingRuleManager iCodingRuleManager = com.kingdee.eas.base.codingrule.CodingRuleManagerFactory.getRemoteInstance();
if(!com.kingdee.util.StringUtils.isEmpty(orgType) && !"NONE".equalsIgnoreCase(orgType) && com.kingdee.eas.common.client.SysContext.getSysContext().getCurrentOrgUnit(com.kingdee.eas.basedata.org.OrgType.getEnum(orgType))!=null) {
companyID =com.kingdee.eas.common.client.SysContext.getSysContext().getCurrentOrgUnit(com.kingdee.eas.basedata.org.OrgType.getEnum(orgType)).getString("id");
}
else if (com.kingdee.eas.common.client.SysContext.getSysContext().getCurrentOrgUnit() != null) {
companyID = ((com.kingdee.eas.basedata.org.OrgUnitInfo)com.kingdee.eas.common.client.SysContext.getSysContext().getCurrentOrgUnit()).getString("id");
            }
if (!StringUtils.isEmpty(companyID) && iCodingRuleManager.isExist(editData, companyID) && iCodingRuleManager.isUseIntermitNumber(editData, companyID)) {
iCodingRuleManager.recycleNumber(editData,companyID,number);
}
            }
            catch (Exception e)
            {
                handUIException(e);
            }
        }
    }

呼叫:

recycleNumberByOrg(editData,"NONE",editData.getString("number"));

18.服務端獲取上下文:ContextUtil.getCurrentUserInfo(ctx);

客戶端獲取上下文:SysContext.getSysContext().getCurrentUserInfo();

web端獲取上下文:

Context ctx =WafContext.getInstance().getContext();

UserInfo user = ContextUtil.getCurrentUserInfo(ctx);

相關推薦

EAS開發問題解決方案彙總

做了快5年的EAS開發,遇到過的問題數不勝數,最近在幫新同事處理問題時發現好多問題是似曾相識的 ,現將這些問題及解決方法彙總下來,並不斷維護吧。 1.開發過程中往往會遇到某些欄位或表不存在的提示,而這些屬性確不是我們開發的,故不知道是那個表少屬性。 解決方案: 第一步:通過

大快DKhadoop開發環境安裝常見問題及解決方案彙總

大快DKhadoop開發環境安裝常見問題及解決方案彙總 2018年度國內大資料公司排名50強本月初榜單釋出,榜單上看到大快搜索躋身50強,再看看他們做的DKHadoop發行版,的確還是蠻厲害的吧!最起碼這款DKHadoop用起來確實在易用性方面要更好!Dkhadoop版本的下載安裝以及執行環

移動端開發常見問題解決方案彙總- Javascript技巧(一)

1、安卓瀏覽器看背景圖片,有些裝置會模糊。 用同等比例的圖片在PC機上很清楚,但是手機上很模糊,原因是什麼呢? 經過研究,是devicePixelRatio作怪,因為手機解析度太小,如果按照解析度來顯示網頁,這樣字會非常小,所以蘋果當初就把iPhone 4的960640解析

Android開發錯誤——Android Studio中遇到過的錯誤問題與解決方案彙總

(1)編譯時發生Error:(25, 0) Gradle DSL method not found: 'compile()' Possible causes:<ul><li>The project 'AP' may be using a version

醫療健康行業移動互聯網app開發解決方案

預約 問題 .cn 移動互聯網 開發經驗 手機 春雨醫生 模塊 融合   線上醫療是以互聯網為載體和技術手段的醫患交流平臺,提供在線掛號、在線問診、和康復方案等多種形式的健康管家服務。   啟匯移動醫療專註於為醫院搭建醫患交流的平臺,拉進醫療機構與病患之間的距離,同時解決病

直播答題類APP成都麥魚科技的開發解決方案

個人 同時 想想 高並發 較高的 實現 技術 延遲 事件 直播答題APP應用請添加鏈接描述是互聯網+下的產物,它精準的抓住目標用戶需求,通過答題的方式來吸引用戶眼球,讓用戶的生活變得更加有趣,從而成為平臺的忠實粉絲。新年伊始,沖頂大會、芝士超人、百萬英雄、百萬贏家等多款同類

區塊鏈+互聯網_區塊鏈金融管理系統開發解決方案

記錄 加密 數據庫 創業公司 以及 安全 info 重要性 一個 區塊鏈+互聯網_區塊鏈互聯網金融管理系統開發 你可能聽說區塊鏈的概念和互聯網的出現一樣引人註目,一個比較客觀的說法是區塊鏈是一種存儲、讀取信息的新方法,其重要性就好比是三十年前的客戶端 / 服務器數據

虛擬幣交易平臺開發,成熟的虛擬幣交易平臺源碼開發解決方案

bsp 依然 算法 微軟 區塊 strong 別人 能夠 eight 虛擬幣交易平臺開發如今中國市場當中的山寨幣市場已經相當的廣大,可是還依然有許多的用戶對於這種投資感到十分的陌生。他們甚至是在懷疑這種投資方式究竟真的有用嗎?其實制作山寨幣有三的好處: 好處一:山寨幣制作出

前端模塊化開發解決方案詳解

暴露 可見 返回 異步加載 def 今天 htm 硬盤 業務邏輯 一、模塊化開發方案 前端發展到今天,已經有不少模塊化的方案,比如 CommonJS(常用在服務器端,同步的,如nodejs) AMD(常用在瀏覽器端,異步的,如requirejs)(Asynchronous

電商購物直播app開發解決方案詳解

分享 進入 發的 購物平臺 發出 阿裏巴巴 通過 出了 內嵌 最近有很多小夥伴咨詢電商直播app開發,在傳統的秀場直播競爭力逐漸下降的今天,“直播+”爆發出了無窮的“小宇宙”。在眾多“直播+”解決方案中,“直播+電商”是目前比較完善的解決方案,像阿裏巴巴旗下的淘寶直播,以及

瀏覽器相容性問題解決方案彙總

普及:瀏覽器的相容性問題,往往是個別瀏覽器(沒錯,就是那個與眾不同的瀏覽器)對於一些標準的定義不一致導致的。俗話說:沒有IE就沒有傷害。 貼士:內容都是自己總結的,不免會出現錯誤或者bug,歡迎更正和補充,本帖也會不斷更新。 Normalize.css 不同瀏覽器的預設樣式存在差異,可以

linux問題以及解決方案彙總

用於記錄科研實驗中遇到的關於linux方面的問題以及解決辦法 -bash: ./my_script: /bin/bash^M: bad interpreter: No such file or directory [duplicate] 執行sh指令碼去執行java程式時遇到

ScrollView預設位置不是最頂部解決方案彙總

描述: Scrollview裡面嵌套了一個listview ,這是開發中最尋常的一種佈局,遇到的問題是:在這個Scrollview頁面預設的起始位置不是最頂部,而是listview的底部。 原因: 在Activity計算視窗的高度時,是在listview沒有填充資料時候就完成

智慧交通管控系統平臺開發解決方案

參與 使用 之間 裝備 傳輸設備 能力 sta 範圍 交通事故 智慧交通是指在交通領域運用物聯網、雲計算、互聯網、人工智能、自動控制、移動互聯網等技術,通過高新技術匯集交通信息。以此對交通管理、交通運輸、公眾出行等等交通領域全方面以及交通建設管理全過程進行管控支撐。使交通系

智慧工廠管控系統開發解決方案

智慧化管控時代,隨著製造業轉型升級,智慧工廠管控系統能夠實現管理資訊系統與硬體裝置的無縫對接,真正使生產裝置自動化。 智慧工廠管理平臺集合“排產”與“生產排程”、線上質量控制、車間物料規劃與控制、生產過程追溯、視覺化過程監控和大資料分析等功能於一身,實現有效降低成本、提高生產效能、提升品質保證的目的。 智

智慧工廠能源監測管理系統開發解決方案

在2017年8月,×××公佈了首批55個“網際網路+”智慧能源(能源網際網路)示範專案。其中包括12個城市能源網際網路綜合示範專案、12個園區能源網際網路綜合示範專案。城市與能源,再次成為我國社會經濟發展的關鍵詞。但問題在於,當城市為了滿足我們對更高效率的渴望而日益龐大、複雜時,城市本身的效率卻在不斷下降。有

【html5】臘鴨Layaair2.0使用及問題解決方案彙總:不定期收集更新

最近,H5引擎提供商Layaair(臘鴨)更新了他們的引擎庫,版本2.0+。 這個版本剛出,BUG不少,官方文件也還處於在1.0階段。 很多東西到官網沒辦法查證,提問往往也是石沉大海,只好模石頭過河了。 現收集到的一些問題,可能以後官方會慢慢修復; (1)問題:新

Android之Android WebView常見問題及解決方案彙總

就目前而言,如何應對版本的頻繁更新呢,又如何靈活多變地展示我們的介面呢,這又涉及到了web app與native app之間孰優孰劣的爭論. 於是乎,一種混合型的app誕生了,靈活多變的部分,如淘寶商城首頁的活動頁面,一集凡客誠品中我們都可以見到web 頁面與native頁面

智慧小程式開發解決方案

今天主要分析瞭解小程式開發生態解決的方案,尤其技術分級解決的方案,和開發工具鏈。 小程式開發流程總覽 第一,如果有自己的小程式可以通過遷移工具一鍵轉換成智慧小程式。第二,使用第三方框架,應用層的架構上面,接入我們的三方框架。開發者在開發除錯之後,在開發工具上沒有問題,再

Jmeter自動化測試常見的問題解決方案彙總2018.12.21

一、如何解決response內容中文亂碼問題? 解決方案:新增一個BeanShell PreProcessor,然後在Script程式碼區域新增:prev.setDataEncoding("utf-8"); 如圖: 二、如何提取response中json格式的內容? 解決方案:在請求Samper,新增