如何在Rally中创建新的TimeEntryValue

时间:2016-05-22 06:13:03

标签: rally code-rally

我对Rally API和JS以及Stackoverflow相当新。到目前为止,我一直在使用Stackoverflow来回答我的所有问题,但我似乎无法找到有关添加新TimeEntryValues的任何信息。

我正在构建一个允许添加新TimeEntryValues的应用。我可以添加或加载TimeEntry 但是对于TimeEntryValues,我似乎只在浏览器中查看跟踪时发布了“小时”字段。

这是一个展示相同问题的简化代码。

    launch: function(){      
    //For this example, pre-define Time Entry Reference, Date, and Hour value
    var myTimeEntryItem = "/timeentryitem/1234";
    var myDateValue = "2016-05-20T00:00:00.000Z";
    var myHours = 2.5;

    //Check if Time Entry Value (TEV) already exists
    var TEVstore = Ext.create('Rally.data.WsapiDataStore', {
        model: 'TimeEntryValue',
        fetch: ['ObjectID','TimeEntryItem','Hours','DateVal'],
        filters: [{
            property: 'TimeEntryItem',
            operator: '=',
            value: myTimeEntryItem
        },
        {
            property: 'DateVal',
            operator: '=',
            value: myDateValue
        }],

        autoLoad: true,
        listeners: {
            load: function(TEVstore, tevrecords, success) {
                //No record found - TEV does not exist
                if (tevrecords.length === 0) {
                    console.log("Creating new TEV record");

                    Rally.data.ModelFactory.getModel({
                        type: 'TimeEntryValue',
                        success: function(tevModel) {
                            var newTEV = Ext.create(tevModel, {
                                DateVal: myDateValue,
                                Hours: myHours,
                                TimeEntryItem: myTimeEntryItem
                            });

                            newTEV.save({
                                callback: function(result, operation) {
                                    if(operation.wasSuccessful()) {
                                        console.log("Succesful Save");
                                        //Do something here
                                    }
                                }
                            });
                        }
                    });
                } else {
                    console.log("TEV Record exists.");
                    //Do something useful here
                }
            }
        },
        scope: this
    });                            
}

我非常感谢任何暗示我做错的提示。 感谢

1 个答案:

答案 0 :(得分:0)

这实际上是App SDK中长期存在的缺陷,原因是WSAPI属性元数据与用于将数据持久保存到服务器的客户端模型不匹配。

基本上发生的事情是DateVal和TimeEntryItem字段被标记为required和readonly,这没有意义。实际上,它们需要在创建时可写,然后在之后只读。

因此,在您尝试保存新的TimeEntryValue之前,只需将DateVal和TimeEntryItem字段标记为可持久性,您需要在应用程序中执行所有操作。您应该好好去。

//workaround
tevModel.getField('DateVal').persist = true;
tevModel.getField('TimeEntryItem').persist = true;

//proceed as usual
var newTEV = Ext.create(tevModel, {
    DateVal: myDateValue,
    Hours: myHours,
    TimeEntryItem: myTimeEntryItem
});
// ...