Oracle BAM – Atualizando a definição de dataObjects

Em um artigo anterior (http://blog.iprocess.com.br/2012/04/exportacao-e-importacao-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 (http://download.oracle.com/docs/cd/E12839_01/integration.1111/e10224/bam_webservices.htm) 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="http://www.w3.org/2001/XMLSchema-instance" xmlns:bam="http://xmlns.oracle.com/bam" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://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="&quot;CQ&quot; / &quot;Buffer&quot; / &quot;Direto&quot;"/>
                  <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.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>