This is how I have mine set and it works:
import { createCollection, createSingle, PXScreen,
graphInfo, PXActionState, viewInfo, handleEvent,
CustomEventType, actionConfig, RowSelectedHandlerArgs,
PXViewCollection, PXPageLoadBehavior, ControlParameter, PXView,
PXFieldState, controlConfig, columnConfig, gridConfig,
GridFastFilterVisibility, GridPreset, PXFieldOptions,
} from "client-controls";
@graphInfo({graphType: "NCRLog.GCPressGlueLogEntry", primaryView: "Header", })
export class QC302000 extends PXScreen {
@viewInfo({containerName: "Header"})
Header = createSingle(PressGlueLogHeader);
@viewInfo({containerName: "Assembly"})
Assembly = createCollection(Assembly);
@viewInfo({ containerName: "Press" })
Press = createCollection(Press);
@viewInfo({ containerName: "Glue" })
Glue = createCollection(Glue);
@viewInfo({ containerName: "Metal" })
Metal = createCollection(Metal);
}
export class PressGlueLogHeader extends PXView {
PressNo : PXFieldState;
@controlConfig({allowEdit:true})
BatchNbr : PXFieldState;
DocType : PXFieldState;
Status : PXFieldState;
Date : PXFieldState;
GlueManufacturer : PXFieldState;
GlueSetting : PXFieldState;
DiffPressure : PXFieldState;
@controlConfig({allowEdit:true})
SiteID : PXFieldState;
TargetWeightg : PXFieldState;
Resultg : PXFieldState;
@controlConfig({displayMode:"text"})
TestedBy : PXFieldState;
}
@gridConfig({
initNewRow: true,
showFastFilter: GridFastFilterVisibility.False,
preset: GridPreset.Details
})
export class Assembly extends PXView {
@columnConfig({ width: 140 }) PressNo: PXFieldState;
@columnConfig({ width: 150 }) PressID: PXFieldState;
@columnConfig({ width: 100 }) Core: PXFieldState;
@columnConfig({ width: 140 }) BatchNbr: PXFieldState;
@columnConfig({ width: 180 }) StartTemp: PXFieldState;
@columnConfig({ width: 100, editorConfig: { timeMode: true }, format: "t" }) FirstTime: PXFieldState<PXFieldOptions.CommitChanges>;
@columnConfig({ width: 100, editorConfig: { timeMode: true }, format: "t" }) LastTime: PXFieldState<PXFieldOptions.CommitChanges>;
@columnConfig({ width: 100 }) OpenTimeMin: PXFieldState;
}
@gridConfig({
initNewRow: true,
showFastFilter: GridFastFilterVisibility.False,
preset: GridPreset.Details
})
export class Press extends PXView {
@columnConfig({ width: 100 }) Pressurepsi: PXFieldState;
@columnConfig({ width: 100, editorConfig: { timeMode: true }, format: "t" })
StartTimePress: PXFieldState<PXFieldOptions.CommitChanges>;
@columnConfig({ width: 100, editorConfig: { timeMode: true }, format: "t" })
ExitTimePress: PXFieldState<PXFieldOptions.CommitChanges>;
@columnConfig({ width: 100 }) PressTimeMins: PXFieldState;
@columnConfig({ width: 100 }) CureTimeMins: PXFieldState;
}
@gridConfig({
initNewRow: true,
showFastFilter: GridFastFilterVisibility.False,
preset: GridPreset.Details
})
export class Glue extends PXView {
@columnConfig({ width: 220 }) GSM: PXFieldState;
@columnConfig({ width: 250 }) Margins: PXFieldState;
@columnConfig({ width: 180 }) SpeedMmin: PXFieldState;
@columnConfig({ width: 140 }) BatchNbrptA: PXFieldState;
@columnConfig({ width: 140 }) BatchNbrptB: PXFieldState;
}
@gridConfig({
initNewRow: true,
showFastFilter: GridFastFilterVisibility.False,
preset: GridPreset.Details
})
export class Metal extends PXView {
@columnConfig({ width: 220 }) CoilRefFront: PXFieldState;
@columnConfig({ width: 220 }) CoilRefBack: PXFieldState;
@columnConfig({ width: 100 }) SpectroVal: PXFieldState;
}
HTML:
<template>
<qp-template id="Header_PXLayoutRule1" name="1-1-1">
<qp-fieldset id="form_0" wg-container="Header_form" view.bind="Header" slot="A" >
<field name="PressNo" ></field>
<field name="BatchNbr" config-allow-edit.bind="true"></field>
<field name="DocType" ></field>
<field name="Status" ></field>
</qp-fieldset>
<qp-fieldset id="Header_CstPXLayoutRule17" wg-container="Header_form" view.bind="Header" slot="B" >
<field name="Date" ></field>
<field name="GlueManufacturer" ></field>
<field name="GlueSetting" ></field>
<field name="DiffPressure" ></field>
</qp-fieldset>
<qp-fieldset id="Header_CstPXLayoutRule18" wg-container="Header_form" view.bind="Header" slot="C" >
<field name="SiteID" config-allow-edit.bind="true"></field>
<field name="TargetWeightg" ></field>
<field name="Resultg" ></field>
<field name="TestedBy" ></field>
</qp-fieldset>
</qp-template>
<qp-tabbar id="CstPXTab13">
<qp-tab id="CstPXTab13_0" caption="Assembly">
<qp-grid id="Details_CstPXGrid14" wg-container view.bind="Assembly"></qp-grid>
</qp-tab>
<qp-tab id="CstPXTab13_1" caption="Press Settings">
<qp-grid id="Details_CstPXGrid15" wg-container view.bind="Press"></qp-grid>
</qp-tab>
<qp-tab id="CstPXTab13_2" caption="Glue Line Settings">
<qp-grid id="Details_CstPXGrid16" wg-container view.bind="Glue"></qp-grid>
</qp-tab>
<qp-tab id="CstPXTab13_3" caption="Metal Line">
<qp-grid id="Details_CstPXGrid27" wg-container view.bind="Metal"></qp-grid>
</qp-tab>
</qp-tabbar>
</template>
Graph:
public SelectFrom<PressGlueLogDetails>.
Where<PressGlueLogDetails.pressNo.IsEqual<PressGlueLogHeader.pressNo.FromCurrent>>.View Details;
public SelectFrom<PressGlueLogDetails>.
Where<PressGlueLogDetails.pressNo.IsEqual<PressGlueLogHeader.pressNo.FromCurrent>>.View Assembly;
public SelectFrom<PressGlueLogDetails>.
Where<PressGlueLogDetails.pressNo.IsEqual<PressGlueLogHeader.pressNo.FromCurrent>>.View Press;
public SelectFrom<PressGlueLogDetails>.
Where<PressGlueLogDetails.pressNo.IsEqual<PressGlueLogHeader.pressNo.FromCurrent>>.View Glue;
public SelectFrom<PressGlueLogDetails>.
Where<PressGlueLogDetails.pressNo.IsEqual<PressGlueLogHeader.pressNo.FromCurrent>>.View Metal;
Hope this can help.