Пост по заявкам слушателей из ЛС
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]))
{
....
}