Arhn - архитектура программирования

Почему модуль DOORS иногда имеет значение null при попытке редактирования модуля через DXL?

Я новичок в языке программирования DXL в IBM DOORS. Тем не менее, я думаю, что мне удалось сделать много интересных вещей: создавать Модули, создавать Объекты, создавать Ссылки, удалять Объекты и т. д.

Однако у меня есть очень специфическая проблема с «нулевыми» модулями. Я только что написал нуль между "", потому что модули существуют и на них ссылаются с правильным именем.

При этом:

 Module m1 = edit("1. MY_MODULE", false)
 save(m1)
 close(m1)

Появляется такая ошибка: введите здесь описание изображения

Вы не могли понять, что это значит, поскольку это испанский язык. В основном говорится следующее: «Нулевой параметр модуля в первой позиции аргумента». Это означает, что «m1» имеет значение null, так как параметр метода save() имеет значение null.

Дело в том, что это ошибка, которая появляется только иногда. Кажется, что модуль пустой, так как он был ранее открыт, и ДВЕРИ не закрываются должным образом.

Есть ли какой-нибудь способ, какой-либо метод... что бы избежать этой ошибки?

13.05.2019

  • Вы не можете повторить попытку, когда получите null? DOORS очень глючный, а язык DXL ужасен. Желаю тебе удачи. 13.05.2019
  • @Jean-FrançoisFabre пытался это сделать. Проблема в том, что это должен быть способ закрыть открытые, но невидимые модули... В противном случае проблема на самом деле не решена. Спасибо за поддержку хехехе :) 14.05.2019
  • очень маловероятно, что модуль был открыт ранее в этом же сеансе. Конечно, может случиться так, что модуль был открыт кем-то другим. В этом случае вы должны использовать 3-й параметр разрешения «редактировать» (1. имя строки, 2. логическое отображение, 3. логическое молчание) и после редактирования спросить, является ли m1 нулевым. 14.05.2019

Ответы:


1

Может быть много причин, по которым модуль не может быть открыт в режиме редактирования. Например: у пользователя нет доступа для записи ИЛИ модуль используется другим пользователем и т. д.
Однако вы можете обойти эту ошибку с помощью приведенного ниже фрагмента кода:

Module m = edit('My_module', false)
if(!null m) {
    //execute program
    ...
}
else {
    //do something
}

Надеюсь, это поможет.

06.02.2020

2

Я предполагаю, что скрипт не может найти модуль, когда активна другая папка. Пытаться

Module m1 = edit ("/myproject/myfolder/mysubfolder/1. MY_MODULE", false)
13.05.2019
  • Вроде улучшилось во много раз, но иногда (даже если реже) ломается и появляется ошибка... Есть улучшения? 14.05.2019
  • Любые подсказки для этого? Заголовок stackoverflow.com/questions/56125653/ 14.05.2019

  • 3

    Как работает ваш скрипт? вы открываете один и тот же модуль снова и снова и иногда получаете ошибку, или вы открываете множество модулей, и для некоторых из них это работает, а для других - нет? В последнем случае, возможно, вы неправильно указали путь. Вы можете добавить некоторые проверки работоспособности, например

    string fullPathToMod = "/myproject/myfolder.."
    Item i = item fullPathToMod; 
    if null i then error "there is no item called " fullPathToMod
    if "Module" != type i then error "there is an item, but it's not a module, it's a " type i
    
    14.05.2019
  • Нет, это первый случай. Я открываю один и тот же модуль, редактируя его более одного раза... Может ли быть проблема в этом? 16.05.2019
  • Ну, это вряд ли. Когда у вас есть скрипт - редактируйте /path/to/module - делайте что-то с модулем или не делайте - редактируйте /path/to/module, который более-менее равен current = m, т.е. переводит фокус клиента на модуль, независимо от того, был ли модуль изменен или сохранен или не сохранен или закрыт. Возможно, вы получите больше информации об ошибке, оценив значение lastError (см. noError/lastError) в руководстве по DXL. 16.05.2019
  • Я написал в следующих строках, какова точная ситуация. 16.05.2019

  • 4

    Вот как устроен Кодекс:

    void checkModule(string folderPath, string mName, Skip list, int listSize, int listLastIndex, string headers[], string heading[], string headerKey, bool uniqueKey, string combinedKey[]){
    if (module mName){
        Folder f = folder(folderPath)
        current = f
        Module m = edit(folderPath""mName, false)
        current = m
        Object o = first(m) // error sometimes: Se ha pasado un parametro Module null en una posición de argumento 1
        if (o == null){
            loadModule(m, list, listSize, listLastIndex, headers, heading)
        } else {
            updateModule(m, mName, list, listSize, listLastIndex, heading, headerKey, headers, uniqueKey, combinedKey)
            save(m)
            close(m)
        }
        if (lastError() != ""){
            print "Error: " lastError() "\n"
        }
    } else {
        print "No module " mName ".\n"
    }
    

    }

    Именно он ломается в строке:

    current = m
    

    Но, как говорится, только иногда, не всегда. Кстати, я выполняю этот скрипт через пакет, через код Java. Любопытно, что если я закрываю DOORS и запускаю скрипт, он выполняется правильно. Его как бы нужно закрывать, чтобы корректно редактировать модули.

    Я предполагаю, что current можно использовать несколько раз с разными типами элементов. Я предполагаю, что это не должно быть неправильно, но он ломается, говоря (более или менее):

    В команду DXL передано нулевое значение (текущий модуль).

    Очевидно, это означает, что m равно null, но я не вижу причин для этого.

    16.05.2019
  • возможно, вы получите больше информации в заказе noError; Модуль m = редактировать (...); if lastError() {print Error: lastError() \n}; if null m {вывести m равно null, но ошибки не произошло\n} 19.05.2019
  • Я предполагаю, что вы уверены, что folderPath и mName имеют правильные значения при повторном вызове функции. Возможно, вам следует перепроверить печать -> путь к папке ‹-> mname ‹-\n 19.05.2019
  • if (module mName) выглядит неправильно. Вы хотите проверить, есть ли у вас модуль в данном месте? Это будет сделано по чеку из моего ответа 14 мая 13:09. 19.05.2019
  • Это не проблема, это нормально, так как это работает с некоторыми модулями. Я на 95% уверен в проблеме: если модуль открыт в эксклюзивном режиме, функция edit не может получить контроль над этим модулем... и возвращает null. Это возможно? 20.05.2019
  • Я понятия не имею, как это могло произойти, я никогда не видел этого. Возможно, если вы откроете много-много модулей одновременно, а у клиента больше нет памяти, это может произойти. Если вы сможете воспроизвести эту проблему в стабильных условиях, возможно, вы сможете позвонить в службу поддержки IBM. Но если это действительно проблема, возможно, вы можете создать глобальный список пропуска с ключом = полное имя модуля и данные = открытый модуль. При этом вы можете использовать модуль из скипа вместо того, чтобы снова открывать модуль. 20.05.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..