Em um artigo anterior Exportação e importação de Objetos do Oracle BAM vimos como utilizar o comando icommand para importar/exportar objetos do Oracle BAM, dentre eles um data object, que é a estrutura onde os dados exibidos no Oracle BAM são armazenados.
Neste tópico, veremos como atualizar a definição dos data objects do Oracle BAM de uma forma um pouco mais poderosa que utilizando o icommand, por meio dos webservices do Oracle BAM.
Problema:
Uma das limitações do icommand é que ele não permite “atualizar” um data object. Por exemplo, via icommand, não é possível incluir uma nova coluna. É preciso excluir o data object e criá-lo novamente, o que acarreta a perda de referências e também a perda de dados.
Solução:
Utilize o webservice DataObjectDefinition para enviar a nova estrutura do data object, sem perder os dados existentes.
O modo de funcionamento é simples: você envia a nova estrutura do data object no payload. As colunas que existirem com o mesmo nome serão atualizadas, as que não existirem serão criadas e as que existirem mas não estiverem na nova definição, serão excluídas.
Exemplo de payload:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:bam="https://xmlns.oracle.com/bam" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<bam:Update>
<bam:xmlPayload>
<![CDATA[
<DataObject Version="14" Name="Distribuicao" ID="_Distribuicao1" Path="/Logistica" External="0">
<Layout>
<Column Name="Local" ID="_Local" Type="string" MaxSize="100" Nullable="1" Public="1" TipText=""CQ" / "Buffer" / "Direto""/>
<Column Name="Quantidade" ID="_Quantidade" Type="integer" Nullable="1" Public="1"/>
<Column Name="Data_Expiracao" ID="_Data_Expiracao" Type="datetime" Nullable="1" Public="1" TipText="Data de expiração dos dados no BAM"/>
</Layout>
</DataObject>
]]>
</bam:xmlPayload>
</bam:Update>
</soap:Body>
</soap:Envelope>
Note que o formato do payload é o mesmo que o utilizado no XML exportado ou importado via icommand, o que facilita o trabalho.
A atualização terá ocorrido com sucesso se o retorno do webservice for o elemento “UpdateResponse” vazio.


