FTPを操作し、xlsx(CachéObject Script)でデータをアップロードします

次のトピックに関する記事をご覧ください。

  1. %Net.FtpSessionを使用してFTPサーバーを操作する
  2. データをxls形式にアップロードする簡単な方法
  3. 役に立つヒント




FTPサーバーを操作します。



Webサービス? いいえ、聞いていません。

3日目に、当社はHeプロダクションコンプレックスとのストリーミングデータの同期を整理しました。 顧客のIT部門はFTPサーバーの使用を主張しましたが、他の交換方法は激しく拒否されました。



必要なもの:

s ftp = ##class(%Net.FtpSession).%New() –     FTP ftp.Timeout =    –   ftp.Connect(, , , ) –   FTP ftp.SetDirectory() –     FTP ( ) ftp.List( ,     ) –   ,  ,     ftp.Binary() –     ftp.Retrieve(, .GlobalStream) –     ftp.Delete() –   ftp.Append(, ) -         ftp.Logout() –  FTP 
      
      







FTPサーバーからファイルをインポートする例(ファイルはマスクによって選択されます)。
 ClassMethod FTPGetFiles(ftp, fileName) As %Status { s ftp = ##class(%Net.FtpSession).%New() s ftp.Timeout = 2000 s host = "11.111.11.111" s port = 2021 s user = "myth/user" s pass = "userspass" if ftp.Connect(host, user, pass, port) { d ftp.SetDirectory("/TestDir") //   s fileName = "????????t??????vK*.xml" //         d ..ParserDir(ftp, fileName) s fileName = "????????a??????yK*.xml" d ..ParserDir(ftp, fileName) } q ftp.Logout() } ///    ,   ClassMethod ParserDir(ftp, fileName) As %Status { s file = "" sx = 1 s file(x) = "" //       d ftp.List(fileName, .stream) q:'$IsObject(stream) while 'stream.AtEnd { //       s file = stream.ReadLine(1, .sc, .eol) if ( file = $C(10) ) { //     sx = x + 1 s file(x) = "" } else { //    s file(x) = file(x) _ file } if $$$ISERR(sc) { w "ERROR" q } } //     d ftp.Binary() //     s key = $ORDER(file(""),1) while ( key '= "" ) { //   s fName = $E(file(key), 40, *) if ( $L(fName) > 0 ) { #dim GlobalStream As %GlobalBinaryStream; //         fName.    -   FTP    CP1251    d ftp.Retrieve($zcvt($zcvt(fName,"I","CP1251"),"O","CP1251"),.GlobalStream) #dim status As %String; //       if ( $F(fName,"s") > 0 ) { s status = ..Parser(GlobalStream, "Product", "Shipment", parser) } elseif ( $F(fName,"d") > 0 ) { s status = ..Parser(GlobalStream, "Product", "Disposal" ,parser) } if ( status ) { d ftp.Delete(fName) } } s key = $order(file(key),1) } q ftp.Logout() }
      
      







ファイルをFTPサーバーにエクスポートする例
 ///    FTP  ClassMethod RunExport() As %Status { s ftp = ##class(%Net.FtpSession).%New() s ftp.Timeout = 2000 s host = "11.111.11.111" s port = 2021 s user = "myth/user" s pass = "userspass" if ftp.Connect(host, user, pass, port) { d ftp.Binary() //          s st = ##class(%SQL.Statement).%New() d st.%PrepareClassQuery("%File","FileSet") s rs = st.%Execute("/usr/cachesys201221/csp/sm/export_xml","*.xml","Size,Name") while rs.%Next() { //    ,     d ftp.Delete(rs.%GetData(6)) //     s stream = ##class(%FileBinaryStream).%New() // 1 -         s stream.Filename = rs.%GetData(1) //       -     "done" if ( ftp.Append(rs.%GetData(6),stream) = $$$OK ) { d ##class(%File).Rename(rs.%GetData(1), ##class(%File).GetDirectory(rs.%GetData(1)) _ "done/" _ rs.%GetData(6)) } k stream } } d ftp.Logout() k ftp q $$$OK }
      
      







データをxlsx形式にアップロードします。



隣人の悲しみほど楽しいものはありません。

午前中、オフィスに着いた同僚が私に微笑んだことをよく覚えています。少しうれしいことなく、Mozilla Firefoxの新しいバージョンのリリースについて報告しました。 それは、データをエクスポートして当社のソフトウェア製品で優れているというタスクが、visual-Cで記述されたライブラリを使用するブラウザプラグインを使用して解決されたためです。 FireFoxアプリケーションのセキュリティポリシーを変更した後、せいぜい、SDKのバージョンを変更し、DLL(およびプラグイン全体)を再構築し、せいぜい、DLLとJSページパーサーのコードを書き換える必要がありました。 ユーザー間でプラグインを更新する必要があることを思い出したくありません。



しかし、3日目に、私たちの路上でExcel形式にエクスポートする簡単な方法としてCookieが付いたトラックが引き継がれました。



 #server(TestProject.MakeExcelFile($("#table_to_excel").html(), "PriceList"))# ClassMethod MakeExcelFile(Data As %String, FileName As %String) As %Status { s FileName = "/tkf/reports/" _ FileName _ "_Excel.xls" s stream = ##class(%Library.FileCharacterStream).%New() s FP = $$GetFilename^%apiCSP(FileName) if ( $L(Data) = 22 ) { d stream.CopyFrom(Data) } else { d stream.Write(Data) } d stream.SetAttribute("Content-Length",stream.Size) d stream.SetAttribute("ContentType","application/excel") d stream.SetAttribute("Charset","UTF8") d stream.SetAttribute("ContentDisposition","attachment; filename=" _ $p(FileName,"/",4)) d stream.LinkToFile(FP) d stream.SaveStream() s oid = stream.%Oid() &js<window.location="#url(%25CSP.StreamServer.cls?STREAMOID=#(..Encrypt(oid))#)#";> q $$$OK }
      
      







たとえば、



フォントサイズでセルを設定したり、数値形式タイプを指定したりできます。



 <style>.toText{ mso-number-format:\"\@\"; } </style> <td class=”toText”> </td>
      
      







役に立つヒント



略語


COSには、次のような演算子の短縮バージョンがあることを誰もが知っているわけではありません。



セット= s

Do = d

書き込み= w

キル= k

終了= q

...



ほとんどの場合、略語は次のようなドキュメントに反映されます。



タイピング


COSは厳密な型付けのない言語ですが、時には#dim構造が作成されたために、事前に型付けを行うことが有用であるか、必要な場合さえあります



例:







SQLの$ CLASSNAME


まれですが、非常に現実的なケースです-クエリを作成するとき、クラス名(SQLの$ CLASSNAMEのアナローグ)を表示する必要があります。これらの目的のために、すべてのクラスに固有の隠しフィールドx__classnameを使用できます。



例:

Letters Extends%Persistentの共通の祖先から継承する2つのクラスAとBがあります。 x__classnameフィールドを選択に含めます。





キャッシュバージョン-UNIX用キャッシュ(x86-64向けRed Hat Enterprise Linux)2012.2.1(ビルド705U)2012年10月24日水曜日14:32:01 EDT。



All Articles