IBMI Iseries v7r3 — как подключиться к скрипту для отправки команды и получения выходных данных

#ibm-midrange

#ibm-средний уровень

Вопрос:

Есть ли способ написать скрипт (python или java), который может подключаться к IBMi для запуска command и получения выходных данных, или, может быть, это может быть что-то вроде сценариев оболочки (.sh) в Linux. Например, чтобы просмотреть значение авторизации объекта, на зеленом экране я буду запускать WRKOBJ [OBJNAME] и 5 для отображения информации для каждой библиотеки.

Моя задача здесь в том, что мне нужно получить значение для нескольких сотен объектов, поэтому я думаю, есть ли скрипт, который я мог бы автоматизировать процесс и вывести значение в файл.

Мы очень ценим вашу помощь с любыми предложениями и рекомендациями. Спасибо.

Ответ №1:

Некоторые представления и табличные функции доступны с помощью sql. Это называется IBM i services. Я думаю, вы можете получить от них большую часть нужной вам информации, ознакомившись с документацией

Комментарии:

1. Я просмотрел документ, и он выглядит хорошо. Есть ли у вас какие-либо рекомендации о том, как / где выполнить запрос? Я новичок в IBMi, поэтому на самом деле не знаю, как я могу выполнить запрос.

2. Я вижу, что у вас нет PHP, поэтому, возможно, с java с этим драйвером jdbc и этой документацией

3. Вы также можете найти драйвер ODBC для Linux там , вам нужна только конфигурация ACS Linux App Pkg

Ответ №2:

можете ли вы запустить PHP на своем IBM i? Вот PHP-скрипт, который выполняет следующее:

  • считывает 3 параметра из querystring . objName , objLib , objType
  • вызовы qcmdexc для запуска DSPOBJAUT команды с выводом OUTFILE в библиотеку QTEMP in .
  • используйте select инструкцию SQL для чтения содержимого выходного файла DSPOBJAUT
  • json_encode выполняется для передачи содержимого выходного файла веб-вызывающему устройству в виде потока. json
 <?php

// set out document type to text/javascript instead of text/html
header("Content-type: text/javascript; charset:utf-8;");

$objName  = isset($_GET["objName"]) ? $_GET["objName"]: '' ; 
$objLib  = isset($_GET["objLib"]) ? $_GET["objLib"]: '' ; 
$objType  = isset($_GET["objType"]) ? $_GET["objType"]: '' ; 

// connect to ibm i 
$libl = 'qgpl qtemp' ;
$options = array('i5_naming' => DB2_I5_NAMING_ON);  
$options['i5_libl'] = $libl ;       // library names separated by space.
$conn = db2_connect("*LOCAL","","", $options);
if (!$conn)
{
  echo db2_conn_errormsg() ;
}

// build and run dspobjaut command. Will output object authorities to file in qtemp.
$cmds = 'dspobjaut obj(' . $objLib . '/' . $objName . ') objtype(' . $objType . ') output(*outfile) outfile(qtemp/objaut)';
$sql = "call  qcmdexc('" . $cmds . "', " . strlen($cmds) . ")" ;
$stmt = db2_prepare( $conn, $sql ) ;
$result = db2_execute( $stmt ) ;

// read contents of dspobjaut outfile. Read into array where each item 
// contains object. Each property of object is column from the dspobjaut outfile table.
$sql = 'select a.* from qtemp/objaut a ' ;
$stmt = db2_prepare( $conn, $sql ) ;
$result = db2_execute( $stmt ) ;
$ar1 = db2Stmt_ToManyRowArray($stmt) ;

// return dspobjaut output as json data stream.
$encode_txt = json_encode( $ar1, JSON_UNESCAPED_UNICODE ) ;
echo   $encode_txt ;

// --------------------- db2Stmt_GetColNames ----------------
// build and return array of column names from a db2_execute
// executed $stmt.
function db2Stmt_GetColNames( $stmt )
{
  $colCx = db2_num_fields($stmt);
  $colNames = array( ) ;
  for( $ix=0; $ix < $colCx; $ix   )
  {
    array_push( $colNames, db2_field_name( $stmt, $ix )) ;
  }
  return  $colNames ;
}

// ------------------- db2Stmt_ToManyRowArray ------------
function db2Stmt_ToManyRowArray( $stmt )
{
  $colNames = db2Stmt_GetColNames( $stmt ) ;
  $manyArr = array( ) ;
  while( $row = db2_fetch_array( $stmt ))
  {

  // build row array consisting of column name/vlu pairs for
  // each column of the result set.
    $rowArr = array( ) ;
    for( $ix = 0 ; $ix < count($colNames) ; $ix   )
    {
      $rowArr[ $colNames[$ix] ] = rtrim($row[$ix]) ;
    }

  // push the $rowArr onto the array of many rows.
    $manyArr[] = $rowArr ;
  }

  return $manyArr ;
}
?>
 

Комментарии:

1. Спасибо за вашу помощь, на данный момент у меня нет PHP в компьютере, но я приму это к сведению. Спасибо.