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.

 
 

 

 
 
 
Beiträge des aktuellen Monats
November 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
252627282930 
 
© 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