Dynamics 365 Blog - lookup - Microsoft Dynamics 365 for Finance and Operations
Momentan angezeigt werden nur Beiträge der Kategorie »Microsoft Dynamics 365 for Finance and Operations« 
RSS-Feed dieser Kategorie

RSS-Feed dieser Kategorie
Lookup eines StringControls überschreibenDer folgende Code soll demonstrieren, wie man ein daten-ungebundenes StringControl mit einer Lookup-Funktionalität ausstatten kann.
[Control("String")]
class FormStringControl1
{
public void lookup()
{
//super();
SysTableLookup systableLookup =
SysTableLookup::newParameters(tableNum(CustGroup), this);
systableLookup.addLookupfield(fieldNum(CustGroup, CustGroup), true);
systableLookup.addLookupfield(fieldNum(CustGroup, Name), false);
systableLookup.performFormLookup();
}
}
Das nächste Beispiel ist eine Erweiterung des obigen, wobei nun auch ein Query verwendet wird, um die anzuzeigenen Werte einzuschränken.
[Control("String")]
class FormStringControl1
{
public void lookup()
{
//super();
SysTableLookup systableLookup =
SysTableLookup::newParameters(tableNum(CustGroup), this);
Query query;
query = new Query();
query.addDataSource(tableNum(CustGroup));
query.dataSourceTable(tableNum(CustGroup)).addRange(
fieldNum(CustGroup, CustGroup)).value("??");
systableLookup.parmQuery(query);
systableLookup.addLookupfield(fieldNum(CustGroup, CustGroup), true);
systableLookup.addLookupfield(fieldNum(CustGroup, Name), false);
systableLookup.performFormLookup();
}
}
|
Lookup eines Feldes vom Typ RecId überschreiben
Das Beispiel dient ganz konkret dazu eine Finanzdimension auswählen zu können, allerdings nur eine vom Typ Kostenstelle. |
|
|
|
|
|
|
|
Mit Hilfe des nachstehenden Codesbeispiels möchte ich zeigen, wie man die Lookup-Methode eines Feldes vom Typ RecId/RefRecId überschreiben kann. Ein solches Lookup wird auch als Referencelookup bezeichnet.
Um in einer Funktion, die über das SysOperation-Framework umgesetzt wurde, dem Benutzer einen Finanzdimensionswert einer bestimmten Dimension als Parameter anzubieten, kann man sich des folgenden Codes bedienen:
DataContract
[ DataContractAttribute ,SysOperationContractProcessingAttribute(classStr(SysOperationTemplateUIBuilder)) ] internal final class SysOperationTemplateDC implements SysOperationValidatable { private DimensionValue myDimensionValue; [ DataMember, SysOperationLabelAttribute(literalStr("@SYS105870")), SysOperationDisplayOrderAttribute('3') ] public DimensionValue parmMyDimensionValue(DimensionValue _dimensionValue = myDimensionValue) { myDimensionValue = _dimensionValue; return myDimensionValue; } }UI-Builder
internal final class SysOperationTemplateUIBuilder extends SysOperationAutomaticUIBuilder { private DialogField myDimensionValueField; public void postBuild() { super(); myDimensionValueField= this.bindInfo().getDialogField( this.dataContractObject(), methodStr(SysOperationTemplateDC, parmMyDimensionValue)); if (myDimensionValueField) { myDimensionValueField.lookupButton(FormLookupButton::Always); } } public void postRun() { super(); // register overrides for form control events myDimensionValueField.registerOverrideMethod( methodStr(FormStringControl, lookup), methodStr(SysOperationTemplateUIBuilder, lookupMyDimension), this); } public void lookupMyDimension(FormStringControl _dimensionValueControl) { Name dimensionAttributeName = "CostCenter"; if (_dimensionValueControl != null) { // Construct arguments for the custom lookup Args args = new Args(); args.name(formStr(DimensionLookup)); args.lookupValue(_dimensionValueControl.text()); args.caller(_dimensionValueControl); DimensionAttribute dimensionAttribute = DimensionAttribute::findByLocalizedName( dimensionAttributeName, false, SystemParameters::find().SystemLanguageId); args.lookupField(dimensionAttribute.ValueAttribute); args.record(dimensionAttribute); // Do the lookup FormRun lookupFormRun = classFactory.formRunClass(args); lookupFormRun.init(); _dimensionValueControl.performFormLookup(lookupFormRun); } } }