Sub Click(Source As Button)
On Error Goto error_handler
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim col As NotesDocumentCollection
Set col = db.UnprocessedDocuments
Dim docselecionado As NotesDocument
Set docselecionado = col.GetFirstDocument
If docselecionado Is Nothing Then
Msgbox |docselecionado não selecionado|
Exit Sub
End If
Dim stream As NotesStream
Set stream = session.CreateStream
Dim exporter As NotesDXLExporter
Dim FILENAME As String
FILENAME = "c:\dados\dxlDocumento.xml"
If Not stream.Open ( FILENAME ,"UTF-8") Then
Messagebox "Cannot open " & FILENAME,, "Error"
Exit Sub
End If
Call stream.Truncate
Set exporter = session.CreateDXLExporter
Call exporter.SetInput ( docselecionado )
Call exporter.SetOutput ( stream )
Call exporter.Process
Exit Sub
error_handler:
Msgbox |Erro na linha: | & Cstr(Erl) & | Tipo: | & Cstr(Err) & | | & Cstr(Error),16,|Error|
Exit Sub
End Sub
quarta-feira, 9 de julho de 2014
segunda-feira, 2 de junho de 2014
Descompactar arquivos zip em Lotus Script utilizando LS2J
Como Lotus Script não possui uma classe nativa para compactar () ou descompactar arquivos no formato '.zip', Criei essa funcionalidade utilizando 'ls2j' para conectar na classe java.
Necessidade: Extrair o arquivo compactado do campo richtext e exibir o arquivo 'Player.html'.
1º Criação de um agent Lotus Script com o código abaixo:
Option Public
Option Declare
UseLSX "*javacon"
Use "bib_unZip"
Sub Initialize
On Error GoTo trataerro
Dim ses_Sessao As New NotesSession
Dim ws_AreaTrabalho As New NotesUIWorkspace
Dim rti_anexos As NotesRichTextItem
Dim doc_Anexo As NotesDocument
Dim strCaminho As String
Dim strNomeAnexoZip As String
Set doc_Anexo = ws_AreaTrabalho.Currentdocument.Document
Set rti_anexos = doc_Anexo.Getfirstitem("ca_AnexoConvertido")
If Not rti_anexos Is Nothing Then
If ( rti_anexos.Type = RICHTEXT ) Then
If Not IsEmpty( rti_anexos.EmbeddedObjects ) Then
strCaminho = Environ("temp")
strCaminho = MkDir(strCaminho + "\" + doc_Anexo.Universalid)
ForAll Anexo In rti_Anexos.EmbeddedObjects
If Anexo.Type = EMBED_ATTACHMENT Then
Call Anexo.ExtractFile(strCaminho & Anexo.Source)
strNomeAnexoZip = Anexo.Source
End If
End ForAll
Else
MsgBox |Documento não possui anexo convertido!|,64,|Operação Cancelada|
Exit Sub
End If
End If
End If
Dim strFullPathZip As String
strFullPathZip = strCaminho & strNomeAnexoZip
If strNomeAnexoZip = "" Then
MsgBox |Documento não possui anexo convertido!|,64,|Operação Cancelada|
Kill strFullPathZip
Exit sub
End If
Dim strExtensaoAnexo As String
strExtensaoAnexo = |.|&LCase(StrRightBack(CStr(strNomeAnexoZip), "."))
If (strExtensaoAnexo <> ".zip" )Then
MsgBox |Arquivo convertido contem arquivos inválidos!|,64,|Operação Cancelada|
Kill strFullPathZip
Exit Sub
End If
Dim mySession As JavaSession
Dim zipClass As JavaClass
Dim zipFileObject As JavaObject
Set mySession = New JavaSession()
Set zipClass = mySession.GetClass("br.com.unzip.controller.UnZip")
Set zipFileObject = zipClass.CreateObject()
Call zipFileObject.ziparArquivo(strFullPathZip)
Dim returnZipExtractFolder As String
returnZipExtractFolder = zipFileObject.getDestinationFolder()
If Trim(returnZipExtractFolder)="" Then
Error 1001,|Não foi possível descompactar o arquivo : | & strFullPathZip
Exit Sub
End If
Dim intRespostaShell As Integer
intRespostaShell = Shell("explorer " & returnZipExtractFolder & "\Player.html",1)
Exit Sub
trataerro:
MsgBox "Aconteceu um erro inesperado, favor, contactar o administrador!",16,"Operação Cancelada!"
Call logError()
Exit sub
End Sub
2º Criação da biblioteca de script 'bib_UnZip' em Java com os métodos p/compactar.
Classe Progresso. => Progressive dialog
package br.com.unzip.view;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
import javax.swing.ProgressMonitor;
public class Progresso {
ProgressMonitor progress;
public Progresso(String strMensagem, String strAlerta, int intMaximo){
JFrame frame = new JFrame();
WindowListener exitListener;
exitListener = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Window window = e.getWindow();
window.setVisible(false);
window.dispose();
System.exit(0);
}
};
frame.addWindowListener(exitListener);
progress = new ProgressMonitor(frame, strMensagem, strAlerta, 0, intMaximo);
}
public void setProgresso(int intProgresso){
progress.setProgress(intProgresso);
}
public boolean cancelado(){
return progress.isCanceled();
}
}
Classe model => descompactar os arquivos
package br.com.unzip.model;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnZipFile {
/**
* Unzip it
* @param zipFile input zip file
* @param output zip file output folder
*/
public void unZipIt(String zipFile, String outputFolder){
byte[] buffer = new byte[1024];
try{
//create output directory is not exists
File folder = new File(outputFolder);
if(!folder.exists()){
folder.mkdir();
}
//get the zip file content
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));
//get the zipped file list entry
ZipEntry ze = zis.getNextEntry();
while(ze!=null){
String fileName = ze.getName();
File newFile = new File(outputFolder + File.separator + fileName);
System.out.println("file unzip : "+ newFile.getAbsoluteFile());
//create all non exists folders
//else you will hit FileNotFoundException for compressed folder
new File(newFile.getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}
Classe UnZip => principal
package br.com.unzip.controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import br.com.unzip.model.UnZipFile;
public class UnZip {
private String destinationFolder = null;
public UnZip(){
}
public void ziparArquivo(String caminhoArquivoZip) {
String sourceFolder = "";
sourceFolder = caminhoArquivoZip;
if(sourceFolder != null){
destinationFolder = System.getProperty("java.io.tmpdir");
Date data = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMyyyy-HHmmss");
destinationFolder = destinationFolder + dateFormat.format(data);
System.out.println("destinationFolder: " + destinationFolder);
UnZipFile zipFolder = new UnZipFile();
zipFolder.unZipIt(sourceFolder, destinationFolder);
}
}
public String getDestinationFolder() {
return destinationFolder;
}
}
quinta-feira, 29 de maio de 2014
Zipar arquivos em Lotus Script com ls2j
Como Lotus Script não possui uma classe nativa para compactar arquivos no formato '.zip', Criei essa funcionalidade utilizando 'ls2j' para conectar na classe java.
Necessidade: O sistema deverá permitir a seleção de um arquivo no formato 'player.html' e o sistema deverá compactar toda a estrutura de diretórios do arquivo selecionado.
1º Criação de um agent Lotus Script com o código abaixo:
Option Public
Option Declare
UseLSX "*javacon"
Use "bib_zip"
Use "OpenLogFunctions" '// OpenLog para captura de erros
Sub Initialize
On Error GoTo trataerro
Dim mySession As JavaSession
Dim zipClass As JavaClass
Dim zipFileObject As JavaObject
Set mySession = New JavaSession()
Set zipClass = mySession.GetClass("br.com.zipFile.controller.ZiparArquivos")
Set zipFileObject = zipClass.CreateObject()
Dim ses_corrente As New NotesSession
Dim strDesktop As String
strDesktop = getDiretorio(ses_corrente)
Dim ws_corrente As New NotesUIWorkspace
Dim varArqHtml As Variant
varArqHtml = ws_corrente.OpenFileDialog(False, "Selecione o arquivo 'Player.html' para anexar", "Htm|*.html", strDesktop)
If IsEmpty(varArqHtml) Then
MsgBox "Operação Cancelada"
Exit Sub
End If
Dim strArqHtmlDiretorio As String
Dim strArqHtmlNomeDir As String
strArqHtmlDiretorio = varArqHtml(0)
strArqHtmlDiretorio = StrLeftBack(strArqHtmlDiretorio,"\")
strArqHtmlNomeDir = StrRightBack(strArqHtmlDiretorio,"\")
Call zipFileObject.ziparArquivo(strArqHtmlDiretorio,strArqHtmlNomeDir)
Dim returnZipPath As String
returnZipPath = zipFileObject.getZippedFilePath()
Dim iuD_corrente As NotesUIDocument
Set iuD_corrente = ws_corrente.currentDocument
Dim doc_atual As NotesDocument
Set doc_atual = iuD_corrente.Document
' //define o campo como notesrichtextitem p/poder anexar
Dim rti_anexo As NotesRichTextItem
set rti_anexo = doc_atual.Getfirstitem("ca_AnexoConvertido")
If Not rti_anexo Is Nothing Then
Call rti_anexo.Remove()
End If
Set rti_anexo = New NotesRichTextItem(doc_atual, "ca_AnexoConvertido")
Call rti_anexo.EmbedObject( EMBED_ATTACHMENT, "", returnZipPath)
Call doc_atual.Save(True,False)
doc_atual.SaveOptions = "0"
Call iuD_corrente.Close()
Call ws_corrente.editDocument(True,doc_atual,False)
Exit Sub
trataerro:
MsgBox | Erro na linha | & CStr(Erl) & | tipo | & CStr(Err) & | | & CStr(Error) , 16, |Operação Cancelada|
Call LogError()
Exit Sub
End Sub
Function getDiretorio(ses_session As NotesSession) As String
On Error GoTo trataerro
getDiretorio = ""
Dim strAux As String
strAux = Environ("HomePath")
If (Trim(strAux)<>"") Then
getDiretorio = strAux + |\Desktop|
Exit Function
End If
strAux = Environ("HOMEDRIVE")
If (Trim(strAux)<>"") Then
getDiretorio = strAux
Exit Function
End If
strAux = ses_session.GetEnvironmentString("Directory",True)
If (Trim(strAux)<>"") Then
getDiretorio = strAux
Exit Function
End If
strAux = ses_session.GetEnvironmentString("Location",True)
If (Trim(strAux)<>"") Then
getDiretorio = strAux
Exit Function
End If
trataerro:
Call AddtoStackTrace()
End Function
2º Criação da biblioteca de script 'bib_zip' em Java com os métodos p/compactar.
Classe Progresso. => Progressive dialog
package br.com.zipFile.view;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
import javax.swing.ProgressMonitor;
public class Progresso {
ProgressMonitor progress;
public Progresso(String strMensagem, String strAlerta, int intMaximo){
JFrame frame = new JFrame();
WindowListener exitListener;
exitListener = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Window window = e.getWindow();
window.setVisible(false);
window.dispose();
System.exit(0);
}
};
frame.addWindowListener(exitListener);
progress = new ProgressMonitor(frame, strMensagem, strAlerta, 0, intMaximo);
}
public void setProgresso(int intProgresso){
progress.setProgress(intProgresso);
}
public boolean cancelado(){
return progress.isCanceled();
}
}
Classe model => compactar os arquivos
package br.com.zipFile.model;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import br.com.zipFile.view.Progresso;
public class ZipFolder {
List
private String sourceFolder = "";
public ZipFolder(String sourceFolder){
this.sourceFolder = sourceFolder;
fileList = new ArrayList
}
public void zipIt(String zipFile){
byte[] buffer = new byte[1024];
Progresso progresso = new Progresso("Compactando arquivos...", "Aguarde...", fileList.size()-1);
int counter = 0;
try{
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
for(String file : this.fileList){
ZipEntry ze= new ZipEntry(file);
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream(sourceFolder + File.separator + file);
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
if(progresso.cancelado()){
break;
}
progresso.setProgresso(counter);
counter++;
in.close();
}
zos.closeEntry();
zos.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
public void generateFileList(File node){
//add file only
if(node.isFile()){
fileList.add(generateZipEntry(node.getAbsoluteFile().toString()));
}
if(node.isDirectory()){
String[] subNote = node.list();
for(String filename : subNote){
generateFileList(new File(node, filename));
}
}
}
private String generateZipEntry(String file){
return file.substring(sourceFolder.length()+1, file.length());
}
}
Classe ZiparArquivos => principal
package br.com.zipFile.controller;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import br.com.zipFile.model.ZipFolder;
public class ZiparArquivos {
private String destinationFileName = null;
public ZiparArquivos(){
}
public void ziparArquivo(String caminhoArquivoHtml,String arquivoHtml) {
String sourceFolder = "";
String destinationFolder = "";
sourceFolder = caminhoArquivoHtml;
if(sourceFolder != null){
destinationFolder = System.getProperty("java.io.tmpdir");
Date data = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMyyyy-HHmmss");
destinationFileName = destinationFolder + arquivoHtml + "_" + dateFormat.format(data) + ".zip";
ZipFolder zipFolder = new ZipFolder(sourceFolder);
zipFolder.generateFileList(new File(sourceFolder));
zipFolder.zipIt(destinationFileName);
}
}
public String getZippedFilePath(){
return destinationFileName;
}
}
Assinar:
Postagens (Atom)