Доброго времени суток, уважаемые коллеги
Использую AX2009, Kernel version: 5.0.1000.52, Application version: 5.0.1500.2116, Solution version: RU HRP 5.0.1500.2116.1
Столкнулся с проблемой потери параметров Args формы. Описание ситуации:
1. Есть некоторая форма в методе init которой извне (из вызывающего объекта) в данную форму передается экземпляр класса wfDocApproveEngine:
X++:
public void init()
{
Object callerForm;
if (!element.args().caller() || !element.args().record())
{
throw error("@SYS22539");
}
super();
callerForm = element.args().caller();
wfDocApproveEngine = callerForm.getWFDocApproveEngine();
callerArgs = wfDocApproveEngine.parmParentObjectRun().args();
в данном классе один из параметров - это переменная parentObjectRun типа object, в которой хранится другая форма. Переменная callerArgs введена для отслеживания параметров Args при трассировке в связи с проблемой. Вот метод в котором инициируется переменная parentObjectRun:
X++:
void initDocApproveEngine()
{
EventContextInformation eci;
FormRun formRunDoc;
FormDataSource docFormDataSource;
Object formObjDoc;
int i;
;
eci = EventContextInformation::construct();
if (eventInbox.ParentTableId)
{
eci.parmAlertBuffer(common);
if (common.RecId && eci.unpack(eventInbox.contextData()))
{
formRunDoc = eci.createFormRun();
if (formRunDoc)
{
for (i=1; i<= formRunDoc.dataSourceCount(); i++)
{
if (formRunDoc.dataSource(i).cursor().TableId == common.TableId)
{
docFormDataSource = formRunDoc.dataSource(i);
break;
}
}
wfDocApproveEngine.parmParentObjectRun(formRunDoc);
wfDocApproveEngine.parmParentDataSource(docFormDataSource);
formRunDoc.close();
}
}
}
}
Результаты трассировки кода:
в методе init переменная callerArgs не пустая и содержит корректный набор аргументов:
Args(Name: RHRMOrderTable, Parm: , DesignName: , Enum: RHRMJournalType::Перевод, MenuItemName: RHRMOrderTableTransfer)
Аналогично проверил аргументы в методе Run формы, вызвав
callerArgs = wfDocApproveEngine.parmParentObjectRun().args();
тоже полный порядок.
Но в методе closeOk проверка показала, что аргументы перестали существовать - переменная callerArgs приняла значение null. Хотя ни экземпляр класса, ни его параметр parentObjectRun не изменялись.
Попробовал сохранять параметр parentObjectRun в переменную формы:
X++:
saveobj = wfDocApproveEngine.parmParentObjectRun();
callerArgs = saveobj.args();
с последующей проверкой наличия аргументов. Результат тот же - переменная callerArgs приняла значение null.
Если кто сталкивался с подобной ситуацией, подскажите пожалуйста в чем может быть причина проблемы?
PS Удаление пользовательских данных, компиляция формы и класса не помогли(((
Заранее спасибо за ответы.