Método PHP

Olá pessoal,

Numa aplicação Blank criei o método abaixo que está sendo chamado dentro de um outro método da mesma aplicação, mas esse método está com problemas no While (e eu já vi que esse problema tem acontecido com outras pessoas). Já testei a consulta no banco de dados e os dados estão sendo retornados corretamente, mas não está rolando no scriptcase. Alguém poderia me dar uma luz? Outra coisa, no While, como faria pra verificar campos nulos antes de passar valores pra variável?

CÓDIGO: ##################################################################

function itens($protocolo, $coligada) { $espaco = " ";
$sql = "SELECT 
		A.Tarefa_ID, A.Protocolo_ID, A.Setor_ID, B.Setor_Nome, A.Colaborador_ID,
		C.Colaborador_Nome, A.Documento_ID, D.Documento_Nome, A.Tarefa_Titulo,

		CASE A.Tarefa_Prioridade
		WHEN 1 THEN 'Alta'
		WHEN 2 THEN 'Média'
		WHEN 3 THEN 'Baixa' ELSE '' END AS PRIORIDADE,

		CASE A.Tarefa_Situacao
		WHEN 1 THEN 'Pendente'
		WHEN 2 THEN 'Aprovado'
		WHEN 3 THEN 'Arquivado'
		WHEN 4 THEN 'Devolvido'
		ELSE '' END AS SITUACAO,

		CASE A.Tarefa_Ativo WHEN 1 THEN 'Ativo' ELSE 'Inativo' END AS ATIVO,

		A.Tarefa_Descricao, A.Tarefa_Historico

		FROM c002_tarefas A
		INNER JOIN a006_setores B ON (B.Setor_ID = A.Setor_ID)
		INNER JOIN b001_colaboradores C ON (C.Colaborador_ID = A.Colaborador_ID)
		INNER JOIN a005_documentos D ON (D.Documento_ID = A.Documento_ID) 
		INNER JOIN c001_protocolo E ON (E.Protocolo_ID = A.Protocolo_ID)
		WHERE A.Protocolo_ID = $protocolo AND E.Protocolo_Status IN (2, 4)

		ORDER BY A.Tarefa_ID ";

echo $sql; //RODEI O SQL NO BANCO E ESTÁ RETORNANDO TUDO CORRETO

sc_lookup(Ds, $sql);

if(!empty({Ds}))
{
	$l1 = "<table style='width:100%'>
			<tr style='background-color:#003366; color:#ffffff;'>
				<th scope='col'>SETOR</th>
				<th scope='col'>COLABORADOR</th>
				<th scope='col'>DOCUMENTO</th>
				<th scope='col'>TÍTULO DA TAREFA</th>
				<th scope='col'>PRIORIDADE</th>
			</tr>";

	while (!$ds->EOF)
	{      
		$id = $ds->fields[0];
		$protocoloid = $ds->fields[1];
		$setorid = $ds->fields[2];
		$setornome = $ds->fields[3];
		$colaboradorid = $ds->fields[4];
		$colaboradornome = $ds->fields[5];
		$documentoid = $ds->fields[6];
		$documento = $ds->fields[7];
		$titulotarefa = $ds->fields[8];
		$prioridade = $ds->fields[9];
		$ativo = $ds->fields[10];
		$descricao = $ds->fields[12];
		$historico = $ds->fields[13];

//COMO FAÇO NESSAS LINHAS PRA VERIFICAR CAMPOS NULOS ANTES DE PASSAR VALORES PARA A VARIÁVEL?

		$l2 .= "<tr style='font-weight:normal;'>
				<th scope='col' style='border:solid 1px gray;'>$setornome</th>
				<th scope='col' style='border:solid 1px gray;'>$colaboradornome</th>
				<th scope='col' style='border:solid 1px gray;'>$documento</th>
				<th scope='col' style='border:solid 1px gray;'>$titulotarefa</th>
				<th scope='col' style='border:solid 1px gray;'>$prioridade</th>
			  </tr>
			  <tr>
				<td colspan='5' style='border:solid 1px gray;'>$descricao</td>
			  </tr>";

		$ds->MoveNext();
	}

	$ds->Close();
	echo "<div style='color:#F00; margin-bottom:10px;'>TAREFAS ENCONTRADAS.</div>$l1 $l2 </table>";

} else
	if(empty({Ds}))
	{
		echo "<div style='color:#F00; margin-bottom:10px;'>NENHUMA TAREFA FOI RETORNADA.</div><table style='width:100%'>
				<tr style='background-color:#003366; color:#ffffff;'>
					<th scope='col' style='border:solid 1px #ffffff;'>SETOR</th>
					<th scope='col' style='border:solid 1px #ffffff;'>COLABORADOR</th>
					<th scope='col' style='border:solid 1px #ffffff;'>DOCUMENTO</th>
					<th scope='col' style='border:solid 1px #ffffff;'>TÍTULO DA TAREFA</th>
					<th scope='col' style='border:solid 1px #ffffff;'>PRIORIDADE</th>
				</tr>
				</table>";
	};

};

ERRO: ##################################################################

Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Trying to get property of non-object Atenção Undefined variable: l2

Fatal error: Call to a member function MoveNext() on array in /home/mdierpco/public_html/scriptcase/app/Protocolo/relProtocolo/index.php on line 1840

Grato,

Ilano.

Veja se não é essa diferença:
{Ds} - while (!$ds->EOF)

Tente assim:
while (!$Ds->EOF)

Olá Daves,

Desde já agradeço sua atenção. Pois é, fiz isso agora e também não rolou.

Na macro sc_lookup não é utilizado $ds->fields[5] e sim {ds[0][5]}.

Para o que vc precisa é para utilizar a macro sc_select, estude a macro.

Deu certo galera! Obrigado a todos.

Segue o código final caso alguém precise:

function itens($protocolo, $coligada) { $espaco = " "; $i = 0;
$sql = "SELECT 
		A.Tarefa_ID, A.Protocolo_ID, A.Setor_ID, B.Setor_Nome, A.Colaborador_ID,
		C.Colaborador_Nome, A.Documento_ID, D.Documento_Nome, A.Tarefa_Titulo,

		CASE A.Tarefa_Prioridade
		WHEN 1 THEN 'Alta'
		WHEN 2 THEN 'Média'
		WHEN 3 THEN 'Baixa' ELSE '' END AS PRIORIDADE,
		
		CASE A.Tarefa_Situacao
		WHEN 1 THEN 'Pendente'
		WHEN 2 THEN 'Aprovado'
		WHEN 3 THEN 'Arquivado'
		WHEN 4 THEN 'Devolvido'
		ELSE '' END AS SITUACAO,

		CASE A.Tarefa_Ativo WHEN 1 THEN 'Ativo' ELSE 'Inativo' END AS ATIVO,

		A.Tarefa_Descricao, A.Tarefa_Historico

		FROM c002_tarefas A
		INNER JOIN a006_setores B ON (B.Setor_ID = A.Setor_ID)
		INNER JOIN b001_colaboradores C ON (C.Colaborador_ID = A.Colaborador_ID)
		INNER JOIN a005_documentos D ON (D.Documento_ID = A.Documento_ID) 
		INNER JOIN c001_protocolo E ON (E.Protocolo_ID = A.Protocolo_ID)
		WHERE A.Protocolo_ID = $protocolo AND E.Protocolo_Status IN (2, 4)

		ORDER BY A.Tarefa_ID ";

//echo $sql;

sc_lookup(Ds, $sql);
$l2 = "";

if(!empty({Ds}))
{
	$l1 = "<br /><table border='0' cellspacing='0' cellpadding='0' style='width:100%; border:none 0px;'>
			<tr style='background-color:#003366; color:#ffffff;'>
				<th scope='col'>ITEM</th>
				<th scope='col'>SETOR</th>
				<th scope='col'>COLABORADOR</th>
				<th scope='col'>DOCUMENTO</th>
				<th scope='col'>TÍTULO DA TAREFA</th>
				<th scope='col'>PRIORIDADE</th>
			</tr>";
	
	foreach({Ds} as $Ds)
	{
		$id = $Ds[0];
		$protocoloid = $Ds[1];
		$setorid = $Ds[2];
		$setornome = $Ds[3];
		$colaboradorid = $Ds[4];
		$colaboradornome = $Ds[5];
		$documentoid = $Ds[6];
		$documento = $Ds[7];
		$titulotarefa = $Ds[8];
		$prioridade = $Ds[9];
		$ativo = $Ds[11];
		$descricao = $Ds[12];
		$historico = $Ds[13];
		
		$i += 1;
		if($i % 2 == 0) {$cor = '#E9EDF1';} else {$cor = '#ffffff';};
		
		$l2 .= "<tr style='background-color:$cor;'>
					<th scope='col' class='itens esq'>$i</th>
					<th scope='col' class='itens esq'>$setornome</th>
					<th scope='col' class='itens esq'>$colaboradornome</th>
					<th scope='col' class='itens esq'>$documento</th>
					<th scope='col' class='itens esq'>$titulotarefa</th>
					<th scope='col' class='itens esq'>$prioridade</th>
				</tr>
				<tr style='background-color:$cor;'>
					<td colspan='6' class='itens just'>$descricao</td>
				</tr>
				<tr style='background-color:#ffffff;'>
					<td colspan='6' style='border:none 0px #fff;'>$espaco</td>
				</tr>";
	};
	
	echo "$l1 $l2 </table>";

} else
	if(empty({Ds}))
	{
		echo "<div style='color:#F00; margin-bottom:10px;'>NENHUMA TAREFA FOI RETORNADA.</div><table border='0' cellspacing='0' cellpadding='0' style='width:100%'>
				<tr style='background-color:#003366; color:#ffffff;'>
					<th scope='col' style='border:solid 1px #ffffff;'>ITEM</th>
					<th scope='col' style='border:solid 1px #ffffff;'>SETOR</th>
					<th scope='col' style='border:solid 1px #ffffff;'>COLABORADOR</th>
					<th scope='col' style='border:solid 1px #ffffff;'>DOCUMENTO</th>
					<th scope='col' style='border:solid 1px #ffffff;'>TÍTULO DA TAREFA</th>
					<th scope='col' style='border:solid 1px #ffffff;'>PRIORIDADE</th>
				</tr>
				</table>";
	};

};

sempre insisto ler o manual das macros, teria poupado muito tempo