AX集合类Set的应用举例

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中的元素的顺序是添加时的顺序,本身不会自动排序。

发表评论