public ContactsEditorViewModel()
        {
            SelectedContact = (Observable<ObservableContact>)ValidatedObservableFactory.ValidatedObservable(new ObservableContact());

            Contacts = new EntityDataViewModel(10, typeof(Contact),true);

            Contacts.OnSelectedRowsChanged += OnSelectedRowsChanged;
            Contacts.FetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' returntotalrecordcount='true' no-lock='true' distinct='false' count='{0}' paging-cookie='{1}' page='{2}'>
                <entity name='contact'>
                    <attribute name='firstname' />
                    <attribute name='lastname' />
                    <attribute name='telephone1' />
                    <attribute name='birthdate' />
                    <attribute name='accountrolecode' />
                    <attribute name='parentcustomerid'/>
                    <attribute name='transactioncurrencyid'/>
                    <attribute name='creditlimit'/>
                    <attribute name='numberofchildren'/>
                    <attribute name='contactid' />{3}
                  </entity>
                </fetch>";

            // Register validation
            ContactValidation.Register(Contacts.ValidationBinder);
            ContactValidation.Register(new ObservableValidationBinder(this.SelectedContact));
        }
        public ConnectionsViewModel(EntityReference parentRecordId, string[] connectToTypes, int pageSize, FetchQuerySettings view)
        {
            Connections = new EntityDataViewModel(pageSize, typeof(Connection), true);
            if (view != null)
            {
                _viewFetchXml = QueryParser.GetFetchXmlParentFilter(view, "record1id");
                // Set initial sort
                _defaultSortCol=new SortCol(view.OrderByAttribute, !view.OrderByDesending);
            }
           
            ParentRecordId.SetValue(parentRecordId);
         
            ObservableConnection connection = new ObservableConnection(connectToTypes);
            connection.Record2Id.SetValue(parentRecordId);
            ConnectionEdit = (Observable<ObservableConnection>)ValidatedObservableFactory.ValidatedObservable(connection);

            Connections.OnDataLoaded.Subscribe(Connections_OnDataLoaded);
            ConnectionEdit.GetValue().OnSaveComplete += ConnectionsViewModel_OnSaveComplete;
            ObservableConnection.RegisterValidation(Connections.ValidationBinder);
            AllowAddNew = Knockout.DependentObservable<bool>(AllowAddNewComputed);
        }
        public QuoteLineItemEditorViewModel()
        {
            Lines = new EntityDataViewModel(10, typeof(QuoteDetail), false);

            Lines.OnSelectedRowsChanged += OnSelectedRowsChanged;
            Lines.FetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' returntotalrecordcount='true' no-lock='true' distinct='false' count='{0}' paging-cookie='{1}' page='{2}'>
                              <entity name='quotedetail'>
                                <attribute name='productid' />
                                <attribute name='productdescription' />
                                <attribute name='priceperunit' />
                                <attribute name='quantity' />
                                <attribute name='extendedamount' />
                                <attribute name='quotedetailid' />
                                <attribute name='isproductoverridden' />
                                <attribute name='ispriceoverridden' />
                                <attribute name='manualdiscountamount' />
                                <attribute name='lineitemnumber' />
                                <attribute name='description' />
                                <attribute name='transactioncurrencyid' />
                                <attribute name='baseamount' />
                                <attribute name='requestdeliveryby' />
                                <attribute name='salesrepid' />
                                <attribute name='uomid' />
                                {3}
                                <link-entity name='quote' from='quoteid' to='quoteid' alias='ac'>
                                  <filter type='and'>
                                    <condition attribute='quoteid' operator='eq' uiname='tes' uitype='quote' value='" + GetQuoteId() + @"' />
                                  </filter>
                                </link-entity>
                              </entity>
                            </fetch>";

            Lines.SortBy(new SortCol("lineitemnumber", true));
            Lines.NewItemFactory = NewLineFactory;
            QuoteDetailValidation.Register(Lines.ValidationBinder);
            SelectedQuoteDetail.SetValue(new ObservableQuoteDetail());

        }