Exportfile for AOT version 1.0 or later Formatversion: 1 ***Element: CLS ; Microsoft Business Solutions-Axapta Class: SysMultiTableLookup unloaded at Monday 9/22/2008 ; -------------------------------------------------------------------------------- CLSVERSION 1 CLASS #SysMultiTableLookup PROPERTIES Name #SysMultiTableLookup Extends # RunOn #Client ENDPROPERTIES METHODS Version: 3 SOURCE #addFilter #protected void addFilter(FormRun formRun) #{ # FormDataSource formDataSource = formRun.dataSource(); # QueryBuildRange queryBuildRange; # FormStringControl callingStringControl; # FormStringControl selectControl; # fieldId selectFieldId; # str callingValue; # ; # if (!callingControl || !callingControl.hasChanged()) # return; # # switch (callingControl.handle()) # { # case classnum(FormStringControl): # callingStringControl = callingControl; # if (controlIdx && callingStringControl.text()) # { # selectControl = formRun.control(controlIdx); # selectFieldId = selectControl.dataField(); # if (selectFieldId) # { # callingValue = callingStringControl.text(); # if (strfind(callingValue, '*', 1, 999)) # { # queryBuildRange = formDataSource.query().dataSourceNo(1).addRange(selectFieldId); # queryBuildRange.value(callingValue); # } # } # } # break; # } #} ENDSOURCE SOURCE #addLookupControl #void addLookupControl(int _dataSourceNo, fieldId _fieldId, boolean _returnItem, str _methodName, str _label) #{ # lookupItems += [[_dataSourceNo, _fieldId, _returnItem, _methodName]]; # if (_label) # this.setLabel(_label); #} ENDSOURCE SOURCE #addLookupField #void addLookupField(fieldId _fieldId, int _dataSourceNo = 1, boolean _returnItem = false, str _label = '') #{ # ; # if (_dataSourceNo > query.dataSourceCount()) # throw error(Error::wrongUseOfFunction(funcName())); # # this.addLookupControl(_dataSourceNo, _fieldId, _returnItem, '', _label); #} ENDSOURCE SOURCE #addLookupMethod #// this method should not be called before the actually lookup column has been added #void addLookupMethod(str _method, int _dataSourceNo = 1, str _label) #{ # ; # this.addLookupControl(_dataSourceNo, 0, false, _method, _label); #} ENDSOURCE SOURCE #addMethodControl #protected FormBuildControl addMethodControl(FormBuildGridControl _formBuildGridControl, FormBuildDataSource _formBuildDataSource, str _method, int _labelIdx) #{ # DictMethod dictMethod = new DictMethod(UtilElementType::TableInstanceMethod, _formBuildDataSource.table(), _method); # int extendedTypeId; # int returnId; # Types returnType; # SysDictType sysDictType; # # # FormBuildControl addStandardControl(FormControlType _formControlType) # { # Object obj; # FormBuildControl ret; # ; # obj = _formBuildGridControl.addControl(_formControlType, _method); # obj.dataSource(_formBuildDataSource.id()); # obj.dataMethod(_method); # if (labels[_labelIdx]) # { # obj.label(labels[_labelIdx]); # } # # ret = obj; # return ret; # } # # ; # if (!dictMethod) # return null; # # returnType = dictMethod.returnType(); # returnId = dictMethod.returnId(); # if (returnType == Types::UserType) // EDT - find base type of EDT # { # extendedTypeId = returnId; # if (!extendedTypeId) # return null; # # sysDictType = new SysDictType(extendedTypeId); # returnType = sysDictType.baseType(); # } # if (returnType == Types::Enum) # { # if (returnId == enumnum(NoYes) || # (sysDictType && sysDictType.enumId() == enumnum(NoYes)) || # (returnId == enumNum(Boolean))) //Boolean should also be displayed as a checkbox # { # extendedTypeId = extendedTypeNum(NoYesId); // Simulate NoYesId to have it shown as checkbox # } # } # else if (returnType == Types::Integer) # { # if (sysDictType && SysMultiTableLookup::isEqualOrExtending(sysDictType.id(), extendedTypeNum(timeOfDay))) # { # extendedTypeId = extendedTypeNum(timeOfDay); # } # } # # return addStandardControl(this.types2ControlType(returnType, extendedTypeId)); #} ENDSOURCE SOURCE #buildGrid #protected FormBuildGridControl buildGrid(FormBuildGridControl _formBuildGridControl, Form _form) #{ # FormBuildDataSource formBuildDataSource; # FormBuildControl formBuildControl; # Object obj; # boolean returnItem; # str method; # int fieldId; # int i; # boolean lookupFieldSet = false; # int dataSourceNo; # ; # # for (i = 1; i <= conlen(lookupItems); i++) # { # [dataSourceNo, fieldId, returnItem, method] = conpeek(lookupItems, i); # # if (!method) # { # formBuildControl = _formBuildGridControl.addDataField(_form.dataSource(dataSourceNo).id(), fieldId); # # if (labels[i]) # { # obj = formBuildControl; # obj.label(labels[i]); # } # } # else # { # formBuildControl = this.addMethodControl(_formBuildGridControl, _form.dataSource(dataSourceNo), method, i); # } # # if(!formBuildControl) # throw error("@SYS72176"); # # if (!lookupFieldSet || returnItem) # { # controlIdx = formBuildControl.id(); # lookupField = fieldId; # lookupFieldSet = true; # } # } # # return _formBuildGridControl; #} ENDSOURCE SOURCE #buildSelectionList #protected void buildSelectionList(Query _query) #{ # boolean returnItem; # str method; # int fieldId; # int i; # int dataSourceNo; # # SelectionField fieldKind() # { # int j; # QueryBuildFieldList qbfl; # ; # # qbfl = _query.dataSourceNo(dataSourceNo).fields(); # for (j = 1; j <= qbfl.fieldCount(); j++) # { # if (qbfl.field(j) == fieldId) # { # return qbfl.fieldKind(j); # } # } # return SelectionField::Database; # } # ; # # // Test that all are fields (no methods) # // If at least 1 method is present, it is too risky to build a selection field list # for (i = 1; i <= conlen(lookupItems); i++) # { # [dataSourceNo, fieldId, returnItem, method] = conpeek(lookupItems, i); # # if (method) # { # return; # } # } # # for (i = 1; i <= conlen(lookupItems); i++) # { # [dataSourceNo, fieldId, returnItem, method] = conpeek(lookupItems, i); # # _query.dataSourceNo(dataSourceNo).addSelectionField(fieldId, fieldKind()); # } #} # ENDSOURCE SOURCE #classDeclaration #// This is a framework class. #class SysMultiTableLookup #{ # container lookupItems; # Query query; # int controlIdx; # Common tmpBuffer; # str labels[]; # FormControl callingControl; # fieldId lookupField; # boolean useLookupValue; #} ENDSOURCE SOURCE #formRun #protected FormRun formRun() #{ # Form form = new Form(); # FormRun formRun; # FormBuildDesign formBuildDesign; # FormBuildDataSource formBuildDataSource; # FormDataSource formDataSource; # FormBuildGridControl formBuildGridControl; # FormGridControl formGridControl; # FormStringControl callingStringControl; # QueryBuildDataSource queryBuildDataSource; # Args args; # int idx; # int i; # ; # # form.name(identifierstr(TemporaryFormName)); # # for (i = 1; i <= query.dataSourceCount(); i++) # { # queryBuildDataSource = query.dataSourceNo(i); # formBuildDataSource = form.addDataSource(queryBuildDataSource.name()); # formBuildDataSource.table(queryBuildDataSource.table()); # formBuildDataSource.autoQuery(true); # # if (queryBuildDataSource.embedded()) //joined() or level() > 1 # { # formBuildDataSource.linkType(this.joinMode2LinkType(queryBuildDataSource.joinMode())); # formBuildDataSource.joinSource(queryBuildDataSource.parentDataSource().name()); # } # # formBuildDataSource.allowCreate(false); # formBuildDataSource.allowDelete(false); # formBuildDataSource.allowEdit(false); # formBuildDataSource.allowCheck(false); # } # # formBuildDesign = form.addDesign('Design'); # formBuildDesign.mode(FormMode::Watch); # formBuildDesign.frame(FormFrame::Border); # formBuildDesign.hideIfEmpty(false); # formBuildDesign.hideToolbar(false); # formBuildDesign.top(15); # formBuildDesign.topMargin(2); # formBuildDesign.left(15); # formBuildDesign.leftMargin(0); # formBuildDesign.rightMargin(0); # formBuildDesign.bottomMargin(0); # # formBuildGridControl = formBuildDesign.addControl(FormControlType::Grid,'Grid'); # formBuildGridControl.dataSource(query.dataSourceNo(1).name()); # formBuildGridControl.allowEdit(true); # formBuildGridControl.showRowLabels(false); # idx = formBuildGridControl.id(); # # this.buildGrid(formBuildGridControl, form); # # args = new Args(); # args.object(form); # if(useLookupValue && !tmpBuffer) //highlighting existing value doesn't work with temp tables # { # args.lookupField(lookupField); # switch (callingControl.handle()) # { # case classnum(FormStringControl): # callingStringControl = callingControl; # args.lookupValue(callingStringControl.text()); # break; # } # } # formRun = classfactory.formRunClass(args); # form = formRun.form(); # # formRun.init(); # # formDataSource = formRun.dataSource(1); # # formGridControl = formRun.control(idx); # formGridControl.setFocus(); # formRun.selectMode(formRun.control(controlIdx)); # # if (query) # { # formDataSource.query(query); # } # # if (tmpBuffer) # { # if (query.dataSourceCount() > 1) # throw error("Multiple temporary datasource lookups are not supported"); # # formDataSource.init(); # # //BP deviation documented # formDataSource.cursor().setTmp(); // if using non-temp table in tmp mode # formDataSource.cursor().setTmpData(tmpBuffer); # } # # this.buildSelectionList(formDataSource.query()); # # formRun.selectMode(formRun.control(controlIdx)); # this.addFilter(formRun); # # return formRun; #} ENDSOURCE SOURCE #joinMode2LinkType #FormLinkType joinMode2LinkType(JoinMode _joinMode) #{ # switch (_joinMode) # { # case JoinMode::InnerJoin: # return FormLinkType::InnerJoin; # case JoinMode::OuterJoin: # return FormLinkType::OuterJoin; # case JoinMode::ExistsJoin: # return FormLinkType::ExistJoin; # case JoinMode::NoExistsJoin: # return FormLinkType::NotExistJoin; # } # # throw error(Error::wrongUseOfFunction(funcName())); #} ENDSOURCE SOURCE #parmCallingControl #FormControl parmCallingControl(FormControl _callingControl = callingControl) #{ # ; # callingControl = _callingControl; # return callingControl; #} ENDSOURCE SOURCE #parmQuery #Query parmQuery(Query _query = query) #{ # ; # query = _query; # # return query; #} ENDSOURCE SOURCE #parmTmpBuffer #Common parmTmpBuffer(Common _buffer = tmpBuffer) #{ # ; # tmpBuffer = _buffer; # return tmpBuffer; #} ENDSOURCE SOURCE #parmUseLookupValue #boolean parmUseLookupValue(boolean _useLookupValue = useLookupValue) #{ # ; # useLookupValue = _useLookupValue; # # return useLookupValue; #} ENDSOURCE SOURCE #performFormLookup #void performFormLookup() #{ # #AOT # FormStringControl callingStringControl; # FormIntControl callingIntControl; # #if.ReferencesPath # FormInt64Control callingInt64Control; # #endif # FormDateControl callingDateControl; # ; # if (!callingControl) # throw(error(Error::wrongUseOfFunction(funcname()))); # # switch (callingControl.handle()) # { # case classnum(FormStringControl): # callingStringControl = callingControl; # callingStringControl.performFormLookup(this.formRun()); # break; # case classnum(FormIntControl): # callingIntControl = callingControl; # callingIntControl.performFormLookup(this.formRun()); # break; # #if.ReferencesPath # case classnum(FormInt64Control): # callingInt64Control = callingControl; # callingInt64Control.performFormLookup(this.formRun()); # break; # #endif # case classnum(FormDateControl): # callingDateControl = callingControl; # callingDateControl.performFormLookup(this.formRun()); # break; # } #} ENDSOURCE SOURCE #setLabel #void setLabel(str label) #{ # labels[conlen(lookupItems)] = label; #} ENDSOURCE SOURCE #types2ControlType #FormControlType types2ControlType(Types _returnType, UtilElementId _Id) #{ # #AOT # switch(_returnType) # { # case Types::String: # return FormControlType::String; # case Types::Real: # return FormControlType::Real; # case Types::Date: # return FormControlType::Date; # #if.ServicesPath # case Types::UtcDateTime: # return FormControlType::DateTime; # #endif # case Types::Integer: # if (_id && Global::isType(_id, extendedTypeNum(timeOfDay))) # return FormControlType::Time; # return FormControlType::Integer; # #if.ReferencesPath # case Types::Int64: # return FormControlType::Int64; # case Types::Guid: # return FormControlType::Guid; # #endif # case Types::Enum: # if (_id && Global::isType(_id, extendedTypeNum(NoYesId))) # return FormControlType::CheckBox; # return FormControlType::ComboBox; # } # throw error(strfmt("@SYS110310", _returnType)); #} # ENDSOURCE SOURCE #construct #static SysMultiTableLookup construct() #{ # return new SysMultiTableLookup(); #} ENDSOURCE SOURCE #filterLookupPostRun #/// #/// Simulates the code that is performed in the kernel to allow #/// filtering to work properly in custom lookup forms. #/// #/// #/// The result value from the FilterLookupPreRun method. #/// #/// #/// The filter string contained within the lookup control. #/// #/// #/// The control on the lookup form that is bound to the field to filter the value on. #/// #/// #/// The FormDataSource value on the lookup form. #/// #/// #/// This method should be called after the super call in the custom lookup #/// form's run method. #/// #public static void filterLookupPostRun(boolean _isFiltered, # str _filterString, # FormStringControl _controlToFilter, # FormDataSource _formDataSource) #{ # ; # if (_isFiltered) # { # //The FormDataSource doesn't have a QueryRun since AutoSearch is false # //Therefore we need to create one so that the filter call below will succeed. # _formDataSource.queryRun(new SysQueryRun(_formDataSource.query())); # # _controlToFilter.filter(_filterString); # } #} ENDSOURCE SOURCE #filterLookupPreRun #/// #/// This method simulates the code that is performed in the kernel to allow #/// filtering to work properly in custom lookup Forms. #/// #/// #/// The control that contains the field value being looked up. #/// #/// #/// The control on the Lookup Form that is bound to the field to filter the value on. #/// #/// #/// The FormDataSource on the Lookup Form. #/// #/// #/// The list of additional FormDataSource objects on the Lookup Form #/// where the autoSearch parameter should be set to false in case of filtering. #/// #/// #/// Whether the value in the control contains a value that should be filtered on. #/// #/// #/// This method should be called before the Super method call in the custom Lookup #/// form's run method. #/// #public static boolean filterLookupPreRun(FormStringControl _lookupControl, # FormStringControl _controlToFilter, # FormDataSource _formDataSource, # List _listExtraFormDataSources = null) #{ # boolean isFiltered = false; # str controlText = _lookupControl.text(); # str filterValue = strkeep(controlText, '*'); # ListEnumerator listEnumerator; # FormDataSource extraFormDataSource; # ; # # if (strlen(filterValue) != 0 && _lookupControl.hasChanged()) # { # _formDataSource.autoSearch(false); # # if(_listExtraFormDataSources) # { # listEnumerator = _listExtraFormDataSources.getEnumerator(); # # while(listEnumerator && listEnumerator.moveNext()) # { # extraFormDataSource = listEnumerator.current(); # # if(extraFormDataSource) # { # extraFormDataSource.autoSearch(false); # } # } # } # # isFiltered = true; # } # else # { # if(_controlToFilter) # { # _formDataSource.formRun().args().lookupField(_controlToFilter.dataField()); # _formDataSource.formRun().args().lookupValue(controlText); # } # } # # return isFiltered; #} ENDSOURCE SOURCE #filterLookupPreRun_2DS #/// #/// This method simulates the code that is performed in the kernel to allow #/// filtering to work properly in custom lookup forms with two data sources. #/// #/// #/// The control that contains the field value being looked up. #/// #/// #/// The control on the lookup form that is bound to the field to filter the value on. #/// #/// #/// The first FormDataSource value on the lookup form. #/// #/// #/// The second FormDataSource value on the lookup form #/// where the autoSearch parameter should be set to false in case of filtering. #/// #/// #/// Whether the value in the control contains a value that should be filtered on. #/// #/// #/// This method should be called before the Super method call in the custom lookup #/// form's run method. #/// #public static boolean filterLookupPreRun_2DS(FormStringControl _lookupControl, # FormStringControl _controlToFilter, # FormDataSource _formDataSource, # FormDataSource _formDataSource2) #{ # List listExtraFormDataSources = new List(Types::Class); # ; # listExtraFormDataSources.addEnd(_formDataSource2); # # return SysMultiTableLookup::filterLookupPreRun(_lookupControl, _controlToFilter, _formDataSource, listExtraFormDataSources); #} ENDSOURCE SOURCE #filterLookupPreRun_3DS #/// #/// This method simulates the code that is performed in the kernel to allow #/// filtering to work properly in custom lookup forms with three data sources. #/// #/// #/// The control that contains the field value being looked up. #/// #/// #/// The control on the lookup form that is bound to the field to filter the value on. #/// #/// #/// The first FormDataSource value on the lookup form. #/// #/// #/// The second FormDataSource value on the lookup form. #/// #/// #/// The third FormDataSource value on the lookup form #/// where the autoSearch parameter should be set to false in case of filtering. #/// #/// #/// Whether the value in the control contains a value that should be filtered on. #/// #/// #/// This method should be called before the Super method call in the custom lookup #/// form's run method. #/// #public static boolean filterLookupPreRun_3DS(FormStringControl _lookupControl, # FormStringControl _controlToFilter, # FormDataSource _formDataSource, # FormDataSource _formDataSource2, # FormDataSource _formDataSource3) #{ # List listExtraFormDataSources = new List(Types::Class); # ; # listExtraFormDataSources.addEnd(_formDataSource2); # listExtraFormDataSources.addEnd(_formDataSource3); # # return SysMultiTableLookup::filterLookupPreRun(_lookupControl, _controlToFilter, # _formDataSource, listExtraFormDataSources); #} ENDSOURCE SOURCE #getCallerStringControl #// Used by lookup forms to get the calling string control #client static FormStringControl getCallerStringControl(Args args, boolean throwOnError = true) #{ # FormStringControl callerControl; # FormRun caller; # ; # if (args && args.caller()) # { # if(args.caller().handle() == classnum(FormStringControl)) # { # // When constructed from code the control must be inserted in the args.caller() # callerControl = args.caller(); # } # else if (SysMultiTableLookup::is(args.caller(),classnum(FormRun))) # { # // When the form is assigned on the extended data type the calling formRun is the caller. # caller = args.caller(); # if (caller.selectedControl().handle() == classnum(FormStringControl)) # callerControl = caller.selectedControl(); # } # if (!callerControl) # { // Test if it has been put in the parmObject object. # if (args.parmObject() && args.parmObject().handle() == classnum(FormStringControl)) # callerControl = args.parmObject(); # } # } # # if (throwOnError && !callerControl) # throw(error(Error::wrongUseOfFunction(funcname()))); # # return callerControl; #} ENDSOURCE SOURCE #is #public static boolean is(Object _class, classId _classId) #{ # boolean ret = new SysDictClass(classidget(_class)).isImplementing(_classId); # # if (!ret) # { # ret = SysDictClass::isEqualOrSuperclass(classidget(_class), _classId); # } # # return ret; #} ENDSOURCE SOURCE #isEqualOrExtending #//Method copied over from AX 2009 installation #static boolean isEqualOrExtending(extendedTypeId _id, extendedTypeId _potentialParentId) #{ # SysDictType sysDictType; # ; # if(_id == _potentialParentId) # { # return true; # } # # sysDictType = new SysDictType(_id); # if (sysDictType) # { # return sysDictType.isExtending(_potentialParentId); # } # else # { # return false; # } #} ENDSOURCE SOURCE #lookupTabChanged #/// #/// This method is used in the custom lookup forms #/// to apply a filter on the new tab page when it is activated. #/// #/// #/// The control that contains the field value being looked up. #/// #/// #/// The control on the lookup form that is bound to the field to filter the value on. #/// #/// #/// The FormDataSource value on the lookup form. #/// #/// #/// Usually this method should be called from the tabChanged method of the tab control #/// on the form. #/// #public static void lookupTabChanged(FormStringControl _lookupControl, # FormStringControl _controlToFilter, # FormDataSource _formDataSource) #{ # boolean filterLookup; # ; # filterLookup = SysMultiTableLookup::filterLookupPreRun(_lookupControl, _controlToFilter, _formDataSource); # # if(filterLookup) # { # SysMultiTableLookup::filterLookupPostRun(filterLookup, _lookupControl.text(), _controlToFilter, _formDataSource); # } # else # { # _formDataSource.executeQuery(); # } #} ENDSOURCE SOURCE #newParameters #static SysMultiTableLookup newParameters(FormControl callingControl, Query _query, boolean useLookupValue = true) #{ # SysMultiTableLookup sysTableLookup = SysMultiTableLookup::construct(); # ; # if (_query.dataSourceCount() < 1) # throw error(@"Query needs to be defined before building the lookup"); # # sysTableLookup.parmQuery(_query); # sysTableLookup.parmCallingControl(callingControl); # sysTableLookup.parmUseLookupValue(useLookupValue); # # return sysTableLookup; #} ENDSOURCE ENDMETHODS ENDCLASS ***Element: FRM ; Microsoft Business Solutions-Axapta Forms unloaded at Monday 9/22/2008 ; -------------------------------------------------------------------------------- FRMVERSION 5 FORM #Tutorial_SysMultiTableLookup PROPERTIES Name #Tutorial_SysMultiTableLookup ENDPROPERTIES METHODS Version: 3 SOURCE #classDeclaration #public class FormRun extends ObjectRun #{ #} ENDSOURCE ENDMETHODS OBJECTBANK ENDOBJECTBANK JOINS ENDJOINS DESIGN PROPERTIES Left #Auto (left) Top #Auto Width #Auto Height #Auto Visible #Yes Caption #Tutorial for SysMultiTableLookup TitleDatasource # Frame #Standard WindowResize #Auto WindowType #Standard SaveSize #No AlwaysOnTop #No HideToolbar #No SetCompany #Yes ColorScheme #Default CssClass # ShowWebHelp #Default BackgroundColor #Button face (3D) ImageName # ImageResource #0 Imagemode #Normal (preserve pict. attributes) Mode #Watch SubmitMethod #Auto SupportReload #No LocalWebMenu # AllowDocking #No Font # FontSize #0 Italic #No Underline #No Bold #Default CharacterSet #0 LabelFont # LabelFontSize #0 LabelItalic #No LabelUnderline #No LabelBold #Default LabelCharacterSet #0 DataSource # TopMargin #Auto BottomMargin #Auto LeftMargin #Auto RightMargin #Auto ArrangeWhen #Default ArrangeMethod #Vertical Columns #1 Columnspace #Auto ArrangeGuide ARRAY INDEX Columns #0 ENDARRAY HideIfEmpty #Yes AlignChildren #Yes AlignChild #Yes AllowUserSetup #Yes NeededAccessLevel #NoAccess ENDPROPERTIES CONTAINER CONTROL STRINGEDIT ;==== controlId:12289, containerId: 0, containerdata: 0 ;---------------------------------------------------------- PROPERTIES Name #ItemIdMultiTable AutoDeclaration #No Visible #Yes AllowEdit #Yes Left #Auto (left) Top #Auto Width #Auto Height #Auto VerticalSpacing #Auto Enabled #Yes Skip #No AlignControl #Yes HelpText # ConfigurationKey # SecurityKey # DragDrop #None LookupButton #Auto ReplaceOnLookup #Yes LimitText #Auto DisplayLength #Auto DisplayHeight #Auto Border #Auto Text # PasswordStyle #No Alignment #Auto ChangeCase #Auto MultiLine #No ColorScheme #Default BackStyle #Opaque BackgroundColor #Window background ForegroundColor #Window text Font # FontSize #0 Italic #No Underline #No Bold #Default CharacterSet #0 LabelForegroundColor #Window text ShowLabel #Yes Label #ItemId from multiple tables LabelFont # LabelFontSize #0 LabelItalic #No LabelUnderline #No LabelBold #Default LabelCharacterSet #0 LabelWidth #Auto LabelHeight #Auto LabelPosition #Left LabelAlignment #Left DataSource # DataField # Mandatory #No ExtendedDataType ARRAY #ItemId # ENDARRAY ArrayIndex #0 DataMethod # SearchMode #None ENDPROPERTIES METHODS Version: 3 SOURCE #lookup #public void lookup() #{ # Query query = new Query(); # QueryBuildDataSource qbdsItem; # QueryBuildDataSource qbdsInventTableModule; # QueryBuildDataSource qbdsInventItemLocation; # QueryBuildRange qbrModuleType; # SysMultiTableLookup sysTableLookup; # ; # qbdsItem = query.addDataSource(tableNum(InventTable)); # # qbdsInventTableModule = qbdsItem.addDataSource(tableNum(InventTableModule), "Purch"); # qbdsInventTableModule.relations(true); # qbdsInventTableModule.fetchMode(QueryFetchMode::One2One); # qbrModuleType = qbdsInventTableModule.addRange(fieldNum(InventTableModule, ModuleType)); # qbrModuleType.value(queryValue(ModuleInventPurchSales::Purch)); # # qbdsInventTableModule = qbdsItem.addDataSource(tableNum(InventTableModule), "Invent"); # qbdsInventTableModule.relations(true); # qbdsInventTableModule.fetchMode(QueryFetchMode::One2One); # qbrModuleType = qbdsInventTableModule.addRange(fieldNum(InventTableModule, ModuleType)); # qbrModuleType.value(queryValue(ModuleInventPurchSales::Invent)); # # qbdsInventTableModule = qbdsItem.addDataSource(tableNum(InventTableModule), "Sales"); # qbdsInventTableModule.relations(true); # qbdsInventTableModule.fetchMode(QueryFetchMode::One2One); # qbrModuleType = qbdsInventTableModule.addRange(fieldNum(InventTableModule, ModuleType)); # qbrModuleType.value(queryValue(ModuleInventPurchSales::Sales)); # # qbdsInventItemLocation = qbdsItem.addDataSource(tableNum(InventItemLocation)); # qbdsInventItemLocation.relations(true); # qbdsInventItemLocation.fetchMode(QueryFetchMode::One2One); # # sysTableLookup = SysMultiTableLookup::newParameters(this, query); # # sysTableLookup.addLookupField(fieldNum(InventTable, ItemId)); # sysTableLookup.addLookupField(fieldNum(InventTable, ItemName)); # sysTableLookup.addLookupMethod(tableMethodStr(InventTable, ConfigActive), 1, "Is configuration active?"); # sysTableLookup.addLookupField(fieldNum(InventTableModule, TaxItemGroupId), 2, false, "Purch Item Tax Group"); # sysTableLookup.addLookupField(fieldNum(InventTableModule, TaxItemGroupId), 3); # sysTableLookup.addLookupField(fieldNum(InventTableModule, TaxItemGroupId), 4); # sysTableLookup.addLookupField(fieldNum(InventItemLocation, CountGroupId), 5); # # sysTableLookup.performFormLookup(); #} ENDSOURCE ENDMETHODS ENDCONTROL CONTROL STRINGEDIT ;==== controlId:12290, containerId: 0, containerdata: 0 ;---------------------------------------------------------- PROPERTIES Name #ItemIdRegular AutoDeclaration #No Visible #Yes AllowEdit #Yes Left #Auto (left) Top #Auto Width #Auto Height #Auto VerticalSpacing #Auto Enabled #Yes Skip #No AlignControl #Yes HelpText # ConfigurationKey # SecurityKey # DragDrop #None LookupButton #Auto ReplaceOnLookup #Yes LimitText #Auto DisplayLength #Auto DisplayHeight #Auto Border #Auto Text # PasswordStyle #No Alignment #Auto ChangeCase #Auto MultiLine #No ColorScheme #Default BackStyle #Opaque BackgroundColor #Window background ForegroundColor #Window text Font # FontSize #0 Italic #No Underline #No Bold #Default CharacterSet #0 LabelForegroundColor #Window text ShowLabel #Yes Label #ItemId regular lookup LabelFont # LabelFontSize #0 LabelItalic #No LabelUnderline #No LabelBold #Default LabelCharacterSet #0 LabelWidth #Auto LabelHeight #Auto LabelPosition #Left LabelAlignment #Left DataSource # DataField # Mandatory #No ExtendedDataType ARRAY #ItemId # ENDARRAY ArrayIndex #0 DataMethod # SearchMode #None ENDPROPERTIES METHODS Version: 3 SOURCE #lookup #public void lookup() #{ # Query query = new Query(); # QueryBuildDataSource qbdsItem; # SysMultiTableLookup sysTableLookup; # ; # qbdsItem = query.addDataSource(tableNum(InventTable)); # # sysTableLookup = SysMultiTableLookup::newParameters(this, query); # # sysTableLookup.addLookupField(fieldNum(InventTable, ItemId)); # sysTableLookup.addLookupField(fieldNum(InventTable, ItemName)); # sysTableLookup.addLookupField(fieldNum(InventTable, ItemType)); # sysTableLookup.addLookupField(fieldNum(InventTable, ItemGroupId)); # # sysTableLookup.performFormLookup(); #} ENDSOURCE ENDMETHODS ENDCONTROL CONTROL STRINGEDIT ;==== controlId:12291, containerId: 0, containerdata: 0 ;---------------------------------------------------------- PROPERTIES Name #SalesIdwithQtySum AutoDeclaration #No Visible #Yes AllowEdit #Yes Left #Auto (left) Top #Auto Width #Auto Height #Auto VerticalSpacing #Auto Enabled #Yes Skip #No AlignControl #Yes HelpText # ConfigurationKey # SecurityKey # DragDrop #None LookupButton #Auto ReplaceOnLookup #Yes LimitText #Auto DisplayLength #Auto DisplayHeight #Auto Border #Auto Text # PasswordStyle #No Alignment #Auto ChangeCase #Auto MultiLine #No ColorScheme #Default BackStyle #Opaque BackgroundColor #Window background ForegroundColor #Window text Font # FontSize #0 Italic #No Underline #No Bold #Default CharacterSet #0 LabelForegroundColor #Window text ShowLabel #Yes Label #Sales order with Qty sum LabelFont # LabelFontSize #0 LabelItalic #No LabelUnderline #No LabelBold #Default LabelCharacterSet #0 LabelWidth #Auto LabelHeight #Auto LabelPosition #Left LabelAlignment #Left DataSource # DataField # Mandatory #No ExtendedDataType ARRAY #InventTransRefId # ENDARRAY ArrayIndex #0 DataMethod # SearchMode #None ENDPROPERTIES METHODS Version: 3 SOURCE #lookup #public void lookup() #{ # SysMultiTableLookup sysTableLookup; # Query query = new Query(); # QueryBuildDataSource queryBuildDataSource; # ; # # queryBuildDataSource = query.addDataSource(tablenum(InventTrans)); # queryBuildDataSource.orderMode(OrderMode::GROUPBY); # queryBuildDataSource.addSortField(fieldNum(InventTrans, TransType)); # queryBuildDataSource.addSortField(fieldNum(InventTrans, TransRefId)); # queryBuildDataSource.addSelectionField(fieldNum(InventTrans, Qty), SelectionField::Sum); # # sysTableLookup = SysMultiTableLookup::newParameters(this, query, false); # sysTableLookup.addLookupfield(fieldNum(InventTrans, TransRefId)); # sysTableLookup.addLookupfield(fieldNum(InventTrans, TransType)); # sysTableLookup.addLookupField(fieldNum(InventTrans, Qty)); # # sysTableLookup.performFormLookup(); #} ENDSOURCE ENDMETHODS ENDCONTROL CONTROL STRINGEDIT ;==== controlId:12292, containerId: 0, containerdata: 0 ;---------------------------------------------------------- PROPERTIES Name #UserIdOuterJoin AutoDeclaration #No Visible #Yes AllowEdit #Yes Left #Auto (left) Top #Auto Width #Auto Height #Auto VerticalSpacing #Auto Enabled #Yes Skip #No AlignControl #Yes HelpText # ConfigurationKey # SecurityKey # DragDrop #None LookupButton #Auto ReplaceOnLookup #Yes LimitText #Auto DisplayLength #Auto DisplayHeight #Auto Border #Auto Text # PasswordStyle #No Alignment #Auto ChangeCase #Auto MultiLine #No ColorScheme #Default BackStyle #Opaque BackgroundColor #Window background ForegroundColor #Window text Font # FontSize #0 Italic #No Underline #No Bold #Default CharacterSet #0 LabelForegroundColor #Window text ShowLabel #Yes Label #UserId outer joined LabelFont # LabelFontSize #0 LabelItalic #No LabelUnderline #No LabelBold #Default LabelCharacterSet #0 LabelWidth #Auto LabelHeight #Auto LabelPosition #Left LabelAlignment #Left DataSource # DataField # Mandatory #No ExtendedDataType ARRAY #userId # ENDARRAY ArrayIndex #0 DataMethod # SearchMode #None ENDPROPERTIES METHODS Version: 3 SOURCE #lookup #public void lookup() #{ # SysMultiTableLookup sysTableLookup; # Query query = new Query(); # QueryBuildDataSource queryBuildDataSource; # QueryBuildDataSource queryBuildDataSourceGroup; # ; # queryBuildDataSource = query.addDataSource(tablenum(UserInfo)); # queryBuildDataSourceGroup = queryBuildDataSource.addDataSource(tablenum(UserGroupList)); # queryBuildDataSourceGroup.joinMode(JoinMode::OuterJoin); # queryBuildDataSourceGroup.relations(true); # # sysTableLookup = SysMultiTableLookup::newParameters(this, query); # sysTableLookup.addLookupfield(fieldNum(UserInfo, Id)); # sysTableLookup.addLookupfield(fieldNum(UserInfo, Name)); # sysTableLookup.addLookupfield(fieldNum(UserGroupList, GroupId), 2); # # sysTableLookup.performFormLookup(); #} ENDSOURCE ENDMETHODS ENDCONTROL ENDCONTAINER ENDDESIGN ENDFORM ***Element: PRN ; Microsoft Business Solutions-Axapta Project : SysMultiTableLookup unloaded at Monday 9/22/2008 ; -------------------------------------------------------------------------------- PROJECTVERSION 2 PROJECT #SysMultiTableLookup PRIVATE PROPERTIES Name #SysMultiTableLookup ENDPROPERTIES GROUP #Classes PROPERTIES Name #Classes ProjectGroupType #Classes GroupMask # PreventEditProperties #No ENDPROPERTIES BEGINNODE FILETYPE 0 UTILTYPE 45 UTILOBJECTID 50318 NODETYPE 329 NAME #SysMultiTableLookup ENDNODE ENDGROUP GROUP #Forms PROPERTIES Name #Forms ProjectGroupType #Forms GroupMask # PreventEditProperties #No ENDPROPERTIES BEGINNODE FILETYPE 0 UTILTYPE 11 UTILOBJECTID 0 NODETYPE 201 NAME #Tutorial_SysMultiTableLookup ENDNODE ENDGROUP ENDPROJECT ***Element: END