Использование флага OMI_IGNORE_NOTFOUND в интерфейсе OpenMetadata
В справке по открытым метаданным SAS (стр. 126) говорится: метод UpdateMetadata позволяет обновлять свойства существующих объектов метаданных. Он возвращает ошибку, если обновляемый объект метаданных не существует, если только не установлен флаг OMI_IGNORE_NOTFOUND (134217728).
Вот моя проблема: если я указываю флаг или не указываю флаг, я все равно получаю ту же ошибку: ("SASLibrary: A5X8AHW1.B40000SQ не может быть найден в контейнере wlibrary в хранилище Foundation".)
Вот фрагмент, который воспроизводит ошибку:
import com.sas.meta.SASOMI.IOMI;
import com.sas.metadata.MetadataUtil;
import org.omg.CORBA.StringHolder;
IOMI iOMI = ... // an instance of IOMI connection
StringHolder outputMeta = new StringHolder();
String request = ""
+ "<UpdateMetadata>"
+ " <Metadata>"
+ " <SASLibrary Id=\"A5X8AHW1.B40000SQ\"/>"
+ " </Metadata>"
+ " <NS>SAS</NS>"
+ " <Flags>" + (MetadataUtil.OMI_IGNORE_NOTFOUND | MetadataUtil.OMI_TRUSTED_CLIENT | MetadataUtil.OMI_RETURN_LIST) + "</Flags>"
+ " <Options/>"
+ "</UpdateMetadata>"
;
iOMI.DoRequest(request, outputMeta);
Есть идеи, что не так?
1 ответ
Вопреки тому, что говорится в этом документе, я видел только работу флага OMI_IGNORE_NOTFOUND с методом DeleteMetadata.
Javadoc также, кажется, поддерживает это, заявляя
OMI_IGNORE_NOTFOUND (134217728) Этот флаг предназначен для DeleteMetadata, чтобы он указывал игнорировать не найденные объекты, чтобы он не возвращался при ошибке.