Phoenix Criminal Lawyer

Leitura API JExcel – Lendo dados na Planilha

Neste tutorial vou explicar como utilizar a API JExcel para efetuar a leitura em planilhas com extensão XSL. Esta API é responsável por auxiliar na leitura das planilhas de maneira simples. Primeiramente, efetue o download da API através do link JExel. Após o download, descompacte o arquivo e então adicione a API ao projeto, para isso, crie no um novo projeto clique com o botão direito e vá até Java Build Path, selecione a aba Libraries, Add External Jar, adicione jxl.jar clique em OK.

Para um melhor entendimento deste tutorial é importante visualizar o post anterior onde é feita a escrita na planilha, e é baseado neste tutorial  http://brunogualda.com.br/escrita-api-jexcel-gravando-dados-na-planilha/ que vamos efetuar a leitura do arquivo XSL.

Abaixo segue como efetuar a leitura do arquivo.


package br.com.gualda.teste.tutorial.jexcel;

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class TutorialJExcelLeitura {
private String inputArquivo;

public void setInputFile(String inputArquivo) {
this.inputArquivo = inputArquivo;
}

// Método responsável por efetuar a leitura do arquivo
public void leitura() throws IOException  {
File inputWorkbook = new File(inputArquivo);
Workbook w;
try {
w = Workbook.getWorkbook(inputWorkbook);
// Obtem a primeira folha
Sheet sheet = w.getSheet(0);
// Efetua o loop sobre as colunas e linhas

for (int j = 0; j < sheet.getColumns(); j++) {
for (int i = 0; i < sheet.getRows(); i++) {
Cell cell = sheet.getCell(j, i);
CellType type = cell.getType();
// System.out responsável por exibir todas as labels
if (cell.getType() == CellType.LABEL) {
System.out.println("Label: "
+ cell.getContents());
}
// System.out responsável por exibir todos os números
if (cell.getType() == CellType.NUMBER) {
System.out.println("Número: "
+ cell.getContents());
}

}
}
} catch (BiffException e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws IOException {
TutorialJExcelLeitura test = new TutorialJExcelLeitura();
// Local onde o arquivo se encontra
test.setInputFile("/tmp/ExemploJExcel.xls");
test.leitura();
}
}

Escrita API JExcel – Gravando dados na Planilha

Neste tutorial vou explicar como utilizar a API JExcel. Esta API é responsável por auxiliar na geração de planilhas de maneira simples. Primeiramente, efetue o download da API através do link JExel. Após o download, descompacte o arquivo e então vamos adicionar a API ao projeto, para isso, crie no um novo projeto clique com o botão direito e vá até Java Build Path, selecione a aba Libraries, Add External Jar, adicione jxl.jar clique em OK.

Agora note no código abaixo o funcionamente de cada método, você irá identificar cada elemento responsável por criar as colunas, linhas e definir o tipo de fonte.


package br.com.gualda.teste.tutorial.jexcel;

import java.io.File;
import java.io.IOException;
import java.util.Locale;

import jxl.CellView;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class TutorialJExcel {

private WritableCellFormat timesBoldUnderline;
private WritableCellFormat times;
private String inputArquivo;

public void setOutputFile(String inputArquivo) {
this.inputArquivo = inputArquivo;
}

// Método responsável por fazer a escrita, a inserção dos dados na planilha
public void insere() throws IOException, WriteException {
// Cria um novo arquivo
File arquivo = new File(inputArquivo);
WorkbookSettings wbSettings = new WorkbookSettings();

wbSettings.setLocale(new Locale("pt", "BR"));

WritableWorkbook workbook = Workbook.createWorkbook(arquivo, wbSettings);
// Define um nome para a planilha
workbook.createSheet("Jexcel", 0);
WritableSheet excelSheet = workbook.getSheet(0);
criaLabel(excelSheet);
defineConteudo(excelSheet);

workbook.write();
workbook.close();
}

// Método responsável pela definição das labels
private void criaLabel(WritableSheet sheet)
throws WriteException {
// Cria o tipo de fonte como TIMES e tamanho
WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10);

// Define o formato da célula
times = new WritableCellFormat(times10pt);

// Efetua a quebra automática das células
times.setWrap(true);

// Cria a fonte em negrito com underlines
WritableFont times10ptBoldUnderline = new WritableFont(
WritableFont.ARIAL, 10, WritableFont.BOLD, false);
//UnderlineStyle.SINGLE);
timesBoldUnderline = new WritableCellFormat(times10ptBoldUnderline);

// Efetua a quebra automática das células
timesBoldUnderline.setWrap(true);

CellView cv = new CellView();
cv.setFormat(times);Bom pessoal, é isso ai, qualquer dúvida é só avisar.
cv.setFormat(timesBoldUnderline);
cv.setAutosize(true);

// Escreve os cabeçalhos
addCaption(sheet, 0, 0, "Coluna 1");
addCaption(sheet, 1, 0, "Coluna 2");
addCaption(sheet, 2, 0, "Coluna 3");
}

private void defineConteudo(WritableSheet sheet) throws WriteException,
RowsExceededException {
// Escreve alguns números
for (int i = 1; i < 10; i++) {
// Primeira coluna
addNumero(sheet, 0, i, i + 10);
// Segunda coluna
addNumero(sheet, 1, i, i * i);
// Terceira coluna
addNumero(sheet, 2, i, 10 - i);
}

// Efetua a soma das colunas criadas anteriormente
StringBuffer buf = new StringBuffer();
buf.append("SUM(A2:A10)");
Formula f = new Formula(0, 10, buf.toString());
sheet.addCell(f);
buf = new StringBuffer();
buf.append("SUM(B2:B10)");
f = new Formula(1, 10, buf.toString());
sheet.addCell(f);
buf = new StringBuffer();
buf.append("SUM(C2:C10)");
f = new Formula(2, 10, buf.toString());
sheet.addCell(f);

// Agora vamos inserir algum texto nas colunas
for (int i = 12; i < 20; i++) {
// Primeira coluna
addLabel(sheet, 0, i, "JExcel " + i);
// Segunda coluna
addLabel(sheet, 1, i, "Tutorial");
// Terceira coluna
addLabel(sheet, 2, i, "Exemplo" + (10 - i));
}
}

// Adiciona cabecalho
private void addCaption(WritableSheet planilha, int coluna, int linha, String s)
throws RowsExceededException, WriteException {
Label label;
label = new Label(coluna, linha, s, timesBoldUnderline);
planilha.addCell(label);
}

private void addNumero(WritableSheet planilha, int coluna, int linha,
Integer integer) throws WriteException, RowsExceededException {
Number numero;
numero = new Number(coluna, linha, integer, times);
planilha.addCell(numero);
}

private void addLabel(WritableSheet planilha, int coluna, int linha, String s)
throws WriteException, RowsExceededException {
Label label;
label = new Label(coluna, linha, s, times);
planilha.addCell(label);
}

public static void main(String[] args) {
//                WritableWorkbook workbookIn;
TutorialJExcel exemplo = new TutorialJExcel();
// Define o caminho e nome do arquivo que será criado
exemplo.setOutputFile("/tmp/ExemploJExcel.xls");
try {
exemplo.insere();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out
.println("Agora, vá até a pasta definida anteriormente e verifique o resultado em: /tmp/ExemploJExcel.xls ");
}

}

Veja também com efetuar a leitura dos dados inseridos em: http://brunogualda.com.br/leitura-api-jexcel-lendo-dados-na-planilha/.

RCU-6107 – Erro na criação de script

Para efetuar a criação de esquemas e repositórios de carga no banco de dados para componentes Fusion Middleware é necessário a execução do RCU (Utilitário de Criação de Repositório), porém, naos últimos dias, fui executá-lo e foi apresentado o seguinte erro:

Este erro ocorre porque um parâmetro de inicialização do bando de dados encontra-se com o valor menor do que o necessário para sua execução.

Para efetuar essa correção deste problema, efetue o login em sua base via prompt do sql e execute o seguinte comando:

– show parameter processes

Note na umagem abaixo que o valor do processes é de 500, o mesmo apresentado na tela de erro acima.

Agora, vamos efetuar a alteração do valor do processes, alterando de 500 para 800 conforme o recomendado. Para isso, execute os seguintes comandos:

– alter system reset sessions scope=spfile sid=’*’;
– alter system set processes=800 scope=spfile;
– shutdown immediate
– startup

O primeiro comando é responsável por resetar o valor original, já o segundo, você estará setando o novo valor recomendado, e os comandos shutdown immediate e startup são necessários para que as alterações façam efeito.
Para ter certeza de que a alteração ocorreu com sucesso, execute novamente o comando:

– show parameter processes

Note que o valor foi alterado com sucesso:

BPEL Utilizando For Each e DbAdapter

Em algumas situações no desenvolvimento de serviços utilizando BPEL, me deparei com a necessidade de repetir os dados, seja este qual for o motivo. Neste post vou utilizar um iterador para efetuar um insert multiplo na base de dados utilizando DBAdapter. Para saber mais sobre o DBAdapter acesse: http://brunogualda.com.br/blog/utilizando-bpel-com-dbadapter/.

Para isso, temos que primeiramente criar um projeto BPEL. Se este for seu primeiro contato, é de grande valia acessar este post http://brunogualda.com.br/blog/introducao-ao-bpel/, nele há uma introdução de como criar um projeto BPEL.

Partindo do princípio que já possui conhecimentos básicos para este post, clique em File > New > SOA Application e clique em OK. Dê um nome para a aplicação que está sendo criada, no meu caso BPELWithFORAndBDAdapter e clique em next, na tela seguinte insira um nome para o projeto, irei seguir o padrão do nome dado a aplicação, clique em next e na tela seguinte escolha o template do composite que deseja adicionar. Neste exemplo estou utilizando o “Composite With BPEL Process“, assim, o BPEL já é adicionado automaticamente quando clicar em finish.

Em seguida um tela para a definição do BPEL será aberta, defina a especificação 2.0, dê um nome para o BPEL, defina o template como Synchronous e clique em OK. Uma tela com o composite será aberta com o BPEL que acabou de criar, clique com o botão direito sobre ele e clique em editar. Pronto, neste momento sua tela deverá estar conforme apresentada abaixo:

Para efetuarmos a iteração de insert, vamos utilizar o componente  For Each , que pode ser encontrado em BPEL Constructs > Structured Activies. Arraste o componete entre os elementos receiveInput e replyOutput. Neste ponto o BPEL deverá estar como apresentado abaixo:

Antes de continuarmos com as definições no BPEL, precisamos efetuar a definição dos dados das variáveis no XSD criado pelo BPEL. Abra o arquivo xsd, na parte inferior clique em source. A primeira coisa a fazer é declarar um namespace para nosso xsd, para isso, na frente do namespace padrão xmlns=”http://www.w3.org/2001/XMLSchema” adicione nosso namespace xmlns:xs=”http://bpelwithforanddbadapter.bpel.gualda.com.br/BPELWithFORAndBDAdapter/BPELWithFORAndBDAdapter/BPELWithFORAndBDAdapter”. Assim, todo atributo ou elemento que referenciar nosso arquivo deverá conter o prefixo xs. Para saber mais sobre sobre arquivos XML, XSD recomendo os links abaixo:
http://en.wikipedia.org/wiki/XML_namespace
http://www.w3schools.com/schema/schema_complex_indicators.asp

Após adicionar o namespace conforme descrito acima, vamos agora alterar o nome da variável de entrada e definir seus atributos. Como a intenção deste post é passar N elementos no momento do insert na base de dados, vamos definir um nome para uma lista. No meu caso a variável de entrada ficou conforme apresentado a seguir. Note que o tipo consta o prefixo XS que definimos em nosso namespace anteriormente.

<element name="EntradaLista" type="xs:ListaFor" minOccurs="0"
maxOccurs="unbounded" nillable="true"/>

Agora temos que definir quais serão as variáveis que devem ser iteradas na lista que criamos acima. Para isso definimos um tipo complexo, passando qual a sequência da execução e seus elementos.

<complexType name="ListaFor">
<sequence>
<element name="nome" type="string"/>
<element name="idade" type="integer"/>
<element name="fone" type="string"/>
</sequence>
</complexType>

Note que no tipo complexo que acabamos de definir não foi definimos nenhum atributo para os elementos, pois, ao criamos a lista já definimos que o números mínimo e máximo de vezes que deve ocorrer (minOccurs e maxOccurs). Ao término, seu xsd deverá estar conforme apresentado a seguir:

<?xml version="1.0" encoding="UTF-8"?>
<schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://bpelwithforanddbadapter.bpel.gualda.com.br/BPELWithFORAndBDAdapter/BPELWithFORAndBDAdapter/BPELWithFORAndBDAdapter"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://bpelwithforanddbadapter.bpel.gualda.com.br/BPELWithFORAndBDAdapter/BPELWithFORAndBDAdapter/BPELWithFORAndBDAdapter">
<element name="process">

<complexType>
<sequence>
<element name="EntradaLista" type="xs:ListaFor" minOccurs="0" maxOccurs="unbounded" nillable="true"/>
</sequence>
</complexType>
</element>

<element name="processResponse">
<complexType>
<sequence>
<element name="result" type="string"/>
</sequence>
</complexType>
</element>

<complexType name="ListaFor">
<sequence>
<element name="nome" type="string"/>
<element name="idade" type="integer"/>
<element name="fone" type="string"/>
</sequence>
</complexType>
</schema>

Retornando ao BPEL para concluir as definições, adicione o DbAdapter configurando o service name, definindo sua conexão com a base e colocando o nome correto no JNDI. Depois, defina a operação que deseja utilizar, para este post vou utilizar a opção “Execute Pure SQL” e clique em next, será aberta uma tela de Custom SQL onde devemos inserir nosso script de inserção. Note que ao inserirmos o script no campo SQL automaticamente o XSD é gerado de forma automática. No XSD gerado você pode alterar o tipo de dados se necessário. Veja a imagem abaixo:

Clique em next, finish e para concluir o Partner Link clique em OK.

Agora, adicione o invoke dentro do ForEach e vamos editar, de um nome, no meu caso insert, selecione o partner link clicando na lupa . O partner link refere-se ao DbAdapter que criou anteriormente, crie a variável de entrada e clique em OK.

Vamos agora concluir as definições do ForEach, clique com o botão direito para editar, defina um nome para para algo mais amigável, no meu caso será ExemploInsertFor, em Counter Name defina um nome para o contador que está sendo criado, neste exemplo está como “contador”. Veja imagem abaixo:

 


Note que abaixo do nome do contador podemos definir a execução em paralelo, isso é útil quando a ordem de execução não for importante. Agora clique na aba “Counter Values” para definirmos os valores de início e fim. Na expressão do valor inicial coloque 1, isso fará com que o contador inicie a partir do 1, 2, 3…. e assim sucessivamente. Já na expressão do valor final vamos definir como valor máximo o valor que será passado na lista de entrada, para isso, clique em Expression  para abrir o Expression Builder, dentro do campo Expression utilize o recurso de auto completar para adicionar as informações. No final, nossa expressão deverá estar conforme apresentado abaixo:

Note que a função ora:countNodes é responsável por fazer a função de “contar” a quantidade de elementos que será passado, e logo temos qual a variável que será utilizada como parâmetro de contagem. Clique em OK. A tela do For Each em Counter Values deverá estar conforme apresentado abaixo:

Clique em OK.
Adicione um Assign antes do invoke e clique com o botão direito para editar. Com o Edit Assign aberto, expanda do lado direito o inputVariable do DbAdapter até que as variáveis estejam visíveis. Agora, adicione um expression para cada variável, para isso, basta arrastar um  sobre as variáveis. Ao efetuar esse passo a tela de Expression Builder será aberta para definição das expressão de execução. Para cada variável o expressão deverá ficar assim:

$inputVariable.payload/client:EntradaLista[$contador]/client:nome

Para um breve entendimento, na lista de entrada é atribuído o contador, contador que será responsável por definir quantas vezes a variável nome (client:nome) será exibida para preenchimento. Clique em OK. Repita o procedimento para as demais variáveis. Antes de finalizar, clique sobre a aba General e dê um nome mais amigável para o assign. A tela do Edit Assign deverá ficar conforme apresentado abaixo:

Feito isso, efetue o deploy da aplicação. Veja como efetuar deploy da aplicação em: http://brunogualda.com.br/como-efetuar-deploy-do-jdeveloper-no-weblogic/. Acesse a url do servidor em http://localhost:7001/em (no meu caso), clique sobre a aplicação BPELWithForAndDBAdapter, deverá carregar uma tela conforme apresentada abaixo:

Note que nossa EntradaLista, refere-se a variável de entrada é um array e o box com valor 0 é a quantidade de vezes que desejamos repetir nossas variáveis. Vou passa o valor 2 e clicar sobre o ícone , a página será atualiza e irá notar que os elementos fora “duplicados”, pois refere-se ao valor 2 que passamos no list, se alterar esse valor para mais, os campos serão inseridos conforme a quantidade informada. Preencha os campo de cada elemento e clique em Test Web Service. Se tudo ocorrer conforme o esperado, você irá notar que os campos foram inseridos na base.

Download do projeto

BPEL com IF

Um item muito útil no desenvolvimento do BPEL é a utilização de IF, com esse componente podemos definir que tipo de ação a chama de serviço deverá executar. Neste post vou trabalhar a parte de inserção, remoção e atualização dos dados utilizando um DBAdapter para efetuar a conexão. Para saber mais sobre DBAdapter, acesse: http://brunogualda.com.br/utilizando-bpel-com-dbadapter/.

Caso este seja seu primeiro contato com BPEL, seria interessante dar uma olhada neste tutorial para se familiarizar: http://brunogualda.com.br/introducao-ao-bpel/.

Com o novo projeto criado, vamos adicionar primeiramente a condição IF em nosso BPEL. Para isso, clique em BPEL Constructs, verifique que no final haverá um ícone  , adicione entre receiveInput e replyOutput. Por padrão, o IF adicionado contém as verificações IF e ELSE, como precisaremos de mais um entrada para fazer a verificação, selecione o IF adicionado, você irá notar que um botão de + será habilitado no lado esquerdo, clique sobre ele e adicione um “Else If”. Você irá nota que agora o IF contém as seguintes condições IF, ELSESIF e ELSE. A quantidade de elseif pode ser adicionado conforme sua necessidade.

Agora, vamos adicionar um Assing  para cada condição e um Invoke . Nesse ponto sua tela deverá estar conforme apresentada abaixo:

Abra o arquivo BPELWithIF.xsd e altere as variáveis de entrada conforme sua necessidade, no meu caso estou trabalhando apenas com quatro variáveis que serão responsáveis por passar o valor a base (cod_pessoa, nome, idade e fone) e também é necessário adicionar mais uma variável, por exemplo TIPO, que será onde iremos definir dentro do nosso IF qual operação deverá ser executada. Note na imagem abaixo que a variável cod_pessoa contém o elemento “minOccurs=0“, isso tira a obrigatoriedade do preenchimento do campo. Outro elemento que temos é o nillable, este, especifica se o valor declarado nulo pode ser atribuído ao elemento. Para saber mais veja em http://www.w3schools.com/schema/schema_complex_indicators.asp.
A definição pode ser feita atrávés do arquivo XSD conforme pode ser notado na imagem abaixo, ou ainda, você pode alterar no “Property Inspector” no título XML Schema.

De volta ao BPEL, vamos agora definir os valores na condição do IF, para isso, clique no campo label do IF. Nesse ponto vamos definir a condição que o IF deverá executar, então, clique sobre o ícone  e a tela do Expression Builder será aberta, então, vá até inputVariable > payload > client:process, adicione a variável tipo (ou a que você criou) no campo Expression clicando duas sobre ela, determine qual o valor de execução, no meu caso ‘insercao’ e clique em OK. Veja:

Repita o procedimento para o elseif que no meu caso passei o valor atualizar, e em else utilizei o nome de delete. Neste último, não será necessário configurar o valor da variável tipo, pois, caso a condição não satisfaça será direcionado a fazer a opção de delete.

Vamos então adicionar o DBAdapter para efetuar a conexão com a base de dados. Qualquer dúvida sobre este procedimento veja mais em: http://brunogualda.com.br/utilizando-bpel-com-dbadapter/.

Quando chegar em Operation Type, selecione “Perform an Operation on a Table” e marque as seguintes opções: “Insert or Update (merge)”, “Insert Only” e “Delete”.

Faça o import da tabela na tela seguinte, clique em next e pode ignorar a tela de relacionamento, pois não teremos relacionamento com tabelas nesse exemplo. Clique em next novamente, na tela que surge é possível notar os campos selecionados da tabela inclusive o campo cod_empresa que será nossa sequence. Na tela seguinte de opções avançadas, em sequence clique em search para localizar as sequences que contém na base e selecione a opção cod_pessoa, clique em next e finish.

Clique em OK para concluir a criação do partner link.
Agora vamos efetuar o relacionamento dos invokes com o DbAdapter adicionado anteriormente. No invoke do If, selecione-o e clique em editar, definia um nome, no meu caso “insercao”, clique sobre a lupa no campo partner link e selecione o DbAdapter criado e clique em OK.

Você irá notar que os campos Port Type e Operation serão carregados. No campo operation selecione a opção de insert, agora vamos criar as variáveis de entrada e saída (input e output).

Repita o procedimento para o elseif, alterando o campo operation para “merge“. E por último altere no else passando “delete” no campo operation. Note que ao selecionar a opção delete, o campo output é automaticamente desativado, pois, ao executar essa operação não é necessário um retorno.

Vamos agora efetuar a atribuição dos valores das variáveis criada com a base de dados. Em If, selecione o Assign e clique em editar, primeiramente vá até a aba General e altere o nome para algo mais amigável, no meu caso atribuiInsert. Feito isso, volte para Copy Rules e vamos efetuar a atribuição dos valores. No lado esquerdo, expanda inputVariable até que as variáveis adicionadas em nosso XSD no começo do tutorial estajam visíveis, repita o procedimento do lado direito, porém, como vamos efetuar a inserção dos dados, expanda a variável que criou no momento da edição do invoke, no meu caso insercao_InputVariable. Você deverá expandir até que as variáveis estajam visíveis. O caminho para chegar até elas no meu exemplo é: insercao_InputVariable > PessoaCollection > ns2:PessoaCollection: PessoalCollection > ns2:Pessoa : Pessoa.
Feito isso, efetue a atribuição referente a cada variável conforme apresentado abaixo. Note que nosso elemento cod_pessoa não foi selecionado, isso porque trata-se do elemente que será responsável por receber nossa sequence, e assim, sua atribuição é feita de maneira implícita.

Repita o procedimento de edição de do Assign agora no elseif, porém, neste vamos fazer a atribuição para todos os elementos, inclusive para nosso cod_pessoa. Veja:

E por fim, edite o Assign do else, onde nosso único elemento que será atribuído será a nossa sequence, ou seja, cod_pessoa.

Agora, com os procedimentos acima finalizado efetue o deploy. Veja mais sobre como efetuar deploy no weblogic em: http://brunogualda.com.br/como-efetuar-deploy-do-jdeveloper-no-weblogic/.

Com o deploy efetuado, vamos testar a aplicação. Primeiramente vamos efetuar um inserção na tabela pessoa, passe os valores de cada elemento, no elemento tipo passe o valor que foi definido na condição do if. Veja: http://brunogualda.com.br/blog/wp-content/uploads/2012/02/Screen_Definition_IF_Value1.png. No meu caso o valor é

Ao clicar em testar, se tudo estiver OK, você poderá notar na tabela que todos os campos foram preechidos, inclusive o campo cod_pessoa que não passamos valor, pois como foi dito anteriormente trata-se da nossa sequence que é gerada automanticamente. Insira mais um ou dois elementos apenas para popularmos a tabela. Feito isso, vamos efetuar a atualização de um de nossos dados inseridos, para isso, irá precisar preenchar o valor de todos os elementos, inclusive do cod_pessoa. Então, passe o cod_pessoa, altere o nome, idade e telefone, assim terá a dimensão de como ocorreu a atualização, feito isso, clique em Test Web Service e verifique em sua base de dados se os campos foram atualizados. Agora, vamos testar a remoção de um dado base, para isso, basta selecionar o cod_pessoa da pessoa que deseja remover e passar no elemento correspondente, para os demais campos podemos passar qualquer coisa, pois não irá influenciar no resultado final.

Download do projeto

Testebot