AX 2012: Lookup auf das Globale Adressbuch erstellen

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
 
 
 

 

 
 
 
Beiträge des aktuellen Monats
Juni 2019
MoDiMiDoFrSaSo
 12
3456789
10111213141516
17181920212223
24252627282930
 
© 2006-2019 Heinz Schweda | Impressum | Kontakt | English version | 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