略過巡覽連結。
略過巡覽連結      
  點選統計圖中的資料, 是否可以打開視窗來顯示明細資料? 觀看回應
可以的, 透過 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()
};


  請問Server端的 JS 如何讓別人共用, 或互相調用? 觀看回應
可以使用 getServerModule來取得對象並直接調用, 如以下為被調用的 出貨單 ServerModule:
exports.readData = function(param,callback)
{
    var dm=param.dm; // 不能用 this.dataModule要從原來的方法中傳進來
    var clientInfo = dm.clientInfo;
    dm.queryRaw(clientInfo, clientInfo.database, "Select * from INVO WHERE F001='"+param.no+"'", {},callback)
}        
如下, 有一個 出貨單的Server Method要調用上面的readData()方法:
exports.writeData = function(param,callback)
{
    var clientInfo = this.clientInfo;
    var dm=this;
    var no=param.no;
    this.getServerModule('出貨單').readData({no:no,dm:dm}, function(err, result){  // call 出貨單.readData() export方法
        try {
            if (result.length != 0){
                dm.query(clientInfo, clientInfo.database, ["update INVO set F018='"+result[0].F016+"'"],{}, callback);
            }
        }
        catch(e)
        {
            callback(e);
        }
    });
}






  如何在EEP埋Log, 並可快速查詢Log 觀看回應
1.找一支Server端程式加入以下Function

        /// <summary>
        /// 寫入EEP LOG
        /// </summary>
        /// <param name="method"></param>
        /// <param name="message"></param>
        public void EEPLog(string method, string message)
        {
            SysEEPLog eeplog = new SysEEPLog(this.GetClientInfo(), SysEEPLog.LogStyleType.UserDefine, SysEEPLog.LogTypeType.Error, DateTime.Now, method, message);
            eeplog.Log();
        }

2.在需要log的地方,例如server method傳入值,回傳值,自己下SQL語法,呼叫外部API時,用這句即可
this.EEPLog("模組名稱","訊息");

範例:
this.EEPLog(MethodBase.GetCurrentMethod().Name, strSQL);

3.在EEPNetServer上System Log要打開,並且一定要存到DB,不要存text file

4.EEPManager就可以直接查詢log,因此比一般log機制,要去作業系統log查看方便