由java代码创建的csv将所有数据写入同一行
这是一个beanshell代码,因此可能会出现一些问题 对于java开发人员来说很奇怪。emailFileAttachment函数是一个SailPointAPI,我正在使用的工具。我的问题是,我放在地图中的数据被放在excel文件的一行中。而我放在地图中的标题(“应用程序,Num_权限”)并没有打印在CSV文件的第一行。谁能帮帮我吗。下面是我的代码:由java代码创建的csv将所有数据写入同一行,java,beanshell,sailpoint,Java,Beanshell,Sailpoint,这是一个beanshell代码,因此可能会出现一些问题 对于java开发人员来说很奇怪。emailFileAttachment函数是一个SailPointAPI,我正在使用的工具。我的问题是,我放在地图中的数据被放在excel文件的一行中。而我放在地图中的标题(“应用程序,Num_权限”)并没有打印在CSV文件的第一行。谁能帮帮我吗。下面是我的代码: import sailpoint.object.Application; import sailpoint.object.Identity; im
import sailpoint.object.Application;
import sailpoint.object.Identity;
import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.sql.DataSource;
import java.sql.SQLException;
import sailpoint.server.Environment;
import javax.sql.DataSource;
import java.sql.ResultSet;
import sailpoint.api.SailPointContext;
import java.io.BufferedWriter;
import java.io.IOExceptoin;
import java.io.FileWriter;
import sailpoint.object.EmailTemplate;
import sailpoint.object.EmailOptions;
import java.io.File;
import java.io.FileInputStream;
import sailpoint.object.EmailFileAttachment;
import java.util.HashMap;
import sailpoint.tools.Util;
String query = "SELECT app.name as application, count(*) as num_entitlements FROM spt_application as app, spt_identity_entitlement as ent WHERE app.id = ent.application GROUP BY app.name";
HashMap info = new HashMap();
info.put("Application ", "Num_Entitlement");
PreparedStatement getEntitlement_Num = null;
Connection conn = null;
/*
public static byte[] readFiletoByteArray(File file)
{
FileInputStream fileInputStream = null;
byte[] byteFile = new byte[(int) file.length()];
try
{
fileInputStream = new FileInputStream(file);
fileInputStream.read(byteFile);
fileInputStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return byteFile;
}
*/
try{
// Prepared Statements
Environment e = Environment.getEnvironment();
DataSource src = e.getSpringDataSource();
//System.out.println("DataSource: " + src.toString());
conn = src.getConnection();
//System.out.println("Connection: " + conn);
getEntitlement_Num = conn.prepareStatement(query);
ResultSet rs = getEntitlement_Num.executeQuery();
//System.out.println("starting RS");
while(rs.next()) {
String appName = rs.getString("application");
int no_ent = rs.getInt("num_entitlements");
info.put(appName , no_ent);
}
System.out.println("finished RS");
}catch(SQLException e){
log.error( e.toString());
} finally {
if (getEntitlement_Num!= null) {
getEntitlement_Num.close();
}
if(conn != null) {
conn.close();
}
}
//I am using sailpoint APIs for the code below.
String emailDest = "//email address here";
EmailTemplate et = new EmailTemplate();
et.setFrom("//email address here");
et.setBody("Please find an attached CSV file that has the list of all applications in IIQ and their number of Entitlements");
et.setTo(emailDest);
et.setSubject("Entitlement count for each application in IIQ");
EmailOptions ops = new EmailOptions(emailDest,null);
String strInfo = Util.mapToString(info);
byte[] fileData = strInfo.getBytes();
EmailFileAttachment attachment = new EmailFileAttachment( "EntitlementCount.csv", EmailFileAttachment.MimeType.MIME_CSV, fileData );
ops.addAttachment(attachment);
context.sendEmailNotification(et, ops);
//System.out.println("email sent");
return "Success";
您应该在与记录迭代相同的循环中使用StringBuilder,然后从StringBuilder制定附件
我认为带有chashma的Utility.MapToString是根本原因。您应该在与records迭代相同的循环中使用StringBuilder,然后从StringBuilder制定附件
我认为带有chashma的Utility.MapToString是根本原因。
info
是一个HashMap
,这意味着不能保证您可以按照放入数据的相同顺序提取数据。因此,在CSV文件中,标题“应用程序”可能不会排在第一位。取而代之的是,使用维护顺序的东西,例如Tuple
对象的ArrayList
(一个您自己编写的包含两个字符串变量的类)
Util.mapToString(info)是如何工作的?我们需要查看它,以便调查换行问题。
info
是一个HashMap
,这意味着不能保证您可以按照放入数据的相同顺序提取数据。因此,在CSV文件中,标题“应用程序”可能不会排在第一位。取而代之的是,使用维护顺序的东西,例如Tuple
对象的ArrayList
(一个您自己编写的包含两个字符串变量的类)
Util.mapToString(info)是如何工作的?我们需要查看它,以便研究换行符问题。Util.mapToString()只需将map转换为string。
尝试将集合更改为列表{app,count}和
迭代列表以生成字符串。
方法Util.listToCsv()或Util.listToQuotedCsv()将有助于准备csv字符串
希望这能有所帮助。Util.mapToString()只需将映射转换为字符串即可。
尝试将集合更改为列表{app,count}和
迭代列表以生成字符串。
方法Util.listToCsv()或Util.listToQuotedCsv()将有助于准备csv字符串
希望这有帮助