反饋已提交
網絡繁忙
本文介紹填報範本製作和預覽時,常見的問題及解決方案。
相關文檔連結:
填報常見報錯程式碼
填報常見效能問題
Excel匯入常見問題
正文域元件在選中部分文字後按 Enter+Ctrl ,選中的文字會消失,且無法使用 Ctrl+Z 回退。
原因分析:
選中文字後輸入新值或換行,選中值會被改寫清空,屬於正常現象。
正文域元件在輸入換行顯示的內容後,點選提交發現資料庫中的資料未顯示換行。
正文域元件中的換行效果支援提交入資料庫中,但在資料庫中並不顯示。
解決方案:
當把資料欄位拖入範本中預覽即可看到換行效果
正文域元件內容較多,提交入庫時發現有部分資料未入庫。
內容過多超過 Web 伺服器的限制
更換上傳方式或分批上傳。
儲存格設定了「用HTML顯示內容」,當初始內容為空時,手動填寫或者JS指派HTML內容時,儲存格無法正常展現HTML樣式。
當儲存格初始為空時,該儲存格即使設定了「用HTML顯示內容」,也不會被標記為HTML顯示。因此在後續指派時,不會有HTML效果。
可以在儲存格中輸入一個空格作為預設值,確定儲存格初始化時有內容。
主範本設定了JS監聽事件,但無法監聽到網頁框裏的頁面。
主範本的監聽事件只能監聽到主範本的元素,對網頁框頁面無效。
在網頁框的頁面中加上同樣的監聽事件。
網頁框元件地址欄中的範本名稱如果帶有空格,預覽出現報錯:1130004
V8.7 及之後版本不支援此功能。
當填報時存在主鍵時,即做修改操作,提交成功後卻只保留了一個值;填報時不存在主鍵時,即做新增操作,提交成功後資料庫則會錄入多筆資料。
希望「下拉複選框元件」多選值提交後,能在一筆資料中正確顯示多個值。
可參考 複選元件多值入庫不正確。
儲存格下拉樹選擇值後填報,入庫資料異常增多。
下拉樹元件值在轉化為儲存格值的時候,會丟失層級,分號會統一變為逗號,所以入庫時會作為多筆資料入庫,造成異常。
儲存格下拉樹目前不支援提交入庫。
當範本設定了跟隨資料擴展的按鈕元件,且資料量較大時,由於按鈕元件渲染速度較慢,所以就會造成頁面載入緩慢。
可參考 按鈕元件過多導致填報頁面載入慢。
使用 _g().appendReportRow(this.options.location, this.options.reportIndex,0) 插入 0 行時,無法觸發條件屬性重新計算。
11.0.5版本(2022.05.20)開始,取消了條件屬性的二次計算,只有頁面真的插入行時,才會重新計算條件屬性。
插入刪除行時,頁面卡頓,瀏覽器當機。
插入刪除行時,整個頁面的公式和行高列寬需要重新計算,如果公式複雜,或者用到了sql()等取數函式,就可能導致頁面載入緩慢。
可以在範本預覽 url 後增加 async_insert=true 參數,開啟插入行頁面非同步載入。
插入行並修改後暫存,使用自訂按鈕實現提交,但提交後重新整理頁面出現空白行。
自訂按鈕的提交不會清空暫存,所以重新整理後出現問題。
在自訂按鈕的提交設定的回呼函式中寫入js清空暫存後再重新整理。
_g().clear(undefined, false);setTimeout(function() {location.reload();}, 1000)
點選元件插入行,範本會重新整理。範本重新整理時,getWidgetByName 找不到元素。兩者結合,若點選插入行,範本正好重新整理則報錯。
衡量範本中為什麼有頻繁定時操作,是否確實需要,可考慮去掉頻繁定時。
在填報聯動,插入刪除行,資料校驗,資料提交時,出現公式結果和預期不一致。比如下圖所示,想要統計A1擴展格中不為0的資料個數,初始預覽正常,但是修改A1某個值後,count公式的結果就出現了問題。
在填報聯動,插入刪除行,資料校驗和資料提交時,會對頁面相關公式進行重計算,而陣列函式,層次座標和條件篩選函式是不支援重計算的,所以會出現一些結果和預期不一致的問題。
根據實際場景將陣列函式,層次座標,條件篩選轉化為一般的公式。可參考:插入刪除列後公式失效。
刪除行按鈕中設定了提交入庫的事件,偶發出現刪除失敗和資料錯位的現象。
原因分析
刪除行動作和刪除提交動作的順序不是固定的,當順序相反時就會出現問題。
解決方案
用普通按鈕設定提交事件,在回呼函式中用JS刪除行。具體可參考記錄填報操作中2.2的設定方式。
填報時彈出警告資訊:「停止運作此腳本嗎?此頁面上的腳本造成 Web 瀏覽器運作速度減慢。如果繼續運作,您的計算機將可能停止回應。」如下圖所示:
彈出如上對話框有兩種原因:
1)範本中包含大量公式。
2)另一種是範本中有大量用於填報的元件。
解決方案一:安裝修復包
微軟官方針對該問題提供了修復包,下載後直接安裝即可,點選下載修復包:jb51-MicrosoftFixit50403.rar
解決方案二:優化範本
1)將所有公式在編輯介面開啟,取消預設勾選的「填報/分析時,保留公式用於計算」,如下圖所示:
2)將需要填報的資料單獨查詢出來,這些資料綁定元件進行填報,其他資料不綁定元件,直接在儲存格中展示,這樣可以大大減少元件的數量,如下圖所示:
將填報範本分為兩部分:「填報部分」和「展示部分」,這兩部分的結構都是一樣的。
填報部分:設定元件,並透過參數過濾出需要修改的那條記錄
展示部分:沒有元件,不用過濾,顯示出全部記錄
參數部分:隱藏查詢按鈕,在下拉框中新增「編輯後事件」,實現自動查詢,詳細介紹參見文檔:JS 實現無需點選查詢按鈕即可自動查詢
3)減少元件的另一種方法,如下圖範例,資料全部展示出來,在產品編號上新增超連結,需要修改該記錄時,點選超連結到另外一張範本單獨進行填報修改。
填報中使用了 now() 和 UUID() 等公式,提交後入庫的資料跟前端顯示的資料不同。
填報時使用了層次座標 ,提交後入庫的資料跟前端顯示的資料不同。
now() 和 UUID() 等公式提交時都會重新計算一遍,因而入庫後資料會改變。
填報二次計算時不支援層次座標。
新增範本參數 p ,參數值為公式 now(),設計範本時儲存格新增公式 $p,報表填報屬性設定提交時列對應的值設定為參數 $p,即可完美的解決該問題,UUID 同理。
對於包含層次座標的複雜嵌套公式,需要在公式編輯介面將「填報/分析時,保留公式用於計算」取消勾選,避免二次計算。
範本修改或者填寫資料後,在未提交的情況下關閉頁面,沒有提示「有資料未提交」。
原因分析:以下幾種場景不支援觸發該設定:
匯入Excel後未填報或修改過資料
決策平台內開啟填報範本並進行填報
使用動態參數重新整理頁面
填報頁面被嵌入在了其他頁面中
在填報場景中使用round函式計算時,可能會出現數位的精度問題,例如公式=round(1.9999,2)的頁面顯示計算結果為2,但是在填報入庫時,填入的卻是1.9999。
在小數位較多的情況下,round函式如果只有2個參數的話,會有精度不準確的問題,需要新增第三個參數true來解決。
新增第三個參數true,就可以解決填報時精度不準確的問題。例如:=round(1.9999,2,true)
在範本各種JS事件或者範本訊息插件設定介面中,呼叫公式時,無法獲取到最新填報的值。
11.0.5 版本前,公式獲取的為初始值,不支援實時獲取預覽後填報的值。
使用JS API獲取需要的值,例如 _g().getCellValue()、_g().parameterEl.getWidgetByName().getValue()等。
填報資料後,儲存格形態未生效。
原因分析:可能性比較多,可以依次排查以下幾點:
使用了資料字典-資料集,對應資料集sql中不能存在參數
使用了資料字典-公式或者公式形態,則只支援獲取擴展儲存格的第一個值。例如公式形態寫=A1,則獲取的始終是A1擴展出的第一個值
使用了資料字典-公式或者公式形態,則需要排查使用到的值是字串還是陣列類型,不同類型處理方式有所差異,可能會導致問題
問題描述二:
填報分頁後重新查詢,頁面停留在之前頁數。
產品設計的正常邏輯。
在載入結束事件裏用 _g().gotoPage(1) 跳轉第一頁。
在填報預覽時,圖表不展示,被轉換成了string形式。
常見的排查步驟如下:
1)JAR 包環境排查,確定設計器與伺服器的 JAR 包是否一致。
2)插件環境排查,確定是否有衝突的插件。
3)圖表變為字串排查,有可能是圖表在填報暫存下儲存為字元。
在範本 Web 屬性中填報頁面設定下勾選直接顯示元件後
如果元件初始化後事件中使用到 getWidgetByname,getWidgetByCell 等API會有報錯:CustomJSError:Cannot read properties of undefined
直接顯示元件載入要比 JS 事件觸發慢導致的。
給 JS 事件加延時,等元件載入完了,再執行程式碼就不會報錯了
初始化事件中嵌套一個延時函式試試,延時函式中不能用 this,需要外面定義好,程式碼如下:
var th=this;setTimeout(function() { 你的程式碼;(你程式碼的this換成th)}, 500
用 Widget.setValue() 給儲存格元件指派異常,但是用_g().setCellValue()直接給儲存格指派就正常。
給存在元件的儲存格指派時,需要使用儲存格指派語句,而不能使用元件指派語句。
範本預覽時,偶發出現部分或者所有元件顯示為config type cannot be null。
範本設定了自訂的JS重新整理頁面,同時又在該JS或者其他初始化/載入結束事件中定義了JS獲取相關元件。此時由於網路請求先後的不確定性,就可能出現獲取元件的JS在頁面未重新整理完成的情況下就執行了,這時候由於獲取不到元件而報錯。
為獲取元件的JS增加延時,確定頁面載入完畢後再執行獲取元件的語句。如下圖所示:
決策報表填報,在填報屬性設定介面中,使用了資料集函式(value,ds1.select,ds1.find,ds1.group),提交後發現相應公式未正確執行,導致提交資料異常。
決策報表填報屬性設定介面,不支援資料集函式,使用時相關函式的回傳值為空。
將資料集函式設定在一個正文元件中進行計算,並在填報屬性中直接引用該正文元件獲取計算後的值。
火狐瀏覽器設定了填報成功事件,但是偶發不生效。
透過 about:config 開啟火狐瀏覽器的 dom.allow_scripts_to_close_windows 配置為 true 即可。
填報屬性綁定了某個寫了公式的儲存格作為主鍵,刪除行提交後,該資料並未從資料庫刪除。
刪除行的公式在提交時會二次計算,傳回空字串,所以無法刪除對應資料。
去除勾選公式的填報/分析時,保留公式用於計算,或者將公式直接寫到填報屬性中。
當儲存格初始為空時,該儲存格即使設定了「用HTML顯示內容」,也不會被標記為HTML顯示。因此,在後續指派時,不會有HTML效果。
填報或者匯入Excel時報錯null/對話失效/傳送失敗/0。
例如nginx之類的代理伺服器,其一些參數設定會影響請求的轉發,如果設定有問題,則會導致報錯。可以測試不走代理時的範本,在使用時是否報錯來確認問題是否和代理伺服器設定有關。
檢查代理伺服器的參數設定,例如nginx的逾時時間參數proxy_send_timeout,上傳檔案大小限制參數client_max_body_size等,適當調大。
容器自身有請求逾時時間的限制,如果填報或者匯入時間過長超過了限制,就會出現報錯。
調整容器的逾時時間,例如Tomcat可以在/conf/server.xml中,修改connectionTimeout參數值,適當調大。
部分瀏覽器插件(例如翻譯、下載插件)會影響報表請求,造成報錯。可以透過更換瀏覽器來測試問題是否和瀏覽器有關。
卸載有問題的瀏覽器插件。
當工程整體佔用記憶體過高的時候,範本的對話可能會被智慧維運清理掉,造成對話失效報錯。
可以透過報錯時間段的gc日誌或者記憶體管理中的記憶體情況來判斷是否是此情況。
優化範本或者工程來降低記憶體使用情況。
對工程做了自訂的filter,可能會影響一些請求,導致報錯。
可以檢查工程WEB-INF資料夾下是否存在web.xml檔案,存在的話備份刪除後重啟測試,如果問題不再出現,則可以判斷為此原因。
由於自訂filter不屬於工程本身功能,所以需要根據實際情況自主排查filter的程式碼哪裏有問題。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙