Вызов программы RPG AS400 со сложной структурой данных из приложения .NET 8 ⇐ C#

Место общения программистов C#
Anonymous
Вызов программы RPG AS400 со сложной структурой данных из приложения .NET 8

Сообщение Anonymous »

Я работаю над проектом модернизации бизнес -приложений, где мне нужно вызвать существующие программы AS400 (RPG, CLP ...) из приложения .net 8
Эти программы RPG имеют параметры ввода/вывода со сложными структурами данных (DS), и мне нужно создавать/анализировать эти DS/до Pocos. Здесь.
Предположим, что ds empl ниже и программа emplpgm ​​ Принимая этот DS в качестве первого параметра:

Код: Выделить всё

dcl-ds empl qualified;
name char(10) inz('Unknown');
salary packed(9 : 2) inz(0);
end-ds;
< /code>
Соответствующий poco в .net для этого ds будет: < /p>
public class Employee {
public string Name {get; set;}
public decimal Salary {get; set;}
}
< /code>
Теперь то, чего я хотел бы достичь,-это следующее: < /p>
var empl = new Employee() {
Name = "Foo",
Salary = 50000.0M
};

//Calling program in a "dapper way"
//Does this exist or can be achieved ?
someClass.SomeMethodToCallProgram("EMPLPGM", new[] {P1 = empl});

Console.WriteLine(empl.Name); // I/O Parameter, output data is relevant

Это что -то достижимое или нам нужно пересмотреть проект? Вот список портов TCP/IP для различных служб. Кто -нибудь знает, можно ли использовать удаленную командную службу для вызова программы из удаленного клиента по сети? Есть идеи найти документацию базового протокола? Похоже, что он обеспечивает удаленную программу. Кто -нибудь когда -нибудь проверял это? Я не вижу никаких отзывов.

Код: Выделить всё

//Open connection
var conn = new NTiConnection(connectionString);
conn.Open();

//Create parameter list:
List parms = new List() {
new NTiProgramParameter("Hello", 10).AsInput(), //CHAR(10) INPUT
new NTiProgramParameter("World", 10).AsInput(), //CHAR(10) INPUT
new NTiProgramParameter(new byte[] {0x00}).AsInput(), //CHAR(10) INPUT
new NTiProgramParameter(128).AsInput(), //INTEGER (BYTE(4)) INPUT
new NTiProgramParameter("", 128).AsOutput(), //CHAR(128) OUTPUT
new NTiProgramParameter("", 50) //CHAR(50) I/O
};

//Program call
conn.CallProgram("MYLIB", "MYPGM", parms);

//Data retrieval from return variable (parameter n°5)
string message1 = parms[4].GetString(0, 64);
string message2 = parms[4].GetString(64, 64);

//Closing the connection
conn.Close();
Похоже, у меня есть хороший кандидат, чтобы решить мою проблему здесь, ожидая ответа от редактора ...


Подробнее здесь: https://stackoverflow.com/questions/796 ... pplication

Вернуться в «C#»