02.07.2004, 11:06 | #1 |
Участник
|
Может это поможет (пролетала по какойто из аксаптовских рассылок)
|
|
|
За это сообщение автора поблагодарили: konopello (3). |
02.07.2004, 11:18 | #2 |
Участник
|
Спасибо.
Перенес в проекты. дополнительно о number sequence framework можно посмотреть в best practice http://technet.navision.com/usered/B...rd_Components_(..)/Number_Sequences/Number_sequence_framework.htm или по ключевому слову "number sequence framework" |
|
02.07.2004, 11:53 | #3 |
Administrator
|
Разделил ветку на две части, выделив собственно проект из обсуждения. Обсуждение здесь: http://www.axforum.info/forums/showt...p?threadid=220
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
24.07.2009, 13:17 | #4 |
Участник
|
Автоматическое создание номерной серии в заданном модуле
Доброго времени суток.
Во вложении мини-проект(может кому еще пригодится), который позволит автоматически создавать номерную серию для существующего модуля. Как пользоваться : Выбираем Extended Data Type, и вызываем контекстное меню\Add-ins\Auto Create Number Sequence Reference Задаем следующие параметры : 1. Модуль, для которого создается номерная серия 2. Является ли номерная серия непрерывной?(опционально) 3. Создавать ли статический метод на таблице параметров?(опционально) Параметров немного, остальные по-умолчанию, если нужно, то думаю доработать будет не сложно. Что делается : 1. В метод loadModule класса numberSequenceReference_<Module> автоматически добавится нужный код. 2. В случае если нужно, автоматически создает статический метод на таблице <Module>Parameters, возвращающий ссылку на номерную серию. Также во вложеном проекте, есть следующие мини dev-tools : 1. Для классов (Classes\Add-ins\Extended By) - показывает классы-потомки для указанного класса 2. Для проектов(Project\Add-ins\Compile All Project) - позволяет откомпилировать все объекты проекта, не открывая проект в новом окне 3. Для узла Classes(Classes\Add-ins\Auto Create Template RunBase) - создает класс-наследник RunBase\RunBaseBatch, также создается Menu Item для нового класса (опционально) Проект импортировать аккуратно, изменен макрос xppTexts, затронуты методы системных классов, ниже их список : X++: SysContextMenu\verifyItem ClassBuild\addSourceToEndMethod Global\pickEnumValue xppSource\beginBlock xppSource\constructMethod xppSource\constructMethod xppSource\endBlock xppSource\endLine xppSource\getSource xppSource\initDefaultIndentColumns xppSource\mainMethodRunBase xppSource\simpleLine Тестирование мини dev-tools производилось на DAX 4.0. Вопросы к знатокам : Почему в NumberSeqModule разные элементы имеют одинаковые метки ? Например, NumberSeqModule::Ledger и NumberSeqModule::Asset имеют метку General Ledger.(В результате этого, если создавать контрол typeId(NumberSeqModule) возникает путаница насчет модулей ) Почему поле Module в таблице NumberSequenceReference имеет тип Integer, а не NumberSeqModule ? offtopic: В Global\PickEnumValue был обнаружен баг, проявляется в любой из версий AX : X++: ...
for (i=1;i <= dictEnum.values(); i++)
... X++: ...
for (i=0;i <= dictEnum.values(); i++)
... X++: ... formRun.choices(names, #ImageClass); ... X++: ... formRun.choices(names, #ImageBaseEnumElement); ...
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: TasmanianDevil (4), konopello (3), dech (1). |
29.07.2009, 07:27 | #5 |
Мрачный тип
|
Цитата:
Там идет проход по индексу enum'а, а затем уже по индексу инициализируется конкретное числовое значение enum'а. X++: for (i=1;i<=dictEnum.values();i++)
{
value = dictEnum.index2Value(i); При редактировании метода loadModule() у наследников NumberSequenceReference определение наименования переменной ошибочно, ввиду неправильного определения конца строки по символу ";" - strscan() ищет по подстроке от полного исходника, а начало поиска установлено на индекс относительно полной строки исходника. В результате поиск происходит где-то далеко за обявлением искомой переменной. В рабочем варианте выглядит так : X++: if (methodInfo) { positionVarTableStart = strScan(methodInfo.getSource(), tableStr(NumberSequenceReference), 1, strLen(methodInfo.getSource())); if (positionVarTableStart) { positionVarTableEnd = strScan(subStr(methodInfo.getSource(), positionVarTableStart, strlen(methodInfo.getSource())), ';', 1, strLen(methodInfo.getSource())); positionVarTableEnd += positionVarTableStart; if (positionVarTableEnd) { positionVarTableStart += strlen(tableStr(NumberSequenceReference)); return strLRTrim(subStr(methodInfo.getSource(), positionVarTableStart, positionVarTableEnd - positionVarTableStart - 1)); } } } Кому б из "китайских пионеров" гвоздь в голову вбить за слой sys у механизма номерных серий ? Отвратительно !
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 29.07.2009 в 09:13. Причина: Добавил некоторое описание багов, поругался |
|
|
За это сообщение автора поблагодарили: SRF (1). |
01.08.2009, 12:50 | #6 |
Участник
|
Цитата:
Речь видимо шла не о нулевом значении enum'а, а о значении индекса enum'а (который валиден в интервале [0..enumcnt()-1]) - в текущей реализации метода цикл начат с 1. Цикл в pickEnumValue() должен был выглядеть: X++: for (i=0;i<dictEnum.values();i++)
{
...
} P.S. либо так: X++: for (i=1;i<=dictEnum.values();i++)
{
value = dictEnum.index2Value(i-1);
...
names += dictEnum.index2Label(i-1);
...
}
__________________
Dynamics AX 4.0 SP2 |
|
Теги |
faq, number sequence, номерная серия, нумерация, полезное |
|
|