2014-06-10 3 views
0

J'ai lié ODataModel avec la table en utilisant la liaison "TwoWay". J'ai besoin de permettre à l'utilisateur de modifier les lignes de la table au bas de laquelle j'ai le bouton «Enregistrer». Actuellement, même si la table est modifiable, je suis incapable de modifier les entrées dans plusieurs lignes de la table.
S'il vous plaît trouver mon code ci-dessous:Modifier plusieurs lignes de la table

var oTable = new sap.ui.table.Table("dprTable",{ 
     visibleRowCount: 4, 
     visible: true, 
     navigationMode: sap.ui.table.NavigationMode.Paginator 
    }); 

    var oColumn = new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "DBR/DPR"}), 
     template: new sap.m.Link({ 
      "target": "_blank", 
      press:[controller.onClickDemoNo,controller] 

     }).bindProperty("text","DemoId"), 
     width: "auto", 
     tooltip: "DBR/DPR" 
    }); 

    oTable.addColumn(oColumn); 

    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "Description"}), 
     template: new sap.ui.commons.TextView().bindProperty("text", "DemoDesc"), 
     width: "auto", 
     tooltip: "Description" 

    })); 

    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "Required Date"}), 
     template: new sap.ui.commons.DatePicker("",{ 
      value:{ 
       path:"ReqDate", 
       type: new sap.ui.model.type.Date({pattern: "dd-MM-yyyy"}) 
      }, 
      change: function(){ 
       console.log('the date is changed and it\'s value is'+value); 
      }, 


     }), 
     width: "auto", 
     tooltip: "Required Date" 
    })); 


    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "Requestor"}), 
     template: new sap.ui.commons.TextView().bindProperty("text", "RequestorName"), 
     width: "auto", 
     tooltip: "Requestor" 

    })); 

    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "Requestor/Project Lead"}), 
     template: new sap.ui.commons.TextView().bindProperty("text", "LeadName"), 
     width: "auto", 
     tooltip: "Requestor/Project Lead" 

    })); 

    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "Solution"}), 
     template: new sap.ui.commons.TextView().bindProperty("text", "SolutionText"), 
     width: "auto", 
     tooltip: "Solution" 

    })); 



    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "Start Date"}), 
     template: new sap.ui.commons.DatePicker("",{ 
      value:{ 
       path:"StartDate", 
       type: new sap.ui.model.type.Date({pattern: "dd-MM-yyyy"}) 
      } 
     }), 
     width: "auto", 
     tooltip: "Start Date" 

    })); 

    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "End Date"}), 
     template: new sap.ui.commons.DatePicker("",{ 
      value:{ 
       path:"StartDate", 
       type: new sap.ui.model.type.Date({pattern: "dd-MM-yyyy"}) 
      } 
     }), 
     width: "auto", 
     tooltip: "End Date" 

    })); 

    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "Estimated Duration"}), 
     template: new sap.ui.commons.TextView().bindProperty("text", "EstDuration"), 
     width: "auto", 
     tooltip: "Estimated Duration" 

    })); 

    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "Hours"}), 
     template: new sap.m.Input("",{}).bindProperty("value", "ActDuration"), 
     width: "auto", 
     tooltip: "Hours" 

    })); 

    oTable.addColumn(new sap.ui.table.Column({ 
     label: new sap.ui.commons.Label({text: "Status"}), 
     template: new sap.ui.commons.ComboBox({items: [ 
      new sap.ui.core.ListItem({text: "New",key:"1"}), 
      new sap.ui.core.ListItem({text: "In Process",key:"2"}), 
      new sap.ui.core.ListItem({text: "Completed",key:"3"}) 
     ]}).bindProperty("value","StatusText"), 
     width: "auto", 
     tooltip: "Status" 

    })); 

    oTable.setBusyIndicatorDelay(1); 
    //oData service call 

    var oModel = new sap.ui.model.odata.ODataModel("/sap/opu/odata/sap/ZSECENTRAL_SRV",true); 
    oModel.setDefaultBindingMode("TwoWay"); 
    oModel.attachRequestSent(function (oEvent) { 
     console.log('request sent'); 
     oTable.setBusy(true); 
    }); 
    oModel.attachRequestCompleted(function() { 
      console.log('request completed'); 
      oTable.setBusy(false); 

    }); 
    oModel.attachRequestFailed(function() { 
       oTable.setBusy(false); 
    }); 

    oTable.setModel(oModel); 
    oTable.bindRows("/DEOPENDBRSet"); 

Y at-il quelque chose dans l'attente dans les paramètres? Et pour mettre à jour les enregistrements multiples dans la table dois-je utiliser quelques opérations par lots? Toute aide serait appréciée.

Merci

Répondre

1

Pour OData, une requête HTTP ne peut contenir une seule opération CRUD, à moins d'utiliser lot. Ainsi, pour la mise à jour de plusieurs enregistrements, suggérer d'utiliser le lot

+0

Merci Maya, à droite. Je n'utilise pas la liaison "TwoWay" maintenant. Au lieu de cela, j'ai écrit le gestionnaire d'événement de changement pour toutes les colonnes de la table sur le feu dont j'ajoute une opération par lot et sur le clic d'un autre bouton "Enregistrer" que j'ai sur l'écran, je soumets le lot. – Supereme

0

J'ai le même problème et je suis toujours à la recherche d'une solution. Votre problème d'origine sera expliqué ici: http://scn.sap.com/thread/3372437

Ce que je cherche toujours est, comment puis-je déclencher "une" demande de lot avec plusieurs changements (dans différents objets/entités) d'un modèle? Je voudrais quelque chose comme: oModel.applyChangesAsBatch();

Lorsque toutes les modifications sur les éléments existants sont effectuées avec des contrôles de liaison. Dans le cas d'entités nouvellement créées bien sûr, il doit y avoir un autre appel pour créer cela sur le modèle en premier. En d'autres termes: existe-t-il un moyen d'utiliser une liaison normale au modèle et d'indiquer au modèle d'envoyer toutes les modifications dans une requête (peut-être par lots) au serveur afin que le serveur puisse stocker "tout" ou " rien"?

Questions connexes