Unzip - file adapter
Hi everyone,
I need help configuring SAP PI (7.0) to unzip a file, containing a variable number of XML files, that will subsequently serve as inputs to my other mappings.
I've tried setting up a sender and a receiver file adapter, using the AF_Modules/PayloadZipBean to perform the unzipping.
The log indicates that the unzipping is performed successfully.
The first problem is that the receiver file adapter only creates one file (the test ZIP-file contains 3 xml files), which contains only the first XML-file!
The second problem is to get PI to use the names of the files in the ZIP-file when unzipping; that is, I want to keep the names of the files contained in the ZIP-file.
Any help would be greatly appreciated.
Hi,
Find below links for more help
Zip-Transfer-Unzip: Increase the performance of your Java-ABAP applications
Working with the PayloadZipBean module of the XI Adapter Framework
Similar Messages
-
Unzip file using PayloadZipBean in Sender FILE adapter
I am trying to unzip a flat file in Sender FILE adapter using PayloadZipBean.
I am getting mapping error. The problem is File adapter is reading data without unzipping. I am getting weird characters/data, so mapping error.
I searched all the blogs/ forum threads and help.sap.com, everywhere the focus is on zipping, not unzipping.
the file I have is with .gz extension, but I tried with .zip extension also.
Please help in resolving this issue.
Edited by: Gopal Janagama on May 2, 2008 11:42 PMGopal,
GZIP and ZIP format are slightly different, as stated here :
"GZIP compresses only one file and does not have a header. ZIP contains header information about what files are contained in the file."
So I'm not sure the PayloadZipBean supports GZIP format ... Try to ungzip and then zip its content and see if the bean works for it
Rgds
Chris -
Unzip attachment in Mail adapter or/ File Adapter
Hi everyone,
I need to get flat file from .zip attachment that comes with mail? Is it possible to get it with Mail adapter, unzip it and then make conversion? All steps in the Integration engine?
Another option can be get .zip with File adapter, but again how to unzip it?
Thanks,any help appriciated as I am doing my first XI project.
Nataliya>
Buffy76 wrote:
> Thanks a lot, guys. Unzipping is clear now.
>
> Prateek, it would be great if you can you point to "how-to" file or example for MessageTransformBean.
>
> Regards,
>
> Nataliya
ref this https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/9e6c7911-0d01-0010-1aa3-8e1bb1551f05 -
Error in Adapter Module to unzip files
Hello ,
I wish to unzip many files with use of an adapter module
To du this I use following code
package de.lsv.moduledevelopement;
import java.io.*;
import java.util.Hashtable;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.CreateException;
import com.sap.aii.af.mp.module.Module;
import com.sap.aii.af.mp.module.ModuleContext;
import com.sap.aii.af.mp.module.ModuleData;
import com.sap.aii.af.mp.module.ModuleException;
import com.sap.aii.af.ra.ms.api.Message;
import com.sap.aii.af.ra.ms.api.MessageDirection;
import com.sap.aii.af.ra.ms.api.Payload;
import com.sap.aii.af.ra.ms.spi.Trace;
import com.sap.aii.af.service.auditlog.Audit;
import com.sap.aii.af.service.auditlog.AuditDirection;
import com.sap.aii.af.service.auditlog.AuditLogStatus;
import com.sap.aii.af.service.auditlog.AuditMessageKey;
* @ejbLocal <{de.lsv.moduledevelopement.UnZipFilesLocal}>
* @ejbLocalHome <{de.lsv.moduledevelopement.UnZipFilesLocalHome}>
* @stateless
public class UnZipFilesBean implements SessionBean, Module {
static AuditMessageKey amk = null;
static String auditStr = "UnzipFilesBean - ";
static ModuleException mEx = null;
public static final String VERSION_ID =
"$Id://de.lsv.moduledevelopement.UnZipFilesBean.java#1 $";
private static final Trace TRACE = new Trace(VERSION_ID);
public void ejbRemove() {
public void ejbActivate() {
public void ejbPassivate() {
public void setSessionContext(SessionContext context) {
myContext = context;
private SessionContext myContext;
* Create Method.
public void ejbCreate() throws CreateException {
// TODO : Implement
/* (non-Javadoc)
* @see com.sap.aii.af.mp.module.Module#process(com.sap.aii.af.mp.module.ModuleContext, com.sap.aii.af.mp.module.ModuleData)
public ModuleData process(
ModuleContext moduleContext,
ModuleData inputModuleData)
throws ModuleException {
Object obj = null;
Message msg = null;
Payload attachment = null;
//initializing variables for module parameters
String modkey = "";
String fileMask = "";
String directory = "";
String saveDirectory = "";
// String newMimeType = "";
// String newAttachmentName = "";
// String newAttachmentExtension = "";
// String newAttachmentNameReplace = "";
//this block is to manage the adapter when is not file/FTP
try {
//get the XI Message
obj = inputModuleData.getPrincipalData();
msg = (Message) obj;
// create AuditMessageKey object to write audit log.
if (msg.getMessageDirection() == MessageDirection.INBOUND)
amk =
new AuditMessageKey(
msg.getMessageId(),
AuditDirection.INBOUND);
else
amk =
new AuditMessageKey(
msg.getMessageId(),
AuditDirection.OUTBOUND);
// ******start get the module parameters from the configuration******
modkey = moduleContext.getContextData("module.key");
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "Module Configuration Key: " + modkey);
//***** einlesen der Moduke Parameter******************
//***** DateiMaske
fileMask = moduleContext.getContextData("FileMask");
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "FileMask: " + fileMask);
// check ob fileMask definiert ist
if (fileMask == null || fileMask.equalsIgnoreCase("")) {
//if no attachment name is specified in the module configuration the module will end the execution
throw mEx =
new ModuleException(
auditStr
+ "!FileMask in Modulconfiguration nicht definiert!");
//***** DateiMaske2
String fileMask2 = moduleContext.getContextData("FileMask2");
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "FileMask2: " + fileMask2);
//***** Directory
directory = moduleContext.getContextData("Directory");
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "Directory: " + directory);
// Fehler wenn Directory nicht definiert
if (directory == null || directory.equalsIgnoreCase("")) {
//the module will end the execution
throw mEx =
new ModuleException(
auditStr
+ "Directory in Modulconfiguration nicht definiert");
//***** Sicherungs Verzeichnis
saveDirectory = moduleContext.getContextData("SaveDirectory");
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "SaveDirectory: " + saveDirectory);
// entpacken aufrufen
entpacke(directory, saveDirectory, fileMask);
if (fileMask2.length() > 0) {
entpacke(directory, saveDirectory, fileMask2);
//update the XI Message
inputModuleData.setPrincipalData(msg);
} catch (Exception e) {
String errorMessage =
auditStr + "Error bei der . Exception:" + e.getMessage();
Audit.addAuditLogEntry(amk, AuditLogStatus.ERROR, errorMessage);
throw mEx = new ModuleException(auditStr + errorMessage);
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "Verarbeitung beendet ");
return inputModuleData;
//+++++++++++++++++++++++++
private static void entpacke(
String directory,
String saveDirectory,
String mask)
// TODO Auto-generated method stub
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "Funktion entpacke");
if (!directory.endsWith("\")) {
directory = directory + "\";
} // if
File f;
f = new File(directory);
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "f = new File(directory)");
// // Achtung Klasse in einer Klasse :-)
// String[] strFiles = f.list(new FilenameFilter() {
// public boolean accept(File file, String filename) {
// Wildcard wildcard1 = new Wildcard(mask);
// Audit.addAuditLogEntry(
// amk,
// AuditLogStatus.SUCCESS,
// auditStr + "wc1");
// return wildcard1.match(filename, false);
String [] strFiles = f.list(new MyFilter(mask));
// Liste der Gefundenen dateien
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "Anzahl gepackter Dateien: " + strFiles.length);
//System.out.println( strFiles.length + " Dateien zum entpacken");
for (int i = 0; i < strFiles.length; i++) {
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "verarbeite Datei: : " + strFiles<i>);
// System.out.println("f[" + i + "]=" + strFiles<i>);
} // for
// *****entpacken**********************
for (int i = 0; i < strFiles.length; i++) {
try {
byte[] buf = new byte[4096];
ZipInputStream in =
new ZipInputStream(
new FileInputStream(directory + strFiles<i>));
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "Entpacke " + directory + strFiles<i>);
//System.out.println("Entpacke " + directory + strFiles<i>);
int count = 0;
while (true) {
count++;
// Nächsten Eintrag lesen
ZipEntry entry = in.getNextEntry();
if (entry == null) {
break;
// Beschreibung ausgeben
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + entry.getName());
//System.out.println(entry.getName());
// Ausgabedatei erzeugen
FileOutputStream out =
new FileOutputStream(directory + entry.getName());
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
out.close();
// Eintrag schließen
in.closeEntry();
} // while
in.close();
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + count + "Dateien entpackt");
//System.out.println(count + "Dateien entpackt");
// verschieben
if (saveDirectory.length() > 0) {
File quelle = new File(directory + strFiles<i>);
File ziel = new File(saveDirectory + strFiles<i>);
boolean bla = quelle.renameTo(ziel);
if (!bla) {
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr
+ strFiles<i>
+ " konnte nicht verschoben werden");
} else {
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr
+ strFiles<i>
+ "verschoben nach "
+ saveDirectory);
// System.out.println(
// strFiles<i> + "verscgoben nach " + directory + "sik//");
} // if
} catch (Exception e) {
String errorMessage =
auditStr
+ "Error in entpacken. Exception:"
+ e.getMessage();
Audit.addAuditLogEntry(amk, AuditLogStatus.ERROR, errorMessage);
} // catch
// *****entpacken*************
} // for
} //entpacke
} // UnzipFilesBean
class Wildcard {
static AuditMessageKey amk = null;
static String auditStr = "WildCard - ";
static ModuleException mEx = null;
private final String wildcardString;
* Der Konstruktor für die WildcardSuche.
* @param wildcardString
* Der WildcardString
public Wildcard(String wildcardString) {
this.wildcardString = wildcardString;
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "Constructor");
* Die Methode, welche den Vergleich durchführt.
* @param str
* Der String, welcher darauf überprüft werden soll, ob er dem
* WildcardString entspricht.
* @return true Wenn der String dem wildcardString entspricht.
public boolean match(String str, boolean fCasesensitive) {
if (str == null || wildcardString == null) {
return false;
return recursiveMatch(wildcardString, str, fCasesensitive);
* Hier wird der eigentliche Vergleich durchgeführt
* @param strWildcard
* Der Wildcardstring, z.B.: "Test*"
* @param str
* Der zu überprüfende String, z.B. "Testlauf"
* @return true, wenn eine Übereinstimmung vorhanden ist, sonst false
private boolean recursiveMatch(
String strWildcard,
String str,
boolean fCasesensitive) {
while (true) {
if (strWildcard.length() == 0)
return str.length() == 0;
char ch = strWildcard.charAt(0);
switch (ch) {
case '?' :
if (str.length() == 0)
return false;
break;
case '*' :
strWildcard = strWildcard.substring(1);
while (true) {
if (recursiveMatch(strWildcard, str, fCasesensitive))
return true;
if (str.length() == 0)
return false;
str = str.substring(1);
default :
if (str.length() == 0)
return false;
if (fCasesensitive) {
if (ch != str.charAt(0))
return false;
} else if (
Character.toLowerCase(ch)
!= Character.toLowerCase(str.charAt(0)))
return false;
break;
strWildcard = strWildcard.substring(1);
str = str.substring(1);
//++++++++++++++++++++++++++
} // class
/** Nun der eigentliche Filter */
class MyFilter implements FilenameFilter {
static AuditMessageKey amk = null;
static String auditStr = "MyFilter - ";
static ModuleException mEx = null;
String fileMask;
public MyFilter(String fileMask) {
this.fileMask = fileMask;
Audit.addAuditLogEntry(
amk,
AuditLogStatus.SUCCESS,
auditStr + "Constructor");
} //constructor
public boolean accept(File file, String filename) {
// TODO Auto-generated method stub
//fileMask = "?5LBL*";
Wildcard wildcard1 = new Wildcard(fileMask);
return wildcard1.match(filename, false);
} //class
But in Audit Protocol it failed after:
17.09.2008 17:33:19 Erfolgreich UnzipFilesBean - Module Configuration Key: 2
17.09.2008 17:33:19 Erfolgreich UnzipFilesBean - FileMask: ?5LBL???
17.09.2008 17:33:19 Erfolgreich UnzipFilesBean - FileMask2:
17.09.2008 17:33:19 Erfolgreich UnzipFilesBean - Directory: //transfer//X1E//100//99//lb//ein
17.09.2008 17:33:19 Erfolgreich UnzipFilesBean - SaveDirectory: //transfer//X1E//100//99//lb//ein_s
17.09.2008 17:33:19 Erfolgreich UnzipFilesBean - Funktion entpacke
17.09.2008 17:33:19 Erfolgreich UnzipFilesBean - f = new File(directory)
17.09.2008 17:33:19 Fehler UnzipFilesBean - Error bei der . Exception:null
I could not find the error??
Were there any log files to look into?
regarts
ZimmerningkatHi Ralf,
I am late..........
I am bit confused with your explanation.
1. Does all zip files will be picked by file adapter in one shot or is it conditional, since you have a XML descriptor file in firts zip file and the XML files describes the list of JPEG files which might be stored in the other zipped JPEG files?
2. Can you tell the exact flow of your scenario
3. Receiver in your scenario?
Thanks,
Gujjeti. -
Unzip the file archived by the File adapter
Hi Experts,
we have a scenario where we are archiving a xml file using the File adapter and also it is being zipped by the OS command.
the script not only zips the file, it also rename the file from *.zip to *.xml.
Hence after archiving when I am trying to open it, the content appears to be junk.
Please suggest how to unzip the file as it got a extension *.xml.
And I also tried renaming the file to *.zip and then to uncompress, but it shows below error
Cannot open : it does not appear to be a valid archive
Thanks in advance,
MKhi Mk,
instead of using OS command try using the exesting module provided by the SAP, so your job will be easy.
follow this steps in the module processing for UN ZIP
Processing sequence:
Module name: AF_Modules/PayloadZipBean
Type: Local Enterprise Bean
Module key: 3
u2022 Module configuration:
Module key: 3
Parameter name: zip.mode
Parameter value: unzip.
in the commincation channel specify filename.xml
so you can open the file in XML format
Thanks,
Madhav
Note:points if useful
Edited by: madhav poosarla on Aug 14, 2008 8:31 AM -
Hi Experts,
I have a requirement to move the xml file(size 2GB) across the FTP server. I thought of zipping the file due to huge size before picking it up and unzip before dropping at the receiver FTP.
I know we can use Run Operating System command before and after message processing option in File adapter, but can you please guide me how can really use this option.
Thanks in advance,
MKhi mk
check the below blogs
*OS COMMAND *
Executing Unix shell script using Operating System Command in XI
Executing Unix shell script using Operating System Command in XI
Performing FTP Commands From ABAP
Performing FTP Commands From ABAP
regards
kummari -
How can I get file from multiple instance using file adapter
Hi.
Our system(PI7.1) have three application instances running with each physical servers.
We use sender file adapter.
The file data is sent to one of the servers.
Now, how can I get the file using three file adater?
Should I put the file "sapmnt(\usr\sap)" .
Or are there another solution?
regards,Hi Ashutosh
You will have to use sapcar.zip which contains the utility Sapcar.exe utility for unzipping the files from SAP compressed files. (*.car file)
Regards
Gaurav
PS: Reward points if solved -
Reading .ZIP files using File Adapter
Hi,
I am using BPEL File Adapter to read files. The files to be read are XML files which are in zipped format.
so how should I read these .zip files and extract the XML files from that.
Thanks
/Kiran.If the xml files are all in the same directory (not in any directory structure relative to the parent directory), you can do something like this.
- create a bpel process to read the zip files as it comes into the directory]
- Have a file adapter inbound for the receive
- Call windows .bat command within the bpel process to run an unzip command on that directory
- Have another bpel process that reads *.xml files and this will get kicked off.
There are so many ways of solving this: like having a cron job to unzip the files coming in etc. But, if you have a directory structure for these XML files and if the structure is dynamic, it is difficult to configure the file adapter for that. -
Accessing .pdf file using file adapter
Hi,
I have a requirement in which I am getting a .zip file which contain 3 different .pdf file, that need to be posted to ECC server.
The business expecting the data to be posted to ECC using RFC or Proxy.
I can unzip the file using payloadZipBean but as far as I know file adapter cant read .pdf and convert it to XML.
I am working with PI 7.0 so cant use the Agent concept .
what could be the other possible solution.
regards,
NavneetHi christian
as you said we can do the file transfer using the dummy interface.
and the below link is also saying that ,it can be work for any adapter type.
/people/william.li/blog/2006/09/08/how-to-send-any-data-even-binary-through-xi-without-using-the-integration-repository .
I have tried it .
here I defined one sender file adapter and using the payloadzipBean to unzip the content.
and in receiver side created the Xi channel to post the payload into the ECC server. here i am using the dummy interface at receiver agreement that does not exist in IR.
I am getting the successful flag in PI (sxmb_moni) but could not recognize that where the payload get posted in ECC,as I have not created any proxy for dummy interface.
even we cant monitor the XI channel in RWB.
can any buddy help me in getting that where the payload get posted.
regards,
Navneet.
I -
Hi all, I have a question about the perfomance in a scenario. I have 250 files zipped (45Kb average each file) in a ftp folder, and I'm using File Adapter to pickup this zip file, and then unzip it, and then process the files which contains, next each file will be mapped to one IDOC.
So, my question is how to improve the perfomance in this scenario??
Does the unzipping process consumes PI Server resources??
I hope someone could help me with this problem...thanks in advanceHello
Check the Audit Log of the message in the RWB -> Message Monitoring. Here you can check the processing times of the message including the module processing times. This should give you an idea as to what processing stage is taking the most time.
Regards
Mark -
I'd like to extend file adapter behavior to add data compression features like unzip after read file and zip before write file. I read oracles's file adapter documentation but i didn't find any extension point
if its java mapping, just create a DT with any structure as you wish.
ex.
DT_Dummy
|__ Dummy_field
java mapping does not validate the xml against the DT you created -
Possible Scenarios where we can use OS command of file adapter
Hi all,
I would like to know the possible scenarios in which we can use the OS command feature in file adapter,I have tried zipping the file,copying the file,unzipping the file using this option.Any other inputs on this feature are appreciated.
Thanks,
AmitHi,
Executing Unix shell script using Operating System Command in XI
Executing Unix shell script using Operating System Command in XI
Performing FTP Commands From ABAP
Performing FTP Commands From ABAP
Thanks,
Madhu -
PI needs to obtain a zip file via FTP using the File adapter
I have a scenario where PI needs to obtain a zip file via FTP using the File adapter, this zip file contains a number of txt files that I need to process, and the content of one of them send it to an ECC, now I'm using the PayloadZipBean Module in the Sender FIle Adapter, and I have two things if I use the Message Protocol as File, I get a Payload for each txt file in the zip file, but this payload has no structure, and if I use the File Content Conversion I get an XML strcuture with only one field and a strange string in it, and somewhere in this string the names of the files I assume all the content of the zip file, can anyone help on how could I achieve what I need that is to pull the zip file via SAP PI, then unzip it, and with the content of one of the txt files send it to an ECC via ABAP Proxy, thanks in advance for your answers.
Regards,
Raul AlvaradoHello Raul,
you can do it in futher way ...
pickup zip file and simply extract and dump it in another temp folder (can use scripts on OS level).
@ then Use another sender communication channel to pickup all these text file .
for further clarification you can use these links also. -
Process txt files in zip file
Accessing File using FTP from Java Mapping
File Sender Adapter with FTP protocol
BR
Raj -
Zipping the payload using File adapter
Hi Experts,
I have a 620 MB xml file, which need to be archived on daily basis.
but the XI server shows 503 service unavailable message, while trying to process the huge file.
also used the Zippayloadbean module in the file adapter, but no luck.
Please suggest on how to archive 620 MB xml file.
Thanks in advance.Hi mk,
I know that there is a bean for the adapter module that unzips attachments. Have a look if there is a module for zipping.
Zip or Unzip your Payload with the new PayloadZipBean module of the XI Adapter Framework
/people/stefan.grube/blog/2007/02/20/working-with-the-payloadzipbean-module-of-the-xi-adapter-framework
and check the CASE 2 in this blog:
/people/michal.krawczyk2/blog/2007/02/08/xipi-command-line-sample-functions
Regards Mario -
Read encrpted zip file and ftp unzip file
Hi,
I have a situation,where i need to read 3 zip files, which are encrpted, and each zip file may have lot of images and text files. all i want to do is, read these 3 zip files and unzip + ftp to another directory. No mapping is involved. if the three files are not there, it should error out.
I have some ideas, but thought if any of you have better ideas.
Thanks
PandariHi Pandari
File adapter
module to zip and unzip
/people/stefan.grube/blog/2007/02/20/working-with-the-payloadzipbean-module-of-the-xi-adapter-framework
/people/michal.krawczyk2/blog/2007/02/08/xipi-command-line-sample-functions
<b>Check this weblog:</b>
/people/stefan.grube/blog/2007/02/20/working-with-the-payloadzipbean-module-of-the-xi-adapter-framework
Check this out !
/people/stefan.grube/blog/2007/02/20/working-with-the-payloadzipbean-module-of-the-xi-adapter-framework%3Fpage%3Dlast%26x-order%3Ddate%26x-showcontent%3Doff
also
https://service.sap.com/sap/support/notes/965256
Check this weblog on how to zip the file using XI:
/people/stefan.grube/blog/2007/02/20/working-with-the-payloadzipbean-module-of-the-xi-adapter-framework
PayloadZip Bean
/people/stefan.grube/blog/2007/02/20/working-with-the-payloadzipbean-module-of-the-xi-adapter-framework%3Fpage%3Dlast%26x-order%3Ddate%26x-showcontent%3Doff
Through command line
Check case 2 in this blog
/people/michal.krawczyk2/blog/2007/02/08/xipi-command-line-sample-functions
or ref plsz go tru it,
/people/michal.krawczyk2/blog/2007/02/08/xipi-command-line-sample-functions
Check this weblog on this from stefan:
/people/stefan.grube/blog/2007/02/20/working-with-the-payloadzipbean-module-of-the-xi-adapter-framework
http://help.sap.com/saphelp_nw70/helpdata/en/84/2e3842cd38f83ae10000000a1550b0/frameset.htm
/people/michal.krawczyk2/blog/2005/12/18/xi-sender-mail-adapter--payloadswapbean--step-by-step
Zip or Unzip your Payload with the new PayloadZipBean module of the XI Adapter
/people/stefan.grube/blog/2007/02/20/working-with-the-payloadzipbean-module-of-the-xi-adapter-framework
XI/PI: Command line sample functions -> go through case 2
/people/michal.krawczyk2/blog/2007/02/08/xipi-command-line-sample-functions
Create encrypted ZIP files
Thanks!!!
Maybe you are looking for
-
Mail attachments won't save - saying folders are Read Only
Every time I try save an attachement, mail pops up saying this location is read-only, Any help?
-
Change the name of an image file in Photos app
Just wondering how you change the name of an image file in the new 2015 Photos app?
-
How do you add a folder to email
how do you add a folder to email files
-
Range setting in case structure
Hello everyone! I'm working on an engineering project where I read in a sound input and if it's on high volume, a red led connected to a MyDaq box lights up, if it's on low, the green LED lights up, and both will be off if there's no sound input. I p
-
Copy Pages from Page Thumbnail pane to a Layout document?
How can one copy a single page or range of pages from the Thumbnail pane of a word processing mode document to an open Layout mode document? Thank you.