How to call exits in XI
Hi XI Friends
in my Idoc to file scenario,
XI have to fetch the records from the SAP database tables by calling exit and include - ZXWOCU13 and creating an outbound idoc IORDE01. Only work orders with PM8 type and released system status will be selected.and later it shoul be converted into Xml.
how to call exits in XI.
please guide me.
regards
Ram
Hi Ram,
You might have used exit to enhance the standard IDOC.
ou may use standard t-code/customized program to trigger the outbound idoc.
why do u want to call exit in XI?
regards
Prabhat
Similar Messages
-
How to call an include in a field Exit?
Hi Guys,
i am having a doubt ,How to call an Include in a field Exit function module.
i wrote as "include zxx_incl." but if i wrote like this in my Field Exit i am getting a Suntax error
"Recursive INCLUDE nesting in program "ZFLDEXIT_INCL". It contains an
INCLUDE statement which calls itself or a previously read program
("ZFLDEXIT_INCL ").
' i am having other doubt while creating an include program does we need to write a 1st statement as include zxx-incl within the same include ZXX_incl? if not i am getting a syntaxt error.
thanks,
Gopi.Yes, thats the problem.
Your include is named ZFLDEXIT_INCL and in the first line of that include you probbaly wrote
include ZFLDEXIT_INCL.
Delete that, includes don't need a reserved word like programs and reports -
How to call a shell script from a java code
Hello can any one suggest me how to call a shell script from a java program that takes three parameters.
i have a shell script (msp_restore_gui) when i run this script in the command line in a RHEL5 ,SUSE10 and Debian machine it works fine .I even tested to call it from a java program and it also worked fine but when i used the same in a J2ee application where the user when clicks the restore button in a webserver this inturn sends the request to a java file named BackupManager.java where i call the shell script.But here it fails.Waiting for your suggestions.If you want i can put the code also hereyes the script is in /usr/local/mss/tools/backup and the script (msp_restore_gui) is as follows
#!/bin/sh
TIMESTAMP=`date +%d_%b_%y-%H-%M`
touch /var/backups/mss/mss_restore_"$TIMESTAMP".log
LOGFILE="/var/backups/mss/mss_restore_"$TIMESTAMP".log"
### Explode tgz file
cd /
# Checks to be done:
# root login
# assume he passes the parameter as msp_backup_<timestamp>
# check for the existence of the .tz and fileList.txt
# Checking for the root login and if not logged on as root
# permission will be denied to execute this script
logmsg(){
echo "`date`: $*" >> $LOGFILE 2>&1
echo "$*"
#usage of this script
while [ $# -ne 0 ]
do
case $1 in
-n)
shift
ARCHIVE_NAME=`find / \( -name "$1.tz" -o -name "$1.tgz" \) 2>/dev/null`
FILE_NAME=`find / -name $1_filesList.txt 2>/dev/null`
if [ x$ARCHIVE_NAME = x -a y$FILE_NAME = y ]
then
logmsg "ERROR: Files not found, Restore cannot proceed"
usage
else
tar tvzf $ARCHIVE_NAME > /dev/null 2>&1
if [ $? -ne 0 ]
then
echo "ERROR: The tar file $ARCHIVE_NAME is not proper. Restore cannot proceed"
exit 1
else
echo "Backedup files are present, proceeding with restore......" >> $LOGFILE 2>&1
fi
fi
usage
SKIP_CLEANUP=1
STATUS=1
exit
esac
shift
done
rm -rf ./newfile
curr_ver_file="/usr/local/mss/etc/version"
/usr/local/mss/tools/backup/check_version $curr_ver_file $FILE_NAME
ret_code=$?
echo "Exit value of check_version is $ret_code"
if [ "$ret_code" != 0 ]
then
logmsg "MSP Version not matching. Exiting from restore now...."
errormsg=`cat /usr/local/mss/temp/ver_err_mesg`
logmsg $errormsg
rm -f /usr/local/mss/temp/ver_err_mesg
exit 1
else
echo "Version check is successful"
fi
#### ShutDown MSS########
/etc/init.d/mss stop
sleep 2
### Shutdown semm
/etc/init.d/semm stop
sleep 2
rm -rf `grep -v "MSP Version:" $FILE_NAME`
logmsg "MSP restore in progress......"
tar mxvfz $ARCHIVE_NAME >> $LOGFILE
sleep 5
### Call mysql restore script
/usr/local/mss/bin/mysql_alldb_restore.sh >> $LOGFILE 2>&1
if [ $? -ne 0 ]; then
logmsg "Database restore Failed. Cannot proceed further"
exit 1 ;
else
logmsg "Database restore Succeeded."
fi
### Remove DB Dump Files
rm -f /var/lib/mysql-dumps/*
### Trigger cleanup of airprism database tables
#touch /usr/local/mss/airprism/server/config/reinitdb
### Trigger re-import of software packages
touch /usr/local/mss/swdepot/reimport
### Remove log files under the "apps" directory
find /usr/local/mss/apps -name '*.log*' | xargs rm -f
find /usr/local/mss/logs -follow -name '*[._]log*' | xargs rm -f
if [ $? -ne 0 ]; then
logmsg "MSP restore Failed. Cannot proceed further"
exit 1 ;
else
logmsg "MSP restore Succeeded."
fi
# reinstall_patch is touched so that patches are re-installed after restoring of MSP.
touch /usr/local/mss/patch/bin/reinstall_patch
##### Start MSS
logmsg "restarting MSP server "
/etc/init.d/mss start
sleep 5
### Start semm
/etc/init.d/semm start
sleep 5
logmsg "MSP server is now restarted"
my jsp page backup.jsp is as follows
<%@taglib uri="portlet.tld" prefix="uif" %>
<%@taglib uri="msp-console.tld" prefix="msp" %>
<uif:defineObjects/>
<%@page import="javax.portlet.*" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Vector" %>
<%@ page import="java.text.DateFormat" %>
<%@ page import="com.symbol.mss.console.admin.backup.BackupManager" %>
<%@ page import="com.symbol.mss.console.admin.system.SystemInfoPortlet" %>
<%
String STYLE_NAME = request.getParameter("style");
if (STYLE_NAME == null) STYLE_NAME = STYLE_DEFAULT;
final String ua = request.getHeader("User-Agent");
BackupManager helper = null;
PortletSession portletSession = renderRequest.getPortletSession();
helper = (BackupManager)portletSession.getAttribute("helper");
if (helper == null) {
//System.err.println("Created new BackupManager");
helper = new BackupManager();
portletSession.setAttribute("helper", helper);
final BackupManager backupManager = helper;
String action = "";
final String backupName = renderRequest.getParameter("backupName");
String completePath = backupManager.getBackupDir() + backupName + backupManager.getBackupFileExt();
if (backupName != null) {
action = "backup";
if(backupManager.backup(backupName)) {
SystemInfoPortlet.beginRestartMSP();
} else {
action = "backuperror";
final String cmd = renderRequest.getParameter("submitButton");
final String selectedBackup = renderRequest.getParameter("selectedBackup");
int tarFileStatus =0;
String backupTarFile ="";
String backupFileList ="";
if ("Restore".equals(cmd)) {
if (selectedBackup != null) {
tarFileStatus = backupManager.verifyTarFile(selectedBackup);
//backupTarFile = backupManager.getRestoreFile(Integer.parseInt(selectedBackup));
//backupFileList = backupTarFile.substring(0, backupTarFile.lastIndexOf(backupManager.getBackupFileExt()))+"_filesList.txt";
if (tarFileStatus == 0){
action = "restore";
backupManager.restore(selectedBackup);
SystemInfoPortlet.beginRestartMSP();
} else {
action = "error";
} else if ("Remove".equals(cmd)) {
backupManager.remove(Integer.parseInt(selectedBackup));
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
PortletURL restoreURL = renderResponse.createActionURL();
%>
<%@ include file="/jsp/core/constants.jspf" %>
<% if (action.length() > 0) {
if ("backup".equals(action))
%>
<p>The MSP Appliance has been shut down in order to create the <%=backupName %> backup file,
and will automatically restart as soon as the file has been created.
To continue your work, please log out of the MSP Console, wait for the appliance
to restart, and then log back in. The amount of time you'll have to wait for the
MSP Appliance to come back online depends on the amount of information you have
stored in the MSP Database.</p>
<p>The full pathname for the backup file is: <%=completePath %></p>
<% }
else if ("restore".equals(action))
%>
<p>The MSP Appliance has been shut down in order to restore from the <%=backupTarFile%> backup file,
and will automatically restart as soon as the restore is complete.
To continue your work, please log out of the MSP Console, wait for the appliance
to restart, and then log back in. The amount of time you'll have to wait for the
MSP Appliance to come back online depends on the amount of information you have
stored in the MSP Database.</p>
<% } else if ("backuperror".equals(action)) { %>
<p><img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> Errors occurred while taking back up of MSP. Please see the backup service log file for more details.
</P>
<% } else if ("error".equals(action)) {
if (tarFileStatus == 4) { %>
<p><img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> The backup file <%=backupTarFile%> contains errors. This backup can't be restored. Please restore a valid back up.
</P>
<%} else if (tarFileStatus == 3) { %>
<p><img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> The backup file list <%=backupFileList %> is missing. This file is required to restoring backup. Please get the backup file list and proceed with restoring backup.</p>
<%} else if (tarFileStatus == 2) { %>
<p> <img src="images/dialogue/error_16.gif" class="icon" alt="Notify" /> The backup file <%=backupTarFile%> contains errors and the backup file list <%=backupFileList%> is missing. This backup can't be restored. </p>
<%} %>
<% }
} else { %>
<p><strong>Note</strong>: Both backup and restore will shut down MSP temporarily. MSP will be unable to collect data from devices, send notifications, or provide MSP Console access during this time. When the backup or restore operation is complete, MSP will come back online automatically.</p>
<h3>Backup</h3>
<form action="<%= restoreURL.toString() %>" method="post">
<p>Please provide a name for your backup. MSP will provide the date automatically in the list of backups.</p>
<p><label for="<uif:namespace />backupName">Name</label> <input type="text" name="<uif:namespace />backupName" id="<uif:namespace />backupName" size="20" maxlength="256" /> <input type="submit" name="<uif:namespace />submitButton" value="Back up now" onclick="return <uif:namespace/>validateName()"/></p>
</form>
<h3>Restore</h3>
<p>This will restore all databases (device assets, collected device data, software packages, policies, etc.) to their state as of the time the backup was made. Changes since then <em>except for backups</em> will be destroyed.</p>
<%
Vector restoreList = helper.getRestoreEntries();
Vector restoreDates = helper.getRestoreDates();
Vector restoreVersions = helper.getRestoreVersions();
Vector filesStatus = helper.getBackupFilesStatus();
%>
<% if (restoreList.size() == 0) { %>
<p>There are no backups currently available.</p>
<% } else { %>
<form action="<%= restoreURL.toString() %>" method="post">
<table class="input-radios" id="<uif:namespace />existingBackups">
<thead>
<tr>
<th></th>
<th>Name</th>
<th>Date</th>
<th>MSP Version</th>
<th>Remarks </th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="4" class="actionsOnSelected">
<input type="submit" name="<uif:namespace />submitButton" value="Restore" onclick="return confirm('This action requires MSP and all related services to be shut down. Console will be unavailable if the request is submitted. The server will restart automatically once restore has been completed.');" />
<input type="submit" name="<uif:namespace />submitButton" value="Remove" onclick="return confirm('This action will remove the backup archive. You will no longer be able to restore this backup. Continue?');" />
</td>
</tr>
</tfoot>
<tbody><%-- First one (most recent) is checked by default. Every other row has class="portlet-section-alternate". Note that each ID must be unique and must match the value of the "for" attribute on the corresponding "label" element. --%>
<%
for (int i = 0; i < restoreList.size(); i++) {
%>
<tr <%= (i % 2 == 1) ? " class=\"portlet-section-alternate\"" : "" %>>
<td><input type="radio" name="<uif:namespace />selectedBackup" value="<%= i %>" id="<uif:namespace />selectedBackup-<%= i %>" <%= (i == 0) ? "checked=\"checked\"" : "" %> /></td>
<td><label for="<uif:namespace />selectedBackup-<%= i %>"><%= restoreList.elementAt(i) %></label></td>
<td><%= dateFormat.format((Date)restoreDates.elementAt(i)) %></td>
<td><%= restoreVersions.elementAt(i) %></td>
<td><%= filesStatus.elementAt(i) %></td>
</tr>
<%
%>
</tbody>
</table>
</form>
<% } %>
<% } %>
<script type="text/javascript">
<!--//--><![CDATA[//><!--
function <uif:namespace/>validateName() {
var name =document.getElementById("<uif:namespace />backupName");
var msg= "<msp:i18n key="BackupMsg"/>";
var str=name.value;
var re = /^[A-Za-z0-9_]+$/;
if (!str.match(re)) {
alert(msg);
name.focus();
return false;
} else {
return confirm('This action requires MSP and all related services to be shutdown. Console will be unavailable if the request is submitted. The server will restart automatically once backup has been completed.');
//--><!]]>
</script>
and my BackupManager.java is as follows where the code in bold and italic is called the restore()
//============================================================================
// Symbol Technologies P R O P R I E T A R Y S O U R C E C O D E
// C O N F I D E N T I A L
// Copyright (c) 2003 Symbol Technologies. All Rights Reserved.
// All information contained herein is the property of Symbol Technologies,
// or its Licensors, and are protected copyrights and trade secrets, and may
// be covered by U.S. patents. Any reproduction or dissemination of any
// portion of this document, of the software, or other works derived from it
// is strictly forbidden unless prior written permission is obtained from
// Symbol Technologies.
//============================================================================
package com.symbol.mss.sdf.services.backup;
import java.io.*;
import java.sql.Time;
import java.text.DateFormat;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
import java.lang.Process;
import java.util.*;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;
import com.symbol.mss.sdf.admin.AdministratorService;
import com.symbol.mss.sdf.backup.*;
import com.symbol.mss.sdf.data.*;
* @author nramaiah
* Service to perform scheduled backups of the system state.
public class BackupManager implements BackupService, DataHandler,
LogEnabled, Configurable {
// MSS Home Path
private static String mssHome = System.getProperty("phoenix.home", File.separator + "usr" +
File.separator + "local" +
File.separator + "mss" +
File.separator);
// Backup related definitions
private static final String BACKUP_LIST_FILE_NAME = "conf" + File.separator + "files_to_backup.txt";
private static final String BACKED_UP_LIST_FILE_NAME_SUFFIX = "_filesList.txt";
private static final String BACKUP_LOCATION = File.separator + "var" + File.separator + "lib" +
File.separator + "mss-backups" + File.separator;
private static final String BACKUP_PARTITION = File.separator + "var" + File.separator + "lib";
private static final String VERIFY_BACKUP = File.separator + "usr" + File.separator + "local" +
File.separator + "mss" + File.separator+"tools"+
File.separator+"backup"+File.separator+"verifyBackup.sh";
// DB backup/restore related definitions
private static final String DB_DUMP_LOCATION = File.separator + "var" + File.separator +
"lib" + File.separator +
"mysql-dumps" + File.separator;
private static final String DB_BACKUP_SCRIPT = "bin" + File.separator + "mysql_alldb_backup.sh";
private static final String DB_RESTORE_SCRIPT = "bin" + File.separator + "mysql_alldb_restore.sh";
// Private variables
private AdministratorService m_admin = null;
private Logger m_logger = null;
private String backupLocation = null;
private String backupListFileName = null;
private String backupPartition = null;
private int backupPartitionLimit = 90;
private String dbDumpLocation = null;
private String dbBackupScript = null;
private String dbRestoreScript = null;
private List servicesBackupList = null;
private String tarFileExtension =".tgz";
private String errFileExtension =".err";
private int exitValue=0;
* Default Constructor
public BackupManager() {
servicesBackupList = new ArrayList();
* Set the administrator service implementation. Link established by Broker service.
* @param admin reference to an implementation of AdministratorService
public void setAdministrator(AdministratorService admin) {
m_admin = admin;
* Set the job publisher service implementation. Link established by Broker service.
* @param jobPublisher reference to an implementation of JobPublisherService
public void setJobPublisher(DataChannel jobPublisher) {
jobPublisher.subscribe(this);
* Gets the backup manager object.
* @return backup manager object
public BackupService getBackupService() {
return this;
* Service lifecycle method.
* @param logger logger object to be used by the service
public void enableLogging(Logger logger) {
m_logger = logger;
* Service lifecycle method.
* @param configuration service configuration object
public void configure(Configuration configuration) throws ConfigurationException {
// Verify MSS Home path
if (!mssHome.endsWith(File.separator))
mssHome += File.separator;
// Get the location where the backup file needs to be placed
backupLocation = configuration.getChild("BackupLocation").getValue(BACKUP_LOCATION);
// Verify backup directory path
if (!backupLocation.startsWith(File.separator))
backupLocation = mssHome + backupLocation;
if (!backupLocation.endsWith(File.separator))
backupLocation += File.separator;
// Get the file listing the files/directories to be backed up
backupListFileName = configuration.getChild("FilesList").getValue(BACKUP_LIST_FILE_NAME);
// Verify backup list file name path
if (!backupListFileName.startsWith(File.separator))
backupListFileName = mssHome + backupListFileName;
// Get the partition where the backups are kept
backupPartition = configuration.getChild("BackupPartition").getValue(BACKUP_PARTITION);
// Verify backup partition path
if (!backupPartition.startsWith(File.separator))
backupPartition = File.separator + backupPartition;
if (backupPartition.endsWith(File.separator))
backupPartition = backupPartition.substring(0, (backupPartition.length()-1));
// Get the limit on the amount of free space on the backup partition
backupPartitionLimit = configuration.getChild("BackupPartitionLimit").getValueAsInteger(backupPartitionLimit);
// Get the location where the DB dump files will be placed
dbDumpLocation = configuration.getChild("DBDumpLocation").getValue(DB_DUMP_LOCATION);
// Verify DB dump directory path
if (!dbDumpLocation.startsWith(File.separator))
dbDumpLocation = mssHome + dbDumpLocation;
if (!dbDumpLocation.endsWith(File.separator))
dbDumpLocation += File.separator;
// Get the name of DB dump backup script
dbBackupScript = configuration.getChild("DBBackupScript").getValue(DB_BACKUP_SCRIPT);
// Verify backup script path
if (!dbBackupScript.startsWith(File.separator))
dbBackupScript = mssHome + dbBackupScript;
// Get the name of DB dump restore script
dbRestoreScript = configuration.getChild("DBRestoreScript").getValue(DB_RESTORE_SCRIPT);
// Verify restore script path
if (!dbRestoreScript.startsWith(File.separator))
dbRestoreScript = mssHome + dbRestoreScript;
* Individual services can supply a list of files/directories to be backed up.
* These are files apart from the files specified in conf/files_to_backup.txt and
* will be backed up as well.
* @param files list of files/directories
public void filesToBackup(List files) {
synchronized(this) {
if (files != null) {
if (files.size() > 0) {
// Add the list contents to the current backup list
for (int i=0; i<files.size(); i++) {
String tStr = (String)files.get(i);
// Check for absolute or relative path
if (tStr.startsWith(File.separator))
servicesBackupList.add(tStr);
else
servicesBackupList.add(mssHome + tStr);
else
m_logger.info("Empty list of filenames. Nothing added.");
else
m_logger.info("Null list of filenames. Nothing added.");
* Individual services can supply a list of files/directories to be backed up.
* Specified files will be added to the file defining the list of files to be backed up.
* @param files list of files/directories
private void persistFilesToBackup(List files) {
synchronized(this) {
if (files != null) {
if (files.size() > 0) {
// Add the list of files provided to the end of file
try {
File file = new File(backupListFileName);
if ((file == null) || (!file.exists()))
file.createNewFile();
// Seek to the end of the file
RandomAccessFile rFile = new RandomAccessFile(file, "rw");
if (rFile != null) {
rFile.seek(rFile.length());
// Write the list contents to the file
for (int i=0; i<files.size(); i++) {
String tStr = (String)files.get(i);
// Check for absolute or relative path
if (tStr.startsWith(File.separator))
rFile.writeBytes(tStr + "\n");
else
rFile.writeBytes(mssHome + tStr + "\n");
else
m_logger.error("Error opening file " + backupListFileName);
rFile.close();
catch (Exception ex) {
ex.printStackTrace();
m_logger.error("Error adding entries to file " + backupListFileName, ex);
else
m_logger.info("Empty list of filenames. Nothing added.");
else
m_logger.info("Null list of filenames. Nothing added.");
* Command to be run during the backup process. Individual services can
* provide shell commands that will be executed before backing up the files.
* @param command shell command to be executed
private void runCommand(String command) {
* Creates a shell script at the specified location that will backup the
* files listed in the List passed in.
* @param scriptFileName location where the script needs to be created
* @param backupFileName name for the tar file being created
* @param backupList list of files to be backed up
private void createBackupScript(String scriptFileName, String backupFileName, ArrayList backupList) throws Exception {
// Create a new StringBuffer to build the contents to be written to the script file
StringBuffer buffer = new StringBuffer();
// Add the initial comment in the start script
buffer.append("#!/bin/sh\n" + "set -x\n\n");
// Check if the partition has enough space
buffer.append("### Check if the partition has enough space\n" +
// "diskUsed=`df -k | grep \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1`\n" +
" diskUsed=`df -k \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1 | grep -v Use`\n" +
"echo \"Partition " + backupPartition + " is $diskUsed% used.\"\n" +
"if [ \"$diskUsed\" -lt \"" + backupPartitionLimit + "\" ]\nthen\n" +
" echo \"Starting backup...\"\n\n");
// Shutdown semmd
buffer.append(" ### Shutdown semm\n" + " /etc/init.d/semm stop\n" +
" sleep 2\n\n");
// MSP Limited release and earlier builds stop mysql DB and backup the
// /var/lib/mysql directory as it is. Starting MSP 1.0 GA release, mysql
// dump script will be integrated which will create sql scripts to
// restore the database.
// Check if mysql dump creation script exists
File mysqlDumpScript = new File(dbBackupScript);
if (mysqlDumpScript.exists()) {
// MSP 1.0 GA and later releases
// Run the script that will generate sql scripts that would re-create the DB as it is
buffer.append(" ### Call mysql dump script\n" +
" " + dbBackupScript + "\n\n");
else {
// MSP Limited release
// Add command to shutdown mysql
buffer.append(" ### Shutdown mysql\n" + " /etc/init.d/mysql stop\n\n");
// Change to root directory and create the tgz file
buffer.append(" ### Create tgz file\n" + " cd /\n");
// Build up the tar file name from the current date and time
String fileName = null;
if ((backupFileName != null) && (backupFileName.length() > 0))
fileName = backupFileName;
else {
// File name not provided by user, build one using the timestamp
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
fileName = "MSS-"
+ DateFormat.getDateInstance().format(date).replaceAll(" ", "").replaceAll(",", "")+ "-"
+ (new Time(cal.getTimeInMillis())).toString().replaceAll(":", "").substring(0,4);
String tarFileName = fileName + ".tgz";
// Get the current MSP Version
String mspVersion = getMSPVersion();
// Gather all the files to be backed up. Add them to the tar command and
// also dump them into the file maintaining the list of files being backed up
String listStr = "";
for (int i=0; i<backupList.size(); i++)
listStr += (String)backupList.get(i) + "\n";
// Dump the current MSP version and the list of files being backed up into a manifest file
String listFileName = fileName + BACKED_UP_LIST_FILE_NAME_SUFFIX;
RandomAccessFile file = new RandomAccessFile(backupLocation + listFileName, "rw");
m_logger.info("List of files/directories being backed up:\n" + listStr);
file.writeBytes("### MSP Version: " + mspVersion + " ###\n");
file.writeBytes(listStr);
file.close();
// Add the tar command to the script
buffer.append(" echo \"Creating " + backupLocation + tarFileName + "...\"\n" +
" tar cvhfz " + backupLocation + tarFileName + " `grep -v \"MSP Version:\" " +
backupLocation + listFileName + "`\n\n");
// Check if free space on the backup partition has reduced below the limit
// If enough space left, backup is retained, "mss" is made the owner of the files,
// "backup" is made the group the files belong to,
// permissions changed to be "0660" and
// backup action declared a success
// Else, backup files are deleted and declared a failure
buffer.append(" ### Check if the partition has enough space left\n" +
//" diskLeft=`df -k | grep \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1`\n" +
" diskLeft=`df -k \"" + backupPartition + "\" | awk '{print $5}' | cut -d\"%\" -f1 | grep -v Use`\n" +
" echo \"Partition " + backupPartition + " is $diskLeft% used.\"\n" +
" if [ \"$diskLeft\" -gt \"" + backupPartitionLimit + "\" ]\n" +
" then\n" +
" ### Failure\n" +
" echo \"Partition " + backupPartition + " does not have enough space.\"\n" +
" echo \"Backup " + backupLocation + tarFileName + " will be removed.\"\n" +
" rm -f " + backupLocation + fileName + "*\n" +
" echo \"Backup Failed.\"\n" +
" else\n" +
" tar tvzf " + backupLocation + tarFileName + " > /dev/null 2>&1\n" +
" if [ ! -s " + backupLocation + tarFileName + " -o $? -ne 0 ] \n" +
" then\n" +
" echo \"MSP Backup operation is not successful. The tar file " + backupLocation + tarFileName + " contains errors.\"\n" +
" echo \"Please take the backup again\"\n" +
" touch "+backupLocation+fileName+".err\n" +
" else \n" +
" ### Success\n" +
" ### Change the owner, group and permissions for the backup files\n" +
" chown mss " + backupLocation + fileName + "*\n" +
" chgrp backup " + backupLocation + fileName + "*\n" +
" chmod 0660 " + backupLocation + fileName + "*\n" +
" echo \"Backup Completed.\"\n" +
" fi\n" +
" fi\n\n");
// MSP Limited release and earlier builds re-start mysql. Starting
// MSP 1.0 GA release, mysql is not stopped and so re-start is not
// needed. sql scripts created by the dump script get packed into
// the tar file and so are deleted.
// Check if mysql dump creation script exists
if (mysqlDumpScript.exists()) {
// MSP 1.0 GA and later releases
// Remove DB dump files
buffer.append(" ### Remove DB Dump Files\n" + " rm -f " + dbDumpLocation + "*\n\n");
else {
// MSP Limited release
// Start mysql
buffer.append(" ### Start mysql\n" + " /etc/init -
How to call a .bat file from java code?
How to call a .bat file from java code? and how can i pass parameters to that .bat file?
Thanks in advancethanks for ur reply
but still i am getting the same error.
I am trying to run a .bat file of together tool, my code looks like below
import java.lang.Runtime;
import java.lang.Process;
import java.io.File;
class SysCall{
public static void main(String args[]){
String cmd="D://Borland//Together6.2//bin//Together.bat -script:com.togethersoft.modules.qa.QA -metrics out:D://MySamples//Metrics// -fmt:html D://Borland//Together6.2//samples//java//CashSales//CashSales.tpr";
//String path="D://Borland//Together6.2//bin//Together.bat ";
Runtime r= Runtime.getRuntime(); //Declare the system call
try{
System.out.println("Before batch is called");
Process p=r.exec(cmd);
System.out.println(" Exit value =" + p.exitValue());
System.out.println("After batch is called");
/*can produce errors which must be caught*/
catch(Exception e) {
e.printStackTrace();
System.out.println (e.toString());
I am getting the below exception
Before batch is called
java.lang.IllegalThreadStateException: process has not exited
at java.lang.Win32Process.exitValue(Native Method)
at SysCall.main(SysCall.java:17)
java.lang.IllegalThreadStateException: process has not exited -
IP - Is it possible to call exit planning function from ABAP Report..
Hi All,
Greetings.
Is it possible to call exit planning function from ABAP Report (t-code SE38) ? Or I mean is not limited only to be called from ABAP Report, perhaps from BSP / Web-Dynpro / Function Module.
If somebody here has been doing it before, I'm keen to ask to kindly share it. Particularly how to call and transfer data to that exit function.
Or if somebody has done in BPS, appreciate if it can be shared too .
Thanks a lot and have a good day,
Best regards,
Daniel N.Hi.
You can achive this as suggested by Mattias in your previous post.
Lets say you have next data structure:
CostCenter | Amount | PercentForDistibution |
Create input ready query in this format. Restrict cost center by variable type range.
Create WAD with analysis item.
When you run web page you enter range of cost centers (lets say you will enter 101004 to 101010).
I assume you have data only for 101004 in your cube (lets say 1000).
You will see only one record in your webpage.
CostCenter | Amount | PercentForDistibution |
101004 | 1000 | NOTHING
When you create WAD in analysis item properties set "NUMBER_OF_NEW_LINES" to lets say 1 (so in WAD you will see always one blank line for entering new data).
Just add 6 new records:
CostCenter | Amount | PercentForDistibution |
101005 | NOTHING| 10
101006 | NOTHING| 30
101007 | NOTHING| 20
101008 | NOTHING| 25
101009 | NOTHING| 5
101010 | NOTHING| 10
Then run planning FOX function like this:
FOREACH Z_COST_CENTER.
IF {Amount, Z_COST_CENTER} <> 0
Z_AMNT_TO_DISTRIBUTE = {Amount, Z_COST_CENTER}.
ENDIF.
ENDFOR.
FOREACH Z_COST_CENTER.
IF {PercentForDistibution Z_COST_CENTER} <> 0.
{Amount, Z_COST_CENTER} = Z_AMNT_TO_DISTRIBUTE * {PercentForDistibution Z_COST_CENTER}.
ENDIF.
ENDFOR.
It is not perfect FOX, but as an idead, it should work.
Regards. -
How to call BAPI in a ABAP prog
Hi All
I have a concern regarding the usuage of BAPI in the ABAP program.
i have successfully created a BAPI and i have implemented a method as well using ADD API Method button.
Now after doin all the things in SWO1.
I wanted to know how to call this BAPI method in se38.
CAn anyone throw some light on this ?
Regards
GauravHi,
try this
*& Report ZKAR_MATMAS_BAPI
*& This program demonstrates how easy it is to create Material master
*& data using BAPI_MATERIAL_SAVEDATA
*& The program also generates a report post-execution displaying errors
*& as well as successful uploads
REPORT ZKAR_MATMAS_BAPI.
* TABLES
* FLAGS *
DATA: F_STOP. " Flag used to stop processing
* DATA DECLARATIONS *
DATA : V_EMPTY TYPE I, " No. of empty records
V_TOTAL TYPE I. " Total no. of records.
* STRUCTURES & INTERNAL TABLES
*BAPI structures
DATA: BAPI_HEAD LIKE BAPIMATHEAD, " Header Segment with Control Information
BAPI_MAKT LIKE BAPI_MAKT, " Material Description
BAPI_MARA1 LIKE BAPI_MARA, " Client Data
BAPI_MARAX LIKE BAPI_MARAX, " Checkbox Structure for BAPI_MARA
BAPI_MARC1 LIKE BAPI_MARC, " Plant View
BAPI_MARCX LIKE BAPI_MARCX, " Checkbox Structure for BAPI_MARC
BAPI_MBEW1 LIKE BAPI_MBEW, " Accounting View
BAPI_MBEWX LIKE BAPI_MBEWX, " Checkbox Structure for BAPI_MBEW
BAPI_RETURN LIKE BAPIRET2. " Return Parameter
*--- Internal table to hold excel file data
DATA: IT_INTERN TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
*--- Internal table to hold Matetrial descriptions
DATA: BEGIN OF IT_MAKT OCCURS 100.
INCLUDE STRUCTURE BAPI_MAKT.
DATA: END OF IT_MAKT.
*--- Internal to hold the records in the text file
DATA : BEGIN OF IT_DATA OCCURS 100,
WERKS(4), " Plant
MTART(4), " Material type
MATNR(18), " Material number
MATKL(9) , " Material group
MBRSH(1), " Industry sector
MEINS(3), " Base unit of measure
GEWEI(3), " Weight Unit
SPART(2), " Division
EKGRP(3), " Purchasing group
VPRSV(1), " Price control indicator
STPRS(12), " Standard price
PEINH(3), " Price unit
SPRAS(2), " Language key
MAKTX(40), " Material description
END OF IT_DATA.
* SELECTION SCREEN. *
SELECTION-SCREEN BEGIN OF BLOCK SCR1 WITH FRAME TITLE TEXT-111.
PARAMETER : P_FILE TYPE RLGRAP-FILENAME OBLIGATORY DEFAULT " Input File
'C:\Material_master.XLS'.
PARAMETER : P_MAX(4) OBLIGATORY DEFAULT '100'. " no.of recs in a session
PARAMETERS: P_HEADER TYPE I DEFAULT 0. " Header Lines
PARAMETERS: P_BEGCOL TYPE I DEFAULT 1 NO-DISPLAY,
P_BEGROW TYPE I DEFAULT 1 NO-DISPLAY,
P_ENDCOL TYPE I DEFAULT 100 NO-DISPLAY,
P_ENDROW TYPE I DEFAULT 32000 NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK SCR1.
* AT SELECTION-SCREEN *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*--- Validating file
PERFORM VALIDATE_FILE USING P_FILE.
* START-OF-SELECTION
START-OF-SELECTION.
*--- Perform to convert the Excel data into an internal table
PERFORM CONVERT_XLS_ITAB.
IF NOT IT_DATA[] IS INITIAL.
*--- Perform to delete Header lines
PERFORM DELETE_HEADER_EMPTY_RECS.
ENDIF.
* END OF SELECTION. *
END-OF-SELECTION.
*--- Perform to upload Material Master data
PERFORM UPLOAD_MATMAS.
* Form : validate_input_file
* Description : To provide F4 help for file if read from PC
FORM VALIDATE_FILE USING F_FILE TYPE RLGRAP-FILENAME.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
CHANGING
FILE_NAME = F_FILE
EXCEPTIONS
MASK_TOO_LONG = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE S010(ZLKPL_MSGCLASS). " 'Error in getting filename'.
ENDIF.
ENDFORM. " validate_input_file
*& Form CONVER_XLS_ITAB
* text
FORM CONVERT_XLS_ITAB.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = P_BEGCOL
I_BEGIN_ROW = P_BEGROW
I_END_COL = P_ENDCOL
I_END_ROW = P_ENDROW
TABLES
INTERN = IT_INTERN.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*--- Perform to move the data into an internal data
PERFORM MOVE_DATA.
ENDFORM. " CONVERT_XLS_ITAB
*& Form MOVE_DATA
* text
FORM MOVE_DATA.
DATA : LV_INDEX TYPE I.
FIELD-SYMBOLS <FS>.
*--- Sorting the internal table
SORT IT_INTERN BY ROW COL.
CLEAR IT_INTERN.
LOOP AT IT_INTERN.
MOVE IT_INTERN-COL TO LV_INDEX.
*--- Assigning the each record to an internal table row
ASSIGN COMPONENT LV_INDEX OF STRUCTURE IT_DATA TO <FS>.
*--- Asigning the field value to a field symbol
MOVE IT_INTERN-VALUE TO <FS>.
AT END OF ROW.
APPEND IT_DATA.
CLEAR IT_DATA.
ENDAT.
ENDLOOP.
ENDFORM. " MOVE_DATA
*& Form DELETE_HEADER_EMPTY_RECS
* To delete the Header and empty records
FORM DELETE_HEADER_EMPTY_RECS.
DATA: LV_TABIX LIKE SY-TABIX.
IF NOT P_HEADER IS INITIAL.
LOOP AT IT_DATA.
IF P_HEADER > 0 AND NOT IT_DATA IS INITIAL.
DELETE IT_DATA FROM 1 TO P_HEADER.
* P_HEADER = 0.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR IT_DATA.
*--- To delete the empty lines from internal table
LOOP AT IT_DATA.
LV_TABIX = SY-TABIX.
IF IT_DATA IS INITIAL.
V_EMPTY = V_EMPTY + 1.
DELETE IT_DATA INDEX LV_TABIX..
ENDIF.
ENDLOOP.
CLEAR IT_DATA.
*--- Total no of recs in file
DESCRIBE TABLE IT_DATA LINES V_TOTAL.
IF V_TOTAL = 0.
MESSAGE I013(ZLKPL_MSGCLASS). " No records in the file
F_STOP = 'X'.
STOP.
ENDIF.
ENDFORM. " DELETE_HEADER_EMPTY_RECS
*& Form UPLOAD_MATMAS
* to upload Material Master data
FORM UPLOAD_MATMAS .
LOOP AT IT_DATA.
* Header
UNPACK IT_DATA-MATNR TO IT_DATA-MATNR.
BAPI_HEAD-MATERIAL = IT_DATA-MATNR.
BAPI_HEAD-IND_SECTOR = IT_DATA-MBRSH.
BAPI_HEAD-MATL_TYPE = IT_DATA-MTART.
BAPI_HEAD-BASIC_VIEW = 'X'.
BAPI_HEAD-PURCHASE_VIEW = 'X'.
BAPI_HEAD-ACCOUNT_VIEW = 'X'.
* Material Description
REFRESH IT_MAKT.
IT_MAKT-LANGU = IT_DATA-SPRAS.
IT_MAKT-MATL_DESC = IT_DATA-MAKTX.
APPEND IT_MAKT.
* Client Data - Basic
BAPI_MARA1-MATL_GROUP = IT_DATA-MATKL.
BAPI_MARA1-BASE_UOM = IT_DATA-MEINS.
BAPI_MARA1-UNIT_OF_WT = IT_DATA-GEWEI.
BAPI_MARA1-DIVISION = IT_DATA-SPART.
BAPI_MARAX-MATL_GROUP = 'X'.
BAPI_MARAX-BASE_UOM = 'X'.
BAPI_MARAX-UNIT_OF_WT = 'X'.
BAPI_MARAX-DIVISION = 'X'.
* Plant - Purchasing
BAPI_MARC1-PLANT = IT_DATA-WERKS.
BAPI_MARC1-PUR_GROUP = IT_DATA-EKGRP.
BAPI_MARCX-PLANT = IT_DATA-WERKS.
BAPI_MARCX-PUR_GROUP = 'X'.
* Accounting
BAPI_MBEW1-VAL_AREA = IT_DATA-WERKS.
BAPI_MBEW1-PRICE_CTRL = IT_DATA-VPRSV.
BAPI_MBEW1-STD_PRICE = IT_DATA-STPRS.
BAPI_MBEW1-PRICE_UNIT = IT_DATA-PEINH.
BAPI_MBEWX-VAL_AREA = IT_DATA-WERKS.
BAPI_MBEWX-PRICE_CTRL = 'X'.
BAPI_MBEWX-STD_PRICE = 'X'.
BAPI_MBEWX-PRICE_UNIT = 'X'.
*--- BAPI to create material
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
HEADDATA = BAPI_HEAD
CLIENTDATA = BAPI_MARA1
CLIENTDATAX = BAPI_MARAX
PLANTDATA = BAPI_MARC1
PLANTDATAX = BAPI_MARCX
* FORECASTPARAMETERS =
* FORECASTPARAMETERSX =
* PLANNINGDATA =
* PLANNINGDATAX =
* STORAGELOCATIONDATA =
* STORAGELOCATIONDATAX =
* VALUATIONDATA = BAPI_MBEW1
* VALUATIONDATAX = BAPI_MBEWX
* WAREHOUSENUMBERDATA =
* WAREHOUSENUMBERDATAX =
* SALESDATA = BAPI_MVKE1
* SALESDATAX = BAPI_MVKEX
* STORAGETYPEDATA =
* STORAGETYPEDATAX =
IMPORTING
RETURN = BAPI_RETURN
TABLES
MATERIALDESCRIPTION = IT_MAKT
* UNITSOFMEASURE =
* UNITSOFMEASUREX =
* INTERNATIONALARTNOS =
* MATERIALLONGTEXT =
* TAXCLASSIFICATIONS =
* RETURNMESSAGES =
* PRTDATA =
* PRTDATAX =
* EXTENSIONIN =
* EXTENSIONINX =
IF BAPI_RETURN-TYPE = 'E'.
WRITE:/ 'Error:' ,BAPI_RETURN-MESSAGE ,'for material:' ,IT_DATA-MATNR.
ELSEIF BAPI_RETURN-TYPE = 'S'.
WRITE: 'Successfully created material' ,IT_DATA-MATNR.
ENDIF.
ENDLOOP.
ENDFORM. " UPLOAD_MATMAS
Regards,
V.Balaji
Reward if Usefull... -
How to call the transaction VL02N in the userexit.
Hi all,
I am doing code in the userexit SAVE_DOCUMENT_PREPARE of the include MV50AFZ1. I'm doing some validations there. If the validations fail, i should not allow the user to post the goods. Instead i need to make the user to go to the screen VL02N once again and do the posting once again. But i dont know how to call the same screen VL02N once again through the userexit.
Can you please suggest me in doing this.
POINTS PROMISED.
Regards,
Buvana AnguchamyHi,
In this case you can use BBusiness Add-In LE_SHP_GOODSMOVEMENT.
Please find below the user exits which are available for VL02N.
V50PSTAT - Delivery: Item Status Calculation
V50Q0001 - Delivery Monitor: User Exits for Filling Display Fields
V50R0001 - Collective processing for delivery creation
V50R0002 - Collective processing for delivery creation
V50R0004 - Calculation of Stock for POs for Shipping Due Date List
V50S0001 - User Exits for Delivery Processing
V53C0001 - Rough workload calculation in time per item
V53C0002 - W&S: RWE enhancement - shipping material type/time slot
V53W0001 - User exits for creating picking waves
VMDE0001 - Shipping Interface: Error Handling - Inbound IDoc
VMDE0002 - Shipping Interface: Message PICKSD (Picking, Outbound)
VMDE0003 - Shipping Interface: Message SDPICK (Picking, Inbound)
VMDE0004 - Shipping Interface: Message SDPACK (Packing, Inbound)
V02V0001 - Sales area determination for stock transport order
V02V0002 - User exit for storage location determination
V02V0003 - User exit for gate + matl staging area determination (headr)
V02V0004 - User Exit for Staging Area Determination (Item)
and perhaps you may want to check this user exits V50S0001
<b>Reward points</b>
Regards -
How to call a particular mathod
the problem is with my method for the binary search i believe its coded properly but i'm not sure how too call it at the bottom of the program.[b[]
here's the error i'm receiving
Binary (int[],int) cannot be applied to ()
how should i call it then? the binary search is marked with a comment
import java.io.*;
import java.util.Random;
public class ArraySort{
int[] myArray, tobesaved;
int myArraySize, myArrayHigh, findthis;
long timeBegin, timeEnd;
public ArraySort(){
public int[] createIntegerArray(){
System.out.print("\nEnter how large the array should be: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
String theinput = br.readLine();
try {
myArraySize = Integer.parseInt(theinput);
if(myArraySize<=0){
System.out.println("The size of the array must be positive");
createIntegerArray();
catch(NumberFormatException e){
System.out.println("Size of the array must be a number");
createIntegerArray();
catch(IOException e){
System.out.println("Input Error");
System.exit(0);
return new int[myArraySize];
public int promptArrayHigh(){
System.out.print("Enter the high range of the array: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
String theinput = br.readLine();
return Integer.parseInt(theinput);
catch(IOException e){
System.out.println("Input Error"); System.exit(0);
return 0;
public void propagateArray(){
tobesaved = new int[myArraySize];
Random r = new Random();
for(int i=0;i<myArraySize;i++){
myArray[i] = Math.abs(r.nextInt()) % myArrayHigh;
tobesaved[i] = myArray;
System.out.print("Original Array: "+myArray[i]);
public void displayStatus(){
for(int i=0;i<myArray.length;i++){
System.out.print(myArray[i]+" ");
System.out.println("");
public void sCounter(){
timeBegin = System.currentTimeMillis();
public void eCounter(){
timeEnd = System.currentTimeMillis();
public void displayTimeDifference(String what){
System.out.println(what+" took: "+(timeEnd-timeBegin)+" milliseconds");
public int getInteger(String prompt){
String word = null;
int returnint = 0;
System.out.print(prompt);
BufferedReader intbuffer = new BufferedReader(new InputStreamReader(System.in));
try {
word = intbuffer.readLine();
catch(IOException ioe){
System.out.println("Error");
getInteger(prompt);
System.exit(1);
try{
returnint = Integer.parseInt(word);
if(returnint<=0){
System.out.println("Must be positive.");
getInteger(prompt);
return returnint;
else {
return returnint;
catch(NumberFormatException e){
System.out.println("Must be a number.");
getInteger(prompt);
return returnint;
//Bubble Sort
public void Bubble(){
boolean swapoccured = true;
int temp = 0;
while(swapoccured){
swapoccured = false;
for(int i=0;i<(myArray.length-1);i++){
if(myArray[i]>myArray[i+1]){
temp = myArray[i];
myArray[i] = myArray[i+1];
myArray[i+1] = temp;
swapoccured = true;
//Selection Sort
public void Selection(){
int temp = 0;
int minposition = 0;
for(int i=0;i<myArray.length;i++){
minposition = i;
for(int j=i;j<myArray.length;j++){
if(myArray[j]<myArray[minposition]){
minposition = j;
temp = myArray[i];
myArray[i] = myArray[minposition];
myArray[minposition] = temp;
//Insertion Sort
public void Insertion(){
int value = 0;
for(int i=1;i<myArray.length;i++){
value = myArray[i];
int j;
for(j=i-1;(j>=0) && (myArray[j]>value);j--){
myArray[j+1] = myArray[j];
myArray[j+1] = value;
//Merge Sort
public void Merge(int low, int high){
if(low == high){
return;
int length = high-low+1;
int pivot = (low+high)/2;
Merge(low, pivot);
Merge(pivot+1, high);
int working[] = new int[length];
for(int i = 0; i < length; i++){
working[i] = myArray[low+i];
int m1 = 0;
int m2 = pivot-low+1;
for(int i = 0; i < length; i++){
if(m2 <= high-low){
if(m1 <= pivot-low){
if(working[m1] > working[m2]){
myArray[i+low] = working[m2++];
else {
myArray[i+low] = working[m1++];
else {
myArray[i+low] = working[m2++];
else {
myArray[i+low] = working[m1++];
//Shell Sort
void Shell(){
int h = 1;
while ((h * 3 + 1) < myArray.length) {
h = 3 * h + 1;
while( h > 0 ) {
for (int i = h - 1; i < myArray.length; i++) {
int B = myArray[i];
int j = i;
for( j = i; (j >= h) && (myArray[j-h] > B); j -= h) {
myArray[j] = myArray[j-h];
myArray[j] = B;
h = h / 3;
//search of my choice
public void search(){
int counter = 0;
findthis = getInteger("Seach for: ");
for(int i=0;i<myArraySize;i++){
if(myArray[i]==findthis){
counter+=1;;
System.out.println(findthis+" occurs "+counter+" times in the array");
public void Linear(){
int counter=0;
int findthis1 = getInteger("Linear Search for: ");
for(int index=0;index<myArray.length; index++)
if(myArray[index]>findthis1)
break;
if(myArray[index]==findthis1)
counter+=1;
System.out.println(findthis1+" occurs " counter" times in the array");
//***Here's part of the problem*****
public int Binary(int[]myArray,int x){
int findthis2 = getInteger("Binary Search for: ");
int left=0, right=myArray.length-1,mid;
if(myArray.length==0 || x<myArray[0])return -1;
if(x>myArray[right])return myArray.length;
while (left<right)
mid=(left+right)/2;
if (x<myArray[mid])
right=mid-1;
else
left=mid+1;
System.out.println(myArray.length);
if (x==myArray[left])return left;
else return-1;
public void setOriginal(){
for(int i=0;i<myArraySize;i++){
myArray[i] = tobesaved[i];
public static void main(String[] args){
// INSTANTIATE OBJECT, CREATE ARRAY WITH HIGH VALUE, FILL WITH RANDOM VALUES
ArraySort as = new ArraySort();
as.myArray = as.createIntegerArray();
as.myArrayHigh = as.promptArrayHigh();
System.out.println("");
as.propagateArray();
// as.displayStatus(); System.out.println("");
// BUBBLE SORT
as.sCounter();
as.Bubble();
as.eCounter();
// as.displayStatus();
as.displayTimeDifference("Bubble Sort");
as.setOriginal();
// SELECTION SORT
as.sCounter();
as.Selection();
as.eCounter();
// as.displayStatus();
as.displayTimeDifference("Selection Sort");
as.setOriginal();
// INSERTION SORT
as.sCounter();
as.Insertion();
as.eCounter();
// as.displayStatus();
as.displayTimeDifference("Insertion Sort");
as.setOriginal();
// MERGE SORT
as.sCounter();
as.Merge(0,(as.myArraySize-1));
as.eCounter();
// as.displayStatus();
as.displayTimeDifference("Merge Sort");
as.setOriginal();
// SHELL SORT
as.sCounter();
as.Shell();
as.eCounter();
// as.displayStatus();
as.displayTimeDifference("Shell Sort");
//search
as.search();
//Linear
as.Linear();
//****Here's the problem****
// as.Binary();here's the error i'm receiving
Binary (int[],int) cannot be applied to ()
how should i call it then? the binary search is
marked with a commentThe error message is pretty straightforward: Binary (is that a constructor or a method? If it's a method, begin the method name with a lowercase "b".) needs an array of int and an int as arguments. They have some meaning to that method. You need to provide them.
What they mean is something that you should know and that really has nothing to do with Java programming. It's like trying to call authorizeCreditCard(String cardNumber) without actually passing it a card number. You need to understand what Binary(...) does and why it needs those arguments. Once you understand that, you should know how to provide them. -
How to call our smartform in standard report
Hi friends,
How to call Zee smartform from standard report without affecting stadard flow.
Thanks,
YogeshHi,
do it this way.
in the ALV function call
give in
exporting
I_CALLBACK_USER_COMMAND = 'user_command '
write a subroutine
FORM user_command USING whatcomm TYPE sy-ucomm whatrow TYPE
slis_selfield.
case whatcomm.
when 'print'.
call 2 function modules here
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING FORMNAME = P_FORM "Your form name
variant = ' '
direct_call = ' '
IMPORTING FM_NAME = FM_NAME
EXCEPTIONS NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
EXIT.
ENDIF.
calling the generated function module
CALL FUNCTION FM_NAME
EXPORTING
ARCHIVE_INDEX =
ARCHIVE_INDEX_TAB =
ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS = CPARAM
OUTPUT_OPTIONS = OUTOP
USER_SETTINGS = SPACE
MAIL_APPL_OBJ =
MAIL_RECIPIENT =
MAIL_SENDER =
IMPORTING
JOB_OUTPUT_INFO = TAB_OTF_DATA
DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_OPTIONS =
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
IF SY-SUBRC 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endcase.
endform.
This is an example in the function gereated call give you own importing and exporting parameters.
Regards
Kiran Sure -
How to call a method in the servlet from an applet
I want to get the data for the applet from the servlet.
How to call a method that exits in the servlet from the applet? I want to use http protocol to do this.
Any suggestions? Please help.
thanksNow that Web Services is around, I'd look at possibly implement a Web Service call in your applet, which can then be given back any object(s) on return. Set up your server side to handle Web Service calls. In this way, you can break the applet out into an application should you want to (with very little work) and it will still function the same
-
How to Call third party Jar into Application
Hi Can any Expert help ?
I want to put third party Jar into my application but i have some problem occur.
1. how to call jar with parameter in application ?
2. when i exit the third party jar task, it will exit my main task too. How to set my main tast exit stats standalone ?
3. I have over 10 jar files in one application, how can i set a classpath for client to call JNLP, instread of load all jar to client before run.
Thanks.
Sanki Poon ([email protected])1) Sounds like you are trying to launch the third party from it's application main instead of using it as an API How does your code interact with it or is that not important?. You don't call a jar, you load a class. You could use a exec http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runtime.html to run the java launcher and pass it all it's command line stuff(But this may not be possible security wise via WebStart).
2) if it is launched in the same JVM and it calls a System.exit there is nothing you can do about your app closing too. It would need to be in another instance of the JVM
3) Under the resources tag you can have as many jar tags as needed.
<resources>
<j2se version="1.5.0" java-vm-args="-esa -Xnoclassgc"/>
<jar href="/jsf-wita/apps/MathMLWebEditor.jar"/>
</resources> -
How to call a method of another class ?
Hello,
I�d like to know how to call a method of another class. I have to classes (class 1 and class 2), class 1 instantiates an object of class 2 and executes the rest of the method. Later, class 1 has to call a method of class 2, sending a message to do something in the object... Does anybody know how to do that ? Do I have to use interface ? Could you please help me ?
Thanks.
Bruno.Hi Schiller,
The codes are the following:
COMECO
import javax.swing.UIManager;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.*;
//Main method
class comeco {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
catch(Exception e) {
AGORA testeagora=new AGORA();
// Code for socket
int port;
ServerSocket server_socket;
BufferedReader input;
try {
port = Integer.parseInt(args[0]);
catch (Exception e) {
System.out.println("comeco ---> port = 1500 (default)");
port = 1500;
try {
server_socket = new ServerSocket(port);
System.out.println("comeco ---> Server waiting for client on port " +
server_socket.getLocalPort());
// server infinite loop
while(true) {
Socket socket = server_socket.accept();
System.out.println("comeco ---> New connection accepted " +
socket.getInetAddress() +
":" + socket.getPort());
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// print received data
try {
while(true) {
String message = input.readLine();
if (message==null) break;
System.out.println("comeco ---> " + message);
testeagora.teste(message);
catch (IOException e) {
System.out.println(e);
// connection closed by client
try {
socket.close();
System.out.println("Connection closed by client");
catch (IOException e) {
System.out.println(e);
catch (IOException e) {
System.out.println(e);
AGORA
import javax.swing.UIManager;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
import java.net.*;
//public class AGORA {
public class AGORA {
boolean packFrame = false;
//Construct the application
public AGORA() {
try {
Main frame = new Main();
System.out.println("agora ---> Criou o frame");
//Validate frames that have preset sizes
//Pack frames that have useful preferred size info, e.g. from their layout
if (packFrame)
frame.pack();
else
frame.validate();
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height)
frameSize.height = screenSize.height;
if (frameSize.width > screenSize.width)
frameSize.width = screenSize.width;
frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
catch(Exception e)
{ System.out.println("agora ---> " +e);
// Tem que criar a THREAD e ver se funciona
public void remontar (final String msg) {
try {
System.out.println("agora ---> Passou pelo Runnable");
System.out.println("agora --> Mensagem que veio do comeco para agora: "+ msg);
Main.acao(msg);
catch(Exception x) {
x.printStackTrace();
MAIN
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import javax.swing.border.*;
import java.net.*;
import java.io.*;
public class Main extends JFrame {
// ALL THE CODE OF THE INTERFACE
//Construct the frame
public Main() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
catch(Exception e) {
e.printStackTrace();
public void acao() {
// C�digo para mudar a interface
Runnable setTextRun=new Runnable() {
public void run() {
try {
System.out.println("main ---> Passou pelo Runnable");
TStatus.setText("main ---> Funcionou");
catch(Exception x) {
x.printStackTrace();
System.out.println("main ---> About to invokelater");
SwingUtilities.invokeLater(setTextRun);
System.out.println("main ---> Back from invokelater");
// Aqui vai entrar o m�todo para ouvir as portas sockets.
// Ele deve ouvir e caso haja alguma nova mensagem, trat�-la para
// alterar as vari�veis e redesenhar os pain�is
// Al�m disso, o bot�o de refresh deve aparecer ativo em vermelho
//Component initialization
private void jbInit() throws Exception {
// Initialize the interface
//Setting | Host action performed
public void SetHost_actionPerformed(ActionEvent e) {
int port;
ServerSocket server_socket;
BufferedReader input;
System.out.println("main ---> port = 1500 (default)");
port = 1500;
try {
server_socket = new ServerSocket(port);
System.out.println("main ---> Server waiting for client on port " +
server_socket.getLocalPort());
// server infinite loop
while(true) {
Socket socket = server_socket.accept();
System.out.println("main ---> New connection accepted " +
socket.getInetAddress() +
":" + socket.getPort());
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String espaco=new String(": ");
JLabel teste2=new JLabel(new ImageIcon("host.gif"));
PHost.add(teste2);
System.out.println("main ---> Adicionou host na interface");
repaint();
System.out.println("main ---> Redesenhou a interface");
setVisible(true);
// print received data
try {
while(true) {
String message = input.readLine();
if (message==null) break;
System.out.println("main ---> " + message);
catch (IOException e2) {
System.out.println(e2);
// connection closed by client
try {
socket.close();
System.out.println("main ---> Connection closed by client");
catch (IOException e3) {
System.out.println(e3);
catch (IOException e1) {
System.out.println(e1);
public void OutHost_actionPerformed(ActionEvent e) {
repaint();
setVisible(true);
//Help | About action performed
public void helpAbout_actionPerformed(ActionEvent e) {
Main_AboutBox dlg = new Main_AboutBox(this);
Dimension dlgSize = dlg.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y);
dlg.setModal(true);
dlg.show();
//Overridden so we can exit on System Close
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if(e.getID() == WindowEvent.WINDOW_CLOSING) {
fileExit_actionPerformed(null);
public void result(final String msg) {
// C�digo para mudar a interface
Runnable setTextRun=new Runnable() {
public void run() {
try {
System.out.println("main ---> Chamou o m�todo result para mudar a interface");
System.out.println("main --> Mensagem que veio do agora para main: "+ msg);
TStatus.setText(msg);
catch(Exception x) {
x.printStackTrace();
System.out.println("main --> About to invokelater");
SwingUtilities.invokeLater(setTextRun);
System.out.println("main --> Back from invokelater");
[]�s. -
How to call global attribute in .htm page in sap crm
hi friends,
in the class i have created a global attribute . i want to access this global attribute in .htm page of the view . how to call this attribute in .htm please send me the syntax .
thanks and regards,
sashihi,
I have accessed the global attribute in .htm page . I have declare a local variable and pass the global attribute value to local variable.
Here I put a validation for hiding the field . If the data is not available in the field then only I have to hide the field. For this I have written the code. For your reference,
<%
DATA : lv_exprevenue TYPE STRING.
DATA : lr_entity TYPE REF TO if_bol_bo_property_access.
*lv_exprevenue = ZL_BT111H_O_DETAILS_IMPL=>gv_dref.
*lv_exprevenue = controller->gv_dref.
lr_entity ?= BTOpportH->collection_wrapper->GET_CURRENT( ).
CALL METHOD lr_entity->GET_PROPERTY_AS_STRING
EXPORTING
IV_ATTR_NAME = 'EXP_REVENUE'
RECEIVING
RV_RESULT = lv_exprevenue.
IF lv_exprevenue is NOT INITIAL.
exit.
else.
data: lv_xml type string.
lv_xml = controller->CONFIGURATION_DESCR->GET_CONFIG_DATA( ).
replace all occurrences of '//BTOPPORTH/EXPREVENUE' in lv_xml with ''.
ENDIF.
%>
<chtmlb:config displayMode = "<%= controller->view_group_context->is_view_in_display_mode( controller ) %>"
xml = "<%= lv_xml %>"
mode = "RUNTIME" />
But the entire view is being hidden in WEB UI.
Please Let me know if there is any mistake in the above code or I have write code some where else.
Thanks & Regards,
Sashi
Edited by: skancharla on Nov 2, 2011 2:09 PM -
How to call precedure in impl into java bean
Dear all,
i'm tried to call procedure at impl.java into java bean.
but, there is error which is it cannot find the root of this.getDBTranstation
any idea.
TQHi
Please tell me
How to call ethod in AppModuleImpl from other bean?
I have created method in AppModuleImpl
public String callFuncWithArgs(String p_company, String p_division, String p_user, String p_wrkord_type,
String p_service_type, String p_HOLD_CODE_TYPE) {
return (String)callStoredFunction(VARCHAR2, "WS_tran.Margin_TO_USER(?,?,?,?,?,?)",
new Object[] { p_company, p_division, p_user, p_wrkord_type, p_service_type,
p_HOLD_CODE_TYPE });
This method is working after run APPModule. But I want to call this method from SparesTEOImpl class and
public boolean validateUnitPrice(int unitprice) {
//want to call here AppModuleImpl
callFuncWithArgs(String p_company, String p_division, String p_user, String p_wrkord_type,
String p_service_type, String p_HOLD_CODE_TYPE) here
Please tell me how to call , I wrote in following ways but I got error...
public boolean validateUnitPrice(int unitprice) {
String margin=appImpl.callFuncWithArgs("00004","SDWSG", "S1","CSH", "SP","M");
System.out.println("Output"+margin);
return margin;
After that I got the following error.
Exception in thread "main" oracle.jbo.InvalidOwnerException: JBO-25301: Application module AppModuleImpl_0 is not a root app module but has no parent
at oracle.jbo.server.ComponentObjectImpl.getRootApplicationModule(ComponentObjectImpl.java:177)
at oracle.jbo.server.ApplicationModuleImpl.getDBTransaction(ApplicationModuleImpl.java:3656)
at model.AppModuleImpl.callStoredFunction(AppModuleImpl.java:128)
at model.AppModuleImpl.callFuncWithArgs(AppModuleImpl.java:160)
at model.SparesTEOImpl.validateUnitPrice(SparesTEOImpl.java:55)
at model.SparesTEOImpl.main(SparesTEOImpl.java:67)
Process exited with exit code 1.
Please tell me how to solve this problem... -
How to call a particular event?
Hello All,
How to call a particular event like handle_data_changed after you press a button which is created in ALV.
Regards,
Lisa.ALV (Abap List Viewer)
We can easily implement basic features of reports like Sort, Allign, Filtering, Totals-Subtotals etc... by using ALV. Three types of reports we can do by ALV as 1. Simple Report, 2. Block Reprot and 3. Hierarchical Sequential Report.
alv grid types
1) list/ grid
these are having rows and columns
function modules for this type are
REUSE_ALV_LIST_DISPLAY
REUSE_ALV_GRID_DISPLAY2)
2) HIERARCHY
this will have header and line items
function module for this type
REUSE_ALV_HIERSEQ_LIST_DISPLAY
3) tree
this will nodes and child type structure
function module for this type
REUSE_ALV_TREE_DISPLAY
4) APPEND
this can append all the different types of lists where each list has different number of columns
events associated with alvs
1) top of page
2) end of page
3) top of list
4) end of list
5) on double click
6) on link click
7) on user command
some useful links:
http://www.sapdevelopment.co.uk/reporting/alvhome.htm
http://help.sap.com/saphelp_nw04/helpdata/en/99/49b844d61911d2b469006094192fe3/frameset.htm
Examples:
REPORT Z_ALV__ITEM .
TYPE-POOLS : slis.
Data
DATA : BEGIN OF itab OCCURS 0.
INCLUDE STRUCTURE t001.
DATA : flag tyPE c,
END OF itab.
*DATA: itab like t001 occurs 0 with header line.
DATA : alvfc TYPE slis_t_fieldcat_alv.
DATA : alvly TYPE slis_layout_alv.
data v_repid like sy-repid.
Select Data
v_repid = sy-repid.
SELECT * FROM t001 INTO TABLE itab.
*------- Field Catalogue
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = v_repid
i_internal_tabname = 'ITAB'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = alvfc[] .
Display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = alvfc[]
i_callback_program = v_repid
is_layout = alvly
TABLES
t_outtab = itab
EXCEPTIONS
program_error = 1
OTHERS = 2.
In very detail it's not easy, i believe it's better for you to test the function modules to work with ALV :
REUSE_ALV_FIELDCATALOG_MERGE to create the fieldcatalogue
REUSE_ALV_GRID_DISPLAY - to display the ALV in grid format
REUSE_ALV_LIST_DISPLAY - to display the ALV in list format
Anyone, here's one exemple of creating ALV reports :
REPORT ZALV_SLAS_GDF .
Declaração de Dados
TABLES: ZSLA_NIV_SAT.
selection-screen begin of block b1 with frame title text-001.
select-options DATA for ZSLA_NIV_SAT-DATA. " Data
select-options LIFNR for ZSLA_NIV_SAT-LIFNR. " Nº de conta fornecedor
select-options WERKS for ZSLA_NIV_SAT-WERKS. " Centro
select-options EBELN for ZSLA_NIV_SAT-EBELN. " Nº contrato
selection-screen end of block b1.
DATA: BEGIN OF itab1 OCCURS 100.
include structure ZSLA_NIV_SAT.
data: END OF itab1.
Outros dados necessários:
Campo para guardar o nome do report
DATA: i_repid LIKE sy-repid.
Campo para verificar o tamanho da tabela
DATA: i_lines LIKE sy-tabix.
Dados para mostrar o ALV
TYPE-POOLS: SLIS.
*DATA: int_fcat type SLIS_T_FIELDCAT_ALV with header line.
DATA: int_fcat type SLIS_T_FIELDCAT_ALV.
DATA: l_key TYPE slis_keyinfo_alv.
START-OF-SELECTION.
Ler dados para dentro da tabela imat
SELECT * FROM ZSLA_NIV_SAT
INTO CORRESPONDING FIELDS OF TABLE itab1
WHERE data in data
and lifnr in lifnr
and ebeln in ebeln
and werks in werks.
CLEAR: i_lines.
DESCRIBE TABLE itab1 LINES i_lines.
IF i_lines lt 1.
WRITE: / 'Não foram seleccionadas entradas.'.
EXIT.
ENDIF.
END-OF-SELECTION.
Agora, começa-se o ALV
Para usar o ALV, nós precisamos de uma estrutura do dicionário de
*dados DDIC ou de uma coisa chamada Fieldcatalogue.
Existe 2 maneiras de preencher a coisa referida acima:
*Automaticamente e Manualmente
Como preencher Automaticamente?
O fieldcatalouge pode ser gerado pela Função
*'REUSE_ALV_FIELDCATALOG_MERGE' a partir de uma tabela de qualquer fonte
Para que se possa utilizar esta função tabela tem que ter campos do
*dicionário de dados, como é o caso da tabela ITAB1
Guardar o nome do programa
i_repid = sy-repid.
Create Fieldcatalogue from internal table
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME =
i_repid
I_INTERNAL_TABNAME =
'ITAB1' "LETRAS GRANDES
I_INCLNAME =
i_repid
CHANGING
CT_FIELDCAT =
int_fcat[]
EXCEPTIONS
INCONSISTENT_INTERFACE =
1
PROGRAM_ERROR =
2
OTHERS =
3.
IF SY-SUBRC <> 0.
WRITE: / 'Returncode', sy-subrc,
'from FUNCTION REUSE_ALV_FIELDCATALOG_MERGE'.
ENDIF.
*Isto era o Fieldcatalogue
E agora estamos preparados para executar o ALV
Chama o ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = i_repid
IT_FIELDCAT = int_fcat[]
I_DEFAULT = ' '
I_SAVE = ' ' "'A'
TABLES
T_OUTTAB = itab1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
WRITE: /
'Returncode', sy-subrc, 'from FUNCTION REUSE_ALV_GRID_DISPLAY'.
ENDIF.
Please reward the helpful entries.
Maybe you are looking for
-
Price in invoice is not getting copied from Sales order
Hi, In my case when i create a sales order...my VPRS condition is taking price 4.020,24 (@335.02/PC). When i create a Invoice it is coming with 4.020,22 value and .02 is coming in different condition type ZDIF ( Rounding diff) automatically. When i c
-
Hi, while posting the documents i have received an error stating that document is not created Message no RW609 pls reply
-
I cannot open or create any files in photoshop
Everything was working and then all of a sudden this morning my photoshop do not work as it should. When I click on open (any) file it looks like it would open as it lets you select the file but then when you say okay nothing happens, it doesnt think
-
Lion finder window not displaying file info
I have a MacPro which I've updated to Lion. I have four hard drives installed. When I open a finder window from three of the drives, I get the expected (from Snow Leopard) behavior: in icon view, images display pixel dimensions, movies or audio file
-
Over half my albums in iPhoto won't display the enlarged photo. How can I correct this?
Over half my albums in iPhoto won't display the enlarged photo. How can I correct this?