|
|
#1 |
|
Участник
|
Непонятка с ИД полями
После модификации система начала вести себя не предсказуемо:
Не со всеми полями, но... X++: if (ediDocsXMLStructureLoc.TagId == "BuyerUnitOfMeasure") { tabId = _record.TableId; //ПРАВИЛЬНОЕ как в АОТ fieldId = ediDocsXMLStructureLoc.SrcFieldId; //40014 ПРАВИЛЬНОЕ как в АОТ info(strFmt("SrcFieldId = %1 (%2)", ediDocsXMLStructureLoc.SrcFieldId, typeof(ediDocsXMLStructureLoc.SrcFieldId))); info(strFmt("Table: %1 (ID: %2)", tableId2Name(_record.TableId), _record.TableId)); info(strFmt("Buffer type: %1", tableId2Name(_record.TableId))); dict = new DictTable(_record.TableId); for (i = 1; i <= dict.fieldCnt(); i++) { fieldId = dict.fieldCnt2Id(i); info(strFmt("ИД поля %3 Поле: %1, Значение: %2", dict.fieldName(fieldId), _record.(fieldId),fieldId)); } fieldId = ediDocsXMLStructureLoc.SrcFieldId; rawVal = _record.(fieldId); //Выводит 0 rawVal = _record.(40014); //Выводит 0 fid = any2int(ediDocsXMLStructureLoc.SrcFieldId); rawVal = _record.(fid);//Выводит 0 rawVal = _record.(ediDocsXMLStructureLoc.SrcFieldId + 0);//Выводит 0 } SrcFieldId = 40014 (Integer) Table: EDIDocDELNOTLine_KBK (ID: 40375) Buffer type: EDIDocDELNOTLine_KBK ... ИД поля 40014 Поле: BuyerUnitOfMeasure, Значение: рул ИД поля 65535 Поле: TableId, Значение: 40375 ... Значит BuyerUnitOfMeasure имеет значение "рул" Джобиком, по этой же записи показывает значение: X++: static void _DeleteTmp(Args _args) { EDIDocDELNOTLine_KBK eDIDocDELNOTLine; Common _record; DictTable dictTable; TableId tableId; FieldId fieldId; str fieldName; ; select firstOnly eDIDocDELNOTLine where eDIDocDELNOTLine.RecId == 5637171360; info(strFmt("%1", eDIDocDELNOTLine.(40014))); _record = eDIDocDELNOTLine; info(strFmt("%1", _record.(40014))); info(strFmt("%1", FieldNum(EDIDocDELNOTLine_KBK, BuyerUnitOfMeasure ))); рул рул 40014 И это на некоторых полях. А некоторые сохранили свою работоспособность. И еще одна странность появилась по этой же теме. На настроечной таблице EDIDocsXMLStructure_KBK, есть EDIT-метод, который помогает выбирать нужное поле из таблицы EDIDocDELNOTLine_KBK. Выбираем по наименованию поля из списка полей, а в EDIDocsXMLStructure_KBK записывается ИД этого поля. (т.е 40014) Так вот этот EDIT-метод, работающий уже много лет, начал записывать не правильные ИД поля! Так для поля BuyerUnitOfMeasure (40014) он записывает в EDIDocsXMLStructure_KBK ИД = 105550... Откуда ?!! И джобик показывает, что у меня таких полей в принципе нет ни на одном слое. X++: static void SRA_Job284(Args _args) { UtilIdElements utilElements; ; while select id, parentId, name, utilLevel from utilElements order by parentId, id where //utilElements.utilLevel < UtilEntryLevel::usr && utilElements.recordType == UtilElementType::TableField && utilElements.Id >= 100000 { info( strfmt( '%1.%2 (%3) %4', tableid2name( utilElements.parentId ), utilElements.name, utilElements.utilLevel, utilElements.Id ) ); } } Я создал новое поле, ИД которого в АОТ 40017. Выбираю его и в таблицу записывается ИД = 105553. Что за счетчик такой? Откуда эти номера? На всякий случай код EDIT-метода (который не менялся уже много лет). X++: edit fieldName fieldName(boolean set, fieldName name) { if (set) { this.SrcFieldId = fieldname2id(this.SrcTableId, name); } return fieldid2name(this.SrcTableId, this.SrcFieldId); }
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008 Хороший ученик во всем найдет себе учителя... |
|
|
|
|
#2 |
|
Участник
|
X++: info(int2str(fieldExt2Id(105550)));
info(int2str(fieldId2Ext(40014, 1)));Цитата:
40014
105550 У вас там расширенные идентификаторы записались. |
|
|
|
| За это сообщение автора поблагодарили: Отшельник (1). | |
|
|
#3 |
|
Участник
|
Тему понял.
Есть ли вариант выгнать этих паршивцев из системы ? Иначе эта "зараза" вылезет во многих местах (( Буду ловить ее до пенсии )
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008 Хороший ученик во всем найдет себе учителя... |
|
|
|
|
#4 |
|
Участник
|
Джобить.
Ну и проверить код, которым они создались |
|
|
|
|
#5 |
|
Участник
|
Подскажите ДЖОБ.
Появились по видимому во время модификаций. Их много - ловить долго буду - но буду. Может ДЖОБ подскажет что искать. Помогите пожалуйста. Все выходные просидел (( Сейчас хоть луч "света в темном царстве" ))
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008 Хороший ученик во всем найдет себе учителя... |
|
|
|
|
#6 |
|
Участник
|
Если я правильно понял, то вопросы формулируются так
Вопрос 1 rawVal = _record.(id) переменная rawVal не возвращает значение. Отображает 0 однако info(strFmt('%1', _record.(id))); отображает значение поля Ответ Переменная rawVal какого типа? Если это anyType, то для таких переменных тип устанавливается при первом присвоении значения и уже не меняется до завершении метода. Вероятно, она у Вас получила числовое значение и, как следствие, конвертирует все значения в число. Вот и значение "рул" конвертировала в число и получился 0 Вопрос 2 Есть некая таблица, в которую записывают id-полей. Начиная с какого-то момент в это поле стало записываться не FieldId, а fieldId2Ext(). Существующий метод для записи использует функцию fieldName2id() Ответ Насколько я понимаю, надо по перекрестным ссылкам искать все места, где происходит обновление значения этого поля таблицы (запись значения id-поля). Не конкретно в показанном edit-методе, а вообще везде. Может быть, где-то в другом месте какое-то обновление выполняется или кто-то джоб какой-то создал Дополните Вашу таблицу служебными полями ModifiedDateTime + ModifiedBy, чтобы понять, кто же и когда сделал такую специфическую запись. Правда это на будущее.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
|
|
#7 |
|
Участник
|
|
|
|