Получение индекса элемента массива EDT Dimension - PullRequest
0 голосов
/ 06 мая 2011

Мне нужно написать задание, в котором я мог бы получить индекс элемента массива EDT Dimension, например, в моем EDT Dimension у меня есть элементы массива A B C, когда я нажимаю на них для свойств Iсмотрите индекс для A как 1, B как 2 и C как 3. Теперь с пользовательским интерфейсом задания нужно получить значение индекса.Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 06 мая 2011

Я нашел способ, но все еще смотрю, есть ли другое решение.

static void Job10(Args _args)
{

    Dicttype    dicttype;
    counter     i;
    str         test;
    ;
    test = "Client";
    dicttype = new dicttype(132);//132 here is the id of edt dimension 

    for (i=1;i<=dicttype.arraySize();i++)
    {
        if ( dicttype.label(i) == test)
        {
            break;
        }
    }
    print i;
    pause;

}
0 голосов
/ 10 мая 2011

Элементы массива A B C из вашего примера - не что иное, как простые метки - их нельзя использовать в качестве идентификаторов. Прежде всего, для удобства пользователя метки могут быть изменены в любое время, затем, даже если это не так, метки различаются на разных языках и т. Д. И т. Д.

В целом ваш подход (запрос DictType) был бы верным, но я не могу придумать любой сценарий, который фактически потребовал бы такой код.

Если вы уточнили свои бизнес-требования, кто-то может найти лучшее решение.

0 голосов
/ 06 мая 2011

Я не уверен, понял ли я настоящую проблему. Некоторый пример кода может помочь.
Таблица Dimensions имеет несколько полезных методов, таких как arrayIdx2Code.

Может быть, поможет следующий код:

static void Job1(Args _args)
{
    Counter         idx;
    Dimension       dimension;
    DimensionCode   dimensionCode;
    str             name;
    ;
    for (idx = 1; idx <= dimof(dimension); idx++)
    {
        dimensionCode = Dimensions::arrayIdx2Code(idx);
        name = enum2str(dimensionCode);
        // if (name == 'B') ...
        info(strfmt("%1: %2", idx, name));
    }
}
...