无法在Genexus上使用ftp保存文件

时间:2019-09-12 17:32:37

标签: ftp ibm-midrange genexus

我正在尝试使用.net在Genexus 10 V3上使用GxFtpPut将文件保存在Iseries数据库中的库中,但是在发送文件时Genexus尝试将其发送到Windows目录,而不是将其发送到有效的库在cmd上使用ftp命令

我已经尝试过更改路由无效,并试图找到另一种通过Genexus发送文件的方式。

例如,当使用cmd时,我只是这样:

put C:\FILES\Filename.txt Library/Filename

它可以在库中发送文件

但是在Genexus上执行此操作时

Call("GxFtpPut", &FileDirectory , 'Library/'+&FileName,'B' )

不起作用,并尝试在服务器的Windows文件中找到具有该名称的目录

我只希望能够毫无问题地将其发送到服务器库。

1 个答案:

答案 0 :(得分:1)

IBM i有两种不同的名称格式,具体取决于您要使用的文件系统。 NAMEFMT 0是library/filename格式,PC FTP客户端可能不知道。 NAMEFMT 1是非IBM i计算机使用的典型分层目录路径,如果要将文件放在IFS(集成文件系统)中的任何位置,它也可以与IBM i一起使用。

有趣的是,本机库文件系统也可以从IFS访问。但是要解决这个问题,您需要使用一种可能有点陌生的格式。 /QSYS.lib/library.lib/filename.file/membername.mbr您可以删除成员名称。

要更改名称格式,可以在远程主机上发出SITE子命令,如下所示:

QUOTE SITE NAMEFMT 0    -- This sets name format 0 (library/filename)
QUITE SITE NAMEFMT 1    -- This sets name format 1 (directory path)

我使用普通的Windows FTP客户端进行了一些测试。 PC上的测试文件是在Notepad ++中创建的文本文件。原来,除非更改,否则我们从NAMEFMT 0开始。看起来Genexus仅支持有限的命令集。因此,以下是可以使用的受限FTP脚本:

ascii
put test.txt mylib/testpf

我现在可以在绿屏实用程序上拉起testpf并进行阅读。我还可以在GUI SQL客户端中阅读testpf。 ASCII文本已正确转换为EBCDIC。

|TESTPF                                                                          |
|--------------------------------------------------------------------------------|
|                                                                                |
|// ------------------------------------                                         |
|// Sweep                                                                        |
|//                                                                              |
|// Performs the sweep logic                                                     |
|// ------------------------------------                                         |
|dcl-proc Sweep;                                                                 |
|                                                                                |
|                                                                                |
|  exec sql                                                                      |
|    update atty a                                                               |
|      set ymglsb = (select ymglsb from glaty                                    |
|                    where atty = a.atty)                                        |
|      where atty in (select atty from glaty where atty = a.atty);               |
|//    where ymglsb in (select ymglsb from glaty where atty = a.atty);           |
|  if %subst(sqlstate: 1: 2) < '00' or                                           |
|      %subst(sqlstate: 1: 2) > '02';                                            |
|    exec sql get diagnostics condition 1                                        |
|      :message = message_text;                                                  |
|    SendSqlMsg('02: ' + message);                                               |
|  endif;                                                                        |
|                                                                                |
|  exec sql                                                                      |
|    update atty a                                                               |
|      set ymglsb = '000'                                                        |
|      where not exists (select * from glaty where atty = a.atty);               |
|  if %subst(sqlstate: 1: 2) < '00' or                                           |
|      %subst(sqlstate: 1: 2) > '02';                                            |
|    exec sql get diagnostics condition 1                                        |
|      :message = message_text;                                                  |
|    SendSqlMsg('03: ' + message);                                               |
|  endif;                                                                        |
|                                                                                |
|end-proc;                                                                       |

但是,如果我尝试以二进制模式进行传输,则文件中的结果数据如下所示:

|TESTPF                                                                          |
|--------------------------------------------------------------------------------|
|ëÏÁÁø&ÁÊÃ?Ê_ËÈÇÁËÏÁÁø%    |
|?ÅÑÄÀÄ%øÊ?ÄëÏÁÁøÁÌÁÄËÉ%      |
|ÍøÀ/ÈÁ/ÈÈ`/ËÁÈ`_Å%ËÂËÁ%ÁÄÈ`_Å%ËÂÃÊ?_Å%/È`  |
|ÏÇÁÊÁ/ÈÈ`//ÈÈ`ÏÇÁÊÁ/ÈÈ`Ñ>ËÁ%ÁÄÈ/ÈÈ`ÃÊ?_Å%/È`ÏÇÁÊÁ/ÈÈ |
|`//ÈÈ`ÏÇÁÊÁ`_Å%ËÂÑ>ËÁ%ÁÄÈ`_Å%ËÂÃÊ?_Å%/È`ÏÇÁÊÁ/ÈÈ`//ÈÈ |
|`ÑöËÍÂËÈËÉ%ËÈ/ÈÁ?ʶËÍÂËÈËÉ%ËÈ/ÈÁ  |
|ÁÌÁÄËÉ%ÅÁÈÀÑ/Å>?ËÈÑÄËÄ?>ÀÑÈÑ?>_ÁËË/ÅÁ_ÁËË/ÅÁ¬ÈÁÌÈ   |
|ëÁ>ÀëÉ%(ËÅ_ÁËË/ÅÁÁ>ÀÑÃÁÌÁÄËÉ%ÍøÀ/ÈÁ/ÈÈ`/     |
|ËÁÈ`_Å%ËÂÏÇÁÊÁ>?ÈÁÌÑËÈËËÁ%ÁÄÈÃÊ?_Å%/È`ÏÇÁÊÁ/ÈÈ`// |
|ÈÈ`ÑöËÍÂËÈËÉ%ËÈ/ÈÁ?ʶËÍÂËÈËÉ%ËÈ/ÈÁ  |
|ÁÌÁÄËÉ%ÅÁÈÀÑ/Å>?ËÈÑÄËÄ?>ÀÑÈÑ?>_ÁËË/ÅÁ_ÁËË/ÅÁ¬ÈÁÌÈ   |
|ëÁ>ÀëÉ%(ËÅ_ÁËË/ÅÁÁ>ÀÑÃÁ>ÀøÊ?Ä                             |

这尚未转换,因为我们已告知IBM i FTP服务器不要将其转换为EBCDIC,因为它是二进制的。

因此,请尝试使用ASCII模式,使用库/文件名格式。目标文件不需要预先存在。