顯示具有 WebService 標籤的文章。 顯示所有文章
顯示具有 WebService 標籤的文章。 顯示所有文章

2023年8月6日 星期日

V80201 WebService 錯誤訊息: 找到多個該合約的端點組態。請以名稱指示偏好的端點組態區 - WS定義的網址 – 記錄在 Web.config 內

 目的: WebService定義的網址 記錄在 Web.config

處理說明: 1>由  web.config  查詢最新的   WebService   IP

                  2>[加入服務參考]設定後 , web.config 會有重覆的 WebService名稱

                      必需將重覆的 WebService名稱(PLM04) 刪除

                      否則會有錯誤訊息(xx 多個該合約的端點組態)


若呼叫 WebService 時,出現如下錯誤訊息: 
-->無法載入合約 'AMM_PLM04.ServiceSoap' 的端點組態區段,因為找到多個該合約的端點組態。請以名稱指示偏好的端點組態區
-->
  



2023年4月16日 星期日

V80204 - 呼叫 WebService WS_ALS02_WBS - WebService 匯入及呼叫 - 1>參考 2>Connected Services - getWS_xxxx_

 目的: V80204  - 呼叫 WebService  WS_ALS02_WBS  - 取得 WBS+機號的報工工時

處理說明:  1>呼叫 WebSerivce 函式 = class.function
                       找出 WebService的  class 及 function
                   2>匯入 WebService 網址 - 找出 WS 的 class 及 function
                        [方案總管] --> [參考] -->[加入服務參考]
                        執行後 , [方案總管] --> [Connected Services]  --> 會新增一class
                   3>web.config 將重覆的 WebService名稱 remak ,
                       否則會有錯誤訊息  





1>*.cs
3>呼叫 WebService 函式的方法:  myfunc.getWS_ALS_WBSHR(string par_WBS, string par_ASN)
        //取得 WBS + ACNO.報工工時        
        //傳入參數:  par_WBS, par_ACNO , 若機號空白,則傳回該WBS的所有機號.工作小時
        //傳回參數:  工作小時
        //                     --> WS_ALS02 原本以分鐘傳回, 以小時為計算單位必需 /60 , 取小數2位        
        public static dynamic getWS_ALS_WBSHR(string par_WBS, string par_ASN)
        {
            string Tmp_hour = "0";
            string Tmp_Str = "";
            string Tmp_Str1 = "", Tmp_Str2 = "";
            double Tmp_double1 = 0;
            if (par_WBS != "")
            {
                ws_als_wbshour.ws_als_wbshourSoapClient wbshour_cls
                                       new ws_als_wbshour.ws_als_wbshourSoapClient();
                try
                {
                    Tmp_Str = wbshour_cls.wbshour(par_WBS, par_ASN);
                    //將 [分鐘]字串轉成[小時]字串
                    Tmp_Str1 = Min2Hr(Tmp_Str1);
                    Tmp_hour = Tmp_Str1;
                }
                catch (Exception ex)
                { }  //throw ex;  可能回傳 null
                finally
                { };
            }
            return Tmp_hour;
        }

2>*.js
{
                        xtype: 'button',
                        id: 'btn1_Show',
                        flex: 2,
                        border: 1,
                        text: '報工工時顯示',
                        iconCls: 'icon-search',
                        handler: function () {
                            //s1_form 的所有欄位均加入 np  - type=2
                   var np = s_JSON('s1_form', 2); //TMFunction.js, 組合form上的查詢條件為json參數傳遞
                            np['s1_WBS'] = Ext.getCmp('s1_WBS').getValue();
                            np['s1_ACNO'] = Ext.getCmp('s1_ACNO').getValue();
                            //因為 LoadMask 無作用,所以改用 label 來顯示訊息
                            //Ext.getCmp("waitlbl").setVisible(true);
                            //Ext.getCmp("waitlbl").update;
                            //Ext.getCmp("waitlbl").show();                            
                            var Proc_Msg;
                            try {
                                Proc_Msg = new Ext.LoadMask(Ext.getCmp("s1_PROCMSG"),
                                    { msg: 'WBS報工工時顯示處理中, 請稍候...', }
                                );
                                Proc_Msg.show();//使用 mask 需手動呼叫show() 方法下
                                //getGridData_M --> 轉工只有曾在於工作中心就會列入  , 後來改為  [目前工作中心]=xxxx , 才顯示
                                //gridstore.getProxy().url = '../api/V80205API/getGridData_M';

                                //2022/06/15 ..過濾條件若[目前工作中心]有值,則過濾 [目前工作中心]=xxxx, 其他 工作中心資料不顯示
                                // url 改為 getGridData_M_sub_WC --> 同 [過濾目前工作中心]鈕,的處理方法 ,                                 
                                //gridstore.getProxy().url = '../api/V120102API/getGridData_M';
                                //gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK
                                //console.log("1 reloadGridData - before");
                                //Ext.getCmp('grid_Single').reloadGridData();
                                //console.log("2 reloadGridData - after");
                                //取得  WBS+ACNO 的 WBS報工工時
                                Ext.Ajax.timeout = 600000; //如果有ajax timeout問題可以加上去       

                                Ext.Ajax.request({
                                    url: '../../api/V80204API/get_WBS_ALS_HR',  //myfunc.getWS_ALS_WBSHR
                                    method: 'POST',
                                    //async: false,
                                    async: true,
                                    timeout: 600000,
                                    //standardSubmit: true, // 非 Ajax 的方式  //若要傳送檔案至前端, standardSubmit必需設為 true 
                                    params: np,
                                    success: function (response, opts) {
                                        console.log('0 get_WBS_ALS_HR sucess!!');
                                        //console.log('0 opts:', opts);
                                        //console.log('0 response:', response);
                                        console.log("success response.responseText:", response.responseText);
                                        var obj = Ext.decode(response.responseText);
                                        var Tmp_WBSHR = "";
                                        //console.log("obj:", obj);
                                        if (obj["success"]) {
                                            Tmp_WBSHR = obj["WBSHR"];
                                            //mysuccessalert(Tmp_WBSHR);
                                            console.log("success=true , Tmp_WBSHR=", Tmp_WBSHR);
                                            Ext.getCmp("s1_WBS_HR").setValue(Tmp_WBSHR);
                                        }
                                        else {
                                            console.log(' 2 get_WBS_ALS_HR obj[sucess]  false !!');
                                            Tmp_Str = "[取得WBS報工工時]失敗 !! <br>"
                                                + obj["Rtn_Msg"];
                                            mysuccessalert(Tmp_Str);
                                        }
                                        Proc_Msg.hide();  //使用 mask 需手動呼叫hide() 方法下
                                        //Ext.getCmp("waitlbl").setVisible(false);                                        
                                    },
                                    failure: function (response, opts) {
                                        //console.log('uploadFileToDB failure !!');
                                        //console.log(" failure opts.response.responseText:", opts.response.responseText);
                                        console.log(' 3 get_WBS_ALS_HR failure !!');
                                        var obj = Ext.decode(response.responseText);
                                        console.log("obj:", obj);
                                        Tmp_Str = "[取得WBS報工工時]失敗!! <br>"
                                                         + obj["Rtn_Msg"];
                                        mywarnalert(Tmp_Str);
                                        //Ext.getCmp("waitlbl").setVisible(false);
                                        Proc_Msg.hide();  //使用 mask 需手動呼叫hide() 方法下
                                    } // end of failure 
                                });  // end of submit


                            }
                            finally {
                                //Proc_Msg.hide();  //使用 mask 需手動呼叫hide() 方法下
                            }

                        }
                    },  // end of 顯示資料



2>WebService 範例: WS_SAP12:  變更勾選工單之SAP工單狀態。

URLhttp://194.1.5.106/sapws/ZRFC_ZCO02.asmx  Method: PROCESS_TRANS_WEB_CO02



4>WebService – [加入服務參考]時 – 會將WebService 網址記錄在 web.config
--> AMM_PLM04可能會重覆 , 以致出現錯誤訊息(xx找到多個該合約的端點組態xx)
-->將其中一個 AMM_PLM04 刪除即可







2023年3月7日 星期二

V80204 – Detail *2 -[工作中心報工工時] [報工明細]頁 - 工時格式化 - WebService - Tab

 目的: V80204 –  Detail *2  -[工作中心報工工時] [報工明細]頁     -  .工時格式化:   小數2位

處理說明: 1>Master       -   selectionchange event
                                               Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
                                                         if (selections.length == 0) {
                                                                 return;
                                                              }
                                                     //1>>開啟  grid_D
                                                       var Tmp_store = Ext.getCmp('grid_D').store;
                                                       Tmp_store.getProxy().extraParams = np;
                                                      Tmp_store.getProxy().url = "../api/V80204API/getGridData_D";
                                                      Tmp_store.loadPage(1);

                                          2>格式化: 工時小數位2位     -    後端處理[HOUR_WK_][HOUR_OT_]
                                                         DataRow dr = ds.Tables["T1"].Rows[i];
                                                        Tmp_HOUR_WORK = double.Parse(dr["HOUR_WORK"].ToString());
                                                        Tmp_HOUR_OT = double.Parse(dr["HOUR_OT"].ToString());
                                                        dr["HOUR_WORK_"] = Tmp_HOUR_WORK.ToString("0.00");
                                                       dr["HOUR_OT_"] = Tmp_HOUR_OT.ToString("0.00");





1>*.js  - V80204
 //Detail    加入 [報工明細]頁
  var grid_D1 = Ext.create('grid_D', {
        grid_id: 'grid_D1',
        insert_btn_id: 'btn_add_D1',
        columns: J_columns_D1,
        title: '報工明細',
        store: Ext.create('gridstore_D', { model: J_gridmodel_D1 }),
        //form_items: J_formFields_D1,
        //form_id: 'myform_D1'
    });

    Ext.getCmp('tab_D').add(grid_D1); 

Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
        //MD_DB.reloadDetailStore(selections[0]);
        console.log("selections.length: ", selections.length);
        if (selections.length == 0) {
            return;
        }
           
        var Tmp_rec = selections[0];
        console.log("Tmp_rec: ", Tmp_rec);
        var Tmp_SAPNO = Tmp_rec.data["SAPNO"];
        var Tmp_WC = Tmp_rec.data["CURR_ARBPL_"];        
        console.log("Tmp_SAPNO: ", Tmp_SAPNO);
        console.log("Tmp_WC: ", Tmp_WC);
        var np = {};
        np["SAPNO"] = Tmp_SAPNO;
        np["WC"] = Tmp_WC;        

        //2>開啟  grid_D
        var Tmp_store = Ext.getCmp('grid_D').store;
        Tmp_store.getProxy().extraParams = np;
        Tmp_store.getProxy().url = "../api/V80204API/getGridData_D";
        Tmp_store.loadPage(1);

        //2>開啟  grid_D1
        console.log("open grid_D1.. ");
        Tmp_store = Ext.getCmp('grid_D1').store;
        Tmp_store.getProxy().extraParams = np;
        Tmp_store.getProxy().url = "../api/V80204API/getGridData_D1";
        Tmp_store.loadPage(1);
    });



2> *.cs
//Detail - [工作中心報工工時]頁  - WebService 傳回資料  - WS_ALS_WS01
        [HttpPost]
        public dynamic getGridData_D()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            OracleCommand cmd = new OracleCommand();
            string Tmp_SAPNO = nvc["SAPNO"];
            string Tmp_WC = nvc["WC"];
            //string Tmp_SAPNO = "22569801";
            //string Tmp_WC = "";
            DataSet ds = myfunc.getWS_ALS_WS01(Tmp_SAPNO,Tmp_WC);

            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
            double Tmp_MIN = 0;
            double Tmp_HOUR_ = 0;
            ds.Tables["T1"].Columns.Add(new DataColumn("HOUR_", typeof(string)));
            for (int i = 0; i < Tmp_Cnt; i++)
            {
                //施工人數/施工工時/施工步序                
                DataRow dr = ds.Tables["T1"].Rows[i];
                Tmp_MIN = double.Parse(dr["HOUR"].ToString());
                Tmp_HOUR_ = (Tmp_MIN / 60);
                dr["HOUR_"] = Tmp_HOUR_.ToString("0.00");                
            }  // end of  for (int i=0
            return ds;
        }


        //Detail1 - [報工明細]頁  - 工時.小數格式化
        [HttpPost]
        public dynamic getGridData_D1(bool par_paging = true)
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            OracleCommand cmd = new OracleCommand();
            string Tmp_SAPNO = nvc["SAPNO"];
            string Tmp_WC = nvc["WC"];            

            string Tmp_Sql = "SELECT RNK, JCN, ACT, WC, CAST(HOUR_WORK as decimal(3, 2)) HOUR_WORK,CAST(HOUR_OT as decimal(3, 2)) HOUR_OT, DATA_DATE, EMPLYNM "
                                       + "FROM   (SELECT  dense_rank()  over(order by  JCN,ACT) as RNK,"
                                                       + "    a.JCN,a.ACT,a.WC,round(a.HOUR_WORK/60,2) HOUR_WORK,  "
                                                       + "     round(a.HOUR_OT / 60, 2) HOUR_OT,a.DATA_DATE,b.EMPLYNM  "
                                                   + " FROM (   SELECT   JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT, DATA_DATE  "
                                                                     + "    FROM    HOUR.ALS_HOUR_COMP @ALS_HOUR  "
                                                                     + "    WHERE  JCN = LPAD(" + myfunc.AA(Tmp_SAPNO) + ", 12, 0)  "
                                                                     + "  union all   "
                                                                 + "   SELECT    JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT, DATA_DATE  "
                                                                     + "   FROM     HOUR.ALS_HOUR_COMP_HISTORY @ALS_HOUR  "
                                                                     + "   WHERE   JCN = LPAD(" + myfunc.AA(Tmp_SAPNO) + ", 12, 0)  "
                                                                     + "    ORDER  BY   ACT, WC  "
                                                                     + " ) a, HR_EMPLYM b   "
                                                      + " WHERE   a.WORK_ID = b.EMPLYID(+)  "
                                                      + "  ORDER   BY  a.ACT  ";
            Tmp_Sql = Tmp_Sql + "   )   ";
            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            //匯出時 ,取全部資料, par_paging =true            
            DataSet ds = getDataTable(cmd, countSql, par_paging);

            //將[工時] 轉換成小數2位
            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
            double Tmp_HOUR_OT = 0;
            double Tmp_HOUR_WORK = 0;
            ds.Tables["T1"].Columns.Add(new DataColumn("HOUR_WORK_", typeof(string)));
            ds.Tables["T1"].Columns.Add(new DataColumn("HOUR_OT_", typeof(string)));
            for (int i = 0; i < Tmp_Cnt; i++)
            {
                //施工人數/施工工時/施工步序                
                DataRow dr = ds.Tables["T1"].Rows[i];
                Tmp_HOUR_WORK = double.Parse(dr["HOUR_WORK"].ToString());
                Tmp_HOUR_OT = double.Parse(dr["HOUR_OT"].ToString());
                dr["HOUR_WORK_"] = Tmp_HOUR_WORK.ToString("0.00");
                dr["HOUR_OT_"] = Tmp_HOUR_OT.ToString("0.00");
            }  // end of  for (int i=0

            return ds;
        }




2023年1月18日 星期三

V80201 - store 重設 timeout & WebService 重設 timeout -T1C - ds2T1C

 目的: V80201 - store 重設 timeout  & WebService 重設 timeout - 顯示子件資料

處理說明: 呼叫WebService(WS_PDM02) 顯示子件資料 
                    1> 後端 Webservice.重設 timeout  - web.config  - 10分鐘
                        <binding name="ServiceSoap"  
                          receiveTimeout="00:10:00"   .. >

                    2> 前端 store.重設 timeout   - 10分鐘
                        Ext.getCmp('sub_Grid').store.proxy.timeout=600000;

                  3>Ext.Ajax 設定 timeout  - 10 分鐘
                      Ext.Ajax.timeout = 600000; //如果有ajax timeout問題可以加上去



1>web.config -  後端 Webservice.重設 timeout - 10分鐘
<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="ILdapServiceHttpBinding" />
        <binding name="TLSWebServiceSoap" />
        <binding name="ID40AuthenticateSoap" />
        <binding name="AMMWebServiceSoap" />
        <binding name="zm179TlsSoap" />
        <binding name="ZRFC_ZM66Soap" maxBufferPoolSize="524288" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647" />
        <binding name="ws_als_wbshourSoap" receiveTimeout="00:15:00"     
                     sendTimeout="00:15:00"/>
        <binding name="ServiceSoap"  
                 receiveTimeout="00:10:00" 
                 sendTimeout="00:10:00"
                 maxBufferPoolSize="524288" 
                 maxBufferSize="2147483647"
                 maxReceivedMessageSize="2147483647" />
        <binding name="ws_als_jcnhourSoap" />
      </basicHttpBinding>
      <customBinding>
        <binding name="ID40AuthenticateSoap12">
          <textMessageEncoding messageVersion="Soap12" />
          <httpTransport />
        </binding>
        <binding name="zm179TlsSoap12">
          <textMessageEncoding messageVersion="Soap12" />
          <httpTransport />
        </binding>
        <binding name="ServiceSoap12">
          <textMessageEncoding messageVersion="Soap12" />
          <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="http://aidcldap/ldapService.do" binding="basicHttpBinding"
        bindingConfiguration="ILdapServiceHttpBinding" contract="aidcldap.ILdapServicePortType"
        name="ILdapServiceHttpPort" />
      <endpoint address="http://192.30.8.210:8503/TLSWebService.asmx"
        binding="basicHttpBinding" bindingConfiguration="TLSWebServiceSoap"
        contract="TLSWS.TLSWebServiceSoap" name="TLSWebServiceSoap" />
      <endpoint address="http://192.168.99.36/aeispj/aeis/webservice/id40Authenticate.asmx"
        binding="basicHttpBinding" bindingConfiguration="ID40AuthenticateSoap"
        contract="iAIDCWebservice.ID40AuthenticateSoap" name="ID40AuthenticateSoap" />
      <endpoint address="http://192.30.8.240:8100/AMMWebService.asmx"
        binding="basicHttpBinding" bindingConfiguration="AMMWebServiceSoap"
        contract="AMMWS_TEST.AMMWebServiceSoap" name="AMMWebServiceSoap" />
      <endpoint address="http://aesweb/SAP/Zm179tls.asmx" binding="basicHttpBinding"
        bindingConfiguration="zm179TlsSoap" contract="ZM179.zm179TlsSoap"
        name="zm179TlsSoap" />
      <endpoint address="http://194.1.5.106/SAPWS/ZRFC_ZM66.asmx" binding="basicHttpBinding"
        bindingConfiguration="ZRFC_ZM66Soap" contract="ZRFC_ZM66.ZRFC_ZM66Soap"
        name="ZRFC_ZM66Soap" />
      <endpoint address="http://194.1.5.106/sapws/ws_als_wbshour.asmx"
        binding="basicHttpBinding" bindingConfiguration="ws_als_wbshourSoap"
        contract="ws_als_wbshour.ws_als_wbshourSoap" name="ws_als_wbshourSoap" />
      <endpoint address="http://enovia/AMM/Service.asmx" binding="basicHttpBinding"
        bindingConfiguration="ServiceSoap" contract="PDM_WS.ServiceSoap"
        name="ServiceSoap" />
      <endpoint address="http://194.1.5.106/sapws/ws_als_jcnhour.asmx"
        binding="basicHttpBinding" bindingConfiguration="ws_als_jcnhourSoap"
        contract="ws_als_jcnhour.ws_als_jcnhourSoap" name="ws_als_jcnhourSoap" />
    </client>
  </system.serviceModel>
</configuration>

2> 前端 store.重設 timeout   - V80201A1.js
var win1 = getMyWindow("顯示子件明細資料", sub_ShowPNDetail_Flds, sub_ShowPNDetail_Btns, "A1");
    win1.x =400;
win1.setWidth(700);
    win1.setHeight(400);
    //顯示 sub Grid 資料        
    var np = {};
    np["PROJID"] = Ext.getCmp("sub_PROJID").getValue();
    np["PDM_CONFIG"] = Ext.getCmp("sub_PDM_CONFIG").getValue();    
    np["PDTP"] = Ext.getCmp("sub_PDTP").getValue();
    np["TYPE"] = Ext.getCmp("sub_TYPE").getValue();
    //目前所選件號(PN),ECNO,情況處理碼(CNDPROCCODE)
    np["PN"] = par_PN;
    np["ECNO"] = par_ECNO;
    np["CNDPROCCODE"] = par_CNDPROCCODE;
    np["ASN"] = par_ASN;    
    np["PROCWC"] = par_PROCWC;    

    Ext.getCmp('sub_Grid').store.getProxy().url = '../api/V80201A1API/getsubData';
    Ext.getCmp('sub_Grid').store.getProxy().extraParams = np; //分頁OK,篩選條件OK
   //Ext.getCmp('sub_Grid').store.clearOnPageLoad = true;
    //Ext.getCmp('sub_Grid').reloadGridData();    
//重新設定store.proxy 的timeout 時間(10分鐘), 以免store載入時間 timeuot , 出現 Error
    Ext.getCmp('sub_Grid').store.proxy.timeout=600000;    
    Ext.getCmp('sub_Grid').store.on("load", function (me, records, successful, eOpts) {
        console.log("STEP2 Ext.getCmp(sub_Grid).store.on(load ..");
        console.log("successful:", successful);
        console.log("records:", records);
        if (successful) {
            console.log("successful");
            console.log("Ext.getCmp('sub_Grid').store.data", Ext.getCmp('sub_Grid').store.data);
            win1.show();
            //若已載入完成,則            
            //Ext.getCmp('waitlbl').setVisible(false);         
            Ext.getCmp("myMask").hide();
            //myMask.unmask();                    
            //myMask.hide();                                
        }
    }
    );
    Ext.getCmp('sub_Grid').store.load();
    console.log(" STEP 1 Ext.getCmp('sub_Grid').store.load() ");
    Ext.getCmp('sub_Grid_ptb').hide();
    

};  // end of function ShowPNBtn_click() {

3>*.cs - V80201A1APIController.cs

//重新設定WebService 的timeout 時間(10分鐘), 以免呼叫 WebService  timeuot , 出現 Error
      DataSet ds = PDM02.AMM_PDM02(Tmp_PN, Tmp_ECNO,Tmp_CNDPROCCODE, Tmp_PDTP,                    
                                                                 Tmp_ASN,Tmp_PROJID, Tmp_PROCWC);

     //將  ds 轉成標準的  T1C 格式(TMGrid)
     ds = myfunc.ds2T1C(ds);

2022年12月12日 星期一

V80201- WebService PDM04 & PDM02 - 顯示在 TMGrid (修改成 T1 & T1C) - ds2T1C

 目的:  V80201- 生工OSM查詢 呼叫 WebService PDM04 & PDM02

處理說明:  1>VisualStudio 2019.IDE - 參考 WebService PDM04
                   2>呼叫 WebService.method
                   3>將 WebService傳回的 ds 顯示在 Grid (改成  T1 & T1C  格式)


 1>VisualStudio 2019.IDE - 參考 WebService PDM04




2>呼叫 WebService.method
// for getWebService_M
        [HttpPost]
        public dynamic getWebService_M()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_PN = myfunc.null2str(nvc["s_PN"]);
            string Tmp_ECNO = myfunc.null2str(nvc["s_ECNO"]);
            string Tmp_PDM_CONFIG = myfunc.null2str(nvc["s_PDM_CONFIG"]);
            string Tmp_PDTP = myfunc.null2str(nvc["s_PDTP"]);
            string Tmp_FACWC = myfunc.null2str(nvc["s_FACWC"]);
            string Tmp_ACNO = myfunc.null2str(nvc["s_ACNO"]);
            string Tmp_MKNO = myfunc.null2str(nvc["s_MKNO"]);
            string Tmp_CNDPROCCODE = myfunc.null2str(nvc["s_CNDPROCCODE"]);
            string Tmp_STAT = myfunc.null2str(nvc["s_STAT"]);
            string Tmp_PROCDT1 = "";
            string Tmp_PROCDT2 = "";
            string Tmp_CHKDT1 = "";
            string Tmp_CHKDT2="";
            //處理完成日期
            //string Tmp_PROCDT1 = myfunc.null2str(nvc["s_PROCDT1"]);
            if (!myfunc.checkisnull(nvc["s_PROCDT1"]))
            {
                Tmp_PROCDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_PROCDT1"]));
            };
            //string Tmp_PROCDT2 = myfunc.null2str(nvc["s_PROCDT2"]);
            if (!myfunc.checkisnull(nvc["s_PROCDT2"]))
            {
                Tmp_PROCDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_PROCDT2"]));
            };
            ////預計編審完成日期
            //string Tmp_CHKDT1 = myfunc.null2str(nvc["s_CHKDT1"]);
            if (!myfunc.checkisnull(nvc["s_CHKDT1"]))
            {
                Tmp_CHKDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_CHKDT1"]));
            };
            //string Tmp_CHKDT2 = myfunc.null2str(nvc["s_CHKDT2"]);
            if (!myfunc.checkisnull(nvc["s_CHKDT2"]))
            {
                Tmp_CHKDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_CHKDT2"]));
            };
            string Tmp_DT1, Tmp_DT2;
            AMM_PDM04.ServiceSoapClient PDM04 = new AMM_PDM04.ServiceSoapClient();
            DataSet ds;
            if (Tmp_STAT=="C")
            {
                Tmp_DT1 = Tmp_PROCDT1;
                Tmp_DT2 = Tmp_PROCDT2;
                ds = PDM04.AMM_PDM04(Tmp_PN, Tmp_ECNO, Tmp_PDM_CONFIG, Tmp_PDTP, Tmp_ACNO,
                                                                  Tmp_FACWC, Tmp_STAT, Tmp_DT1, Tmp_DT2, Tmp_MKNO,
                                                                  Tmp_CNDPROCCODE);
            }
            else
            {
                Tmp_DT1 = Tmp_CHKDT1;
                Tmp_DT2 = Tmp_CHKDT2;
                ds = PDM04.AMM_PDM01(Tmp_PN, Tmp_ECNO, Tmp_PDM_CONFIG, Tmp_PDTP, Tmp_ACNO,
                                                                  Tmp_FACWC, Tmp_STAT, Tmp_DT1, Tmp_DT2, Tmp_MKNO,
                                                                   Tmp_CNDPROCCODE);
            }


//3>將 WebService傳回的 ds 顯示在 Grid  (改成 TMGrid格式  - T1 & T1C )
            myfunc.ds2T1C(ds);
            /*
            DataTable dt = ds.Tables[0];
            dt.TableName = "T1";
            DataTable dt1 = ds.Tables.Add("T1C");
            dt1.Columns.Add("TOTAL", typeof(Int32));
            DataRow dr = ds.Tables["T1C"].NewRow();
            dr["TOTAL"] = dt.Rows.Count;
            ds.Tables["T1C"].Rows.Add(dr);
            */
            return ds;
        }




2022年12月6日 星期二

V80201 - WebService 定義呼叫 操作說明 & 顯示傳回資料說明 - 若資料空白,則顯示"無符合的資料!!" - 錯誤訊息: 找到多個合約端點組態

 目的: V80201 - WebService 呼叫 & 顯示傳回資料說明  - AMM_PDM04

處理說明: 呼叫 WebService的步驟
                  1>將 WebService 的網址加入 專案  
                       - 方案總管 --> 參考  --> 加入服務參考
                       Ex: http://enovia/AMM/Service.asmx Method: AMM_PDM04
                  2>完成後, 
                       - 方案總管 --> Connect Service  --> 多一 AMM_PDM04
                  3>web.config 移除重複 endpoint 
                       - web.config  --> 移除重複 endpoint of AMM_PDM04
                  4>呼叫 AMM_PDM04 函式  
                       AMM_PDM04.ServiceSoapClient PDM04 = new AMM_PDM04.ServiceSoapClient();
                       DataSet ds = PDM04.AMM_PDM04("10-43-0301-001", "","AJT", "A", "0011", 
                                                                                     "",  "C", "2000/01/01","2022/12/05","", 
                                                                                     "");
                   5>若無符合條件的資料,則顯示訊息
                         if (gridstore.data.getCount() == 0) {
                                    mywarnalert("無符合條件的資料!!");
                                }

                   6>WebService 傳回 ds.tables , 修改成 T1 & T1C


1>Visual Studio 2019 IDE 操作畫面

1.    方案總管 à 參考 à 按右鍵 à 加入服務參考

Ex:  http://enovia/AMM/Service.asmx

    Method: AMM_PDM04



 

 

 

 

 

 

 

 

 

2.於加入服務參考視窗設置參數如下圖

    Ex:    AMM_PDM01



3.確定後可至方案總管 à Connected Service查看


  

4.web.config à 將重複的endpoint 移除

  --> 否則執行時,會出現 以致出現錯誤訊息(xx找到多個該合約的端點組態xx)

  --> 將其中一個 AMM_PLM04 刪除即可

   <endpoint address="http://enovia/AMM/Service.asmx" binding="customBinding"

        bindingConfiguration="ServiceSoap122" contract="AMM_PDM01.ServiceSoap"

        name="ServiceSoap12" />





   

4.呼叫webservice所提供之function



 

程式範例

ZRFC_ZM66.ZRFC_ZM66SoapClient sap = new ZRFC_ZM66.ZRFC_ZM66SoapClient();

DataSet ds = sap.CALL_Z_RFC_ZM66("1", MATNR, null, null, null, null, null, null, null, null, null, null, null, null, null);

DataTable dt = ds.Tables[0];

 

 

Sample2:  *.cs





using TLSWEB_AMM.AMM_PDM04;

AMM_PDM04.ServiceSoapClient PDM04 = new AMM_PDM04.ServiceSoapClient();

            DataSet ds = PDM04.AMM_PDM04("10-43-0301-001", "","AJT", "A", "0011",

                     "",  "C", "2000/01/01","2022/12/05","",

                                         "");

             //將 WebService 取得的 ds , 改成 TMGrid的格式 T1 & T1C

            DataTable dt = ds.Tables[0];
            dt.TableName = "T1";
            DataTable dt1 = ds.Tables.Add("T1C");
            dt1.Columns.Add("TOTAL", typeof(Int32));
            DataRow dr = ds.Tables["T1C"].NewRow();
            dr["TOTAL"] = dt.Rows.Count;
            ds.Tables["T1C"].Rows.Add(dr);
            return ds;




實例: Web改版:  V80201 - 呼叫WebService AMM_PDM04






4>
{
                        xtype: 'button',
                        id: 'btn_Show',
                        flex: 2,
                        border: 1,
                        text: '資料顯示',
                        iconCls: 'icon-search',
                        handler: function () {
                            //檢核 [專案配置][生產工廠]不可均空白
                            var Tmp_PDM_CONFIG = Ext.getCmp('s_PDM_CONFIG').getValue();
                            var Tmp_FACWC = Ext.getCmp('s_FACWC').getValue();
                            var Tmp_Str = "";
                            if ((checkisnull(Tmp_PDM_CONFIG)) && (checkisnull(Tmp_FACWC))) {
                                Tmp_Str = "[專案配置][生產工廠]不可均空白, 敬請檢核";
                                mywarnalert(Tmp_Str);
                                return;
                            }
                         var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞                            
                            np["s_STAT"] = Ext.getCmp('s_STAT').getValue();
                            console.log(" np[s_STAT]  : ", np["s_STAT"]);
                            gridstore.getProxy().url = '../api/V80201API/getWebService_M';
                            gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK                                                        
                            gridstore.on("load", function () {
                                console.log("gridstore.onload !!");
                                if (gridstore.data.getCount() == 0) {
                                    mywarnalert("無符合條件的資料!!");
                                }
                            });
                            gridstore.load();
                        }    //end of  顯示資料.handler                       
                    },  // end of 顯示資料