2023年4月12日 星期三

AMM系統如何判定 QDR工單 /一般工單 - SAP工單第2碼為英文字/長度8碼,且第2碼不為英文字

目的:  AMM系統如何判定 QDR工單 /一般工單

           - QDR工單 -SAP工單第2碼為英文字    --> JCN 不加 '0000'

           - 一般工單: 工單長度8碼,且第2碼不為英文字         --> JCN 加 '0000' , 不含 ILIAS工單(9碼)


處理說明: 1> AMM_SRO  只挑選 QDR工單及一般工單(不含 ILIAS工單)

SQL如下:

SELECT   AMMNO,SAPNO,PN,PNNAME,QTY,nvl(STARTVAL,ACNO) as ACNO_
FROM      AMM_SRO
WHERE   PROJID='F16V'
AND         AMMSTS<='W'
AND (    (substr(SAPNO, 2, 1) between 'A' and 'Z')
        OR ((LENGTH(SAPNO)=8) AND not (substr(SAPNO, 2, 1) between 'A' and 'Z') )
         )

AND nvl(STARTVAL,ACNO) IN ('A012','B025')
ORDER BY ACNO_,SAPNO;
一般工單 à 長度為 8 碼 且 SAP工單第2碼為英文字 à JCN 加 ‘0000’
è 不含ILIAS工單(9碼)
QDR工單 à SAP工單第2碼為英文字 à JCN 不加 ‘0000’



2023年4月10日 星期一

V80204B -將前端 Array/table/Object 欄位值,傳送至後端處理 -JSON – 將目前 checkboxgroup欄位值(Array),傳送至後端,並處理

 目的: V80204B – 將目前 checkboxgroup欄位值(Array),傳送至後端,並處理

處理說明: 1>若非基本型態(string/int/)的欄位值(Array/table/Object),要傳至後端, 
                       均需先轉成 JSON string型態 ,才可當成np的參數值,傳送至後端
                        *.js                         
                        var Tmp_JSONStr = JSON.stringify(Ext.getCmp('chkboxgrp2').getValue()["rb"]);
                        np["ASN_ARY_JSONStr"]=Tmp_JSONStr;

                  2> 後端接收時,必需先將 JSON string 型態, 再還回原型態(Array/table/Object)
                        *.cs
                        string Tmp_ASN_ARY_JSONStr = nvc["ASN_ARY_JSONStr"];  
                        JArray Tmp_ASN_ARY =      
                     (JArray)JsonConvert.DeserializeObject(Tmp_ASN_ARY_JSONStr, (typeof(JArray)));  


1>*.js

var selectedValues = Ext.getCmp('chkboxgrp2').items;
console.log(selectedValues);
var Tmp_ASNAry = []; //var Tmp_Obj={};
//chkboxgrp2 均設為 true
for (var i = 0; i < selectedValues.length; i++) {
    selectedValues.items[i].setValue(true);
};

var np = {};
//取得 chkboxgrp2 的勾選欄位值
//將 Array 轉成 JSON字串, 以便傳至後端
    var Tmp_JSONStr = JSON.stringify(Ext.getCmp('chkboxgrp2').getValue()["rb"]);
    np["ASN_ARY_JSONStr"]=Tmp_JSONStr;
    console.log("np['ASN_ARY_JSONStr']: ", np["ASN_ARY_JSONStr"]);

2>*.cs    
  string Tmp_ASN_ARY_JSONStr = nvc["ASN_ARY_JSONStr"]; 
  JArray Tmp_ASN_ARY = (JArray)JsonConvert.DeserializeObject(Tmp_ASN_ARY_JSONStr, (typeof(JArray)));
 string Tmp_ASN_ARY_STR = string.Join(",", Tmp_ASN_ARY);
// "A012,B025" -->  'A012','B025'
 Tmp_ASN_ARY_STR = myfunc.AddQuoteStr(Tmp_ASN_ARY_STR); 








PS:
       1>將checkboxgroup2 的項目均設為 勾選(checked)
                 {
                    xtype: 'checkboxgroup',
                    id: 'chkboxgrp1',            // columns: 3,
                    columns: [.35, .35, .35],
                    items: [
                               { boxLabel: 'Item 1', name: 'rb', inputValue: '1' },
                               { boxLabel: 'Item 2', name: 'rb', inputValue: '2' },
                               { boxLabel: 'Item 3', name: 'rb', inputValue: '3' },
                             ]
                  },



}, //end of 待挑選機號

                  2>將checkboxgroup2的項目傳送至後端處理                       



V80204B - F16V報工現況匯出– checkboxgroup 新增checkbox - 多行機號挑選 - [F16V報工現況匯出]鈕

 目的: V80204B – checkboxgroup 新增checkbox – 將目前 checkboxgroup欄位值(Array),傳送至後端

處理說明:  1>必需先  CreateObject  of  checkbox 才可加入 checkboxgroup
                     //var tempObj = new Ext.form.Checkbox({
                       var tempObj = Ext.create('Ext.form.Checkbox',{
                                                           boxLabel: 'checkbox1',
                                                           name: 'rb',
                                                           inputValue: 'checkbox1',});
                  2>將 obj 加入 checkboxgroup , 並更新 Layout , 才會反應最新的 checkboxs 內容
                      Ext.getCmp('chkboxgrp1').items.add(tempObj);
                      Ext.getCmp('chkboxgrp1').updateLayout();    //更新  checkboxgroup
                  3> 取得目前 checkboxgroup 的勾選項目
                        var selectedValues = Ext.getCmp('chkboxgrp2').getChecked();
                           // Returns an Array of all checkboxes in the container which are currently checked
                           for (var i = 0; i < selectedValues.length; i++) {
                                   Ext.getCmp('chkboxgrp2').remove(selectedValues[i]);
                                    var tempObj = new Ext.form.Checkbox(selectedValues[i]);  //必需先 create ,才可加入
                                    Ext.getCmp('chkboxgrp1').items.add(tempObj);
                                }

                        



1>*.js   - V80204B.js
     1>>checkboxgroup1 加入   checkbox
{
xtype: 'button', flex: 1, text: "+1",
handler: function () {
var tempObj = Ext.create('Ext.form.Checkbox',{
boxLabel: 'checkbox1',
name: 'rb',
inputValue: 'checkbox1',
// id: Tmp_ACNO_id,
});
Ext.getCmp('chkboxgrp1').items.add(tempObj);
Ext.getCmp('chkboxgrp1').updateLayout();
}
},// end of 虛 space

   2>>checkboxgroup1 .勾選s 右移至  checkboxgroup2
   {//往右移
                        xtype: 'button',
                            id: 'btn_move1',
                            text: '往右',
                            iconCls: 'icon-right',
                        flex:1,
                        handler: function () {
                            var selectedSuccessValues = Ext.getCmp('chkboxgrp1').getChecked();
                            console.log(selectedSuccessValues);
                            for (var i = 0; i < selectedSuccessValues.length; i++) {
                                Ext.getCmp('chkboxgrp1').remove(selectedSuccessValues[i]);
                                var tempObj = new Ext.form.Checkbox(selectedSuccessValues[i]);
                                Ext.getCmp('chkboxgrp2').items.add(tempObj);
                            }

                            Ext.getCmp('chkboxgrp1').updateLayout();
                            Ext.getCmp('chkboxgrp2').updateLayout();

                        } 
                        },// end of 往右移



V120502 - Grid 的欄位允許編輯 - grid -欄位編輯

目的 : V120502 Grid的欄位允許編輯 

PS:  ExtJs 的Grid介紹與常用功能  - 

網址 :  https://wadehuanglearning.blogspot.com/2017/01/ext.html

處理說明: 1>Ext.Grid 必須透過官方套件才可以編輯內容,可以在 plugins 屬性載入                                                 Ext.grid.plugin.CellEditing 或 Ext.grid.plugin.RowEditing 便可對 Grid 資料進行編輯。   

                 2>columns 中,允許編輯的欄位,加入
             { header: "件號", dataIndex: "PN", width: 150, TMType: "string",editor: 'textfield',},
             { header: "數量", dataIndex: "QTY", width: 50, TMType: "string",
                editor: {   xtype: 'textfield',  
                                 allowBlank: false //不允許空白},
              },]




1>*.js  - grid 欄位允許編輯

  //包籤列印 sub_Grid
    var sub_Grid = Ext.create('TMGrid', {
        grid_id: 'sub_Grid',
        columns: sub_Columns,
        autoScroll: true,
        flex: 1,        
        store: Ext.create('gridstore', { model: sub_Fields }),
        plugins: [
            Ext.create('Ext.grid.plugin.RowEditing', {   // 加入官方 CellEditing 差件
                clicksToEdit: 1                           // 按一下進行編輯,預設為按兩下
            })
        ],
    });

var sub_Columns = [
        { header: "工號", dataIndex: "SAPNO", width: 150, TMType: "string" },
        { header: "件號", dataIndex: "PN", width: 150, TMType: "string",//editor: 'textfield',},
        {
            header: "數量", dataIndex: "QTY", width: 50, TMType: "string",            
            editor: {
                xtype: 'textfield',
                allowBlank: false   //不允許空白
            },
        },
        { header: "EO", dataIndex: "EOCND", width: 150, TMType: "string" },
        { header: "備註", dataIndex: "RMK", width: 200, TMType: "string", },
    ]







ExtJs 的Grid介紹與常用功能 - store -proxy() - reader - V120502 - Grid欄位修改

 目的: ExtJs 的Grid介紹與常用功能  

-   網址 :  https://wadehuanglearning.blogspot.com/2017/01/ext.html

處理說明: 1>Grid 主要分成兩部份:
                      1>>一個顯示欄位標題的Columns。
                     2>>一個儲存資料的Store 元件。
                 2>Columns 欄位定義:
                     1>>Columns用來Grid 的定義表格欄位,具有header與dataIndex屬性的物件陣列。 
                      2>>利用header 屬性來決定Grid 的欄位名稱。
                      3>>利用dataIndex 屬性來與Store 的資料相配對。
                      4>>Grid 的欄位顯示順序完全由此Columns 加入的順序決定。
                 3>Store 介紹: 用來存取表格的原始資料,
                      1>>可以是近端的二維陣列(Array ),或是遠端的JSON 或XML 資料。
                      2>>利用fields 屬性來與columns 欄位相配對。

                      3>>reader 用來解析原始資料,如原始資料格式為json,reader的type 就填json
                                     ,type 可以是 array, json, xml
                      5>>proxy : 資料來源 , type: 'memory',   //store.data  
                                                             type: 'ajax'       ,   //遠端資料庫 url ,np

一.簡單範例 - store資料來源: data(local)  , proxy.type:'memory'



var store = Ext.create('Ext.data.Store', {
    fields: ['name', 'email', 'phone'],  //利用fields 與Columns 的dataIndex 做配對。
    data: {'items': [             //原始資料
            {'name': 'Lisa', "email": "lisa@simpsons.com", "phone": "555-111-1224"},
            {'name': 'Bart', "email": "bart@simpsons.com", "phone": "555-222-1234"},
            {'name': 'Homer', "email": "home@simpsons.com", "phone": "555-222-1244"},
            {'name': 'Marge', "email": "marge@simpsons.com", "phone": "555-222-1254"}
        ]},
    proxy: {
        type: 'memory',    //若 store 資料來源為遠端,則proxy.type:'ajax' , url:'xx/xx/', getMethod: function () { return 'POST'; },
                           //若 store 資料來源為Data,則proxy.type:'memory' 
        reader: {
            type: 'json',  //reader用來解析原始資料,如原始資料格式為json,reader 的type 就填json 。 #可以是 array, json, xml
            root: 'items'  //告訴reader 要選擇data 中哪一個含有raw Data 的Array 的物件。
        }
    }
});

var columnModel = [     ////建立ColumnMode
    {text: '名稱', dataIndex: 'name'},
    {text: '電子信箱', dataIndex: 'email', flex: 1},
    {text: '電話', dataIndex: 'phone'}
];

Ext.create('Ext.grid.Panel', {    // 新增Grid
    title: 'Grid 範例',
    store: store,                 //將預先寫好的store 填入grid
    columns: columnModel,         //將預先寫好的columns 填入grid
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});




二. 產生子視窗 - 含Grid  - 利用 Template , 遠端資料庫


1>*.js
//產生子視窗 - 含 Grid
function PrnPackBtn_click() {
    var sub_Columns = [
        { header: "工號", dataIndex: "SAPNO", width: 150, TMType: "string" },
        { header: "件號", dataIndex: "PN", width: 150, TMType: "string",//editor: 'textfield',},
        {
            header: "數量", dataIndex: "QTY", width: 50, TMType: "string",            
            editor: {
                xtype: 'textfield',
                allowBlank: false   //不允許空白
            },
        },
        { header: "EO", dataIndex: "EOCND", width: 150, TMType: "string" },
        { header: "備註", dataIndex: "RMK", width: 200, TMType: "string", },
    ]

    var sub_Fields = [
        { name: "SAPNO" },
        { name: "PN" },
        { name: "QTY" },
        { name: "EOCND" },
        { name: "RMK" },
    ];
    //包籤列印 sub_Grid
    var sub_Grid = Ext.create('TMGrid', {
        grid_id: 'sub_Grid',
        columns: sub_Columns,
        autoScroll: true,
        flex: 1,        
        store: Ext.create('gridstore', { model: sub_Fields }),
        plugins: [
            Ext.create('Ext.grid.plugin.RowEditing', {   // 加入官方 CellEditing 差件
                clicksToEdit: 1                           // 按一下進行編輯,預設為按兩下
            })
        ],
    });

    //將子視窗 store 不分頁,  PageToolBar.Visible 設為 false , 不分頁
    Ext.getCmp('sub_Grid_ptb').setVisible(false);

2>TMGrid.js  : 定義 TMGrid   &  gridstore
Ext.define('gridstore', {
    extend: 'Ext.data.Store',
    pageSize: 30,
    //model: gridmodel,
    autoLoad: false,
    remoteFilter: true,
    //remoteSort: true,
    proxy: {
        type: "ajax",
        url: '',
        getMethod: function () { return 'POST'; },
        reader: {
            type: "json",
            root: 'T1',
            totalProperty: 'T1C[0].TOTAL'
        }
    },
    sorters: [],
    constructor: function (config) {
        Ext.apply(this, config); //將gridstore本身的屬性與input config結合
        if (typeof config.model != "undefined") {
            J_gridmodel = config.model;
        }
        Ext.define('gridmodel', {
            extend: 'Ext.data.Model',
            fields: J_gridmodel
        });
        this.model = gridmodel;
        this.callParent(config);
        this.getProxy().setModel(gridmodel, true);
    }
});





2023年4月5日 星期三

V80204B - 按鈕 icon - 圖示的設定 - 左移,右移

 目的: V80204B - 按鈕 icon - 圖示的設定

處理說明:  1>設定Button的 iconCls 屬性,     iconCls: 'icon-right',
                 2>實際讀取: ext-patch.css 的對應 icon設定(icon-right)
                 3>.icon-right {
                                         background-image: url('../images/icons/right.png');
                                       }  



2023年3月28日 星期二

AMM系統無法自動更新至最新版本 - 控制台移除應用程式,重新安裝即可

 目的: AMM系統無法自動更新至最新版本的處理說明

處理說明: 1>於控制台,刪除應用程式[AMM系統]

                  2>重新安裝[AMM系統]即可  - 於 TLS入口網站下載 [AMM系統],重新安裝即可