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
April 2024
MoDiMiDoFrSaSo
1234567
891011121314
15161718192021
22232425262728
2930 
 
© 2006-2024 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