AX X++里的集合类Set,相当于数组,阵列等,广泛应用于需要枚举的情形下。Set可以容纳相同类型的任意数量的值,其类型要在创建时指定,并且不可改变。Set中的值是自动排序并且唯一的,当插入重复的值时会忽略。以下案例是
一、把参与过账的工单号 ProdId 添加到 Set 中。
Set m_setProdId = new Set(Types::RString);
SetEnumerator m_setE;
;
while select prodJournalTable_post index hint PostMarkIdx
where prodJournalTable_post.SPL_Mark == NoYes::Yes
&& prodJournalTable_post.JournalType == ProdJournalType::ReportFinished
&& prodJournalTable_post.modifiedBy == curUserID()
&& prodJournalTable_post.Posted == NoYes::No
{
m_setProdId.add(prodJournalTable_post.ProdId);
}
二、循环Set中的值,并以该值为参数进行循环操作。
m_setE = m_setProdId.getEnumerator();
while (m_setE.moveNext())
{
ProdTable::SPL_upProdStatu(m_setE.current());
_prodTableOrder = ProdTable::find(m_setE.current());
if (StrScan('PR-HA-PU4',_prodTableOrder.ProdPoolId,1,20)>0)
{
ttsBegin;
select firstonly forupdate _orderList where _orderList.SalesId == _prodTableOrder.SPL_SO
&& _orderList.ItemId == _prodTableOrder.ItemId
&& _orderList.ConfirmedDlv == _prodTableOrder.DlvDate;
if(_orderList)
{
_orderList.RemainQty = _prodTableOrder.QtyStUp - _prodTableOrder.reportedFinishedGood();
_orderList.update();
}
ttsCommit;
}
}
X++还有一个近似的集合类 List,特性和用法与Set基本相同,区别在于:
- List可以加相同的值(可以重复),可以指定加到当前值的前面还是后面。
- List中的元素的顺序是添加时的顺序,本身不会自动排序。
