- 如何取得登入者的userID?前端的方法:var userid = $.getVariableValue('user');後端的方法:var userid = this.dataModule.clientInfo.user;server method內使用的方法:var userid = this.clientInfo.user;
- 如何在執行JS之前讓USER可以輸入TEXTBOX?如以下的JS,先透過 $.prompt讓user輸入年月後再往下執行:function Test(){$.prompt( "確認結帳(格式:YYYYMM)?", new Date().Format("yyyyMM"), function(yymm) {doClose(yymm);});}執行後會先出現一個確認窗體,並讓user輸入內容後再往下執行後面的程式。new Date().Format("yyyyMM") -> 預設日期為西元年+月份
- 如何取得主機的系統變數?$.getVariableValue(SystemVar)變數名稱 內容user 用戶編號userName 用戶名稱groups 用戶群組database 資料庫名稱solution 方案名稱computer IP地址locale 語言別today 今天日期todayc8 今天日期(varchar8)now 今天日期時間
firstday 本月首日
lastday 本月末日firstdaylm 上月首日lastdaylm 上月末日firstdayty 本年首日lastdayty 本年末日firstdayly 去年首日lastdayly 去年末日var userid = $.getVariableValue('user'); //取得目前useridvar today = $.getVariableValue('today'); //取得系統日期
- 前端執行程式前, 如何讓用戶確認再執行?加上 $.confirm()的方法即可,如:function sureexec(){$.confirm( "確認執行?", function() {alert('確認執行!');});}
- 如何自訂全局變量, 在前後端都可以存取?* ClientInfo提供自定義變數可讓用戶以全局來使用,可以用 $.setVariableValue('userPara1',value); 來設定內容用 $.getVariableValue('userPara1'); 來取得內容。如:// 前端設值的方法:$.setVariableValue('myvar','andy test');// 前端讀值的方法:var myvar = $.getVariableValue('myvar');
//後端設值的方法:
this.dataModule.setClientInfo("myvar",'andy test');//如果是後端的取值, 須改用:var myvar = this.dataModule.clientInfo.myvar;//後端servermethod的設值的方法:this.setClientInfo("myvar",'andy test');//如果是後端servermethod的取值,須改用:var myvar = this.clientInfo.myvar;
- 如果日期的欄位Type並非為Date而是Varchar,如何設定預設值為今天?請在Default元件中找到DefaultValue,然後將Type選擇為function,Function取名為test(請自行更改function名稱),並在原始碼處寫下以下function即可。function test(){return new Date().Format('yyyyMMdd');}
- 如何動態控制 #O (Options) 停在哪一個選項?如下:function setType(){var hour = new Date().getHours();if (hour<10) {$('#dfMaster_出勤類別').selectoptions('setValue','上班');}else if (hour>9 && hour<17) {$('#dfMaster_出勤類別').selectoptions('setValue','公出');}else if (hour>16 && hour<21) {$('#dfMaster_出勤類別').selectoptions('setValue','下班');}}
- 如何在頁面上顯示動態的目前時間?可以貼一個 Label, 如下:$(function(){showtime();})function showtime(){var currtime = new Date().Format('yyyy-MM-dd hh:mm:ss');$('#Label1').html(currtime);setTimeout('showtime()',1000);}
- 如何讓RWD的頁面開放給不用登入的USER來使用?只要在EEPCloud的設計模式中, 按下'右鍵', 打開 '免登入URL',將其URL儲存到Server中, 並將本頁面對應InfoCommand.Nonlogin設為True即可,這樣這個RWD頁面即可開放給沒有login的user來使用。(注意: 如果你的RWD頁面有寫JS程式碼, 必須把程式碼用<script></script>包裝好,另外貼入到 Literal.Html 屬性中, 才能讓免登入URL可以調用)
- Tree樹狀組件, 如何在別的組件中取得目前選中的節點, 並取出該節點的資訊?取得Tree的節點方法如下:function getTree(){var selnode=($('#tvMaster').tree('getSelected'));if (selnode != null)return selnode.row.目錄編號;elsereturn '';}
- 如何動態控制Schedule(行事曆)的顯示條件?可以使用Tree的onNodeSelected事件來控制, 如下:function tvMaster_onNodeSelected(event, node){var gID = node.row.GROUPID;var schedule = $('#Schedule1');if (gID == '00') {schedule.schedule('setWhere',"1=1");}else {schedule.schedule('setWhere',"部門='"+gID+"'");}}
- 為何 ComBoBox 配合 Default的 Variable['user'] 預設使用者時, 有時後會無效?因為User Login的user id是可以不分大小寫的, 但到了 ComBoBox ?件是有區分大小寫的,造成預設值匹配不到ComboBox內容而無效, 所以這種情?下請改用 Refval的選擇 User資料, 不要使用Combo。
- 如何控制打開工作流查詢模式時,指定顯示條件只顯示該申請者的資料?可透過 datagrid的onBeforeLoad事件來控制,如下:function dgMaster_onBeforeLoad(param){var flowParam = $.getEncryptParameters(); //取得流程的MENU參數if (flowParam && flowParam.NAVIGATOR_MODE==0) {var user = $.getVariableValue('user');param.whereStr = "申請人 = '" + user + "'";}}
- 如何控制Workflow中, 針對某個活動才能更改某欄位內容值?可以在 dataForm的onLoad事件中取得活動名稱(ActivityText), 再控制該欄位是否可以編輯, 如下:function dfMaster_onLoad(row){var flowParam = $.getEncryptParameters();if (flowParam && flowParam.ActivityText=='財務審核') {$('#dpgridDetail_核發金額').setDisabled(false); //財務審核時才能更改}}
- 如何透過JS跳彈顯示一個包含QRCode的網址, 給使用者掃描或拷貝?可透過 alert()的方法, 將一個 URL的網址以QRCode的方式顯示, 如下的JS程式:function dfMaster_onApplied(data){key = data[0].inserted[0].報名序號;// 組出QRCode的url網址var url = "http://eepcloud.infolight.com:3000/cloud_andyeip_bootstrap/%E6%B4%BB%E5%8B%95%E5%A0%B1%E5%90%8D?checkin="+key;// 顯示報名成功var modal = $.alert('報名成功! 報名序號:'+key, 'info', {small: true,content: '<div class="qr" style="width:200px;height:200px;background:red;margin:0 auto" />'});modal.find('.qr').qrcode({ width: 200,height:200,text: url }); //將URL傳入QRCode的Class}
- Drilldown設定的欄位條件通常都是"AND"的條件,如何透過onClick改成"OR"條件?透過onClick來處理, 如下:function Drilldown1_onClick(row, whereItems){whereItems.forEach(function(wi){wi.or = true;});return true;}
- ClientMove的ColumnMatch中, 如何用JS自定SourceField內抓取內容?可以改用SourceValue的方式, 設定Function為要調用的JS方法, 如下:function getBeginDate(sourceRow) //sourceRow會自動傳入{var onBoardDate = sourceRow.到職日期; //取到職日期var beginDate = addDays(new Date(onBoardDate),183); //加上 半年return beginDate;}
- ClientMove整批新增時, 欄位的對應關係(ColumnMatch), 是否可以有條件控制目的欄位的內容?可以的, 在ColumnMatch中, 可以設定SourceValue(原來的SourceField會優先, 所以要先清空), 設定SourrceValue的Type為Function, 然後設定Function對應到JS程式即可, 如下在ColumnMatch的"金額"欄位, 設定一個 getAmt()的JS:function getAmt(row){var amt = row.金額;if (row.稅別=="未稅") {amt = row.金額*1.05;}return amt;}
- EEPCloud的用戶表USERS如何自行新增或與從別的Table中整合進來?EEPCloud的帳號是放在USERS表中, 可以用一般的SQL來新增資料, 只有PWD這個欄位為一個加密的欄位, 所以必須使用EEPCloud的後端方法來加密, 達到新增帳號的效果, 如下的Server Method為自行新增User的方法:exports.addUser = function(param,callback){var dm=this;var sql="INSERT INTO [USERS] (USERID,USERNAME,PWD,EMAIL,CREATEDATE) VALUES ";this.encryptPassword(param.userid, param.password, function(err, newPassword){ // 此為非同步調用sql=sql+"('"+param.userid+"',N'"+param.username+"',N'"+newPassword+"',N'"+param.email+"',N'"+param.date+"')";dm.query(dm.clientInfo, dm.clientInfo.database,[sql],{}, function(err){callback(err);});});}
- 如何動態改變行事曆TitleField的顏色(當MonthTitle=True時)?舉例:將TitleField改成紅色的字,如下:先從工具箱拉出一個Literal,並於html中寫下CSS:<style>.event-Red > a{color: Red !important;}</style>再來,在Schedule的OnRenderItem雙擊添加一個事件,並寫入內容如下:function Schedule1_onRenderItem(event){if(event.row.客戶編號 =='001')event.class = 'event-info event-Red';}
- 如何動態控制主畫面的選單項目中字的顏色?可以在EEPCloud的”網頁”的”主頁程式碼(JS)”中來設定,例如,當選項的標題包含"流程"時,將文字改為紅色,如下:var initMenu = true;$(function() {setInterval(function() {if (initMenu) {var menuItems = $('#menu').find('.list-group-item');if (menuItems.length) {initMenu = false;menuItems.each(function() {var text = $(this).html();if (text.indexOf('流程') > 0) { //判斷是否包含此文字流程$(this).css('color', 'red'); //設置顏色}});}}}, 100);});
- 從Menu打開的表單,如何用JS程式來關閉?可以用以下的程式關閉:self.parent.closeCurrentTab();
- 為何使用EEPCloud的免登入網頁,用QRCode或網頁上打開是可以的? 但使用一般的網頁用href連結時會失效(導入登入頁面)?這是因為href="https://your.com/..." 這個連結傳入EEPCloud會遺失原來 https://your.com 等這個網址內容, 所以必須改用window.open() 的方式來打開這個免入網頁, 如下的案例:1. 將href="https://icoder.infolight.com/cloud_andyeip_bootstrap/活動報名?activity=A1910001" 改成onclick="open_window('https://icoder.infolight.com/cloud_andyeip_bootstrap/活動報名?activity=A1910001')"2. 在你的網頁上增加一個js方法, 這樣即可做到免登入的打開網頁, 如下:function open_window(full_link){window.open('javascript:window.name;', '<script>location.replace("'+full_link+'")<\/script>');}
- 如果頁面呈現的比較複雜,導致在手機上執行時畫面呈現重疊錯亂的現象,該如何處理?可以在原始碼最上方寫下以下的code,即可處理此問題。$.fn.disableIOSWrapper = true;
- 如何讓頁面使用免登入的功能?1.首先,切換到雲設計的畫面,確讓好畫面左上角的資料庫及方案是正確的(因為免登入設定時會自動記錄下當前的資料庫及方案)。2.將Server端中會用到該登入頁面的InfoComand的NonLogon屬性設為True並存檔。3.然後將要使用免登入的RWD頁面,在設計畫面的空白處點選右鍵->免登入URL->把網址複製下來使用並按下存檔即可。
- 為何發行免登入的RWD頁面後,打開畫面會出現”Timeout”的錯誤訊息?這是因為該畫面server端主檔的infocommand的nonlogon屬性沒有設為true,設定後將Server端重新存檔一次即可。
- 如何針對某個頁籤添加onClick事件?舉例如下:可以透過Runtime頁面的查詢元件以右鍵的'檢查'來得知頁籤的href, 再透過如下的JS來添加該頁籤的onclick事件:$('[href="#tabMaster_0"]').on('click', function () {alert('1');});
- 如何用js指定開啟某一個頁籤?舉例如下:可以透過Runtime頁面的查詢元件以右鍵的'檢查'來得知頁籤的href, 再透過如下的JS來開啟該頁籤:$('[href="#tabMaster_1"]').tab('show');
- 如何使用別的網站程式對 EEPCloud或iCoder網站進行SSO一次性登入?EEPCloud有提供Single-SignOn的機制,因為SSO都是兩個不同的獨立網站且前端JS的安全性有問題,所以SSO的機制都是必須寫在後端的,你可以用PHP、Node.JS、ASP.NET C#或其他語言來寫SSO的機制,以下為Node.JS的一個實例,請參考:function iCoderSSO(url,callback){var http = require('http');var post_data =''; //定義 EEPCloud的 SSO 變數 (JSON格式)post_data = JSON.stringify({"deisnger": "andyeip", //EEPCloud設計者ID"user":"001", //用戶ID"database": "ERPS", //資料庫"solution": "Solution1", //解決方案"password": "123", //密碼"url": url //EEPCloud的轉向位址, "main"是主頁, 如子頁面可以用 "bootstrap/客戶資料表"});// 以下定義 EEPCloud的 SSO 網站地址var post_options = {host: '60.248.34.75',port: 3000,path: '/sso',method: 'POST',headers: {'Content-Type': 'text/html;charset=utf-8','Content-Length': post_data.length}};// 開始向 EEPCloud SSO 請求var post_req = http.request(post_options, function(post_res) {var _data = '';post_res.on('data', function(chunk) {_data += chunk;});post_res.on('end', function() {var key = _data;//取得 SSO 金鑰var sso_url = 'http://60.248.34.75:3000?p=' + encodeURIComponent(key);// 傳回前端可以打開 post_data.url 所指定的網頁callback(null,sso_url);});});// 向 EEPCloud 傳送 post_datapost_req.write(post_data);post_req.end(); // 傳送結束 開始讀取回應}
- 如果想透過ToolItem的importexcel方法匯入資料,且該Table的Key欄位是Identity,該如何處理資料?Identity欄位及資料不用出現在excel的資料裡,只需要按格式整理其他欄位及資料即可。
- 請問統計圖組件如何動態給條件, 即時更新?如果你是與DataGrid綁定的話, 可以設定 統計圖的 QueryObj屬性即可, QueryObj的名稱為 DataGrid名稱+"queryObj", 如: "dgMasterqueryObj";如果你是想自行以Where條件來控制統計圖, 如下為Line Chart的控制方法:$('#LineChart1').linechart('setWhere',"日期>='2020-01-01'")
- 點選統計圖中的資料, 是否可以打開視窗來顯示明細資料?可以的, 透過 onClick()方式來處理, 如下為LineChart取出Click的統計值與X軸的KEY內容, 即可往下開啟表單或做Where條件控制:function LineChart1_onClick(ev, si, pi, data){ // ev:對象, si:數組index(從0開始), pi:數據點index(從0開始), data:陣列(數值內容在[1])var Xtext = ev.target.textContent; //取得X軸整個標題var myXdata = Xtext.split('Z'); //分隔X軸標題var value = data[1]; // 取出統計值$.alert(myXdata[pi],'info'); //取得X軸Key內容}
- 如何透過CSS改變看板管理-選單列類型的選單顏色?在網頁->共用樣式表編寫CSS舉例如下:.info-card .bootstrap-menulist li{background: #99BBFF;}
- 如何call API?舉例如下:前端:function void_invoice(){var sIndex = $("#dgMaster").datagrid("getSelectedIndex");if (sIndex >= 0) {var status = $("#dgMaster").datagrid("getRows")[sIndex].狀態;var ivono = $("#dgMaster").datagrid("getRows")[sIndex].發票號碼;var cdate = $("#dgMaster").datagrid("getRows")[sIndex].發票日期;cdate = cdate.replace(new RegExp("-", "g"), "").substring(0,8);if(status!="開立"){$.alert('無法呈送','danger');}else{$.callMethod('發票資料','void_invoice',{type:1,ivono:ivono,InvoiceDate:cdate},function(result){$.alert(result,'info');var page = $('#dgMaster').datagrid('options').page;$('#dgMaster').datagrid('load', { page: page});});}  ; }else {$.alert('請選擇一筆發票','info');}}後端://作廢發票exports.void_invoice = function (param, callback) {var datamodule = this;var https = datamodule.getModule('https');var querystring = datamodule.getModule('querystring');var Buffer = datamodule.getModule('buffer').Buffer;var clientInfo = this.clientInfo;var ivono = param.ivono;//發票日期var InvoiceDate = param.InvoiceDate;var csv = '"InvoiceNumber","InvoiceDate"\n"' + ivono + '","' + InvoiceDate + '"\n"Finish"';datamodule.echo("csv:" + csv);var post_data = querystring.stringify({'id': 'XXXXXXXXX','user': ' XXXXXXXXX','passwd': ' XXXXXXXXX','csv': Buffer.from(csv).toString('base64')});datamodule.echo("post_data:" + post_data);const options = {hostname: 'api-test.cxn.com.tw',port: 443,path: '/c0501.php',method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded','Content-Length':Buffer.byteLength(post_data)}}const req = https.request(options, (res) => {console.log(`statusCode: ${res.statusCode}`)res.on('data', (d) => {var errmsg = "";var result = Buffer.from(d, 'base64').toString().split("&");if (result[0] == "rtcode=0000") {//成功取號後,寫入發票號碼var sql = "update 發票資料 set 狀態 ='作廢' where 流水編號 ='" + ivono + "'"; //SQL條件句this.query(clientInfo,clientInfo.database, [sql], {check: true}, function (err, result) {if (err.message == 'no row effect.') {callback(new Error('請再執行一次')); //修改顯示的 錯誤訊息} else if (err) {callback(err);} else {callback(null, "**完成取號**");//這句不會執行}});callback(null, "完成");} else {errmsg = Buffer.from(result[1].split("=")[1], 'base64').toString();callback(null,"錯誤訊息A: " + errmsg + "(" + result[0] + ")");}})})req.on('error', (error) => {callback(null, "錯誤訊息B: " + errmsg);})req.write(post_data)req.end()};
- 行事曆中, 如何控制不同類型不同顏色?透過 onRenderItem事件來處理, 如下:function scMaster_onRenderItem(event){var style='event-info';switch (event.row.行事曆類型){case '活動': style='event-important'; break;case '會議': style='event-special'; break;case '資源預約': style='event-warning'; break;case '公出': style='event-success'; break;case '其他': style='event-inverse';}event.class = style;}
- Chart元件如何以StoreProcedure傳參數的方式產生圖表?有兩個方法。第一個方法:前端透過CallServerMethod方式去後端Call SP,然後再回傳資料給前端,前端再將後端傳回的結果轉成json,最後透過loadData的方式將資料呈現在Chart上面,舉例如下:前端JS:function callSP(){$.prompt( "輸入日期(格式:YYYY-MM-DD)?", new Date().Format("yyyy-MM-dd"), function(yymmdd) {$.callMethod('出貨單','callSP',{date:yymmdd},function(result){var param = $.parseJSON(result); //傳回result為JSON格式if (param.length != 0){$('#LineChart1').linechart('loadData', param);//$('#PieChart1').piechart('loadData', param);//$('#BarChart1').barchart('loadData', param);}});});}後端JS:exports.callSP = function(param,callback){var date = param.date; // 取出編號var clientInfo = this.clientInfo;var sql = "exec 出貨單SP '"+date+"'";var dm = this;dm.queryRaw(clientInfo, clientInfo.database, sql, {}, callback);};第二個方法:先將DataGrid的RemoteName來源infocommand改為使用SP並且也讓Chart的RemoteName來源也設定為該infocommandDataGrid使用SP的方法參考如下:* InfoCommand的CommandType如果為StoredProcedure時,前端的DataGrid查詢條件送回後端時會自動與StoredProcedure配合。如果在InfoCommand的Parameters中所設定的參數與前端DataGrid欄位名稱一致時,前端送過來的查詢條件會自動寫入Parameters的Value中,這樣就可以透過StoredProcedure的Input變數進行資料查詢與回傳結果。如下:1. 設計一個SP,透過MSSQL或是EEPCloud來新增一個SP,並定義好input參數。2. 原來前端的DataGrid需事先連上一個虛擬或實體的Table,結構與SP要傳會的資料一致。在Server端除了原來的InfoCommand對應到這個虛擬或實體的Table外,還要另外貼一個SP的InfoCommand(CommandType為StoredProcedure),CommandText輸入SP的名稱,並填好與SP對應的Parameters參數。3. 前端的DataGrid.RemoteName改成這個SP的InfoCommand即可,這樣User輸入查詢條件就會送往SP這個InfoCommand,InfoCommand因為為SP的Type,所以會自動用欄位對應Parameters參數。
- Word套表時,可否支援三階的印表?如下的報表格式,有主表(A),與明細表(B),及第三階明細表(C):Word表單設計時,可以將B設為##,將C設為##2,再以二次開發的方式控制##2(C表)為B的第三階明細;印表時可以另外再設計一個Word表格,##明細表的欄位可以完全由##2來取代(當然##2必須包含##所要印出的欄位),如下:並在印表前先執行後端程序把C的第二筆之後重複的資料清空,如下JS:function exportWord2(){var sIndex = $("#dgMaster").datagrid("getSelectedIndex");if (sIndex >= 0) {var no = $("#dgMaster").datagrid("getRows")[sIndex].生產編號;$.callSyncMethod('生產實施方案','prepare',{no:no}); //清除重複的群組資料$(this).datagrid('exportWord','生產實施方案印表'); // 更換格式為"生產實施方案印表.doc"}}
- 如何透過js打開別的表單?舉例://在瀏覽器開啟一個新網頁(RWD表單)window.open('員工資料表');//RWD表單名稱//在瀏覽器開啟一個新的頁籤(RWD表單)window.top.addTab('員工資料表','員工資料表', 'bootstrap/員工資料表');// 參數分別代表RWD的: 表單ID,表單標題,表單位置。
- 用戶Login之後, 是否可以指定打開某個網頁?可以透過 後台 '網頁'/'主頁原始碼(JS)'中, 來設定以下的JS即可:$(function(){window.location.replace('bootstrap/你的表單'); //跳轉到你的RWD表單})但如果要打開在主頁之下, 則改用以下的JS:$(function(){window.top.addTab('你的表單ID','你的表單標題','bootstrap/你的表單'); //打開你的RWD表單});
- 為何有時Default元件為何無效?有可能是將Default元件放置到其他DataForm或DataPanel的元件裡面了,移出到最外層即可。
- 如何透過servermethod自動產生流程起單?舉例如下:前端JS:function callflow(){var rows = $('#dgMaster').datagrid('getRows');var index = $('#dgMaster').datagrid('getSelectedIndex');var row = rows[index];$.callMethod('出貨單','callflow',{no:row.出貨編號},function(result){alert('執行成功!');});後端JS://* 後端提供了submitFlow方法來自動產生流程實例,如下://(如果工作流活動中有用到條件運算式的欄位時,該欄位內容必須放資料對象中)//也就是說流程中會用到的欄位都要放置到資料對象裡面exports.callflow = function(param, callback) {this.submitFlow({ //資料對象, 放KEY欄位即可出貨編號: param.no,}, {url: 'http://localhost:3000', //email ?接FlowID: '出貨申請', //流程名稱Remark: '自動起單', //起單訊息WEBFORM_NAME: '出貨單', //表單名稱FORM_KEYS: '出貨編號', //表單主鍵FORM_PRESENTATION:"出貨編號='"+param.no+"'", //表單主鍵內容FORM_PRESENTATION_CT: '出貨編號:'+param.no, //表單欄位呈現PROVIDER_NAME: '出貨單.出貨單', //RemoteName名稱tabTitle: '出貨單', //頁籤名稱}, callback);};
- 如何改變私有雲或執行雲網址的port?如果希望改變網址的port,可以改變run.bat 或 start.bat裡的內容,如下:改變預設的3000port為3001port內容:@echo offpushd "%~dp0"start redis/3.2.100/redis-server.exe redis/3.2.100/redis.windows.confstart cmd /k " set PORT=3001&&node bin/www_cluster"start cmd /k node bin/schedulestart http://localhost:3001/design
- 如果重新開機後,run.bat或start.bat開啟後私有雲或執行雲無法正常使用(重新啟動前是正常的),該如何處理?因為當前windows登入者為非管理者,因此可以如下處理,在run.bat 或 start.bat添加一行,如下:pushd "%~dp0"這句的目的是更改當前目錄為批處理本身的目錄舉例:@echo offpushd "%~dp0"start redis/3.2.100/redis-server.exe redis/3.2.100/redis.windows.confstart cmd /k " set PUBLISH=true&&node bin/www_cluster"start http://localhost:3000/?designer=test&database=ERPS&solution=SOLUTION1
- 在 Flow 預備模式中,為何已呈送的資料可以修改內容,內容改變後呈送卻會被系統擋住,告知流程已存在?當資料尚未呈送或已結案,才可以進行修改或作廢並且重新起單。可以在datagrid的OnUpdate事件,添加程式碼判斷此流程目前的狀態參考範例如下:function dgMaster_onUpdate(row){var flowflag = row.FlowFlag.substring(0,1);if (!flowflag || flowflag == 'Z' || flowflag == ‘z’){//空白表示尚未起單,等於Z或z表示已結案return true;}else{alert('此流程已存在');return false;}}FLOWFLAG狀態代表意思如下:'N':新流程建立.'P':流程過程中.'Z':流程結案.'X':流程作廢.'B' 流程暫停
- 用戶打開主畫面時, 如何讓Menu自動隱藏?可以在EEPCloud的 "網頁"/"主頁程式碼JS"中設定以下程式即可:$(function() {$('#menu').toggleClass('min');$('#tab').toggleClass('max');$('#favoricon').toggleClass('hide');});
- 當日期欄位類型為varchar8,如何取得當日前七天日期?function time(){var today = $.getVariableValue('today'); //取得系統今日日期var addDate = addDays(today,-20); //取得前二十天var date = addDate.substr(0,10); //取出年月日date = new Date(date).Format('yyyyMMdd'); //轉為varchar8return date;}
- 使用後端Infocommand的RuntimeDatabase來設定保密的資料庫時, 前端頁面如何控制資料庫密碼的輸入?密碼輸入可以使用 PromptDialog組件來設計, 設定一個欄位即可, Editor設定為password:這個表單加入以下JS:$(function(){ // 打開表單就執行if (! $.getVariableValue('setPwd')) // 沒設過Pwd的話{$('#PromptDialog1').promptdialog('show', function(row){ // 開啟輸入窗口$.setVariableValue('databasePwd',row.人資資料庫密碼);$.callMethod('員工資料表','checkPwd',{pwd:row.人資資料庫密碼},function(result){ // 執行後端檢查方法var param = $.parseJSON(result); //傳回result為JSON格式if (param.length != 0){ $.alert('密碼正確','info');$.setVariableValue('setPwd',"Yes",true); // 避免重設$('#dgMaster').datagrid('options').remoteName = '員工資料表.員工資料表'; // 可以打開保密資料庫的資料表了$('#dgMaster').datagrid('load');}else $.alert('密碼正確','info');});});}})function dgMaster_onBeforeLoad(param){if (! $.getVariableValue('setPwd')) //尚未輸入過密碼時{$('#dgMaster').datagrid('options').remoteName = ''; // 避免DataGrid下載資料$.loaded($(this).closest('div')); // 關閉 "下載中…" 訊息}}Server端的保密資料庫的密碼檢查程式, 可以這樣寫:exports.checkPwd = function(param,callback){var pwd = param.pwd; // 取得密碼var clientInfo = this.clientInfo;clientInfo.database='HR'; // 要保密的資料庫var sql="select * from 員工資料表 "; // 保密資料庫任一個資料表皆可this.queryRaw(clientInfo, clientInfo.database, sql, {databasePwd:pwd}, callback);// 如果密碼正確將傳回資料內容};
- 流程呈送時可以設定傳遞的參數嗎?可以在選單中的參數裡進行設定,參考如下:
- 當HTML頁面要超連結到免登入網址頁面,該如何處理?不可以使用<a>標籤 因為免登入網址需要轉址 因此可以改用下列的方式:onclick="open_new_window("https://icoder.infolight.com/cloud_andyhome_bootstrap/WEBHOME";)"onclick時另外呼叫open_new_window這個方法開啟網頁:function open_new_window(full_link){window.open('javascript:window.name;', '<script>location.replace("'+full_link+'")<\/script>');}