vrijdag 25 januari 2013

Call Non-Static Method Dynamically

http://stackoverflow.com/questions/9098704/dynamics-ax-call-non-static-method-dynamically

public static anytype callMethod(str _className, str _methodName, container _parameters, Object _object = null)
{
    DictClass dictClass;
    anytype returnValue;
    Object object;
    ExecutePermission permission;

    // Grants permission to execute the DictClass.callObject method.
    // DictClass.callObject runs under code access security.
    permission = new ExecutePermission();
    permission.assert();

    if (_object != null)
    {
        dictClass = new DictClass(classidget(_object));
        object = _object;
    }
    else
    {
        dictClass = new DictClass(className2Id(_className));
        object = dictClass.makeObject();
    }

    if (dictClass != null)
    {
        switch (conLen(_parameters))
        {
            case 0:
                returnValue = dictClass.callObject(_methodName, object);
                break;
            case 1:
                returnValue = dictClass.callObject(_methodName, object, conPeek(_parameters, 1));
                break;
            case 2:
                returnValue = dictClass.callObject(_methodName, object, conPeek(_parameters, 1), conPeek(_parameters, 2));
                break;
             //... Continue this pattern for the number of parameters you need to support.
        }
    }

    // Closes the code access permission scope.
    CodeAccessPermission::revertAssert();

    return returnValue;
}

woensdag 2 januari 2013

Custom Lookup - company id

public void lookup()
{
    SysTableLookup sysTableLookup;
    Query query;
    ;

    sysTableLookup = SysTableLookup::newParameters(tablenum(DataArea),this, false);
    sysTableLookup.addLookupfield(fieldnum(DataArea, Id), true);
    sysTableLookup.addLookupfield(fieldnum(DataArea, Name));

    query = new Query();
    query.addDataSource(tablenum(DataArea));
    query.dataSourceTable(tablenum(DataArea)).addRange(fieldnum(DataArea,IsVirtual)).value(int2str(0));
    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();
}