2016-01-11 2 views
0

Я внедрил кнопку сканера в приложении Fiori/UI5. Я использовал sap.ndc.BarcodeScannerButton и создал эту кнопку на контроллере (я не могу создать кнопку на моем view.xml).Fire BarcodeScannerButton после просмотра загрузок

Во всяком случае, мне нужно запустить эту кнопку после загрузки вида. У меня есть приложение с основными деталями. Кнопка сканера находится на главном экране.

Первое, что я сделал, это позвонить самой кнопке. Но моя первая проблема заключается в том, что кнопка не принимает идентификатор в качестве параметра. Он сообщает мне, что приложение не может принимать дубликат id. Так что я только что искал идентификатор кнопки. Мне удалось найти его (например, _button9), но всякий раз, когда я вызываю его через sap.ui.getCore.byId(), есть моменты, когда он возвращает «undefined». Вот почему я не могу позвонить firePress();

Еще одна проблема, с которой я столкнулся, - это поставить этот метод firePress(). Я попытался поместить его на метод onAfterRendering(), предполагая, что снова из-за неопределенной кнопки я не могу вызвать метод firePress(). Я попытался применить его к другим методам, например, после того, как данные были успешно вызваны с использованием метода attachRequestCompleted. Не повезло.

Ниже приведен код

/* 
* Copyright (C) 2009-2014 SAP SE or an SAP affiliate company. All rights reserved 
*/ 
jQuery.sap.require("sap.ca.scfld.md.controller.ScfldMasterController"); 
jQuery.sap.require("ui.s2p.srm.sc.create.util.Formatter"); 
jQuery.sap.require("sap.ndc.BarcodeScannerButton"); 

var counter = 0; 

sap.ui.controller("ui.s2p.srm.sc.create.SRM_SC_CREExtension.view.S2Custom", { 
    onInit: function() { 
     sap.ca.scfld.md.controller.ScfldMasterController.prototype.onInit.call(this); 
     this.oBundle = this.oApplicationFacade.getResourceBundle(); 
     this.isRoot = true; 
     this.oRouter.attachRouteMatched(function(e) { 
      if (e.getParameter("name") === "master" && !this.isRoot && Object.keys(e.getParameter("arguments")).length === 0) { 
       var d = sap.ui.core.routing.History.getInstance().getDirection("shoppingCartCheckout/" + this.tempCartId); 
       if (d === "Unknown") { 
        this.isRoot = true; 
        this._oControlStore.oMasterSearchField.clear() 
       } else { 
        if (this.getList() !== null) { 
         var i = this.getList().getSelectedItem(); 
         if (i !== null) { 
          //alert("setListGo"); 
          this.setListItem(i); 
         } 
        } 
       } 
      } 
      this.isRoot = (this.isRoot) ? false : this.isRoot; 

     }, this); 

     // alert(sap.ui.getCore().byId("productScanButton")); 
     this.onBarcodeScanning(); 
     this.setEmptyCart(true); 
     this.showAllProducts(); //added by salduam to show all products 
    }, 

    backToList: function() { 
     //alert("back"); 
    }, 

    getDefaultUserSettings: function(r) { 
     var o = function(D, R) { 
      this.tempCartId = D.results[0].TEMP_CART_ID; 
      if (!jQuery.device.is.phone) { 
       if (r) { 
        this.oRouter.navTo("noData", { 
         viewTitle: "DETAIL_TITLE", 
         languageKey: "NO_ITEMS_AVAILABLE" 
        }, true) 
       } else { 
        this.navToEmptyView() 
       } 
      } 
     }; 
     var d = this.oApplicationFacade.getODataModel("getdefusrset"); 
     d.read("DefaultUserSettings?ts=" + Date.now(), null, null, true, jQuery.proxy(o, this), jQuery.proxy(this.onRequestFailed, this)) 
    }, 

    applySearchPatternToListItem: function(i, f) { 

     if (f.substring(0, 1) === "#") { 
      var t = f.substr(1); 
      var d = i.getBindingContext().getProperty("Name").toLowerCase(); 
      return d.indexOf(t) === 0 
     } else { 
      return sap.ca.scfld.md.controller.ScfldMasterController.prototype.applySearchPatternToListItem.call(null, i, f) 
     } 
    }, 

    getHeaderFooterOptions: function() { 
     var o = { 
      sI18NMasterTitle: "MASTER_TITLE", 
      buttonList: [] 
     }; 
     return o 
    }, 

    isBackendSearch: function() { 
     return true 
    }, 

    //call startReadListData with parameter wildcard 
    showAllProducts: function(e) { 
     var startSearchText = "*"; 
     this.startReadListData(startSearchText); 
     //alert("called"); 

    }, 

    applyBackendSearchPattern: function(f, b) { 
     //added by salduam 
     //if search field is blank, automatically call showAllProducts 
     if (f == "") { 
      this.showAllProducts() 
     }; 

     if (f != "" && f != null) { 
      this.startReadListData(f) 
     } else { 
      this.setEmptyCart(false) 
     } 
    }, 

    startReadListData: function(f) { 

     var o = function(D, r) { 
      var m = new sap.ui.model.json.JSONModel(D.results); 
      this.getView().setModel(m); 
      this.getList().destroyItems(); 
      this.getList().bindAggregation("items", { 
       path: "/", 
       template: this.oTemplate.clone(), 
       filter: [], 
       sorter: null 
      }); 
      this.registerMasterListBind(this.getList()); 
     }; 
     var e = encodeURIComponent(f); 
     //console.log("EEEE-----"+ e); 
     var d = this.oApplicationFacade.getODataModel(); 
     //console.log(d); 
     d.read("CATALOG_ITEM?$filter=startswith(description,'" + e + "')&$top=20", null, null, true, jQuery.proxy(o, this), jQuery.proxy(this.onRequestFailed, 
      this)); 
    }, 

    setListItem: function(i) { 
     // alert("onClick"); 
     var b = i.getBindingContext(); 

     var m = b.oModel.oData[parseInt(b.sPath.split('/')[1])]; 
     this.oRouter.navTo("detail", { 
      tempCartId: this.tempCartId, 
      contextPath: b.getPath().substr(1) 
     }, true); 
     var c = sap.ui.core.Component.getOwnerIdFor(this.oView); 
     var C = sap.ui.component(c); 
     C.oEventBus.publish("ui.s2p.srm.sc.create", "refreshDetail", { 
      data: m 
     }); 

    }, 

    setEmptyCart: function(r) { 

     var e = new sap.ui.model.json.JSONModel({ 
      results: [] 
     }); 
     this.oRouter.navTo("noData", { 
      viewTitle: "DETAIL_TITLE", 
      languageKey: "NO_ITEMS_AVAILABLE" 
     }, true); 
     this.getView().setModel(e); 
     this.oTemplate = new sap.m.ObjectListItem({ 
      type: "{device>/listItemType}", 
      title: "{matnr}", 
      press: jQuery.proxy(this._handleItemPress, this), 
      number: "{parts:[{path:'itm_price'},{path:'itm_currency'}],formatter:'ui.s2p.srm.sc.create.util.Formatter.formatPrice'}", 
      numberUnit: "{itm_currency}", 
      attributes: [new sap.m.ObjectAttribute({ 
       text: "{description}" 
      })], 
     }); 
     this.getList().bindAggregation("items", { 
      path: "/results", 
      template: this.oTemplate, 
      filter: [], 
      sorter: null, 
     }); 
     this.registerMasterListBind(this.getList()); 
     this.getDefaultUserSettings(r) 
    }, 

    onRequestFailed: function(e) { 
     jQuery.sap.require("sap.ca.ui.message.message"); 
     sap.ca.ui.message.showMessageBox({ 
      type: sap.ca.ui.message.Type.ERROR, 
      message: e.message, 
      details: e.response.body 
     }) 
    }, 

    onExit: function() {}, 

    onBarcodeScanning: function(oEvent) { 
     var productScanButton = new sap.ndc.BarcodeScannerButton({ 
      provideFallback: "{/btnFallback}", 
      width: "100%", 
      scanSuccess: function(oEvent) { 
       var barcodeID = oEvent.getParameter("text"); 
       sap.m.MessageToast.show(barcodeID); 
       var searchField = sap.ui.getCore().byId("__field3"); 
       searchField.setValue(barcodeID); 

       searchField.fireSearch(); 
      } 
     }); 
     this.getView().byId("barCodeVBox").addItem(productScanButton); 
    }, 

    onAfterRendering: function(oEvent) {}, 

    onBeforeRendering: function() {} 

}); 

ответ

0

Для размещения метод огня(). Вы пытаетесь отобразить всплывающее считывающее устройство для штрих-кодов? что-то похожее на всплывающее окно приложения «SD_SO_CRE» (где диалог выбора клиента загружается до основного вида). они не решают задачу с огнем() ...

+0

Да. Это на самом деле мой сценарий. Так или иначе. Думаю, вы ответили на вопрос о загрузке диалогового окна выбора. Спасибо. – melai

Смежные вопросы