Szenario: Auf einer Tabelle wurde ein neues Feld vom EDT DirPartyRecId eingefügt. In der Tabelle selbst dürfen aber nur Parteien mit bestimmten Rollen eingetragen werden (im konkreten Fall nur Debitoren). Dennoch soll der Standard-Lookup der DirPartyTable verwendet werden.
Lösung: In der DataSource des betroffenen Formulares - im Beispiel ist dies die Tabelle SMAServiceObjectTable - auf dem neuen Feld die Methode lookupReference überschreiben
public Common lookupReference(FormReferenceControl _formReferenceControl)
{
return SMAServiceObjectTable::LookupDirPartyCustomers(_formReferenceControl, SMAObjectTable);
}
Die dort aufgerufene Methode sieht wie folgt aus:
public static Common LookupDirPartyCustomers(FormReferenceControl _control, Common _callerRecord)
{
FormReferenceGroupControl callingReferenceGroupControl;
Common selectedRecord;
FormRun lookupForm;
Args args;
dirPartyLookupEntitiesFilter dirPartyLookupEntitiesFilter;
if (!_control)
{
// %1 FormControl parameter is null or is not valid.
throw(error(strFmt("@SYS137393", Error::wrongUseOfFunction(funcName())) ));
}
dirPartyLookupEntitiesFilter =
dirPartyLookupEntitiesFilter::generateDirPartyLookupEntitiesFilter(
NoYes::No, // If YES, all parties will be shown
FilterStatus::Set, // Customer
FilterStatus::Undefined, // Vendor
FilterStatus::Undefined, // Prospect/Business relation
FilterStatus::Undefined, // Competitor
FilterStatus::Undefined, // Contacts
FilterStatus::Undefined, // Employees
FilterStatus::Undefined, // Prospective vendors
FilterStatus::Undefined, // Applicants
CompanyInfo::find().DataArea);
args = new Args(formStr(DirPartyLookup));
// Set filters for a party type and set the value for the filter
//args.parmEnumType(enumNum(DirPartyType));
//args.parmEnum(DirPartyType::Organization);
args.parmObject(dirPartyLookupEntitiesFilter);
args.record(_callerRecord);
args.caller(_control);
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.
Mehr dazu
Szenario: Auf einer Tabelle wurde ein neues Feld vom EDT DirPartyRecId eingefügt. In der Tabelle selbst dürfen aber nur Parteien mit bestimmten Rollen eingetragen werden (im konkreten Fall nur Debitoren). Dennoch soll der Standard-Lookup der DirPartyTable verwendet werden.
Lösung: In der DataSource des betroffenen Formulares - im Beispiel ist dies die Tabelle SMAServiceObjectTable - auf dem neuen Feld die Methode lookupReference überschreiben
{
return SMAServiceObjectTable::LookupDirPartyCustomers(_formReferenceControl, SMAObjectTable);
}
Die dort aufgerufene Methode sieht wie folgt aus:
{
FormReferenceGroupControl callingReferenceGroupControl;
Common selectedRecord;
FormRun lookupForm;
Args args;
dirPartyLookupEntitiesFilter dirPartyLookupEntitiesFilter;
if (!_control)
{
// %1 FormControl parameter is null or is not valid.
throw(error(strFmt("@SYS137393", Error::wrongUseOfFunction(funcName())) ));
}
dirPartyLookupEntitiesFilter =
dirPartyLookupEntitiesFilter::generateDirPartyLookupEntitiesFilter(
NoYes::No, // If YES, all parties will be shown
FilterStatus::Set, // Customer
FilterStatus::Undefined, // Vendor
FilterStatus::Undefined, // Prospect/Business relation
FilterStatus::Undefined, // Competitor
FilterStatus::Undefined, // Contacts
FilterStatus::Undefined, // Employees
FilterStatus::Undefined, // Prospective vendors
FilterStatus::Undefined, // Applicants
CompanyInfo::find().DataArea);
args = new Args(formStr(DirPartyLookup));
// Set filters for a party type and set the value for the filter
//args.parmEnumType(enumNum(DirPartyType));
//args.parmEnum(DirPartyType::Organization);
args.parmObject(dirPartyLookupEntitiesFilter);
args.record(_callerRecord);
args.caller(_control);
lookupForm = classfactory.formRunClass(args);
lookupForm.init();
if (_control.handle() == classNum(FormReferenceGroupControl))
{
callingReferenceGroupControl = _control;
callingReferenceGroupControl.performFormLookup(lookupForm);
selectedRecord = lookupForm.selectRecordModeSelectedRecord();
}
return selectedRecord;
}
Wichtig ist dabei die Klasse dirPartyLookupEntitiesFilter, über die gesteuert wird, welche Rollen angezeigt werden sollen