X++:
static void dsRefresh_RU(Common _record,
DSRefreshAction_RU _action = DSRefreshAction_RU::RereadRefresh,
NoYes _retainPosition = NoYes::Yes,
NoYes _forceActive = NoYes::Yes)
{
FormDataSource formDataSource = _record.dataSource();
FormDataSource parentDataSource = formDataSource;
Common retainPositionRecord;
void refresh()
{
switch (_action)
{
case DSRefreshAction_RU::RereadRefresh:
parentDataSource.reread();
parentDataSource.refresh();
break;
case DSRefreshAction_RU::Research:
parentDataSource.research();
break;
case DSRefreshAction_RU::ExecuteQuery:
if (_retainPosition)
{
retainPositionRecord = parentDataSource.cursor().data();
}
parentDataSource.executeQuery();
if (_retainPosition)
{
parentDataSource.findRecord(retainPositionRecord);
}
break;
}
if (_forceActive)
{
parentDataSource.active();
}
}
;
if (formDataSource)
{
refresh();
while (parentDataSource.joinSource() && parentDataSource.linkType() == FormLinkType::InnerJoin)
{
parentDataSource = formGetParentDatasource(parentDataSource);
refresh();
}
}
}