0
votes

I work in durandal project and use breeze entities.

In my project, I need to create client entity, and on the creating, give initialValues.

Normally, whant you want to give initialValues to new entity, you pass it to createEntity function.

For example:

dataContext.createEntity('employee', {age:40, city:'OurCity'});

So you get new empty instance of employee with default data for age and city. I want to do it with entity type that contain complexFields. But it doesn't work.

My entity is client-entity.

Here is the code:

  addFormType(store);
    function addFormType(store) {
        store.addEntityType({
            shortName: "FormDTO",
            autoGeneratedKeyType: AutoGeneratedKeyType.Identity,
            dataProperties: {
                key: {//auto primary key. numeratorA and Code cannot be key, becose for new records thier aren't unique
                    dataType: DataType.Int32, isNullable: false, isPartOfKey: true
                }
                TaxYear: {
                    dataType: DataType.String, validators: [Validator.required({ message: 'דרוש' })]
                },
                Unit_A: {
                    name: "FormUnit_A",
                    complexTypeName: 'FormUnit_A:#'
                }
            }

        });
        store.registerEntityTypeCtor("FormDTO", null, FormInit);
    }

    function FormInit(entity) {
        validationHelper.initializer(entity);
    }

    addFormUnit_AType(store);
    function addFormUnit_AType(store) {
        store.addEntityType({
            shortName: "FormUnit_A",
            isComplexType: true,
            dataProperties: {
                CompanyName: {
                    dataType: DataType.String
                },
                CompanyAddress: {
                    dataType: DataType.String
                }
            }

        });
        store.registerEntityTypeCtor("FormUnit_A", null, null);
    }

I tried to initial it by the follwing rows:

 var defaultData = {
 TaxYear:0,
 Unit_A:{
    CompanyName:'ourCompany',
    CompanyAddress:'Zar 200 OurCity'
 }
};
clientManager.createEntity('FormDTO', defaultData);

But it throws exception: "Object doesn't support property or method 'getProperty'"

I tried also to pass an One-layer object with all of the properties:

var defaultData = {

 TaxYear:0,   
 CompanyName:'ourCompany',
 CompanyAddress:'Zar 200 OurCity'  

};

clientManager.createEntity('FormDTO', defaultData);

But it throws exception:Object doesn't support property or method 'CompanyName'

So what is the correct way to create-entity with initialValues whan entity contain complex type?

1

1 Answers

0
votes

Based of what is working in your project it sounds like you are using something like a camelCase strategy for naming your client side properties. If that is not the case please excuse this answer.

If that is the case then why aren't you using camelCased properties when creating your complex types? Seems simple enough -

var defaultData = {
 taxYear:0,
 unit_A:{
    companyName:'ourCompany',
    companyAddress:'Zar 200 OurCity'
 }
};
clientManager.createEntity('FormDTO', defaultData);