Показать сообщение отдельно
Старый 28.02.2019, 18:50   #14  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Пост по заявкам слушателей из ЛС

cobj - приведение/проверка что можно привести _object к _classTargetId. Ну или просто привести к Object в одну строку
Изначально родился и был сильно полезен давным давно когда не было никакик as и is. сейчас полезность сильно меньше
X++:
static Object cobj(Object _object, int _classTargetId = 0, boolean _throwError = true)
{
    if (_classTargetId)
    {
        if (! new mDictClass(classidget(_object)).checkIsEqualOrSuperclass(_classTargetId, _throwError))
        {
            return null;
        }
    }

    return _object;
}
в одну строку привести к object. просто чтобы не объявлять еще переменную Object
X++:
if (formDataSourceHasMethod(this.dataSource(), methodstr(mBankAccountWizard, dialogModifiedField)))
{
    cobj(this.dataSource()).dialogModifiedField(_fieldId);
}
проверить что какой нито конструируемый по имени объект соответствует ожиданиям и если это не так, то вывети не трассировку, а нормальное сообщение об ошибке. ну то есть по сути as
X++:
mGW_Queue queue = cobj(mDictionary::instance().classObjectByName(_queueClassName).makeObject(), classnum(mGW_Queue));
проверка без сообщения об ошибке что объект тот что нужен. эквивалент is
X++:
if (cobj(child, classnum(FormControl), false))
{
}
nz - взять второе значение, если первое пустое. укороченный тернарный оператор, в котором два параметра одинаковые. Кажется в VBA я её увидел впервые
X++:
public static anytype nz(anytype _value, anytype _nonZeroValue)
{
    return (_value && true) ? _value : _nonZeroValue;
}
два основных применения
1. взять значение по умолчанию
X++:
display mPaymSchedBaseDate paymSchedBaseDate()
{
    return nz(this.PaymSchedBaseDate, this.deliveryDate());
}
2. заполнить что нибудь, eсли еще не заполнено
X++:
lines.CurrencyCode    = nz(lines.CurrencyCode,    header.CurrencyCode);
inlist - Однострочная проверка на соответствие списку. замена многоэтажным if|switch
X++:
public static boolean inlist(anytype _value, container _listValues)
{
    return confind(_listValues, _value) != 0;
}
X++:
if (! inlist(_journalTable.Status, [mGroupPostingJournalStatus::Created, mGroupPostingJournalStatus::Reversed, mGroupPostingJournalStatus::Posted]))
{
    ....
}

Последний раз редактировалось db; 28.02.2019 в 19:03.
За это сообщение автора поблагодарили: mazzy (10), trud (5), sukhanchik (10).