web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Finance | Project Operations, Human Resources, ...
Answered

Ui-builder class not working .

(0) ShareShare
ReportReport
Posted on by 1,836

I was creating report  on financial dimension and I want to filter values using name i.e if I select specific dimension from name string the another lookup should filter value according to that parameter as its showing all the values now but my UiBuilder class not working how can I achieve  it can anybody help me out with it.

I am sharing my code below ,is anything wrong with it.

8831.findimfilter.PNG                                                                                                                                                                                                                                                                                                         

[DataContractAttribute,
SysOperationContractProcessingAttribute(classStr(FinDimUIBuilder))]
public class FinDimContract
{
    Name                       FinancialDimension;
    DimensionDisplayValue      DisplayValue;
    [DataMemberAttribute(identifierStr(Name))]
    public  Name  parmName( Name  _Name  = FinancialDimension)
    {
        FinancialDimension = _Name;
        return   FinancialDimension;
    }

    [DataMemberAttribute(identifierStr( DimensionDisplayValue))]
    public DimensionDisplayValue parmDimensionDisplayValue(DimensionDisplayValue _DimensionDisplayValue = DisplayValue)
    {
        DisplayValue = _DimensionDisplayValue;
             return    DisplayValue;
    }

}
                                                                               

class FinDimUIBuilder extends SrsReportDataContractUIBuilder
{

    public void lookupDimensionAttribute(FormStringControl _control)
    {
        Query           query = new Query();
        SysTableLookup  sysTableLookup;
      
        // Create an instance of SysTableLookup using the specified control.
        sysTableLookup = SysTableLookup::newParameters(tableNum(DimensionAttribute), _control);

        // Add Name field to be shown in the lookup form.
        sysTableLookup.addLookupfield(fieldNum(DimensionAttribute, Name));
         
        QueryBuildDataSource  dimensionAttributeDS = query.addDataSource(tableNum(DimensionAttribute));

      
    
        sysTableLookup.parmQuery(query);
        sysTableLookup.performFormLookup();

    }

    public void lookupDisplayValue(FormStringControl _control)
    {
        Query           query = new Query();
        SysTableLookup  sysTableLookup;
        Name            FinancialDimension;

        sysTableLookup = SysTableLookup::newParameters(tableNum(DimensionAttributevalue), _control);

        sysTableLookup.addLookupfield(fieldNum(DimensionAttributevalue, DisplayValue));
         
        QueryBuildDataSource  dimensionAttributevalueDS = query.addDataSource(tableNum(DimensionAttributevalue));
        dimensionAttributevalueDS.addRange(fieldNum(DimensionAttribute, Name)).value(queryValue(FinancialDimension));

        sysTableLookup.parmQuery(query);
        sysTableLookup.performFormLookup();

    }

    public void postBuild()
    {
        DialogField     dimensionAttribute;
        DialogField     displayValue;
        super();

        // From binding info, get the dialog field for dimension attribute and add button
        dimensionAttribute = this.bindInfo().getDialogField(this.dataContractObject(),
            methodStr(FinDimContract,parmName));

        displayValue = this.bindInfo().getDialogField(this.dataContractObject(),
            methodStr(FinDimContract,parmDimensionDisplayValue ));

        if (dimensionAttribute)
        {
            dimensionAttribute.lookupButton(2);
        }

        if(displayValue)
        {
            displayValue.lookupButton(3);
        }

    }

    public void postRun()
    {
        Dialog      dialogLocal = this.dialog();
        DialogField dialogField,dialogField1;

        super();

        // This method should be called in order to handle events on dialogs.
        dialogLocal.dialogForm().formRun().controlMethodOverload(false);

        // Override the lookup for parmDimensionAttribute contract parameter with dimensionAttributeLookup of this class.
        dialogField = this.bindInfo().getDialogField(
            this.dataContractObject(),
            methodStr(FinDimContract, parmName));

        dialogField1 =  this.bindInfo().getDialogField(
            this.dataContractObject(),
            methodStr(FinDimContract,parmDimensionDisplayValue));

        dialogField.registerOverrideMethod(
            methodStr(FormStringControl, lookup),
            methodStr(FinDimUIBuilder, lookupDimensionAttribute),
            this);

  
        dialogField1.registerOverrideMethod(
            methodStr(FormStringControl, lookup),
            methodStr(FinDimUIBuilder,lookupDisplayValue ),
            this);



    }

}

class FinDimController  extends SrsReportRunController
{ 
    FinDimContract               Contract;
    DimensionAttribute           Datatableone;
    DimensionAttributeValue      Datatableone1;

    protected void prepromtModifyContract()
    {
        
        if (this.parmArgs() && this.parmArgs().record())
        {
            contract = this.parmReportContract().parmRdpContract() as  FinDimContract;
            datatableone = this.parmArgs().record();
            contract.parmName(dataTableOne.Name);
            contract.parmDimensionDisplayValue(Datatableone1.DisplayValue);
        }
    }

    static void main(Args args)
    {
        DimensionAttribute			   Datatableone;
        DimensionAttributeValue        Datatableone1;
        FinDimController	  	       ssrsController;
        Datatableone  = args.record() as    DimensionAttribute;
        Datatableone1 = args.record() as    DimensionAttributeValue;
        ssrsController=new  FinDimController();
        ssrsController.parmArgs(args);

        ssrsController.parmReportName(ssrsReportStr(FinDimRpt,PrecisionDesign1 ));
        ssrsController.parmShowDialog(false);
        ssrsController.parmLoadFromSysLastValue(false);
        ssrsController.startOperation();
    }

}

[SRSReportParameterAttribute(classstr(FinDimContract))]
public class FinDimDp   extends SRSReportDataProviderBase
{
    TablFinancialDimTemp       TablFinancialDimTemp;
    [SrsReportDataSetAttribute(tableStr('TablFinancialDimTemp'))]
    public TablFinancialDimTemp getTablFinancialDimTemp()
    {
        select * from TablFinancialDimTemp;
        return        TablFinancialDimTemp;
    }

    public void processReport()
    {
        Name                                 FinancialDimension;
        DimensionDisplayValue                DisplayValue;
        FinDimContract contract            = this.parmDataContract();
        FinancialDimension = contract.parmName();
        DisplayValue = contract.parmDimensionDisplayValue();

        Query  q = new Query();
        QueryBuildDataSource   dimensionAttributeValueDs  = q.addDataSource(tableNum(DimensionAttributeValue));

        QueryBuildDataSource   dimensionAttributeDs  = dimensionAttributeValueDs.addDataSource(tableNum(DimensionAttribute));
        dimensionAttributeDs.addLink(fieldNum(DimensionAttributeValue, DimensionAttribute),fieldNum(DimensionAttribute, RecId));
        dimensionAttributeDs.joinMode(JoinMode::InnerJoin);

      
   
   if (FinancialDimension != "")
   {
       QueryBuildRange qbr = dimensionAttributeDs.addRange(fieldNum( DimensionAttribute, Name ));
            qbr.value(queryValue(FinancialDimension ));
   }

   if (DisplayValue != "")
   {
       QueryBuildRange qbr = dimensionAttributeValueDs.addRange(fieldNum( DimensionAttributeValue, DisplayValue ));
       qbr.value(queryValue(DisplayValue));
   }

   QueryRun qr = new QueryRun(q);

   while(qr.next())
   {

       DimensionAttribute                dimAttr       = qr.get(tableNum(DimensionAttribute));
       DimensionAttributeValue		     dimAttrValue  = qr.get(tableNum(DimensionAttributeValue));
       Common                            common;
       DictTable                         dictTable;
            str							 ValueName;

       if (dimAttr && dimAttrValue)
       {
           dictTable = new DictTable(dimAttr.BackingEntityType);
           common = dictTable.makeRecord();

           if (common.TableId)
           {
                 select common where
                   common.(dimAttr .KeyAttribute) ==  dimAttrValue.EntityInstance;
                   ValueName = common.(dimAttr.NameAttribute);
          
		          {

                     
					  TablFinancialDimTemp.clear();
                        TablFinancialDimTemp.Name		   = dimAttr .Name;
                        TablFinancialDimTemp.DisplayValue  = dimAttrValue.DisplayValue;
                        TablFinancialDimTemp.AttributeName = common.(dimAttr.NameAttribute);
					  TablFinancialDimTemp.insert();

		          }

           }
            
       }

   }

    }

}

pastedimage1658297316235v1.png

Findimmod.PNG

I have the same question (0)
  • Suggested answer
    huijij Profile Picture
    19,811 on at

    Hi,

    The effective thing to do right now is to make a breakpoint for single-step debugging and to see if your method works.

  • Dineshkarlekar Profile Picture
    1,836 on at

          QueryBuildDataSource  dimensionAttributevalueDS = query.addDataSource(tableNum(DimensionAttributevalue));
            dimensionAttributevalueDS.addRange(fieldNum(DimensionAttribute, Name)).value(queryValue(FinancialDimension));

    I have done debugging my problem is in range but not getting how to fix it, can you guide me with it.

  • Verified answer
    huijij Profile Picture
    19,811 on at

    You may refer to the link about how to add a range or data source to a form data source

    community.dynamics.com/.../how-to-add-a-range-or-data-source-to-a-form-data-source

  • Verified answer
    Martin Dráb Profile Picture
    237,990 Most Valuable Professional on at

    An obvious problem is that the table is DimensionAttributeValue but you're trying to add a range for a field from a different table (DimensionAttribute). The result will be adding a range for a field in DimensionAttributeValue that has the same field ID as the Name field has in DimensionAttribute table. That's clearly not what you intended.\

    Also, you've never assigned any value to FinancialDimension variable, therefore you're trying to find records with an empty name.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Neeraj Kumar – Community Spotlight

We are honored to recognize Neeraj Kumar as our Community Spotlight honoree for…

Leaderboard > Finance | Project Operations, Human Resources, AX, GP, SL

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 490 Super User 2025 Season 2

#2
Martin Dráb Profile Picture

Martin Dráb 429 Most Valuable Professional

#3
BillurSamdancioglu Profile Picture

BillurSamdancioglu 241 Most Valuable Professional

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans