Send select apdu with jcoop
Hi, finally i have been able to install the applet in my nokia 6131 NFC!
now i want to send a select apdu command.
the card-info says that my applet is loaded.
Card Manager AID : A000000003000000
Card Manager state : SECURED
Application: SELECTABLE (---L----) D276000005AB0503E0040101
Application: SELECTABLE (--------) D276000005AA0503E0050101
Application: SELECTABLE (--------) A00000006203010C01
Load File : LOADED (--------) A0000000035350 (Security Domain)
Load File : LOADED (--------) D276000005AA040360010410
Load File : LOADED (--------) D276000005AA0503E00401
Load File : LOADED (--------) D276000005AA0503E00501
*Load File : LOADED (--------) 0A0000006203010C0101*I have tried the following commands:
May be the state of the applet would be "SELECTABLE"? How can i change this state?
cm> /select 0A0000006203010C0101
=> 00 A4 04 00 0A 0A 00 00 00 62 03 01 0C 01 01 00 .........b......
(11395 usec)
<= 6A 82 j.
Status: File not found
jcshell: Error code: 6a82 (File not found)
jcshell: Wrong response APDU: 6A82
cm> send 00a404000a0A0000006203010C0101
=> 00 A4 04 00 0A 0A 00 00 00 62 03 01 0C 01 01 .........b.....
(11300 usec)
<= 6A 82 j.
Status: File not found
You have a typo in your SELECT command. According to GET STATUS the AID of the targeted application is
AID: A0 00 00 00 62 03 01 0C 01
and you're sending in the select command
CLA, INS, P1, P2, Lc: 00 A4 04 00 0A
AID 0A 00 00 00 62 03 01 0C 01 01
See the difference? Furthermore you cannot select packages, only applications which are in the SELECTABLE application life cycle.
Similar Messages
-
Sending command apdu with a byte array as CDATA
Hi,
I am learning java card as part of my final year project. So far I think I can do most of the basic things but I have got stuck at one particular point.
I know that there are different constructors for creating a command apdu object and a number of these constructors take an array of bytes as CDATA values.
My problem is, how to access this array of data in the card side because apdu.getBuffer() returns an array of integers (bytes)? And what is actually on apdu.getBuffer()[ISO7816.OFFSET_CDATA)] location when you send command apdu object using such a constuctor?
regards
Edited by: 992194 on 06-Mar-2013 06:12992194 wrote:
(..) I should have mentioned earlier that my card use jc 2.2.1 version, and i have read from different places that this version does not support ExtendedLength facility.Indeed.
Also I understand the semantics of apdu.getBuffer()[ISO7816.OFFSET_CDATA] that is the first byte of the command data. My question is, this command data was initially supplied as an array of bytes. Something like this:
+new CommandAPDU(CLA, INS, P1, P2, DATA_ARRAY, Le)+
So when you call:
byte [] buffer = apdu.getBuffer()
So does this mean that the byte values inside DATA_ARRAY automatically occupy locations +buffer[ISO7816.OFFSET_CDATA]+ onwards inside the buffer?Yes. The length would be<tt> (short)(buffer[ISO7816.OFFSET_LC]&0xFF) </tt>. Notice the<tt> &0xFF </tt> is a must above 127 bytes.
Or their is a mechanism of extracting the DATA_ARRAY array itself?No.
In fact, in the interest of performance and portability in environments with little memory, the usual coding style is to pass<tt> buffer </tt>, an offset within that, and the length; rather than making an object, which would require a copy. Welcome to the real world of Java Card. -
Hi all
I have a problem when trying to test an applet created by me like Sebastian Lorquet proposed in this post:
Re: Ask Global Platform SecureChannel
I managed to install my applet on the card, and when I check the applets it contains I can see that the AID of mine appears.
But when I use it and send APDUs through it, the SELECT command fails me.
The SELECT APDU instruction is:
Command -> 00A404000B0102030405060708090000
where 01 02 03 04 05 06 07 08 09 00 00 is the AID of my applet
The response is as follows:
Response <- 6D00 (Invalid instruction byte / Command not supported or invalid)
Do not understand why I get that answer.
I am using gpshell, and the command used is:
select -AID 0102030405060708090000
Thanks in advance
Edited by: bra_racing on 05-jul-2012 15:28ah ok. Just answer me one thing, are you using below code ?
package test;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import org.globalplatform.GPSystem;
import org.globalplatform.SecureChannel;
* @author shane
public class TestSecureChannel extends Applet {
private final static byte INS_INIT_UPDATE = 0x50;
private final static byte INS_EXT_AUTH = (byte) 0x82;
private TestSecureChannel() {
// empty
public static void install(byte bArray[], short bOffset, byte bLength) throws ISOException {
new TestSecureChannel().register();
public void process(APDU apdu) throws ISOException {
if (selectingApplet()) {
return;
byte[] buffer = apdu.getBuffer();
byte cla = buffer[ISO7816.OFFSET_CLA];
byte ins = buffer[ISO7816.OFFSET_INS];
SecureChannel sc = GPSystem.getSecureChannel();
if ((byte) (cla & 0x80) == 0x80) {
switch (ins) {
case INS_INIT_UPDATE:
case INS_EXT_AUTH:
apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA, sc.processSecurity(apdu));
return;
default:
// fall through
switch (ins) {
case (byte) 0x01:
buffer[0] = sc.getSecurityLevel();
apdu.setOutgoingAndSend((short) 0, (short) 1);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}If not above one then copy past your code here. For time being for what I understand it that to send get data command your currently selected application should be card manager.
Edited by: Umer on Jul 10, 2012 4:34 PM -
Error while sending an APDU 6d 00
Hello,
I'm testing Javacard and i just want to send vie smartcard io an apdu command 0x80 0x07 0x00 0x00.
As an response i should get: a simple string back.
However, it doesen't work. After I selected more or less every ins byt eI'm sending results in an 6d00.
But if I'm sending it via the APDUTOOL I'm getting the correct answer??
Must have something to do with the transformation from in to byte. But I don't see where...
Here is the java code:
public class SCcommunication {
private TerminalFactory factory;
private List<CardTerminal> terminals;
private CardTerminal terminal;
private Card card;
private CardChannel channel;
private ResponseAPDU response;
private boolean protocollType;
private int sendLength;
private int selectLength; //00 A4 04 00 + LE + aid
private byte send[], select[];
private CommandAPDU command;
//generate a factory, get terminal list, and take the first terminal available (get(0))!
public SCcommunication(){
factory= TerminalFactory.getDefault();
try{
terminals = factory.terminals().list();
catch (CardException ec){
ec.printStackTrace();
terminal = terminals.get(0);
//if protocolltype=flase then protocoll is T0 else T1
protocollType=false;
selectLength=13;
sendLength=133;
select= new byte[selectLength];
select[0]=(byte)(0x00);select[1]=(byte)(0xA4);select[2]=(byte)(0x04);select[3]=(byte)(0x0); select[4]=(byte)(8);
select[5]=(byte)(0xAB); select[6]=(byte)(0xCD); select[7]=(byte)(0xEF); select[8]=(byte)(0xFE); select[9]=(byte)(0xDC); select[10]=(byte)(0x12);
select[11]=(byte)(0x34); select[12]=(byte)(0x56); //select[13]=(byte)(0x01); select[14]=(byte)(0x01);
send= new byte[sendLength];
public void switchProtocoll(){
if (!protocollType==true)
protocollType=false;
else
protocollType=true;
public void selectApplet(byte selectAPDU[]){
try{
if (protocollType)
card = terminal.connect("T=0");
else
card = terminal.connect("T=1");
channel= card.getBasicChannel();
response=channel.transmit(new CommandAPDU(select));
byte respByte[]=response.getBytes();
System.out.print("The response: ");
System.out.println();
for (int i=0;i<respByte.length;i++){
System.out.print(Integer.toHexString(respByte&0xff)+"||");
System.out.println();
// the card is not reseted after disconnect, due to false
card.disconnect(false);
catch (CardException ec){
ec.printStackTrace();
public void sendToCard(){
try{
if (protocollType)
card=terminal.connect("T=0");
else
card=terminal.connect("T=1");
channel= card.getBasicChannel();
//response=channel.transmit(new CommandAPDU(send));
send[0]=(byte)0x80; send[1]=(byte)0x07; send[2]=(byte)(0x00);send[3]=(byte)(0x00); send[4]=(byte)(128);
System.out.println("The response: ");
response=channel.transmit(new CommandAPDU(send));
byte respByte[]=response.getBytes();
for (int i=0;i<respByte.length;i++){
System.out.print(Integer.toHexString(respByte[i]&0xff)+"||");
System.out.println();
System.out.println("Done");
// the card is not reseted after disconnect, due to false
card.disconnect(false);
catch (CardException ec){
ec.printStackTrace();
public static void main (String args[]){
SCcommunication sc = new SCcommunication();
sc.switchProtocoll();
sc.selectApplet(sc.select);
sc.sendToCard();
Here is the corresponending Java Card code:
public void process(APDU apdu) throws ISOException {
// this is the text string which will send back from the ICC to the IFD
final byte[] text = {(byte) 'H', (byte) 'l', (byte) 'l', (byte) ' ',
(byte) 'o', (byte) 'M', (byte) 'n', (byte) 'a', (byte) 'm', (byte) ' ',
(byte) 'e', (byte) 'i', (byte) 's', (byte) 'C',
(byte) 'h', (byte) 'a', (byte) 'r', (byte) 'l', (byte) 'y'};
// this is the install method which will be called once for installation
// and registration of the applet
// this is the method, which will be called from JCRE
// the cmd_apdu variable is used because of performance reasons
byte[] cmd_apdu = apdu.getBuffer();
if (cmd_apdu[0] ==(byte)0x80) { // it is the rigth class
short len_text = (short)text.length; // the len_text variable is used because of performance reasons
apdu.setOutgoing(); // set transmission to outgoing data
apdu.setOutgoingLength((short)len_text); // set the number of bytes to send to the IFD
apdu.sendBytesLong(text, (short)0, (short)len_text);
} // if
else{
ISOException.throwIt(ISO7816.SW_NO_ERROR);
} // process
Does anybode have any idea?
Best regardsRepost with code tgas:
866393 wrote:
Hello,
I'm testing Javacard and i just want to send vie smartcard io an apdu command 0x80 0x07 0x00 0x00.
As an response i should get: a simple string back.
However, it doesen't work. After I selected more or less every ins byt eI'm sending results in an 6d00.
But if I'm sending it via the APDUTOOL I'm getting the correct answer??
Must have something to do with the transformation from in to byte. But I don't see where...
Here is the java code:
public class SCcommunication {
private TerminalFactory factory;
private List<CardTerminal> terminals;
private CardTerminal terminal;
private Card card;
private CardChannel channel;
private ResponseAPDU response;
private boolean protocollType;
private int sendLength;
private int selectLength; //00 A4 04 00 + LE + aid
private byte send[], select[];
private CommandAPDU command;
//generate a factory, get terminal list, and take the first terminal available (get(0))!
public SCcommunication(){
factory= TerminalFactory.getDefault();
try{
terminals = factory.terminals().list();
catch (CardException ec){
ec.printStackTrace();
terminal = terminals.get(0);
//if protocolltype=flase then protocoll is T0 else T1
protocollType=false;
selectLength=13;
sendLength=133;
select= new byte[selectLength];
select[0]=(byte)(0x00);select[1]=(byte)(0xA4);select[2]=(byte)(0x04);select[3]=(byte)(0x0); select[4]=(byte)(8);
select[5]=(byte)(0xAB); select[6]=(byte)(0xCD); select[7]=(byte)(0xEF); select[8]=(byte)(0xFE); select[9]=(byte)(0xDC); select[10]=(byte)(0x12);
select[11]=(byte)(0x34); select[12]=(byte)(0x56); //select[13]=(byte)(0x01); select[14]=(byte)(0x01);
send= new byte[sendLength];
public void switchProtocoll(){
if (!protocollType==true)
protocollType=false;
else
protocollType=true;
public void selectApplet(byte selectAPDU[]){
try{
if (protocollType)
card = terminal.connect("T=0");
else
card = terminal.connect("T=1");
channel= card.getBasicChannel();
response=channel.transmit(new CommandAPDU(select));
byte respByte[]=response.getBytes();
System.out.print("The response: ");
System.out.println();
for (int i=0;i<respByte.length;i++){
System.out.print(Integer.toHexString(respByte&0xff)+"||");
System.out.println();
// the card is not reseted after disconnect, due to false
card.disconnect(false);
catch (CardException ec){
ec.printStackTrace();
public void sendToCard(){
try{
if (protocollType)
card=terminal.connect("T=0");
else
card=terminal.connect("T=1");
channel= card.getBasicChannel();
//response=channel.transmit(new CommandAPDU(send));
send[0]=(byte)0x80; send[1]=(byte)0x07; send[2]=(byte)(0x00);send[3]=(byte)(0x00); send[4]=(byte)(128);
System.out.println("The response: ");
response=channel.transmit(new CommandAPDU(send));
byte respByte[]=response.getBytes();
for (int i=0;i<respByte.length;i++){
System.out.print(Integer.toHexString(respByte[i]&0xff)+"||");
System.out.println();
System.out.println("Done");
// the card is not reseted after disconnect, due to false
card.disconnect(false);
catch (CardException ec){
ec.printStackTrace();
public static void main (String args[]){
SCcommunication sc = new SCcommunication();
sc.switchProtocoll();
sc.selectApplet(sc.select);
sc.sendToCard();
Here is the corresponending Java Card code:
public void process(APDU apdu) throws ISOException {
// this is the text string which will send back from the ICC to the IFD
final byte[] text = {(byte) 'H', (byte) 'l', (byte) 'l', (byte) ' ',
(byte) 'o', (byte) 'M', (byte) 'n', (byte) 'a', (byte) 'm', (byte) ' ',
(byte) 'e', (byte) 'i', (byte) 's', (byte) 'C',
(byte) 'h', (byte) 'a', (byte) 'r', (byte) 'l', (byte) 'y'};
// this is the install method which will be called once for installation
// and registration of the applet
// this is the method, which will be called from JCRE
// the cmd_apdu variable is used because of performance reasons
byte[] cmd_apdu = apdu.getBuffer();
if (cmd_apdu[0] ==(byte)0x80) { // it is the rigth class
short len_text = (short)text.length; // the len_text variable is used because of performance reasons
apdu.setOutgoing(); // set transmission to outgoing data
apdu.setOutgoingLength((short)len_text); // set the number of bytes to send to the IFD
apdu.sendBytesLong(text, (short)0, (short)len_text);
} // if
else{
ISOException.throwIt(ISO7816.SW_NO_ERROR);
} // process
Does anybode have any idea?
Best regards -
Hi,
I am using CRM ONLINE 2013.
How to automate below process?
1. On Approval Of Quotation, Run Report.
2. Generate PDF.
3. Send an Email With PDF as attachment.
As i have gone through many forums for this topic, but creating a plugin code for generating Report PDF is not possible in CRM ONLINE.
So, What is the alternate way to do this..?
Thanks.This is my entire code mentioned below:-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript">
if (typeof (SDK) == "undefined")
{ SDK = { __namespace: true }; }
SDK.JScriptRESTDataOperations = {
_context: function () {
if (typeof GetGlobalContext != "undefined")
{ return GetGlobalContext(); }
else {
if (typeof Xrm != "undefined") {
return Xrm.Page.context;
else { return new Error("Context is not available."); }
_getServerUrl: function () {
var serverUrl = this._context().getServerUrl()
if (serverUrl.match(/\/$/)) {
serverUrl = serverUrl.substring(0, serverUrl.length - 1);
return serverUrl;
_ODataPath: function () {
return this._getServerUrl() + "/XRMServices/2011/OrganizationData.svc/";
_errorHandler: function (req) {
return new Error("Error : " +
req.status + ": " +
req.statusText + ": " +
JSON.parse(req.responseText).error.message.value);
_dateReviver: function (key, value) {
var a;
if (typeof value === 'string') {
a = /Date\(([-+]?\d+)\)/.exec(value);
if (a) {
return new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10));
return value;
Create: function (object, type, successCallback, errorCallback) {
var req = new XMLHttpRequest();
req.open("POST", this._ODataPath() + type + "Set", true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
if (this.status == 201) {
successCallback(JSON.parse(this.responseText, SDK.JScriptRESTDataOperations._dateReviver).d);
else {
errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
req.send(JSON.stringify(object));
Retrieve: function (id, type, successCallback, errorCallback) {
var req = new XMLHttpRequest();
req.open("GET", this._ODataPath() + type + "Set(guid'" + id + "')", true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
if (this.status == 200) {
successCallback(JSON.parse(this.responseText, SDK.JScriptRESTDataOperations._dateReviver).d);
else {
errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
req.send();
Update: function (id, object, type, successCallback, errorCallback) {
var req = new XMLHttpRequest();
req.open("POST", this._ODataPath() + type + "Set(guid'" + id + "')", true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("X-HTTP-Method", "MERGE");
req.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
if (this.status == 204 || this.status == 1223) {
successCallback();
else {
errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
req.send(JSON.stringify(object));
Delete: function (id, type, successCallback, errorCallback) {
var req = new XMLHttpRequest();
req.open("POST", this._ODataPath() + type + "Set(guid'" + id + "')", true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("X-HTTP-Method", "DELETE");
req.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
if (this.status == 204 || this.status == 1223) {
successCallback();
else {
errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
req.send();
RetrieveMultiple: function (type, filter, successCallback, errorCallback) {
if (filter != null) {
filter = "?" + filter;
else { filter = ""; }
var req = new XMLHttpRequest();
req.open("GET", this._ODataPath() + type + "Set" + filter, true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
if (this.status == 200) {
successCallback(JSON.parse(this.responseText, SDK.JScriptRESTDataOperations._dateReviver).d.results);
else {
errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
req.send();
__namespace: true
</script>
<script type="text/javascript">
//Create Email and link it with Order as Regarding field
var Xrm;
var email = new Object();
var ownerID = "";
var CustomerId = "";
if (window.opener) { Xrm = window.opener.Xrm; }
else if (window.parent) { Xrm = window.parent.Xrm; }
//Get ownerid who send email of quotation to customer
function GetOwnerID() {
var owner = Xrm.Page.getAttribute("ownerid").getValue();
ownerID = owner[0].id;
var ownerName = owner[0].name;
var entityType = owner[0].entityType;
GetToEmailGUID();
//Get customerid who receive email of quotation from owner
function GetToEmailGUID() {
var Customer = Xrm.Page.getAttribute('customerid').getValue();
CustomerId = Customer[0].id;
var CustomerName = Customer[0].name;
var entityType = Customer[0].entityType;
//if CustomerId is type of "Account" then get Primary Contact id of that account
if (entityType == "account") {
var contact = Xrm.Page.getAttribute("customerid").getValue();
if (contact === null) return;
var serverUrl = Xrm.Page.context.getClientUrl();
var oDataSelect = serverUrl + "/XRMServices/2011/OrganizationData.svc/AccountSet(guid'" + contact[0].id + "')?$select=PrimaryContactId";
var req = new XMLHttpRequest();
req.open("GET", oDataSelect, false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json;charset=utf-8");
req.onreadystatechange = function () {
if (req.readyState === 4) {
if (req.status === 200) {
var retrieved = JSON.parse(req.responseText).d;
CustomerId = retrieved.PrimaryContactId.Id;
else {
alert(this.statusText);
req.send();
function CreateEmail() {
GetOwnerID();
email.Subject = "Email with Report Attachment";
//Set The current order as the Regarding object
email.RegardingObjectId = {
Id: Xrm.Page.data.entity.getId(), //Get the current entity Id , here OrderId
LogicalName: Xrm.Page.data.entity.getEntityName()//Get the current entity name, here it will be “salesOrder”
//Create Email Activity
SDK.JScriptRESTDataOperations.Create(email, "Email", EmailCallBack, function (error) { alert(error.message); });
// Email Call Back function
function EmailCallBack(result) {
email = result; // Set the email to result to use it later in email attachment for retrieving activity Id
var activityPartyFrom = new Object();
// Set the From party of the ActivityParty to relate an entity with Email From field
activityPartyFrom.PartyId = {
Id: CustomerId, //"79EBDD26-FDBE-E311-8986-D89D6765B238", // id of entity you want to associate this activity with.
LogicalName: "contact"
// Set the "activity" of the ActivityParty
activityPartyFrom.ActivityId = {
Id: result.ActivityId,
LogicalName: "email"
// Now set the participation type that describes the role of the party on the activity).
activityPartyFrom.ParticipationTypeMask = { Value: 2 }; // 2 means ToRecipients
// Create the from ActivityParty for the email
SDK.JScriptRESTDataOperations.Create(activityPartyFrom, "ActivityParty", ActivityPartyFromCallBack, function (error) { alert(error.message); });
var activityPartyTo = new Object();
// Set the From party of the ActivityParty to relate an entity with Email From field
activityPartyTo.PartyId = {
Id: ownerID, //"79EBDD26-FDBE-E311-8986-D89D6765B238", // id of entity you want to associate this activity with.
LogicalName: "systemuser"
// Set the "activity" of the ActivityParty
activityPartyTo.ActivityId = {
Id: result.ActivityId,
LogicalName: "email"
// Now set the participation type that describes the role of the party on the activity).
activityPartyTo.ParticipationTypeMask = { Value: 1 }; // 1 means Sender
// Create the from ActivityParty
SDK.JScriptRESTDataOperations.Create(activityPartyTo, "ActivityParty", ActivityPartyToCallBack, function (error) { alert(error.message); });
//ActivityParty From Callback
function ActivityPartyFromCallBack(result) {
//ActivityParty To Callback
function ActivityPartyToCallBack(result) {
GetReportId('ABM_Infotech_SalesQuote');
//Create attachment for the created email
function CreateEmailAttachment() {
//get reporting session and use the params to convert a report in PDF
var params = getReportingSession();
//Email attachment parameters
var activitymimeattachment = Object();
activitymimeattachment.ObjectId = Object();
activitymimeattachment.ObjectId.LogicalName = "email";
activitymimeattachment.ObjectId.Id = email.ActivityId;
activitymimeattachment.ObjectTypeCode = "email",
activitymimeattachment.Subject = "File Attachment";
activitymimeattachment.Body = encodePdf(params);
activitymimeattachment.FileName = "Report1.pdf";
activitymimeattachment.MimeType = "application/pdf";
//Attachment call
SDK.JScriptRESTDataOperations.Create(activitymimeattachment, "ActivityMimeAttachment", ActivityMimeAttachmentCallBack, function (error) { alert(error.message); });
//ActivityMimeAttachment CallBack function
function ActivityMimeAttachmentCallBack(result) {
var features = "location=no,menubar=no,status=no,toolbar=no,resizable=yes";
var width = "800px";
var height = "600px";
window.open(Xrm.Page.context.getServerUrl() + "main.aspx?etc=" + 4202 + "&pagetype=entityrecord&id=" + email.ActivityId, "_blank", features);
// To open window which works in outlook and IE both
//openStdWin(Xrm.Page.context.getServerUrl() + "main.aspx?etc=" + 4202 + "&pagetype=entityrecord&id=" + email.ActivityId, "_blank", width,
height, features);
//This method will get the reportId based on a report name that will be used in getReportingSession() function
function GetReportId(reportName) {
var oDataSetName = "ReportSet";
var columns = "ReportId";
var filter = "Name eq '" + reportName + "'";
retrieveMultiple(oDataSetName, columns, filter, onSuccess);
function retrieveMultiple(odataSetName, select, filter, successCallback) {
var serverUrl = Xrm.Page.context.getServerUrl();
var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
var odataUri = serverUrl + ODATA_ENDPOINT + "/" + odataSetName + "?";
if (select) {
odataUri += "$select=" + select + "&";
if (filter) {
odataUri += "$filter=" + filter;
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: odataUri,
beforeSend: function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("Accept", "application/json");
success: function (data) {
if (successCallback) {
if (data && data.d && data.d.results) {
successCallback(data.d.results);
else if (data && data.d) {
successCallback(data.d);
else {
successCallback(data);
error: function (XmlHttpRequest, errorThrown) {
if (XmlHttpRequest && XmlHttpRequest.responseText) {
alert("Error while retrieval ; Error – " + XmlHttpRequest.responseText);
function onSuccess(data) {
reportId = data[0].ReportId.replace('{', ").replace('}', ");
CreateEmailAttachment(); // Create Email Attachment
//Gets the report contents
function getReportingSession() {
var pth = Xrm.Page.context.getServerUrl() + "/CRMReports/rsviewer/reportviewer.aspx";
var retrieveEntityReq = new XMLHttpRequest();
var Id = Xrm.Page.data.entity.getId();
var quotationGUID = Id.replace('{', ""); //set this to selected quotation GUID
quotationGUID = quotationGUID.replace('}', "");
var reportName = "ABM_Infotech_SalesQuote"; //set this to the report you are trying to download
var reportID = "751089AA-74B8-E211-B52F-D8D3855B253B"; //set this to the guid of the report you are trying to download
var rptPathString = ""; //set this to the CRMF_Filtered parameter
var strParameterXML = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'><entity name='quote'><all-attributes /><filter type='and'><condition
attribute='quoteid' operator='eq' uitype='quote' value='" + quotationGUID + "' /> </filter></entity></fetch>";
retrieveEntityReq.open("POST", pth, false);
retrieveEntityReq.setRequestHeader("Accept", "*/*");
retrieveEntityReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
rptPathString = "id=%7B" + reportID + "%7D&uniquename=" + Xrm.Page.context.getOrgUniqueName() + "&iscustomreport=true&reportnameonsrs=&reportName="
+
reportName + "&isScheduledReport=false&p:ABMFilteredQuote=" + strParameterXML;
//remove the part starting from &p:salesorderid if your report has no parameters
retrieveEntityReq.send(rptPathString);
var x = retrieveEntityReq.responseText.indexOf("ReportSession=");
var ret = new Array();
ret[0] = retrieveEntityReq.responseText.substr(x + 14, retrieveEntityReq.responseText.indexOf("&", x) - x - 14); //the session id
x = retrieveEntityReq.responseText.indexOf("ControlID=");
ret[1] = retrieveEntityReq.responseText.substr(x + 10, retrieveEntityReq.responseText.indexOf("&", x) - x - 10); //the control id
return ret;
var bdy = new Array();
var bdyLen = 0;
function concat2Bdy(x) {
bdy[bdyLen] = x;
bdyLen++;
function encodePdf(params) {
bdy = new Array();
bdyLen = 0;
var retrieveEntityReq = new XMLHttpRequest();
var pth = Xrm.Page.context.getServerUrl() + "/Reserved.ReportViewerWebControl.axd?ReportSession=" + params[0] +
"&Culture=1033&CultureOverrides=True&UICulture=1033&UICultureOverrides=True&ReportStack=1&ControlID=" + params[1] +
"&OpType=Export&FileName=Public&ContentDisposition=OnlyHtmlInline&Format=PDF";
retrieveEntityReq.open("GET", pth, false);
retrieveEntityReq.setRequestHeader("Accept", "*/*");
retrieveEntityReq.send();
BinaryToArray(retrieveEntityReq.responseBody);
return encode64(bdy);
var StringMaker = function () {
this.parts = [];
this.length = 0;
this.append = function (s) {
this.parts.push(s);
this.length += s.length;
this.prepend = function (s) {
this.parts.unshift(s);
this.length += s.length;
this.toString = function () {
return this.parts.join('');
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function encode64(input) {
var output = new StringMaker();
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
while (i < input.length) {
chr1 = input[i++];
chr2 = input[i++];
chr3 = input[i++];
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
output.append(keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4));
return output.toString();
</script>
<script type="text/vbscript">
Function BinaryToArray(Binary)
Dim i
ReDim byteArray(LenB(Binary))
For i = 1 To LenB(Binary)
byteArray(i-1) = AscB(MidB(Binary, i, 1))
concat2Bdy(AscB(MidB(Binary, i, 1)))
Next
BinaryToArray = byteArray
End Function
</script>
</head>
<body>
<input type="button" onclick="CreateEmail();" value="Attach Report" />
</body>
</html> -
Problem by Sending an Email with attached Adobe Interactive Form (Code)
Thanks. I have written Programm, but it does not work as i want it to do. I will send an Email with attached Adobe Interactive Firm to [email protected]. I tried it with "*lo_recipient = cl_sapuser_bcs=>create( sy-uname )" at the marked(bold, fat) position. It worked but the Email was send to my SAP-Account, but i want to send to [email protected], so I tried this (see at code in bold, fat):
lo_rec TYPE adr6-smtp_addr VALUE '[email protected]'. " Empfänger Receiver
lo_recipient = cl_cam_address_bcs=>create_internet_address( lo_rec ).
But it doens`t send the email.
Can anybody help me please???
Kevin
Here my Code:
Report FP_EXAMPLE_01
Printing of documents using PDF based forms
REPORT z_example_02.
Data declaration
DATA: carr_id TYPE sbook-carrid,
customer TYPE scustom,
bookings TYPE ty_bookings,
connections TYPE ty_connections,
fm_name TYPE rs38l_fnam,
fp_docparams TYPE sfpdocparams,
fp_outputparams TYPE sfpoutputparams,
error_string TYPE string,
l_booking TYPE sbook,
t_sums TYPE TABLE OF sbook,
l_sums LIKE LINE OF t_sums,
fp_formoutput TYPE fpformoutput.
PARAMETER: p_custid TYPE scustom-id DEFAULT 38.
SELECT-OPTIONS: s_carrid FOR carr_id DEFAULT 'AA' TO 'ZZ'.
PARAMETER: p_form TYPE tdsfname DEFAULT 'FP_EXAMPLE_01'.
PARAMETER: language TYPE sfpdocparams-langu DEFAULT 'E'.
PARAMETER: country TYPE sfpdocparams-country DEFAULT 'US'.
Get data from the following tables: scustom(Flight customer)
sbook (Single flight reservation)
spfli (Flight plan)
SELECT SINGLE * FROM scustom INTO customer WHERE id = p_custid.
CHECK sy-subrc = 0.
SELECT * FROM sbook INTO TABLE bookings
WHERE customid = p_custid
AND carrid IN s_carrid
ORDER BY PRIMARY KEY.
SELECT * FROM spfli INTO TABLE connections
FOR ALL ENTRIES IN bookings
WHERE carrid = bookings-carrid
AND connid = bookings-connid
ORDER BY PRIMARY KEY.
Print data:
First get name of the generated function module
CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
EXPORTING
i_name = p_form
IMPORTING
e_funcname = fm_name.
IF sy-subrc <> 0.
MESSAGE e001(fp_example).
ENDIF.
Set output parameters and open spool job
fp_outputparams-nodialog = 'X'. " suppress printer dialog popup
fp_outputparams-getpdf = 'X'. " launch print preview
CALL FUNCTION 'FP_JOB_OPEN'
CHANGING
ie_outputparams = fp_outputparams
EXCEPTIONS
cancel = 1
usage_error = 2
system_error = 3
internal_error = 4
OTHERS = 5.
Set form language and country (->form locale)
fp_docparams-langu = language.
fp_docparams-country = country.
*fp_docparams-fillable = 'X'.
*fp_docparams-langu = 'E'. "wird jetzt automatisch gesetzt, bzw. kann dynamisch verändert werden
*fp_docparams-country = 'GB'. "wird jetzt automatisch gesetzt, bzw. kann dynamisch verändert werden
currency key dependant summing
LOOP AT bookings INTO l_booking.
l_sums-forcuram = l_booking-forcuram.
l_sums-forcurkey = l_booking-forcurkey.
COLLECT l_sums INTO t_sums.
ENDLOOP.
Now call the generated function module
CALL FUNCTION fm_name
EXPORTING
/1bcdwb/docparams = fp_docparams
customer = customer
bookings = bookings
connections = connections
t_sums = t_sums
IMPORTING
/1bcdwb/formoutput = fp_formoutput
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
CALL FUNCTION 'FP_GET_LAST_ADS_ERRSTR'
IMPORTING
e_adserrstr = error_string.
IF NOT error_string IS INITIAL.
we received a detailed error description
WRITE:/ error_string.
EXIT.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
Close spool job
CALL FUNCTION 'FP_JOB_CLOSE'
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*********************Send the form*******************
*********************to the Customer*****************
*********************via Email***********************
*IF i_down = abap_true.
DATA: filename TYPE string,
path TYPE string,
fullpath TYPE string,
default_extension TYPE string VALUE 'PDF'.
Data:
lt_att_content_hex TYPE solix_tab.
*DATA: data_tab TYPE TABLE OF x255.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = fp_formoutput-pdf
TABLES
binary_tab = lt_att_content_hex.
CLASS cl_bcs DEFINITION LOAD.
DATA:
lo_send_request TYPE REF TO cl_bcs VALUE IS INITIAL.
lo_send_request = cl_bcs=>create_persistent( ).
DATA:
lt_message_body TYPE bcsy_text VALUE IS INITIAL.
DATA: lo_document TYPE REF TO cl_document_bcs VALUE IS INITIAL.
APPEND 'Dear Vendor,' TO lt_message_body.
APPEND ' ' TO lt_message_body.
APPEND 'Please fill the attached form and send it back to us.'
TO lt_message_body.
APPEND ' ' TO lt_message_body.
APPEND 'Thank You,' TO lt_message_body.
lo_document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = lt_message_body
i_subject = 'Vendor Payment Form' ).
DATA: lx_document_bcs TYPE REF TO cx_document_bcs VALUE IS INITIAL.
TRY.
lo_document->add_attachment(
EXPORTING
i_attachment_type = 'PDF'
i_attachment_subject = 'Vendor Payment Form'
i_att_content_hex = lt_att_content_hex ).
CATCH cx_document_bcs INTO lx_document_bcs.
ENDTRY.
lo_send_request->set_document( lo_document ).
DATA:
lo_sender TYPE REF TO if_sender_bcs VALUE IS INITIAL,
lo_send TYPE adr6-smtp_addr VALUE '[email protected]'. "Absender SENDER
lo_sender = cl_cam_address_bcs=>create_internet_address( lo_send ).
Set sender
lo_send_request->set_sender(
EXPORTING
i_sender = lo_sender ).
Create recipient
DATA:
lo_recipient type ref to if_recipient_bcs value is initial.
Data:
lo_rec TYPE adr6-smtp_addr VALUE '[email protected]'. " Empfänger Receiver
lo_recipient = cl_cam_address_bcs=>create_internet_address( lo_rec ).
*lo_recipient = cl_sapuser_bcs=>create( sy-uname ).
Set recipient
lo_send_request->add_recipient(
EXPORTING
i_recipient = lo_recipient
i_express = 'X' ).
*lo_send_request->add_recipient(
*EXPORTING
*i_recipient = lo_recipient
*i_express = 'X' ).
Send email
DATA: lv_sent_to_all(1) TYPE c VALUE IS INITIAL.
lo_send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = lv_sent_to_all ).
COMMIT WORK.
MESSAGE 'The payment form has been emailed to the Vendor' TYPE 'I'.Hi Kevin,
Please try this code to send your mail, i wrote it and works well in many system.
Take care if in your profile you got an e-mail adress define .
Take care also of trnasaction SCOT customizing, are you able to send mail to e-mail adress ?
Let me know if it's works.
Best regards.
<i>**----
CLASS-DEFINITIONS
DATA: send_request TYPE REF TO cl_bcs.
DATA: document TYPE REF TO cl_document_bcs.
DATA: sender TYPE REF TO cl_sapuser_bcs.
DATA: recipient TYPE REF TO if_recipient_bcs.
INTERNAL TABLES
DATA: l_mailtext TYPE soli_tab.
DATA: iaddsmtp TYPE TABLE OF bapiadsmtp.
DATA: ireturn TYPE TABLE OF bapiret2.
VARIABLES
DATA: mail_line LIKE LINE OF l_mailtext.
DATA: bapiadsmtp TYPE bapiadsmtp.
DATA: subject TYPE so_obj_des.
DATA : att_subject TYPE so_obj_des.
DATA : w_except TYPE REF TO cx_root .
CONSTANTS : c_defmail TYPE ad_smtpadr VALUE
'[email protected]' .
FIELD-SYMBOLS : <smtp> TYPE bapiadsmtp.
*Convert the pdf given by function module into Binary .
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = output-pdf "PDF file from function module
TABLES
binary_tab = hexa.
*Set subject of the mail
subject = 'Exemple de PDF interactif'.
Set text of the mail
mail_line = 'Merci de remplir le formulaire et nous le retourner'.
APPEND mail_line TO l_mailtext .
Set the name of the attached document
att_subject = 'Template du PDF'.
TRY.
Create persistent send request
send_request = cl_bcs=>create_persistent( ).
Get sender object
sender = cl_sapuser_bcs=>create( sy-uname ).
Add sender
CALL METHOD send_request->set_sender
EXPORTING
i_sender = sender.
Read the E-Mail address for the user
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
EXPORTING
username = sy-uname
TABLES
return = ireturn
addsmtp = iaddsmtp.
LOOP AT iaddsmtp ASSIGNING <smtp> WHERE std_no = 'X'.
CLEAR bapiadsmtp.
MOVE <smtp> TO bapiadsmtp.
ENDLOOP.
CASE bapiadsmtp-e_mail.
WHEN space.
No adress main for user, so send it to the default mail adress
recipient =
cl_cam_address_bcs=>create_internet_address( c_defmail ).
WHEN OTHERS.
recipient =
cl_cam_address_bcs=>create_internet_address( bapiadsmtp-e_mail ).
ENDCASE.
Add recipient with its respective attributes to send request
CALL METHOD send_request->add_recipient
EXPORTING
i_recipient = recipient
i_express = 'X'
i_copy = space
i_blind_copy = space
i_no_forward = space.
Set that you don't need a Return Status E-mail
CALL METHOD send_request->set_status_attributes
EXPORTING
i_requested_status = 'E'
i_status_mail = 'E'.
set send immediately flag
send_request->set_send_immediately( 'X' ).
*Build Document
document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = l_mailtext
i_subject = subject ).
add attachment to document
CALL METHOD document->add_attachment
EXPORTING
i_attachment_type = 'PDF'
i_attachment_subject = att_subject
i_att_content_hex = hexa.
Add document to send request
CALL METHOD send_request->set_document( document ).
Send document
CALL METHOD send_request->send( ).
COMMIT WORK.
CATCH cx_send_req_bcs INTO w_except.
CATCH cx_address_bcs INTO w_except.
CATCH cx_document_bcs INTO w_except.
ENDTRY.</i> -
Send a mail with the class CL_HTTP_CLIENT
hi,
i use this program and i would send a mail with a attachment file PDF. I try to use the function module SO_NEW_DOCUMENT_ATT_SEND_API1 but i dont know to translate the data XSTRING to internal table.
Thank you.
*& Report ZYTEST_TRANSFER_URL2 *
REPORT zytest_transfer_url2 .
*- begin of internal data
TYPE-POOLS: swfxc, icon.
DATA: l_http_client TYPE REF TO if_http_client.
DATA: l_url TYPE string.
DATA: l_code TYPE sy-subrc.
DATA: l_code_string TYPE string.
DATA: l_message_string TYPE string.
DATA: lt_http_fields TYPE tihttpnvp.
DATA: l_http_field_wa TYPE ihttpnvp.
DATA: l_char_header(40) TYPE c.
DATA: l_body_string TYPE string.
DATA : line TYPE string.
DATA: result_tab TYPE TABLE OF string,
result_str TYPE string.
*- end of internal data
DATA: lv_contents TYPE string.
DATA: lv_location TYPE string.
*- begin of parameters
PARAMETERS: url TYPE swc_value.
PARAMETERS : receiver TYPE somlreci1-receiver LOWER CASE.
*- end of parameters
START-OF-SELECTION.
PERFORM main.
*& Form main
text
FORM main.
PERFORM get_contents USING lv_contents.
*- Create the HTTP-Client
l_url = url.
l_proxy_host =
l_proxy_service =
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = l_url
proxy_host = l_proxy_host
proxy_service = l_proxy_service
IMPORTING
client = l_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*- send the http post
CALL METHOD l_http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2.
IF sy-subrc <> 0.
WRITE: / icon_red_light AS ICON.
CALL METHOD l_http_client->get_last_error
IMPORTING
code = l_code
MESSAGE = l_message_string.
CALL METHOD l_http_client->close.
l_code_string = l_code.
CONCATENATE 'HTTP-Send: RC=' l_code_string "#EC NOTEXT
INTO l_code_string .
CONCATENATE l_code_string l_message_string
INTO l_message_string SEPARATED BY space.
PERFORM print_string USING l_message_string.
EXIT.
ENDIF.
*- receive the result of http post
CALL METHOD l_http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2.
IF sy-subrc <> 0.
WRITE: / icon_red_light AS ICON.
CALL METHOD l_http_client->get_last_error
IMPORTING
code = l_code
MESSAGE = l_message_string.
CALL METHOD l_http_client->close.
l_code_string = l_code.
CONCATENATE 'HTTP-Receive: RC=' l_code_string "#EC NOTEXT
INTO l_code_string .
CONCATENATE l_code_string l_message_string
INTO l_message_string SEPARATED BY space.
PERFORM print_string USING l_message_string.
EXIT.
ENDIF.
*- print the results
CALL METHOD l_http_client->response->get_status
IMPORTING
code = l_code.
IF l_code < 300.
HTTP-codes: 100 - 199 = informations
HTTP-codes: 200 - 299 = client-request successful (200 = OK)
WRITE: / icon_green_light AS ICON.
ELSE.
HTTP-codes: 300 - 399 = redirected; further actions required
HTTP-codes: 400 - 499 = client-request incomplete
HTTP-codes: 500 - 599 = server errors
WRITE: / icon_red_light AS ICON.
ENDIF.
*-- get the http header fields
CALL METHOD l_http_client->response->get_header_fields
CHANGING
fields = lt_http_fields.
LOOP AT lt_http_fields INTO l_http_field_wa.
l_char_header = l_http_field_wa-name.
WRITE: / l_char_header.
l_char_header = l_http_field_wa-value.
WRITE: l_char_header.
ENDLOOP.
WRITE: / sy-uline.
*- get the body
DATA: lv_bin_contents TYPE xstring.
lv_bin_contents = l_http_client->response->get_data( ).
PERFORM save_file USING lv_bin_contents.
ENDFORM. "main
*& Form print_string
FORM print_string USING p_string TYPE string.
REFRESH result_tab.
SPLIT p_string AT cl_abap_char_utilities=>cr_lf INTO TABLE result_tab.
LOOP AT result_tab INTO result_str.
WRITE:/ result_str.
ENDLOOP.
ENDFORM. " print_string
*& Form save_file
text
FORM save_file USING lv_bin_contents.
DATA: save_file(1000) TYPE c VALUE '/tmp/test3.pdf'.
DATA: lv_file TYPE localfile.
DATA : g_file(80).
g_file = url.
DO.
SHIFT g_file LEFT UP TO '/'.
IF sy-subrc NE 0.
EXIT.
ENDIF.
SHIFT g_file LEFT.
ENDDO.
SHIFT g_file RIGHT UP TO '.'.
SHIFT g_file RIGHT.
lv_file = save_file.
OPEN DATASET lv_file FOR OUTPUT IN BINARY MODE.
IF sy-subrc NE 0.
WRITE:'SY-SUBRC :',sy-subrc.
MESSAGE i000 WITH text-014. "'File Directory not found'.
EXIT.
ENDIF.
TRANSFER lv_bin_contents TO lv_file.
CLOSE DATASET lv_file.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF sy-subrc EQ 0.
MESSAGE i000 WITH text-012."'Successfully downloaded to Application
server'.
EXIT.
ENDIF.
ENDFORM. "save_filehi,
i use this program and i would send a mail with a attachment file PDF. I try to use the function module SO_NEW_DOCUMENT_ATT_SEND_API1 but i dont know to translate the data XSTRING to internal table.
Thank you.
*& Report ZYTEST_TRANSFER_URL2 *
REPORT zytest_transfer_url2 .
*- begin of internal data
TYPE-POOLS: swfxc, icon.
DATA: l_http_client TYPE REF TO if_http_client.
DATA: l_url TYPE string.
DATA: l_code TYPE sy-subrc.
DATA: l_code_string TYPE string.
DATA: l_message_string TYPE string.
DATA: lt_http_fields TYPE tihttpnvp.
DATA: l_http_field_wa TYPE ihttpnvp.
DATA: l_char_header(40) TYPE c.
DATA: l_body_string TYPE string.
DATA : line TYPE string.
DATA: result_tab TYPE TABLE OF string,
result_str TYPE string.
*- end of internal data
DATA: lv_contents TYPE string.
DATA: lv_location TYPE string.
*- begin of parameters
PARAMETERS: url TYPE swc_value.
PARAMETERS : receiver TYPE somlreci1-receiver LOWER CASE.
*- end of parameters
START-OF-SELECTION.
PERFORM main.
*& Form main
text
FORM main.
PERFORM get_contents USING lv_contents.
*- Create the HTTP-Client
l_url = url.
l_proxy_host =
l_proxy_service =
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = l_url
proxy_host = l_proxy_host
proxy_service = l_proxy_service
IMPORTING
client = l_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*- send the http post
CALL METHOD l_http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2.
IF sy-subrc <> 0.
WRITE: / icon_red_light AS ICON.
CALL METHOD l_http_client->get_last_error
IMPORTING
code = l_code
MESSAGE = l_message_string.
CALL METHOD l_http_client->close.
l_code_string = l_code.
CONCATENATE 'HTTP-Send: RC=' l_code_string "#EC NOTEXT
INTO l_code_string .
CONCATENATE l_code_string l_message_string
INTO l_message_string SEPARATED BY space.
PERFORM print_string USING l_message_string.
EXIT.
ENDIF.
*- receive the result of http post
CALL METHOD l_http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2.
IF sy-subrc <> 0.
WRITE: / icon_red_light AS ICON.
CALL METHOD l_http_client->get_last_error
IMPORTING
code = l_code
MESSAGE = l_message_string.
CALL METHOD l_http_client->close.
l_code_string = l_code.
CONCATENATE 'HTTP-Receive: RC=' l_code_string "#EC NOTEXT
INTO l_code_string .
CONCATENATE l_code_string l_message_string
INTO l_message_string SEPARATED BY space.
PERFORM print_string USING l_message_string.
EXIT.
ENDIF.
*- print the results
CALL METHOD l_http_client->response->get_status
IMPORTING
code = l_code.
IF l_code < 300.
HTTP-codes: 100 - 199 = informations
HTTP-codes: 200 - 299 = client-request successful (200 = OK)
WRITE: / icon_green_light AS ICON.
ELSE.
HTTP-codes: 300 - 399 = redirected; further actions required
HTTP-codes: 400 - 499 = client-request incomplete
HTTP-codes: 500 - 599 = server errors
WRITE: / icon_red_light AS ICON.
ENDIF.
*-- get the http header fields
CALL METHOD l_http_client->response->get_header_fields
CHANGING
fields = lt_http_fields.
LOOP AT lt_http_fields INTO l_http_field_wa.
l_char_header = l_http_field_wa-name.
WRITE: / l_char_header.
l_char_header = l_http_field_wa-value.
WRITE: l_char_header.
ENDLOOP.
WRITE: / sy-uline.
*- get the body
DATA: lv_bin_contents TYPE xstring.
lv_bin_contents = l_http_client->response->get_data( ).
PERFORM save_file USING lv_bin_contents.
ENDFORM. "main
*& Form print_string
FORM print_string USING p_string TYPE string.
REFRESH result_tab.
SPLIT p_string AT cl_abap_char_utilities=>cr_lf INTO TABLE result_tab.
LOOP AT result_tab INTO result_str.
WRITE:/ result_str.
ENDLOOP.
ENDFORM. " print_string
*& Form save_file
text
FORM save_file USING lv_bin_contents.
DATA: save_file(1000) TYPE c VALUE '/tmp/test3.pdf'.
DATA: lv_file TYPE localfile.
DATA : g_file(80).
g_file = url.
DO.
SHIFT g_file LEFT UP TO '/'.
IF sy-subrc NE 0.
EXIT.
ENDIF.
SHIFT g_file LEFT.
ENDDO.
SHIFT g_file RIGHT UP TO '.'.
SHIFT g_file RIGHT.
lv_file = save_file.
OPEN DATASET lv_file FOR OUTPUT IN BINARY MODE.
IF sy-subrc NE 0.
WRITE:'SY-SUBRC :',sy-subrc.
MESSAGE i000 WITH text-014. "'File Directory not found'.
EXIT.
ENDIF.
TRANSFER lv_bin_contents TO lv_file.
CLOSE DATASET lv_file.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF sy-subrc EQ 0.
MESSAGE i000 WITH text-012."'Successfully downloaded to Application
server'.
EXIT.
ENDIF.
ENDFORM. "save_file -
Is there a way to send a message with a photo attached using imessages. I am not able to send a photo to one of my contacts because I am sending the contact a message text messages. I don't want to send contacts text messages. I want to send them iMessages.
Kolyei, sorry for the late reply.
Have your brother create a contact in his phone for himself. Inside his own contact, have him add his phone number and his iCloud address.
Settings > Messages > Send & Receive Have your brother select both his phone number and email addresses where he would like to receive iMessages. -
Why can I not attach a document to an email? Every time I want to send an email with a document attached to it, an error notice pops out. It tells me that the file is being used even when iall other programs are closed. How can I fix this issue?
Thanks Jeff, I was not aware that a template could be multi-page. (All the existing templates were 1 page)
But it worked, saving me some steps. When I was finished I renamed the document, and locked it.
Then tried to save it but could not because it was locked. I closed it, went to my Spread Sheet Folder ,
to find it, it was not there. The Finder could not find it either.
So I start over again.
I opened up Numbers and it showed my personal Numbers template folder, it contained both my new
original 4 page template and the vanished saved document!
I tried to delete the template containing these document data and could not - I had to go to the Library/Application Support/Numbers to physically remove it from this folder. Then I started over again. I Finally found out how to make it work: I can now "save as", and then lock, and it will go to place where I want it to be saved and locked.
The secret is: Click on the document title in the menu bar, and it opens up "Save as...", which works the same as in OS 10.4.11, and you can pick the place you want for saving. Once done that, you can then lock the document in the same pull down menu, and then close it.
I also found later that I can delete a template from its folder, by letting Numbers open the templates,
clicking on the one I want to remove, then go to the "Numbers Menu/File/Move to...", select "Desktop"
and from there the selected template can then be thrown into the Trash from there.
It appears now that the real fault of the Numbers software is that the "Save as" command is not available in the "Edit" or "File" pull-down menus, but hidden behind the title of the document. -
When I send an email with Mail, I often confuse the account which I'm using. The result is that I send a message with the wrong account! Is there a way to avoid this (for example a reminder before the email is sent)?
Hi, thanks for the answer, I did that already. Unfortunatly this doesn't help me at all, as I often forget to check the menu. For me composing the message is writing the text, the subject, the person to who is addressed and than press "send".
I often forget to check the "from", and this is a problem because the software select itself one of the accounts.
Isn't there a way at least to put as a default a blank field instead of one of the accounts? or an account which doesn't work so if I forget to specify the "from" I will be rnotofied that the message can't be sent.
I guess this could be a rather common problem for many people!
Thanks
Sergio -
Issue in sending the email with XL attachment in ECC version
Hi,
I have an issue with sending the email with XL attachment. My program is sending a mail to the receiver with XLS as attachment. Recently we have migrated from 4.6B to ECC version. Same code was worked in 4.6B.But it is not working in ECC version.When i try to open the attachment, i get a Dialog Box with the following message
"The file is not in a recognizable format.
1. if you know the file is from another program whih is incompatible with Microsoft excel,click cancel,then open this file in its original application
2.If you suspect the file is damaged, click help for more information about solving theproblem.
3.if you still want to see what text is contained in the file, click OK.Then click the text import wizard. "
when i click OK, the excel sheet is opening with all required data.
Can anyone kindly tell me why this is happening.
I am also attaching part of the coding related to this requirement.
*& Form BUILD_XLS_DATA_TABLE
text
--> p1 text
<-- p2 text
FORM build_xls_data_table.
DATA: w_total(13),
w_clabs(13),
w_cinsm(13),
w_ceinm(13),
w_cretm(13),
w_cspem(13),
w_cumlm(13),
w_exp_date(8),
w_v_totalp(13),
w_min_rem(8),
w_ersda(10),
w_hsdat(10),
w_vfdat(10),
w_ship_date(10),
w_plnmg(13),
w_mhdrz(4).
CLEAR: w_total, w_clabs, w_cinsm, w_ceinm, w_cspem, w_exp_date,
w_v_totalp, w_min_rem, w_ersda, w_hsdat, w_vfdat, w_ship_date,
w_plnmg, w_mhdrz.
w_total = it_batch1-total.
w_clabs = it_batch1-clabs.
w_cinsm = it_batch1-cinsm.
w_ceinm = it_batch1-ceinm.
w_cspem = it_batch1-cspem.
w_cumlm = it_batch1-cumlm.
w_cretm = it_batch1-cretm.
w_exp_date = it_batch1-exp_date.
w_v_totalp = it_batch1-v_totalp.
w_min_rem = it_batch1-min_rem.
w_plnmg = it_batch1-plnmg.
w_mhdrz = it_batch1-mhdrz.
CONCATENATE it_batch1-ersda6(2) it_batch1-ersda4(2)
it_batch1-ersda+0(4) INTO w_ersda SEPARATED BY '.'.
CONCATENATE it_batch1-hsdat6(2) it_batch1-hsdat4(2)
it_batch1-hsdat+0(4) INTO w_hsdat SEPARATED BY '.'.
CONCATENATE it_batch1-vfdat6(2) it_batch1-vfdat4(2)
it_batch1-vfdat+0(4) INTO w_vfdat SEPARATED BY '.'.
CONCATENATE it_batch1-ship_date6(2) it_batch1-ship_date4(2)
it_batch1-ship_date+0(4) INTO w_ship_date SEPARATED BY '.'
CONCATENATE
it_batch1-werks it_batch1-mtart it_batch1-matnr it_batch1-maktg
it_batch1-prdha it_batch1-prctr it_batch1-ktext it_batch1-dispo
it_batch1-charg it_batch1-lgort it_batch1-herkl w_clabs
w_cinsm w_ceinm w_cretm w_cspem
w_cumlm w_total it_batch1-meins it_batch1-v_spr_unit
w_v_totalp it_batch1-waers w_plnmg it_batch1-meins
w_ersda w_hsdat w_vfdat w_exp_date
w_ship_date w_mhdrz w_min_rem it_batch1-zlifer
it_batch1-doknr it_batch1-dokar it_batch1-doktl it_batch1-dokvr
INTO L_STRING SEPARATED BY CON_TAB.
INTO l_string SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
WHILE l_string <> space.
CALL FUNCTION 'TEXT_SPLIT'
EXPORTING
length = 255
text = l_string
as_character = 'X'
IMPORTING
line = it_attach
rest = l_string.
IF l_string = space.
CONCATENATE IT_ATTACH CON_CRET INTO IT_ATTACH.
CONCATENATE it_attach cl_abap_char_utilities=>cr_lf INTO it_attach.
APPEND it_attach.
CLEAR it_attach.
ELSE.
APPEND it_attach.
CLEAR it_attach.
ENDIF.
ENDWHILE.
move l_string to it_attach .
CONCATENATE it_attach cl_abap_char_utilities=>cr_lf INTO it_attach.
APPEND it_attach.
CLEAR it_attach.
ENDFORM. " BUILD_XLS_DATA_TABLE
*& Form SEND_FILE_AS_EMAIL_ATTACHMENT
text
--> p1 text
<-- p2 text
FORM send_file_as_email_attachment.
DATA:w_length TYPE i.
DATA: w_cnt TYPE i,
w_sent_all(1) TYPE c,
w_doc_data LIKE sodocchgi1,
gd_error TYPE sy-subrc,
gd_reciever TYPE sy-subrc,
t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE.
Fill the document data.
w_doc_data-doc_size = 1.
Populate the subject/generic message attributes
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = text-034 .
w_doc_data-sensitivty = 'F'.
Fill the document data and get size of attachment
CLEAR w_doc_data.
DESCRIBE TABLE it_attach LINES w_cnt.
DESCRIBE TABLE it_message LINES w_cnt.
READ TABLE it_message INDEX w_cnt.
w_length = STRLEN( it_attach ).
w_doc_data-doc_size =
( w_cnt - 1 ) * 255 + STRLEN( it_message ).
w_doc_data-obj_langu = sy-langu.
w_doc_data-obj_name = 'SAPRPT'.
w_doc_data-obj_descr = text-034.
w_doc_data-sensitivty = 'F'.
CLEAR t_attachment.
REFRESH t_attachment.
t_attachment[] = it_attach[].
describe the body of the message
CLEAR t_packing_list.
REFRESH t_packing_list.
t_packing_list-transf_bin = space.
t_packing_list-head_start = 1.
t_packing_list-head_num = 0.
t_packing_list-body_start = 1.
***Start of changes by 501507008 on 29.01.2009
t_packing_list-obj_descr = 'MAIL BODY'.
***End of changes by 501507008 on 29.01.2009
DESCRIBE TABLE it_message LINES t_packing_list-body_num.
t_packing_list-doc_type = 'RAW'.
APPEND t_packing_list.
Create attachment notification
t_packing_list-transf_bin = 'X'.
t_packing_list-head_start = 1.
t_packing_list-head_num = 1.
t_packing_list-body_start = 1.
DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.
t_packing_list-doc_type = 'XLS'.
t_packing_list-obj_descr = text-034.
t_packing_list-obj_name = 'filename'.
t_packing_list-doc_size = t_packing_list-body_num * 255.
APPEND t_packing_list.
Add the recipients email address
CLEAR t_receivers.
REFRESH t_receivers.
LOOP AT it_adr6.
t_receivers-receiver = it_adr6-smtp_addr.
t_receivers-rec_type = 'U'.
t_receivers-com_type = 'INT'.
t_receivers-notif_del = 'X'.
t_receivers-notif_ndel = 'X'.
APPEND t_receivers.
ENDLOOP.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
sender_address = ' '
sender_address_type = ' '
commit_work = 'X'
IMPORTING
sent_to_all = w_sent_all
TABLES
packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_message
receivers = t_receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = w_doc_data
put_in_outbox = 'X'
commit_work = ' '
IMPORTING
sent_to_all =
new_object_id =
tables
packing_list = t_packing_list
contents_bin = t_attachment
contents_txt = it_message
receivers = t_receivers
contents_hex =
object_para =
object_parb =
exceptions
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. " SEND_FILE_AS_EMAIL_ATTACHMENTHi,
could you tell me which opeion should i select in SCOT under INT node. I have tried with diffrent options. but no luck.
SAPscript/Smart Forms - No Conversion
ABAP List - No Conversion
Business Object/Link - No Conversion
RAW Text - No Conversion -
How to send a mail with rich text content like using outlook
Hi All. I have a serious problem. When we send the mail from
outlook express or yahoo, we can send the mail with the text appearing
in the mail with bold font , with different colors, underlined etc.
If i type this kind of text in any word processor and mail that content through java mail then the message should be received by the recepient with all that bold,color and underlines etc as it is. Can anybody please help me in this case ASAP.Go to this site and download the htmlArea Javascripts. Embedd them in your HTML and it will turn your normal HTML Text Area into Rich Text Area. Your real code will include all HTML tags. For example if you select some text and make it bold , the real HTML output will look like <B>YOUR TEXT </B>. So i guess your recipient should be able to receive HTML contents.
http://www.interactivetools.com/products/htmlarea/ -
When I send an email with bcc recipients, the bcc does not show in my sent mail so I can't reference back later who I sent the email to. Worked in Snow Leopard but not in Yosemite. Please advise if their is fix for that.
Did you select View->Bcc Address Field from the menu bar?
-
Send html email with image embedded
Hi Guys,
I want send an email using class CL_BCS.
Can someone please help me to tell me how can we send the email with image embedded in the body?
The image is stored in the mime repository and was uploaded through se78.
I have searched online but am not able to send it.
It will be great if someone has working code for this.
Regards,
Dhruv KashyapHi go to T-code : SMW0 -- To upload the images , after that you can find that entries in wwwparams table .
Refer this .
**************** - Display images (like company logo) on the selection-screen
In order to send it as email you have to add attachment type as BMP from you BCS class.
Just try you can . -
How to send a mail with HTML body from Oracle
Hi Team,
Can somebody guide me how to send a mail with HTML body from oracle.
Here is the piece of code i am trying to send a mail.
procedure SEND_MAIL is
cursor c_1 is select * from table_name;
l_mail_id varchar2(40);
-- ls_mailhost VARCHAR2(64) := Mailhost;
ls_from VARCHAR2(64) := ‘[email protected]’
ls_subject VARCHAR2(200);
ls_to VARCHAR2(64);
l_mail_conn UTL_SMTP.connection;
ls_left_menu_name VARCHAR2(64);
ll_emp_num number(8);
begin
for i in c_1 loop
begin
l_mail_conn := UTL_SMTP.OPEN_CONNECTION('IP');
UTL_SMTP.HELO(l_mail_conn, 'IP');
UTL_SMTP.MAIL(l_mail_conn, LS_FROM);
UTL_SMTP.RCPT(L_mail_conn, LS_TO);
UTL_SMTP.DATA(l_mail_conn,'From: ' ||ls_from || utl_tcp.crlf ||
'To: ' ||ls_to || utl_tcp.crlf ||
'Subject: ' ||ls_subject|| utl_tcp.crlf);
UTL_SMTP.QUIT(l_mail_conn);
exception
when no_data_found then
null;
when others then
RAISE_APPLICATION_ERROR(-20000, 'Failed to send mail due to the following error: ' || sqlerrm);
end;
end loop;
end;
ThnxHi Nicolas!
Have you tried to set "Output Format" for "RAW Text" to HTM in SCOT.
If HTM is missing in your dropdown-list, you could check out table SXCONVERT2. Copy the line with category T/format TXT, and change the format from TXT to HTM. The existing function
SX_OBJECT_CONVERT__T.TXT does not need to be changed. Now you should be able to choose HTM in SCOT. You will probably need som HTML-tags in your text to make it look good.
Hope this helps!
Regards
Geir
Maybe you are looking for
-
Hi all, I've been looking through the forums for help with this problem. There are a couple of threads with similar problems, but no solved threads and the discussion doesn't seem to go anywhere... As far as I can tell, it's been causing a lot of ann
-
Assessing one account from another on same computer
I have been using a mac as a company server. I am now adding a user to that computer, but I am unable to set them up in such a way as they can access the folders under the user account which functions as my server. Is this possible (I could not find
-
Issues Acrobat 9 Snow Leopard 10.6
One week ago I switched from PC to Mac, I bought an I Mac 27" and one of my first concerns was to upgrade from Acrobat Standard 9 - which I used in the Windows ambience - to Acrobat 9 Pro. I was kindly assisted in the trade in of my version by the Ac
-
My ipod 160 classic ejects itself.
Before I can click on it in itunes it ejects and disapears. I already had it in Disk Mode and have been able ot use it within the past year sucessfully. Now it won't stop ejecting itself. How can I fix this? I even tried a new ipod cable. -Thanks!
-
Hi All, I am very new to SRM world. I want to know about BADI's role in SRM. When can we use BADI. How can we get the information about the implemented BADIs in the project. Please post the easy documentation on BADI to me if you have. Thanks in Adva