Существует ряд вариантов, с которыми вы могли бы пойти.
Во-первых, если нет узлов, которые вы ищете, SelectSingleNode возвращает NULL. Все, что вам нужно сделать, это проверить его на ISNULL, прежде чем пытаться вызвать значение функции():
xmlSubNode := xmlNode.SelectSingleNode('DateTime/@DateType');
IF NOT ISNULL(xmlSubNode) THEN
XmlInBound.LocationDateType := xmlSubNode.Value();
Вы также можете изучить стандартный программный модуль 6224 XML DOM Management, который содержит ряд функций-оболочек для XML-анализа. Существуют функции FindNodeXXX, которые вы можете использовать вместо написания собственного кода.
Если вы хотите реализовать try..catch в Dynamics NAV 2013 R2, способ сделать это через конструкцию IF CODEUNIT.RUN THEN. Вам нужно будет создать новый программный модуль, который имеет все ошибки, возможно, код в OnRun триггера, передать необходимые ему параметры, а затем запустить его в IF заявление:
HandleCodeunit.SetParameters(xmlNode,...);
IF HandleCodeunit.RUN THEN BEGIN
HandleCodeunit.GetResults(...);
END ELSE BEGIN
// Handle error
MESSAGE(GETLASTERRORTEXT);
MESSAGE(GETLASTERRORCALLSTACK);
MESSAGE(FORMAT(GETLASTERROROBJECT));
END;
Пожалуйста, обратите внимание, что вы не должны быть внутри транзакции записи, чтобы иметь возможность использовать оператор IF RUN.
Привет, я наконец понял, что я был Уолли. Я относительно новичок в NAV, по сути, разработчик C#, поэтому я не делал переменную, которую я назначил узлу переменной DotNet, но обычную строку .. Таким образом, я продолжал получать Test: = ошибки DotNet .. Спасибо за ваш ответ :) – Daniel