Willkommen auf schweda.net | EN | DE
 
 
 
 
 

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.

Screenshot

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);

    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
 
 

 

Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012

Björn 16.02.2016 15:18 | #1

Great, thanks thats exactly what I neded.

Kommentar hinzufügen

 

 
Kategorien / Themen
Feeds
RSS RSS-Feed
RSS RSS-Feed (Kommentare)
RSS RSS-Feed (Kategorie)
Atom Atom-Feed
 
 
Beiträge des aktuellen Monats
Oktober 2017
MoDiMiDoFrSaSo
 1
2345678
9101112131415
16171819202122
23242526272829
3031 
 
 
© 2006-2016 Heinz Schweda | Impressum | Kontakt | English version (BETA) | Mobile Version
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