#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 в компьютере, но я приму это к сведению. Спасибо.