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.
[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();
}
}
}
}
}
}

