Current filter:
                                You should refresh the page.

                                You are using an older version of the DevExpress Support Center.

                                  • After upgrade to 19.2.5 getting this exception when navigating to another page then the one where I have chart
                                    Its two different exceptions but looks to me like the root cause is the same
                                    the entire part that holds charts  either destroyed upon navigation away

                                    Pls help, since I use charts on the dashboard page of the app and its pretty useless without it

                                    exception.handler.ts:18 Error: Uncaught (in promise): TypeError: Cannot read property 'scheduleHiding' of null
                                    TypeError: Cannot read property 'scheduleHiding' of null
                                        at inheritor._scheduleLoadingIndicatorHiding (loading_indicator.js:157)
                                        at inheritor._onBeginUpdate (loading_indicator.js:170)
                                        at inheritor.beginUpdate (base_widget.js:408)
                                        at inheritor.beginUpdate (class.js:17)
                                        at inheritor.resetOption (component.js:436)
                                        at inheritor.resetOption (dom_component.js:326)
                                        at inheritor.resetOption (class.js:17)
                                        at DxoLabelComponent.push…/node_modules/devextreme-angular/fesm5/devextreme-angular-core.js.BaseNestedOption._resetOption (devextreme-angular-core.js:399)
                                        at DxoLabelComponent.push…/node_modules/devextreme-angular/fesm5/devextreme-angular-ui-nested.js.DxoLabelComponent.ngOnDestroy (devextreme-angular-ui-nested.js:23293)
                                        at callProviderLifecycles (core.js:21420)
                                        at resolvePromise (zone.js:852)
                                        at resolvePromise (zone.js:809)
                                        at zone.js:913
                                        at ZoneDelegate.push…/node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
                                        at Object.onInvokeTask (core.js:26247)
                                        at ZoneDelegate.push…/node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422)
                                        at Zone.push…/node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195)
                                        at drainMicroTaskQueue (zone.js:601)
                                        at ZoneTask.push…/node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:502)
                                    
                                    exception.handler.ts:18 TypeError: Cannot read property 'scheduleHiding' of null
                                        at inheritor._scheduleLoadingIndicatorHiding (loading_indicator.js:157)
                                        at inheritor._onBeginUpdate (loading_indicator.js:170)
                                        at inheritor.beginUpdate (base_widget.js:408)
                                        at inheritor.beginUpdate (class.js:17)
                                        at inheritor.resetOption (component.js:436)
                                        at inheritor.resetOption (dom_component.js:326)
                                        at inheritor.resetOption (class.js:17)
                                        at DxoTitleComponent.push…/node_modules/devextreme-angular/fesm5/devextreme-angular-core.js.BaseNestedOption._resetOption (devextreme-angular-core.js:399)
                                        at DxoTitleComponent.push…/node_modules/devextreme-angular/fesm5/devextreme-angular-ui-nested.js.DxoTitleComponent.ngOnDestroy (devextreme-angular-ui-nested.js:40625)
                                        at callProviderLifecycles (core.js:21420)

                                    here is my template if it helps somehow

                                    [HTML]
                                    <m4u-page [Page]="THIS" [IsScrollable]="true"> <page-content-scroll> <dx-speed-dial-action *ngIf="IsAllow(['OpportunitiesNew'])" icon="m4u-icon ico-opportunity-white" label="{{'btnNewOpportunity' | RC}}" (onClick)="Navigate(['/pages/opportunity/new'])"> </dx-speed-dial-action> <dx-speed-dial-action *ngIf="IsAllow(['ProspectsNew'])" icon="m4u-icon ico-prospect-white" label="{{'btnNewProspect' | RC}}" (onClick)="Navigate(['/pages/prospect/new'])"> </dx-speed-dial-action> <dx-speed-dial-action *ngIf="IsAllow(['Activities'])" icon="m4u-icon ico-activity-white" label="{{'btnNewActivity' | RC}}" (onClick)="Navigate(['/pages/activity/new'])"> </dx-speed-dial-action> <dx-speed-dial-action *ngIf="IsAllow(['Quotes'])" icon="m4u-icon ico-quote-white" label="{{'btnNewQuote' | RC}}" (onClick)="Navigate(['/pages/quote/new'])"> </dx-speed-dial-action> <m4u-section> <div class="m4u-h100"> <dx-list *ngIf="dashboardCards" class="m4u-cardlist m4u-multicolumnlist m4u-nested" [dataSource]="dashboardCards"> <div *dxTemplate="let card of 'item'"> <app-dashboardcard [Entity]="card"></app-dashboardcard> </div> </dx-list> </div> </m4u-section> <m4u-section> <m4u-rlayout> <m4u-column1> <m4u-card> <simple-card> <m4u-section Label="{{ 'lblChartByInterestedIn' | RC }}"> <dx-chart [dataSource]="DS('ChartByInterestedIn').Data" (onPointClick)="OnInterestedInClicked($event)"> <dxi-series argumentField="Text" valueField="Value" type="bar" color="#f9ce2d"> <dxo-label [visible]="false"> </dxo-label> </dxi-series> <dxo-legend [visible]="false"></dxo-legend> <dxo-common-axis-settings> <dxo-label [visible]="true" overlappingBehavior='rotate' [rotationAngle]="270"> </dxo-label> </dxo-common-axis-settings> </dx-chart> </m4u-section> </simple-card> </m4u-card> </m4u-column1> <m4u-column2> <m4u-card> <simple-card> <m4u-section Label="{{ 'lblChartByStage' | RC }}"> <dx-funnel (onItemClick)="OnStageClicked($event)" [dataSource]="DS('ChartByStage').Data" argumentField="Text" valueField="Value"> <dxo-label [visible]="true" [customizeText]="GetLabelText2" [position]="'inside'"> </dxo-label> </dx-funnel> </m4u-section> </simple-card> </m4u-card> </m4u-column2> </m4u-rlayout> </m4u-section> </page-content-scroll> </m4u-page>
                                Show all comments
                                • Artem (DevExpress Support) 12.30.2019

                                  Hi,

                                  The problem looks specific to the way you configured DataSource in your project, so I wasn't able to reproduce any errors (see the screencast attached).
                                  Would you please modify my example to demonstrate your implementation?

                                  I look forward to your results.

                                • Mike Postel 12.31.2019

                                  I bind the datasource to an object coming from our API
                                  The chart itself is drawn.. the error comes only when navigating away, meaning when it is destroyed..
                                  In the attachment you can see the chart and the object the datasource binds to

                                • Mike Postel 12.31.2019

                                  And the object

                                • Mike Postel 12.31.2019
                                  {"Entities":[{"EntryID":-1,"Text":"סאפ","Value":"3","GroupBy":"1"},{"EntryID":-1,"Text":"גוקרדיט","Value":"2","GroupBy":"2"},{"EntryID":-1,"Text":"מס"ב","Value":"1","GroupBy":"4"},{"EntryID":-1,"Text":"בילינג","Value":"4","GroupBy":"5"},{"EntryID":-1,"Text":"תקציב","Value":"1","GroupBy":"6"}],"IsSuccess":true,"ResponseCode":0}
                                • Mike Postel 12.31.2019

                                  Some of my code (doubt it helps, but still)

                                  this.DataSources[sChartName] = new DataSourceCustomAction(() => this.opportunityService.GetChart(reportParams), undefined, undefined, true);
                                  
                                  //Just pulls the object above from the server
                                  public GetChart(R: OpportunitiesReportParams): Observable<BaseEntitiesResponse<GroupedListEntity>>
                                      {
                                          return this.api.ExecutePostAction(this.ControllerName, 'GetChart', R);
                                      }
                                  
                                  //Datasource that is bound to a function returning the data
                                  export class DataSourceCustomAction extends BaseDataSourceAbstract
                                  {
                                      constructor(
                                          customLoadAction: (options: DataLoadOptions) => Observable<any>,
                                          customGetAction?: (Value: any) => Observable<any>,
                                          OnLoadedHandler?: (Data: any[]) => void,
                                          IsRaw: boolean = true,
                                          customOptions?: any)
                                      {
                                          super(
                                              new BaseDataStoreReadOnly
                                                  (
                                                  null,
                                                  null,
                                                  null,
                                                  customLoadAction,
                                                  customGetAction,
                                                  OnLoadedHandler,
                                                  IsRaw
                                                  ),
                                              customOptions);
                                      }
                                  }
                                  
                                  export class BaseDataStoreReadOnly extends BaseDataStoreAbstract
                                  {
                                      private api: APIGatewayService;
                                  
                                  constructor(
                                          private ControllerName?: string,
                                          private ActionName?: string,
                                          private QueryParams?: any,
                                          private customLoadAction?: (options?: DataLoadOptions) => Observable<any>,
                                          private customGetAction?: (Value: any) => Observable<any>,
                                          private OnLoadedHandler?: (Data: any[]) => void,
                                          private IsRaw: boolean = true,
                                          private KeyFieldName: string = "EntryID")
                                      {
                                          //Base
                                          super();
                                  
                                  //Cannot inject in constructor since we create the class manually
                                          this.api = AppInjector.get(APIGatewayService);
                                  
                                  //Create custom store. Separated because of ByKey callback, does not work if put together conditionally
                                          if (this.IsRaw)
                                          {
                                              this.m_store = new CustomStore({
                                                  key: KeyFieldName,
                                                  loadMode: "raw",
                                                  load: () => this.ImplementLoad(undefined),
                                                  onLoaded: (data) => OnLoadedHandler ? OnLoadedHandler(data) : {}
                                              });
                                  
                                  }
                                          else
                                          {
                                              this.m_store = new CustomStore({
                                                  key: KeyFieldName,
                                                  loadMode: "processed",
                                                  load: (loadOptions) => this.ImplementLoad(loadOptions),
                                                  byKey: (Value) => this.ImplementByKey(Value),
                                                  onLoaded: (data) => OnLoadedHandler ? OnLoadedHandler(data) : {}
                                              });
                                  
                                  }
                                  
                                  }
                                  
                                  //Perform the actual load
                                      private ImplementLoad(loadOptions): Promise<any>
                                      {
                                          //Prepare options object
                                          var options = new DataLoadOptions(loadOptions);
                                  
                                  if (this.customLoadAction == undefined)
                                          {
                                              return this.ShapeResponse(this.api.ExecuteGetAction(this.ControllerName, this.ActionName, { …this.QueryParams, …options.GetLoadOptions() }));
                                          }
                                          else
                                          {
                                              return this.ShapeResponse(this.customLoadAction(options));
                                          }
                                      }
                                  
                                  //Get data by key
                                      private ImplementByKey(Value: any): Promise<any>
                                      {
                                          return this.ShapeResponse(this.customGetAction(Value));
                                      }
                                  }
                                  
                                  export abstract class BaseDataStoreAbstract
                                  {
                                      protected m_store: CustomStore;
                                      public get Store(): CustomStore
                                      {
                                          return this.m_store;
                                      }
                                  
                                  //Convert the response we get from our webservice to what devexpress is expecting (array of objects)
                                      protected ShapeResponse(response: Observable<any>): any
                                      {
                                          return response.pipe(
                                              map((resultObject: any) =>
                                              {
                                                  //Make sure result is success
                                                  if (!(resultObject as BaseResponse).IsSuccess)
                                                  {
                                                      AppInjector.get(FrameworkService).UnexpectedMessage((resultObject as BaseResponse).ResponseMessage);
                                                      return [];
                                                  }
                                  
                                  //Return the internal field
                                                  if ((resultObject as BaseEntitiesResponse<BaseEntity>).Entities != undefined) return (resultObject as BaseEntitiesResponse<BaseEntity>).Entities;
                                                  if ((resultObject as BaseDataResponse<any>).Data != undefined) return (resultObject as BaseDataResponse<any>).Data;
                                                  if ((resultObject as BaseEntityResponse<BaseEntity>).Entity != undefined) return (resultObject as BaseEntityResponse<BaseEntity>).Entity;
                                  
                                  //If got here, something is wrong
                                                  console.error(resultObject);
                                                  console.error("Invalid response was returned");
                                                  return [];
                                              })).toPromise();
                                      }
                                  }
                                • Artem (DevExpress Support) 01.03.2020

                                  Hi Mike,

                                  Thank you for the update. I don't see obvious issues in this code. The problem looks specific to your implementation, and we cannot give you precise recommendations without testing the same scenario in action. Try the following steps to isolate the issue:

                                  1.Check if the problem can be reproduced when Chart is directly bound to DataSource with CustomStore without using a separate business layer (DataSourceCustomAction, BaseDataStoreReadOnly, etc.). This will help you diagnose whether the problem is specific to your Data Layer implementation.
                                  2. Try removing adjacent components, Angular bindings one by one to see which one causes the problem.
                                  3. You can split the Chart configuration code into two equal parts to make it simpler. Then, remove the first/second part and check if the problem persists. If yes, repeat the same steps with the rest of the code until the issue disappears.

                                  These steps should help you understand which configuration causes the issue and localize it in a runnable example.

                                  Your time and cooperation are greatly appreciated.

                                • Mike Postel 01.05.2020

                                  I tried your suggestion to play with the configuration option of the chart
                                  I've leaved only 1 chart on the page, and tried to remove various things to get it working
                                  I had to comment out all 3 parts below for it not to give this error
                                  Commenting out even 2 out of 3 still gave the error
                                  In addition, I have DefaultOptions in use - removing it had no effect whatsoever, works the same with or without
                                  I hope this can help somehow..

                                  [HTML]
                                  <dx-chart [dataSource]="DS('ChartByInterestedIn').Data" (onPointClick)="OnInterestedInClicked($event)"> <dxi-series argumentField="Text" valueField="Value" type="bar" color="#f9ce2d"> <!--<dxo-label [visible]="false"> </dxo-label>--> </dxi-series> <!--<dxo-legend [visible]="false"></dxo-legend>--> <!--<dxo-common-axis-settings> <dxo-label [visible]="true" overlappingBehavior='rotate' [rotationAngle]="270"> </dxo-label> </dxo-common-axis-settings>--> </dx-chart>
                                  [JavaScript]
                                  Chart.defaultOptions ({ options: { animation: { duration: 3000 }, palette: 'Soft Blue', legend: { visible: Detector.isDesktop() }, title: { horizontalAlignment: "center", font: { size: '16px', weight: 600 } }, tooltip: { enabled: Detector.isDesktop() }, argumentAxis: { label: { overlappingBehavior: 'rotate', rotationAngle: 270 } } } });
                                • Mike Postel 01.05.2020

                                  Also, this happened when I moved from 19.2.4 to 19.2.5 so maybe you can see what has changed in the chart code and it will help solving this..

                                • Artem (DevExpress Support) 01.06.2020

                                  Hi Mike,

                                  Thank you for the update. In the call stack you provided, the error comes from the _scheduleLoadingIndicatorHiding method, which hasn't been changed. However, we performed changes in devextreme-angular-ui-nested: Reset value of nested components. It looks like they affect this behavior, but we cannot tell why the problem occurs without detailed research.

                                  In the meantime, please clarify if you tried the following:

                                  Check if the problem can be reproduced when Chart is directly bound to DataSource with CustomStore without using a separate business layer (DataSourceCustomAction, BaseDataStoreReadOnly, etc.).

                                  If yes, please let us know how you configured DataSource with CustomStore in a stand-alone example.

                                  If you are unable to recreate the issue in a test sample, you can send us your entire runnable project with a test data source. If the project size is large, you can upload it to our FTP server. Let us know if you wish to use this option.

                                • Mike Postel 01.06.2020

                                  I've managed to reproduce it even with static data and no customstore at all - just binding to an array

                                  Pls see project attached, I've removed a couple of things to make it run without server enough to re-create
                                  To re-create:

                                  1. Extract to folder
                                  2. npm install
                                  3. ng serve --open --host 0.0.0.0
                                  4. Open browser at http://localhost:4200/pages/X_dashboard
                                  5. Ignore the error you will get in InitializeFramework (no server)
                                  6. You should get the dashboard screen with one chart on the page
                                  7. Navigate away by clicking the FAB button and  choosing 'New Prospect'.
                                  8. At this point, you should have the error
                                  *** Error happens if switching to any page, its not specific to navigating to this one
                                • Maxim (DevExpress Support) 01.07.2020

                                  Hi Mike,
                                  Thank you for providing us with an example. We will research this behavior.
                                  Please bear with us, we will get back to you as soon as possible.

                                • Mike Postel 01.11.2020

                                  Any update?

                                • Lex (DevExpress Support) 01.13.2020

                                  Hi Mike,

                                  At the moment, we are testing the fix for this issue. As a temporary workaround, you can downgrade devextreme package to version 19.2.4. We will update this thread once we have new information.

                                • Mike Postel 01.13.2020

                                  Also problematic, since the FAB widget is not working there at all..

                                • Lena (DevExpress Support) 01.14.2020

                                  Hi Mike,

                                  Do you mean that FAB doesn't work in v.19.2.4 or 19.2.5? Could you please describe the problem in greater detail?

                                  We are now putting the final touches to the build and performing final testing. This information will be helpful to us.

                                  I look forward to your reply.

                                • Mike Postel 01.18.2020

                                  the FAB was not working in 19.4. In 19.5 its fine
                                  Thanks

                                • Artem (DevExpress Support) 01.19.2020

                                  Thank you for the update. Feel free to contact us in case of further difficulties.

                                1 Solution

                                Creation Date Importance Sort by

                                Fixed: