多元素扩展类型
AX下扩展类型,除了关联表外,还有个多元素扩展的特性。表字段继承这个扩展类型后,这个表字段就会像数组一样来使用。
扩展类型下建立的多个元素
表里显示只会有一个字段,但是实际上是一个数组字段
AX的控件都有父类。IntEdit控件,其父类是FormIntControl。RealEdit控件,其父类是FormRealControl。等等对应,不多例举。
这样就可以轻松获取控件,并操作。
不做细讲,代码很简单。直接贴出功能代码,看注释即可明白
public
void Sreach(TransDate day = today())
{
int m_T,m_count,m_c,m_j,m_d;
utcDateTime m_StartTime,m_EndTime;
TransDate m_Day;
ProdJournalTable m_ProdJourTable;
ProdJournalRoute m_ProdJourRoute;
ProcessYieldAmountTable m_TempTable;
ProdTable m_ProdTable;
FormIntControl m_IntControl;
ProcessYieldCountTable m_CountTable;
;
m_Day = day - 1;
m_c = 0;
{
int m_T,m_count,m_c,m_j,m_d;
utcDateTime m_StartTime,m_EndTime;
TransDate m_Day;
ProdJournalTable m_ProdJourTable;
ProdJournalRoute m_ProdJourRoute;
ProcessYieldAmountTable m_TempTable;
ProdTable m_ProdTable;
FormIntControl m_IntControl;
ProcessYieldCountTable m_CountTable;
;
m_Day = day - 1;
m_c = 0;
m_CountTable.clear();
for(m_T = 0;m_T < 24;m_T++)
{
m_StartTime = DateTimeUtil::newDateTime(m_Day, 72000 + 3600 * m_T);
m_EndTime = DateTimeUtil::newDateTime(m_Day, 72000 + 3600 * (m_T + 1));
m_count = 0;
ttsbegin;
while select m_ProdJourRoute join m_ProdJourTable where m_ProdJourRoute.JournalId == m_ProdJourTable.JournalId
&& m_ProdJourTable.Posted == true && m_ProdJourTable.PostedDateTime >= m_StartTime
&& m_ProdJourTable.PostedDateTime <= m_EndTime
{
// 奇偶判断,这边是单行双字段显示
if(m_t mod 2)
{
m_j = 2;
}
else
{
m_j = 1;
}
m_count++;
m_TempTable.clear();
m_TempTable.TimeTitle = strfmt( " %1 - %2 ",m_StartTime,m_EndTime);
m_TempTable.ProdId[m_j] = m_ProdJourRoute.ProdId;
m_TempTable.ItemId[m_j] = ProdTable::find(m_ProdJourRoute.ProdId).ItemId;
m_TempTable.FlowId[m_j] = m_ProdJourRoute.IWS_FlowId;
m_TempTable.QtyGood[m_j] = m_ProdJourRoute.QtyGood;
m_TempTable.TransDateTime[m_j] = m_ProdJourTable.PostedDateTime;
m_TempTable.insert();
}
if(!m_ProdJourRoute)
{
m_TempTable.clear();
m_TempTable.TimeTitle = strfmt( " %1 - %2 ",m_StartTime,m_EndTime);
m_TempTable.insert();
}
ttscommit;
// label setting
m_c = m_T + 1;
m_IntControl = element.design().controlName(strfmt( " ProcessYieldCountTable_YieldCount[%1] ",m_c));
m_IntControl.label(strfmt( " %1 - %2 ",strdel(DateTime2str(m_StartTime, 0), 0, 7),strdel(DateTime2str(m_EndTime, 0), 0, 7)));
m_CountTable.YieldCount[m_c] = m_count;
}
m_CountTable.insert();
// 设置临时表
// 刷新数据源
ProcessYieldAmountTable.setTmpData(m_TempTable);
ProcessYieldAmountTable_ds.research();
ProcessYieldCountTable.setTmpData(m_CountTable);
ProcessYieldCountTable_ds.research();
}
// 设置临时表
// 刷新数据源
ProcessYieldAmountTable.setTmpData(m_TempTable);
ProcessYieldAmountTable_ds.research();
ProcessYieldCountTable.setTmpData(m_CountTable);
ProcessYieldCountTable_ds.research();
}