SSIDEV
SSIDEV

Reputation: 5

How to save child properties?

Breeze & Angular & MV*

I get an invoice object and expand it's necessary properties: Customer, Details, etc.

To access detail properties is easy, invoice.detail[n].property. And saving changes to existing properties (1 - n) is also easy. In my UI, I simply loop through my object vm.invoice.details to get & display all existing details, bind them to inputs, edit at will, call saveChanges(), done!

(keep in mind, in this UI, I need to complete the following too....)

Now, I have blank inputs for a new detail I need to insert.

However, I need to insert a new detail into the existing array of invoice details.

For example: invoice #5 has 3 details (detail[0], detail[1], detail[2]). I need to insert into this existing invoice, detail[3], and call saveChanges()

I've tried to call the manger.createEntity('invoice') but it complains about FK constraints. I know you can pass values as a second argument in createEntity('obj', newvalues)...but is that the correct and only method?

Seems like this should all be much easier but, well, I am at a loss so, please help where you can. TIA!

Upvotes: 0

Views: 100

Answers (2)

Ward
Ward

Reputation: 17863

Take a look at the DocCode sample which has tests for all kinds of scenarios including this one.

Perhaps the following provides the insight you're looking for:

function addNewDetail() {
    var newDetail = manager.createEntity('Detail', {
        invoice: vm.currentInvoice,
        ... other initial values
     });

    // the newDetail will show up automatically if the view is bound to vm.details
}

Notice that I'm initializing the parent invoice navigation property. Alternatively, I could just set the Detail entity's FK property inside the initializer:

...
invoiceId: vm.currentInvoice.id,
...

Either way, Breeze will add the new detail to the details collection of the currentInvoice.

Your question spoke in terms of inserting the new Detail. There is no need to insert the new Detail manually and you can't manage the sort order of the vm.currentInvoice.details property any way.

Breeze has no notion of sort order for collection navigation properties.

If you need to display the details in a particular order you could add a sorting filter to your angular binding to vm.currentInvoice.details.

Upvotes: 1

ashishraaj
ashishraaj

Reputation: 761

Make sure you have correct EntityName, because sometimes creating entity is a not as simple as it seems.Before working with entities see

http://www.getbreezenow.com/documentation/creating-entities

I will suggest you to look ur metadata file, go to last line of your file, you can see the field named "entitySet"

"entitySet":{"name":"Entity_Name","entityType":"Self.Entity_Name"} 

check the entityName here i took as "Entity_Name" and then try to create the entity and use this name

  manger.createEntity('Entity_Name');

Upvotes: 0

Related Questions