Ссылка на объект не указывает на экземпляр объекта

У меня есть 2 экрана в моем проекте. 1 — экран входа, а другой — рабочий экран… оба отличаются только заголовками. Поэтому я создал 2 области приложения и установил их как репозиторные экраны… Теперь у меня есть 2 экрана…

Каждый раз, когда мне нужен этот рабочий экран, я просто могу перетащить и использовать его, верно… Теперь, когда я перетащил, появляется эта ошибка. Я не знаю, почему… кто-нибудь, пожалуйста, помогите мне…

@Salman_Faries Похоже, проблема не в том, что вы создали 2 экрана в Объектном Репозитории. Судя по скриншоту, ошибка возникает из-за активности Navigate.

Сначала я бы проверил это значение: in_Config(“Mclane_LoginURL”).ToStrin

Просто добавьте одно Сообщение Лога перед Navigate и выведите это значение. Если ключ конфигурации отсутствует или значение равно Nothing, может возникнуть эта ошибка.

Также, поскольку оба экрана одного и того же приложения, и только титул различается, вам могут не понадобиться 2 отдельных области приложений. Вы можете оставить ту же область приложения и создать отдельные экраны/объекты под ней, а затем обработать заголовок в селекторе.

Сначала попробуйте проверить конфигурационный URL. Если URL в порядке, то повторно укажите приложение/экран и проверьте селектор.

Пожалуйста, дайте знать.

Привет, @Salman_Faries

Попробуйте использовать checkapp state перед этим и действуйте дальше в зависимости от вывода.
или
Попробуйте использовать подстановочный знак в URL… Потому что я думаю, что в заголовке будет какое-то изменение..

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

Спасибо, я выяснил, что не передал переменную конфигурации… Но не мог бы ты мне объяснить, зачем используются объектные репозитории… Если я хочу перейти на продакшн, то как переместить репозитории и в каком порядке?

@Salman_Faries Да, это объясняет ошибку :+1: Объектный репозиторий в основном используется для хранения всех элементов/экранов пользовательского интерфейса в одном месте, вместо того чтобы указывать один и тот же элемент снова и снова в разных рабочих процессах. Так что, если селектор изменится позже, вы можете обновить его в репозитории, и действия, использующие этот элемент, смогут повторно использовать обновленное определение. Для перехода в Prod обычно не нужно перемещать объектный репозиторий отдельно. Если это локальный объектный репозиторий, он является частью вашего проекта UiPath. Как только вы опубликуете проект и развернете этот пакет в Prod, экраны/элементы репозитория пойдут вместе с проектом.

Понял. Согласно твоему совету, я изменил это на 1 экран и передаю переменную внутри… но каждый раз, когда я запускаю, она сбрасывается. Что мне делать?

Я устанавливаю так, чтобы in_str_title находился между рабочими потоками… нужно установить на уровне репозитория или как? Пожалуйста, объясни.

@Salman_Faries Да, это происходит потому, что in_Str_title является Входным аргументом. Любое значение, которое вы измените внутри этого рабочего процесса, не будет сохранено после его завершения.

Лучше держать одну переменную в Main, такую как str_Title, и передавать её в дочерние рабочие процессы.

Если вам нужно обновить заголовок внутри дочернего рабочего процесса и использовать обновленное значение позже, измените аргумент на Входной/Выходной и сопоставьте его обратно с той же переменной Main.

Таким образом, процесс будет выглядеть следующим образом:

Main str_Title → дочерний рабочий процесс обновляет его → то же обновленное значение передается в следующий рабочий процесс.

Это должно решить проблему сброса.

если я установлю в главном - str_title… у меня есть 2 рабочего процесса, например, login и working on portal.xaml

в рабочем процессе login, если я передам переменную, то она станет аргументом, тогда я хочу поставить что-то вроде in_Str_Title, верно?

в этом случае, если я напрямую войду в каждый рабочий процесс и установлю аргумент, или мне нужно установить его только на высоком уровне, тут есть некоторые путаницы…

также я не хочу, чтобы заголовок появлялся снаружи… он используется только один раз для работы над ним.

Понятно. В вашем случае, если заголовок требуется только внутри этого конкретного рабочего процесса и вам не нужно его значение снаружи, то нет необходимости хранить его в Main или использовать In/Out.

Например, внутри Login.xaml вы можете создать локальную переменную str_Title и установить заголовок экрана входа там. Таким же образом, внутри WorkingPortal.xaml создайте свою собственную str_Title и установите заголовок рабочего экрана.

Используйте аргумент in_Str_Title только тогда, когда Main решает значение и передает его в этот рабочий процесс.

Простое правило:

  • Используется только внутри одного рабочего процесса → локальная переменная
  • Значение приходит из Main/Config → Входной аргумент
  • Значение должно вернуться из дочернего рабочего процесса → Выходной / Вход-Выходной аргумент

Поскольку вы упомянули, что заголовок используется только один раз внутри этого рабочего процесса, я бы оставил его локальным там. Нет необходимости передавать его на высокий уровень, иначе это только усложнит поток.