‘Unsupported data source used for PositionToRecord or PositionToRecordByValue. Unable to execute fallback logic to find record’

Hi all,

When i want to use settlement button on custTrans form, i’ve got this error message “Unsupported data source used for PositionToRecord or PositionToRecordByValue. Unable to execute fallback logic to find record”.

I found some topics on the subject talking about and explaining that the new run method used on custOpenTrans form above don’t allow to use temporary or views as datasources in form extension :

public void run()
{
super();

    if (custTransOriginator)
    {
        custTrans_DS.positionToRecordByValue(fieldnum(CustTrans,RecId), int642Str(custTransOriginator.RecId));
    }
}

First question is it correct ?

Secondly how could i fix that ?

I have to add informations, i’m using DefaultDimensionView in custOpenTrans form extension that i need for that event class method :

 [FormDataSourceEventHandler(formDataSourceStr(CustOpenTrans, DefaultDimensionView), FormDataSourceEventType::Initialized), SuppressBPWarning('BPParameterNotUsed', 'False positive')]
    public static void DefaultDimensionView_OnInitialized(FormDataSource sender, FormDataSourceEventArgs e)
    {
            FormRun formRun = sender.formRun();

            FormDataSource DefaultDimensionView_ds = formRun.dataSource(formDataSourceStr(CustOpenTrans, DefaultDimensionView));
            FormStringControl defaultDimDisplay = formRun.design(0).controlName('DefaultDimensionView_DisplayValue');

            DefaultDimensionView_ds.queryBuildDataSource().addLink(fieldnum(CustTrans, DefaultDimension),
            fieldnum(DefaultDimensionView, defaultdimension));

DefaultDimensionView_ds.queryBuildDataSource().addRange((fieldnum(DefaultDimensionView, Name))).value(sysquery::value('Departements'));
    }

Thank you.

Hi

When your datasource join the view ,use findValue instead of positionToRecordByValue.

Extension run method like this.

public void run()
{
    RecId custTransOriginatorRecId = custTransOriginator.RecId;

    custTransOriginator.RecId = 0;

    next run();

    if (custTransOriginatorRecId)
    {
        custTrans_DS.findValue(fieldnum(CustTrans,RecId), int642Str(custTransOriginatorRecId));
    }

    custTransOriginator.RecId = custTransOriginatorRecId;
}

Hello @xiao_xiong,

Thank you for the answer but the findValue method is deprecated so it will be hard to use it.

Do you think i could use it while they haven’t fix that issue ?

Regards.

Hello @Awaxx_Nate
If this is a commonly used feature by customer, then until another solution is found, you have to handle it this way temporarily.