#!/usr/bin/php -Cq 3, $pI['telefone'] => 2, $pI['transbordo'] => 4, $pI['ura'] => 5, $pI['data'] => 7, $pI['tronco'] => 8); /* * Associa os valores */ $paramValue = GetValuesIntegracaoAtv($paramMapa, $argv); $msg = sprintf('$idMetodo=%s $numero=%s $uid=%s $uidOld=%s $ura=%s $idProc=%s', $idMetodo, $numero, $uid, $uidOld, $ura, $idProc); __logStr("InicioAgiIntegra", $msg, $scrpt, true); /* * Acessa memoria compartilhada */ $memoryAllocated = Malloc(); $shmSystemKey = ShmGetId(SHM_IPC_FILE); $shmKey = ShmOpen($shmSystemKey, SHM_ACESS_MODE, SHM_ACESS_PERMISSION, $memoryAllocated); if (!$shmKey) { $msg = "Não foi possível acessar a memoria do compartilhada."; __logStr("ShmOpen", $msg, $scrpt, true); exit; } /* * Tras informações sobre o método */ $infoMetodo = GetInfoMetodo($idMetodo); if ($infoMetodo === false) { $msg = "Nao foi possivel obter informacoes sobre o metodo!"; __logStr("GetInfoMetodo", $msg, $scrpt, true); } else { //select a.itgm_tipo, a.itgm_comando, itgm_retorno, a.opcao as opcao_metodo, a.stored_params, //c.itgp_prefix, b.itgc_host, b.itgc_port, b.itgc_database, b.itgc_user, b.itgc_password, b.itgc_timeout, b.opcao, b.acao //"1|#|uid@2|#|fone@5|123|tipo" $host = $infoMetodo['itgc_host']; $port = $infoMetodo['itgc_port']; $dataBase = $infoMetodo['itgc_database']; $user = $infoMetodo['itgc_user']; $passWord = $infoMetodo['itgc_password']; $isProcedure = $infoMetodo['itgm_tipo']; $opc = $infoMetodo['opcao']; $acao = $infoMetodo['acao']; $tipoDb = $infoMetodo['itgp_prefix']; $cmd = $infoMetodo['itgm_comando']; $params = $infoMetodo['stored_params']; $isEvento = $infoMetodo['evento'] != 0; $db = new dbAbstract($tipoDb, $host, $port, $dataBase, $user, $passWord); if (!$db->db_connect()) { $dados = sprintf("host->%s portt->%s dataBaset->%s usert->%s passWordt->%s", $host, $port, $dataBase, $user, $passWord); $msg = sprintf("Nao foi possivel conectar a base de dados!!\nErro:[%s]\nDados:[%s]", $db->db_getmessage(), $dados); __logStr("db_connect", $msg, $scrpt, true); } else { /* * Quando a query é passada pode ser incluido varios comandos sql separados por ";', estes * com exceção do primeiro que é retornado na variavel "$cmd" os demais serão reotnados em array * para serem executados ao final da operação. O primeiro comando retornado é o uníco que poderá * retorna um resultset do banco, este retorno podera ser utilizado como parametro dos outros * comando. */ $cmdQuery = array(); $cmdQuery = GetCommand($cmd, $cmd); /* * Esta variavel irá coletar o resultado do primeiro comandado. */ $resultQuery = array(); /* * Executa o primeiro comando. */ $query = GetQueryIntegracao($cmd, $params); __logStr("exec_query_integra", $query, $scrpt); $result = $db->db_query($query); if (!$result) { $msg = sprintf("Erro ao executar comando no banco de dados!\nQuery: %s Erro: %s", $query, $db->db_getmessage()); __logStr("db_query", $msg, $scrpt, true); } else { /* * Clear and rewrite memory segment with database result. */ ClearSegment($shmKey, $idProc); /* * Verifica se a consulta retornou dados */ if (!$db->db_num_rows($result)) { $msg = sprintf("Executou o comando mas nao retornou dados!\nQuery: %s", $query); __logStr("db_num_rows", $msg, $scrpt, true); $data = sprintf("%s|%s|%s|%s", $uid, $numero, -1, ''); ShmWrite($shmKey, $data, GetOffSet($idProc)); ExecutaComandosAd($db, $cmdQuery, $resultQuery, $params); } else { $row = $db->db_fetch_array($result); /* * O valores retornados poderão ser usados como parametros para execução * de outros comandos sql. */ $resultQuery = GetArrayOrd($row); $dataClient = ''; $i = 0; foreach ($row as $key => $value) { if (!$i++) { $queue = trim($value); } else { $dataClient .= sprintf("|%s:%s", trim($key), trim($value)); } } if (!$queue) { $msg = sprintf("Executou o comando mas retornou um valor nulo!\n: Val->\"%s\"", $queue); $queue = '-1'; __logStr("db_num_rows", $msg, $scrpt, true); } $data = substr(sprintf("%s|%s|%s%s", $uid, $numero, $queue, $dataClient), 0, MEMORY_SEGMENT_WITH); /* * Rewrite memory segment with new information. */ ShmWrite($shmKey, $data, GetOffSet($idProc)); /* * Executa comandos adiconais no banco de dados. */ ExecutaComandosAd($db, $cmdQuery, $resultQuery, $params); } /* * Updates the status of process. */ ShmWrite($shmKey, PROCESSESS_READ, $idProc); } } if ($shmKey) ShmClose($shmKey); } function ExecutaComandosAd($db, $cmds, $returns, $params) { global $scrpt; // 4|#|ura@2|#|fone@5||uid $listParams = GetParamQuery($params); for ($i = 0; $i < count($cmds); $i++) { //CALL InformaPagamento(@id,@nome,'') $cmdStr = $cmds[$i] . "\n\n"; for ($j = 0; $j < count($listParams); $j++) { $cmdStr = str_replace('@' . $listParams[$j], QuotedStr($returns[strtolower($listParams[$j])]), $cmdStr); } $cmds[$i] = $cmdStr; } foreach ($cmds as $query) { if (!$db->db_query($query)) { $msg = sprintf("Comando Adicional executado com erro!\n Val->\"%s\"", $query); __logStr("ExecutaComandosAd", $msg, $scrpt, true); } else { __logStr("ExecutaComandosAd", $query, $scrpt, true); } } } function GetArrayOrd($arAssoc) { $arOrd = array(); foreach ($row as $value) { $arOrd[] = $value; } return $arOrd; } ?>